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;
                }
示例#2
0
        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;
        }