public UnaryOperation(BooleanFormula argument) { if (argument == null) throw new Exception(NULL_SUBFORMULA); this.type = BooleanOperations.NOT; this.argument = argument; }
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; }
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(); }
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); }
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; }
public static bool[] FormulaValues(BooleanFormula formula) { return FormulaValues(formula, formula.Variables); }
public bool[] FormulaValues(List <BooleanVariable> variableList) { return(BooleanFormula.FormulaValues(this, variableList)); }
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)); }
/// <summary> /// Построение полинома Жегалкина по формуле. /// </summary> /// <param name="formula">Исходная формула</param> /// <returns>Полином Жегалкина</returns> public static BooleanFormula ZhegalkinPolynomial(BooleanFormula formula) { return ZhegalkinPolynomial(BooleanFunction.ZhegalkinVector(formula.RealizedFunction), formula.Variables); }
/// <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; }
/// <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)); }
public bool[] FormulaValues() { return(BooleanFormula.FormulaValues(this)); }
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(); }