The new high performance ATP will go into SP very soon. Coding these things is really a challenge because the architecture is about as dense as the Shen kernel. The main engine E is based on Stickel's Prolog Technology Theorem Prover of the 80s but adapted for sequents and I've added a preprocessor P to it that chops up problems before feeding them into E. This preprocessor is actually a little theorem prover itself and has the capacity to solve problems independently of E. I've called P a planner, but really this is IMO too grand a title for this device.
The top level function is crunchit! of type ((list fol.wff) * fol.wff) --> (list wff) --> boolean). The last argument is optional and defaults to [] if no argument is supplied. The function takes
1. A sequent composed of a pair of a list of fol.wffs L and a fol.wff W which is the conclusion.
2. A background theory T (list of wffs) which is compiled to code and which may be empty.
The ATP attempts to prove
L |-T W i.e. L entails W under T.
The logic is first-order logic without equality.
1. A logical constant is v, ~, &, =>, <=>, exists, all, =df
2. A recognised symbol is a symbol other than a logical constant.
3. A recognised symbol is a term.
4. A list composed of a recognised symbol followed by terms is a term.
5. A predicate is a recognised symbol.
6. An atom is a list composed of a predicate followed by terms or a recognised symbol (propositional case).
7. An atom is a fol.wff.
8. If P and Q are fol.wffs so are [~ P], [P v Q], [P & Q], [P => Q], [P <=> Q], [P =df Q], [all V P], [exists V P] where V is a recognised symbol.
This is standard but for =df which means 'is defined as' . This is used in T. If T contains [P =df Q] then all cases of the kind P are demodulated (normalised) to Q and crunchit! does that before attempting to solve.
Performance is about 750,000 inferences per second per GHz. This system will probably end up as part of something bigger. More anon.
Mark