A theorem prover called Weierstrass
View this page in Polish courtesy of Andrey Fomin
This page reports on research conducted in 1996-99 with the partial support of NSF grant CCR-9528913, and on one continuation of that line of research.
The theorem prover Weierstrass was built by combining the symbolic computation facilities of Mathpert with an inference engine, earlier built for the theorem-prover Gentzen. These two components are intertwined quite intimately, rather than just "talking to" each other. The inference engine can take symbolic steps in a proof; the symbolic part can "simplify" propositions as well as mathematical expressions; the "simplification" can use the current assumptions from the logical framework; computation steps can use existing assumptions, or even make new ones.
The purpose of this research was to explore the relationship between logic and computation as they occur in the development of mathematical proofs.
The general plan for integrating logic and computation in a computer program had already been laid out, years before, and used in the design of Mathpert, a program for helping students learn algebra, precalculus, and calculus. Mathpert is now commercially available (see www.mathpert.com) . But Mathpert deals only with quantifier-free logic, since that is all that is required in algebra and calculus. Therefore, Weierstrass needed the extra apparatus of a theorem-prover, based on a backwards construction of a proof in Gentzen sequent calculus using unification to instantiate meta-variables for terms.
What remained to do after this integration was to demonstrate that these methods of integrating logic and computation actually work. This research was somewhat experimental in nature. The plan is simple: choose an area of mathematics, choose a well-known proof in that area, and see if Weierstrass can generate that proof , or can be made to generate it by adding some general-purpose meta-rules (rules governing the generation of proofs). Of course, if one has to add many meta-rules of a very specific nature before the result comes out, this is not satisfying. But it did not turn out that way.
Two quite different areas of mathematics were chosen for experimentation: analysis and number theory. To make a long story short, Weierstrass was able to generate several proofs involving epsilon-delta arguments (in analysis), and in number theory, it was able to prove the irrationality of e. Here is a somewhat longer version of the story:
In the area of analysis, I chose epsilon-delta proofs about continuity as the arena for experimentation. These are the first proofs we ask our students to do when they leave behind the purely computational beginnings of mathematics. Yet, until 1996, no theorem-prover could automatically generate a proof of, for example, the continuity of f(x) = x3, or f(x) = sin x. The reason is, that to prove these results involves some computational work: some manipulation of inequalities, some judicious factorization or use of trig identities, and good control of the transitivity law for inequalities. No previous program had incorporated both the logical and computational capabilities required for these proofs. This phase of the work was successful: about five meta-rules were needed to control the proof generation, and these rules were of a very general character (obviously not specific to epsilon-delta arguments). This work was presented at the conference on Artificial Intelligence and Symbolic Computation in September, 1998; see [43].
In the area of number theory, I chose the proof of irrationality of e. This is a proof sufficiently difficult that most people will not discover it for themselves. Weierstrass had to be given several more meta-rules before it could generate a proof. Again, those rules were not at all specific to this problem. The proof generated is much longer than the epsilon-delta proofs, requiring five pages to write out. It contains several interesting sub-proofs: a convergence estimate on an infinite series, using the comparison theorem, in which Weierstrass constructs a geometric series and frames as a subgoal the inequality needed to apply the comparison theorem. This inequality can’t be proved directly (at least not by Weierstrass) and is therefore attacked by mathematical induction. In the course of this induction, some simplification of expressions involving factorials is required. Finally, the key step involves an argument that a certain quantity is a positive integer, but has been estimated to be less than 1, contradicting the hypothesis that e is a quotient of integers. This work was presented at the Calculemus workshop of the Federated Logic Conferences in Trento (July 1999), and published in [44].
An interesting point is that after new meta-rules were added for number theory, the original proofs in analysis still could be generated. That is, there was no conflict between the meta-rules. One wonders if that would still be the case if 200 meta-rules for various subjects had been added. I think that in the (distant) future, a more systematic means of classifying mathematical knowledge (embodied in these meta-rules) according to subject, and applying rules relevant to the subject of the current goal, will be required.
A different strand of this research concerned the extension of Weierstrass to second-order logic. A new algorithm for unification in lambda-calculus with if-then-else was discovered (or invented) and some of its theoretical properties were proved, in a paper presented at CADE-15, the Conference on Automated Deduction in Lindau, July, 1998. It would be possible to implement this algorithm in a theorem-prover. Two years later, I did implement the algorithm in my prover Weierstrass, and then used Weierstrass to generate proofs using John McCarthy’s circumscription method. This work is described in [45].