private static Formula CalcFormula(PropositionalConnective connective, params Formula[] subFormulas) { if (!subFormulas.Any(f => f is PredicateFormula prF && prF.Predicate is BooleanPredicate)) { return(new PropositionalConnectiveFormula(connective, subFormulas)); } switch (connective) { case BinaryPropositionalConnective _: { var f1 = subFormulas[0]; var f2 = subFormulas[1]; BooleanPredicate predicate; Formula formula; bool predicateIsLeft; if (f1 is PredicateFormula pr1 && pr1.Predicate is BooleanPredicate booleanPredicate1) { predicate = booleanPredicate1; formula = f2; predicateIsLeft = true; }
public PropositionalConnectiveFormula(PropositionalConnective connective, params Formula[] formulas) { Connective = connective ?? throw new ArgumentNullException(nameof(connective)); if (formulas is null) { throw new ArgumentNullException(nameof(formulas)); } if (formulas.Length != Connective.Arity) { throw new ArgumentException("count of formulas must be equal connective.Arity"); } _formulas = formulas; }