Esempio n. 1
0
 public UnaryOperation(BooleanFormula argument)
 {
     if (argument == null)
         throw new Exception(NULL_SUBFORMULA);
     this.type = BooleanOperations.NOT;
     this.argument = argument;
 }
Esempio n. 2
0
 public BinaryOperation(BooleanOperations type, BooleanFormula argument1, BooleanFormula argument2)
 {
     if ((argument1 == null) || (argument2 == null))
         throw new Exception(BooleanFormula.NULL_SUBFORMULA);
     this.type = type;
     this.argument1 = argument1;
     this.argument2 = argument2;
 }
Esempio n. 3
0
 public UnaryOperation(BooleanFormula argument)
 {
     if (argument == null)
     {
         throw new Exception(NULL_SUBFORMULA);
     }
     this.type     = BooleanOperations.NOT;
     this.argument = argument;
 }
        public BooleanFunction(int variableCount, int formulaDepth)
        {
            this.variableCount = variableCount;
            BooleanFormula formula = BooleanFormula.DepthBoundedRandomBooleanFormula(formulaDepth, variableCount);

            formulas = new BooleanFormulaSet();
            formulas.Add(formula);
            this.vector = formula.FormulaValues();
        }
 public Diagram(BooleanFormula formula)
 {
     this.formula = formula;
     depth        = formula.Depth + 1;
     root         = Measure(formula, 0);
     width        = root.Width * 2;
     nodes        = new Node[depth, width * 2];
     Arrange();
 }
Esempio n. 6
0
 public BinaryOperation(BooleanOperations type, BooleanFormula argument1, BooleanFormula argument2)
 {
     if ((argument1 == null) || (argument2 == null))
     {
         throw new Exception(BooleanFormula.NULL_SUBFORMULA);
     }
     this.type      = type;
     this.argument1 = argument1;
     this.argument2 = argument2;
 }
            /// <summary>
            /// Фаза измерения параметров диаграммы (ширины уровней) и создание информационного дерева,
            /// повторяющего структуру формулы.
            /// Для каждой подформулы создается узел, содержащий информацию о ней, включая необходимую ширину
            /// соответствующей ей части диаграммы. Т.о., в корне будет храниться ширина всего дерева до
            /// уплотнения.
            /// </summary>
            /// <param name="formula">Обрабатываемая подформула</param>
            /// <param name="depth">Глубина подформулы</param>
            /// <returns>Узел дерева, соответствующей формуле formula</returns>
            protected Node Measure(BooleanFormula formula, int depth)
            {
                Node node = new Node(formula, depth);

                if (formula is BooleanFormulaTerm)
                {
                    node.Width = 1;
                }
                else
                {
                    node.Width = 0;
                    foreach (BooleanFormula subFormula in formula.SubFormulas())
                    {
                        //Добавляется потомок, соответствующий подформуле, и его ширина добавляется к ширине родителя
                        node.Width += node.AppendChild(Measure(subFormula, depth + 1)).Width;
                    }
                }
                return(node);
            }
        public static bool[] FormulaValues(BooleanFormula formula, List <BooleanVariable> variableList)
        {
            int variableCount = variableList.Count;

            if (variableCount == 0)
            {
                variableCount = 1;
            }
            int length = 1 << variableCount;

            bool[] values = new bool[length];
            bool[] input  = new bool[variableCount];
            for (int i = 0; i < length; i++)
            {
                for (int j = 0; j < variableCount; j++)
                {
                    input[variableCount - j - 1] = ((i >> j) & 1) == 1;
                }
                values[i] = formula.FormulaValue(new BooleanFormulaInput(input, variableList));
            }
            return(values);
        }
Esempio n. 9
0
 public static bool[] FormulaValues(BooleanFormula formula, List<BooleanVariable> variableList)
 {
     int variableCount = variableList.Count;
     if (variableCount == 0)
         variableCount = 1;
     int length = 1 << variableCount;
     bool[] values = new bool[length];
     bool[] input = new bool[variableCount];
     for (int i = 0; i < length; i++)
     {
         for (int j = 0; j < variableCount; j++)
             input[variableCount - j - 1] = ((i >> j) & 1) == 1;
         values[i] = formula.FormulaValue(new BooleanFormulaInput(input, variableList));
     }
     return values;
 }
