Exemplo n.º 1
0
        /// <summary>
        /// Splits the tree into a branch containing clauses where P appears and another branch with clauses where Not(p) appears.
        /// </summary>
        /// <param name="cnf"></param>
        /// <returns>Returns a Tuple with two CnFs one for the first branch and another for the second branch.</returns>
        private Tuple <Cnf, Cnf> Split(Cnf cnf)
        {
            var literal = Heuristics.ChooseLiteral(cnf);

            if (literal == null)
            {
                return(new Tuple <Cnf, Cnf>(new Cnf(), new Cnf()));
            }
            var tuple = SplittingOnLiteral(cnf, literal);

            return(new Tuple <Cnf, Cnf>(RemoveLiteral(tuple.Item1, literal), RemoveLiteral(tuple.Item2, NegateLiteral(literal))));
        }