public static int standardizeApart(Chain c, int saIdx) { List<Variable> variables = new List<Variable>(); foreach (Literal l in c.getLiterals()) { collectAllVariables(l.getAtomicSentence(), variables); } return standardizeApart(variables, c, saIdx); }
public List<Variable> collectAllVariables(Chain aChain) { List<Variable> variables = new List<Variable>(); foreach (Literal l in aChain.getLiterals()) { l.getAtomicSentence().accept(this, variables); } return variables; }
public Chain standardizeApart(Chain chain, StandardizeApartIndexical standardizeApartIndexical) { List<Variable> toRename = variableCollector.collectAllVariables(chain); 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)); renameSubstitution.Add(var, v); } if (renameSubstitution.Count > 0) { List<Literal> lits = new List<Literal>(); foreach (Literal l in chain.getLiterals()) { AtomicSentence atom = (AtomicSentence)substVisitor.subst( renameSubstitution, l.getAtomicSentence()); lits.Add(l.newInstance(atom)); } Chain renamed = new Chain(lits); renamed.setProofStep(new ProofStepRenaming(renamed, chain .getProofStep())); return renamed; } return chain; }