Prover9
Prover9 is an automated theorem prover for First-order and equational logic developed by William McCune. Prover9 is the successor of the Otter theorem prover.
Prover9 is intentionally paired with Mace4, which searches for finite models and counterexamples. Both can be run simultaneously from the same input, with Prover9 attempting to find a proof, while Mace4 attempts to find a (disproving) counter-example. Prover9, Mace4, and many other tools are built on an underlying library named LADR to simplify implementation. Resulting proofs can be double-checked by Ivy, a proof-checking tool that has been separately verified using ACL2.
In July 2006 the LADR/Prover9/Mace4 input language made a major change (which also differentiates it from Otter). The key distinction between "clauses" and "formulas" completely disappeared; "formulas" can now have free variables; and "clauses" are now a subset of "formulas". Prover9/Mace4 also supports a "goal" type of formula, which is automatically negated for proof. Prover9 attempts to automatically generate a proof by default; in contrast, Otter's automatic mode must be explicitly set.
Prover9 was under active development, with new releases every month or every other month, until 2009. Prover9 is free software, and therefore, open source software; it is released under GPL version 2 or later.
Predecessor
Prover9 is the successor of the Otter theorem prover.
Otter is an automated theorem prover developed by William McCune at Argonne National Laboratory in Illinois. Otter was the first widely distributed, high-performance theorem prover for first-order logic, and it pioneered a number of important implementation techniques. Otter is an acronym for Organized Techniques for Theorem-proving and Effective Research.
Otter has been very stable for a number of years but is no longer actively developed. As of November 2008, the last changelog entry was dated 14 September 2004.
The software is in the public domain. The University of Chicago has declined to assert its copyrights in this software, and it may be used, modified, and redistributed (with or without modifications) by the public. However, "NEITHER THE UNITED STATES GOVERNMENT NOR ANY AGENCY THEREOF [...] REPRESENTS THAT ITS USE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS."[1]
According to Wos and Pieper, OTTER is written in approximately 28,000 lines of C programming language.
Examples
Socrates
The traditional "all men are mortal", "Socrates is a man", prove "Socrates is mortal" can be expressed this way in Prover9:
formulas(assumptions).
man(x) -> mortal(x). % open formula with free variable x
man(socrates).
end_of_list.
formulas(goals). mortal(socrates). end_of_list.
This will be automatically converted into clausal form (which Prover9 also accepts):
formulas(sos). -man(x) | mortal(x). man(socrates). -mortal(socrates). end_of_list.
Square Root of 2 is irrational
A proof that the square root of 2 is irrational can be expressed this way:[2]
formulas(assumptions). 1*x = x. % identity x*y = y*x. % commutativity x*(y*z) = (x*y)*z. % associativity ( x*y = x*z ) -> y = z. % cancellation (0 is not allowed, so x!=0). % % Now let's define divides(x,y): x divides y. % Example: divides(2,6) is true b/c 2*3=6. % divides(x,y) <-> (exists z x*z = y). divides(2,x*x) -> divides(2,x). % If 2 divides x*x, it divides x. a*a = 2*(b*b). % a/b = sqrt(2), so a^2 = 2 * b^2. (x != 1) -> -(divides(x,a) & divides(x,b)). % a/b is in lowest terms 2 != 1. % Original author almost forgot this. end_of_list.
References
- ↑ File name Legal in the tarball
- ↑ Wheeler, David A. "sqrt2.in". David A. Wheeler’s Personal Home Page. Retrieved 14 March 2016.