private Sentence createResolventClause(ClauseSymbols cs, Symbol toRemove)
{
List<Symbol> positiveSymbols = SetOps
.union(cs.clause1PositiveSymbols, cs.clause2PositiveSymbols);
List<Symbol> negativeSymbols = SetOps
.union(cs.clause1NegativeSymbols, cs.clause2NegativeSymbols);
if (positiveSymbols.Contains(toRemove))
{
positiveSymbols.Remove(toRemove);
}
if (negativeSymbols.Contains(toRemove))
{
negativeSymbols.Remove(toRemove);
}
positiveSymbols.Sort(new SymbolComparator());
negativeSymbols.Sort( new SymbolComparator());
List<Sentence> sentences = new List<Sentence>();
for (int i = 0; i < positiveSymbols.Count; i++)
{
sentences.Add(positiveSymbols[i]);
}
for (int i = 0; i < negativeSymbols.Count; i++)
{
sentences.Add(new UnarySentence(negativeSymbols[i]));
}
if (sentences.Count == 0)
{
return new Symbol("EMPTY_CLAUSE"); // == empty clause
}
else
{
return LogicUtils.chainWith("OR", sentences);
}
}