for ( Implication rule : rules )
{
rule = rule.uniquefy();
Substitution unification = f.unify(rule.getConsequent());
// Stop if unification fails.
if ( unification == null )
continue;
context.reportRuleHead(rule.getConsequent(), unification);
Conjunction conjuncts =
(Conjunction) rule.getAntecedents().applySubstitution(unification);
List<Substitution> ruleResults = proveConjunction(conjuncts, context, proveAll);
if ( ruleResults != null )
{
for (Substitution sub: ruleResults)
{
Substitution s = unification.copy(sub);
results.add(s);
if (!proveAll) {
// we can just stop here.