public Dictionary<Variable, Term> standardizeApart(List<Literal> l1Literals,
List<Literal> l2Literals,
StandardizeApartIndexical standardizeApartIndexical)
{
List<Variable> toRename = new List<Variable>();
foreach (Literal pl in l1Literals)
{
toRename.AddRange(variableCollector.collectAllVariables(pl
.getAtomicSentence()));
}
foreach (Literal nl in l2Literals)
{
toRename.AddRange(variableCollector.collectAllVariables(nl
.getAtomicSentence()));
}
Dictionary<Variable, Term> renameSubstitution = new Dictionary<Variable, Term>();
foreach (Variable var in toRename)
{
Variable v = null;
do
{
v = new Variable(standardizeApartIndexical.getPrefix()
+ standardizeApartIndexical.getNextIndex());
// Ensure the new variable name is not already
// accidentally used in the sentence
} while (toRename.Contains(v));
if (renameSubstitution.ContainsKey(var))
{
renameSubstitution[var] = v;
}
else
{
renameSubstitution.Add(var, v);
}
}
List<Literal> posLits = new List<Literal>();
List<Literal> negLits = new List<Literal>();
foreach (Literal pl in l1Literals)
{
posLits.Add(substVisitor.subst(renameSubstitution, pl));
}
foreach (Literal nl in l2Literals)
{
negLits.Add(substVisitor.subst(renameSubstitution, nl));
}
l1Literals.Clear();
l1Literals.AddRange(posLits);
l2Literals.Clear();
l2Literals.AddRange(negLits);
return renameSubstitution;
}
}