Esempio n. 10
0
 public static bool[] FormulaValues(BooleanFormula formula)
 {
     return FormulaValues(formula, formula.Variables);
 }
 public bool[] FormulaValues(List <BooleanVariable> variableList)
 {
     return(BooleanFormula.FormulaValues(this, variableList));
 }
Esempio n. 12
0
 public static string ToPGFDiagram(BooleanFormula formula)
 {
     Diagram diagram = new Diagram(formula);
     return diagram.ToPGFString();
 }
                protected double indent; //отступ при отрисовке

                public Node(BooleanFormula formula, int level)
                {
                    this.formula = formula;
                    this.level   = level;
                    children     = new List <Node>();
                }
        public static string ToPGFDiagram(BooleanFormula formula)
        {
            Diagram diagram = new Diagram(formula);

            return(diagram.ToPGFString());
        }
 /// <summary>
 /// Построение совершенной КНФ по формуле.
 /// </summary>
 /// <param name="formula">Исходная формула</param>
 /// <returns>Совершенная КНФ</returns>
 public static BooleanFormula PerfectCNF(BooleanFormula formula)
 {
     return(PerfectCNF(formula.RealizedFunction, formula.Variables));
 }
 /// <summary>
 /// Построение полинома Жегалкина по формуле.
 /// </summary>
 /// <param name="formula">Исходная формула</param>
 /// <returns>Полином Жегалкина</returns>
 public static BooleanFormula ZhegalkinPolynomial(BooleanFormula formula)
 {
     return(ZhegalkinPolynomial(BooleanFunction.ZhegalkinVector(formula.RealizedFunction), formula.Variables));
 }
Esempio n. 17
0
 /// <summary>
 /// Построение полинома Жегалкина по формуле.
 /// </summary>
 /// <param name="formula">Исходная формула</param>
 /// <returns>Полином Жегалкина</returns>
 public static BooleanFormula ZhegalkinPolynomial(BooleanFormula formula)
 {
     return ZhegalkinPolynomial(BooleanFunction.ZhegalkinVector(formula.RealizedFunction), formula.Variables);
 }
Esempio n. 18
0
 /// <summary>
 /// Фаза измерения параметров диаграммы (ширины уровней) и создание информационного дерева,
 /// повторяющего структуру формулы.
 /// Для каждой подформулы создается узел, содержащий информацию о ней, включая необходимую ширину
 /// соответствующей ей части диаграммы. Т.о., в корне будет храниться ширина всего дерева до
 /// уплотнения.
 /// </summary>
 /// <param name="formula">Обрабатываемая подформула</param>
 /// <param name="depth">Глубина подформулы</param>
 /// <returns>Узел дерева, соответствующей формуле formula</returns>
 protected Node Measure(BooleanFormula formula, int depth)
 {
     Node node = new Node(formula, depth);
     if (formula is BooleanFormulaTerm)
         node.Width = 1;
     else
     {
         node.Width = 0;
         foreach (BooleanFormula subFormula in formula.SubFormulas())
             //Добавляется потомок, соответствующий подформуле, и его ширина добавляется к ширине родителя
             node.Width += node.AppendChild(Measure(subFormula, depth + 1)).Width;
     }
     return node;
 }
Esempio n. 19
0
 /// <summary>
 /// Построение совершенной КНФ по формуле.
 /// </summary>
 /// <param name="formula">Исходная формула</param>
 /// <returns>Совершенная КНФ</returns>
 public static BooleanFormula PerfectCNF(BooleanFormula formula)
 {
     return PerfectCNF(formula.RealizedFunction, formula.Variables);
 }
 public static bool[] FormulaValues(BooleanFormula formula)
 {
     return(FormulaValues(formula, formula.Variables));
 }
Esempio n. 21
0
            public Diagram(BooleanFormula formula)
            {
                this.formula = formula;
                depth = formula.Depth + 1;
                root = Measure(formula, 0);
                width = root.Width * 2;
                nodes = new Node[depth, width * 2];
                Arrange();

            }
 public bool[] FormulaValues()
 {
     return(BooleanFormula.FormulaValues(this));
 }
Esempio n. 23
0
                protected double indent; //отступ при отрисовке

                public Node(BooleanFormula formula, int level)
                {
                    this.formula = formula;
                    this.level = level;
                    children = new List<Node>();
                }
 public void SetNewBooleanFormula(BooleanFormula formula)
 {
     formulas = new BooleanFormulaSet();
     formulas.Add(formula);
     this.vector = formula.FormulaValues();
 }