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