/// <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)))); }