public override Object visitQuantifiedSentence(QuantifiedSentence sentence,
Object arg) {
Dictionary<Variable, Term> substitution = (Dictionary<Variable, Term>)arg;
Sentence quantified = sentence.getQuantified();
Sentence quantifiedAfterSubs = (Sentence) quantified.accept(this, arg);
List<Variable> variables = new List<Variable>();
foreach (Variable v in sentence.getVariables()) {
if (substitution.ContainsKey(v)) {
Term st = substitution[v];
if (st is Variable) {
// Only if it is a variable to I replace it, otherwise
// I drop it.
variables.Add((Variable) st.copy());
}
} else {
// No substitution for the quantified variable, so
// keep it.
variables.Add((Variable)v.copy());
}
}
// If not variables remaining on the quantifier, then drop it
if (variables.Count == 0) {
return quantifiedAfterSubs;
}
return new QuantifiedSentence(sentence.getQuantifier(), variables,
quantifiedAfterSubs);
}