

 % A Regression Theorem-Prover for an Initial Situation of Prime Implicates

prove(W):- processQuantifiers(W,I), simplify(I,Simp), regress(Simp,R),
           clausalForm(R,Clauses), databaseEntails(Clauses).

databaseEntails([]).
databaseEntails( [C | R]) :- (tautology(C), ! ; subsumed(C)),
                             databaseEntails(R).

regress(P & Q, R) :- regress(P,R1),
                     (R1 = false, R = false, ! ;
                      regress(Q,R2), simplify(R1 & R2,R)).
regress(P v Q, R) :- regress(P,R1),
                     (R1 = true, R = true, ! ;
                      regress(Q,R2), simplify(R1 v R2,R)).
regress(-P,R) :- regress(P,R1), simplify(-R1,R).
regress(A,R) :- isAtom(A), A <=> W,    /* A is a defined atom. Retrieve
                                          and regress its definition. */
                processQuantifiers(W,I), simplify(I,S), regress(S,R).
regress(A,R) :- isAtom(A),
                not A <=> W,   /* A is an atom, but it has no definition,
                                  so the regression is finished. */
                (A = false, R = false, ! ;
                 databaseEntails([[A]]), R = true, ! ;
                 databaseEntails([[-A]]), R = false, ! ;
                 R = A).

