OTTER How-To

OTTER is a theorem prover for doing resolution in first-order logic.  Given a set of sentences in first-order logic where one is a conjecture, OTTER uses resolution to derive new sentences in the hopes of finding a contradiction.  If it finds a contradiction, you can then deduce that the negation of the conjecture must be true.  Dr. William McCune at Argonne National Laboratory used a version of OTTER to prove the Robbin's Conjecture about Boolean Algebras, which had "stumped some of the best mathematicians for 60 years" (New York Times, 12/10/96).  Even if you (like me) have no idea what the Robbin's Conjecture is, you have to admit that its fairly impressive for a computer to generate a proof that no human was able to find.  Just imagine, you get to use this program for our Mystery Problem to prove the Victor Conjecture (which, admittedly, has not stumped mathematicians for quite as long).  Enjoy.

1. Getting OTTER

2. Input File

3. Running OTTER

    OK, the rest is fairly simple.  Check to see that a file named 'input' was created as described above and is in the same directory as the files 'otter' and 'simple_otter.pl'.  Then just type in the following line:
perl  simple_otter.pl
Just like with GSAT.  And again, the answer should just pop out after OTTER has done its thing.  If OTTER was unable to find a contradiction in the sentences you gave it, it should report 'NO CONTRADICTION FOUND.'  If it was, however, able to find a contradiction, it will display a series of steps describing its proof that will look something like this (for the sample file given above):
1 [] -OtherSide(Grass)|Greener(Grass).
2 [] -Dead(Grass)| -Greener(Grass).
3 [] Dead(Grass).
4 [] OtherSide(Grass).
5 [1,4] Greener(Grass).
6 [2,3] -Greener(Grass).
7 [6,5] $F.
In order to interpret this output, you need to know a few things.  The numbers in the leftmost column are the proof steps, and the bracketed expression following each number is the justification for each step.  The justification '[]' means that the statement was given as input and the justification '[x,y]' means that OTTER resolved the lines 'x' and 'y' to give the deduction presented in this line.  Of course, if you're paying attention you'll have already noticed that the statements taken as given above are not actually the statements that we gave it in the input file.  This is because OTTER converts your input sentences into a clausal form before working with them -- and if you work through them, you should see that anything that OTTER claims to be given is nothing more than a rewriting of your input sentences.  Finally, the '$F' in the last step means that the 'x' and 'y' used to justify this step are contradictory.
    In case you missed it, a copy of the proof will be saved in a file named 'output' which you can examine at your convenience by typing:
more output
That should be everything.  Good luck.
Note that its easy to make mistakes while typing in your input.  Even if OTTER doesn't complain, you may not actually be proving what you think you are.  The best way to make sure that you're doing the right thing is to assume the innocence of Arthur, Bertram, and Carleton one by one and get OTTER to try to refute each assumption.  If you do not get exactly two contradictions (for example, if OTTER can't contradict two of the innocence assumptions), then you know that you're doing something wrong.

Special Thanks: The simple_otter.pl script and the first draft of this documentation are by Samar Mehta, one of the best TAs I've ever worked with.  Thanks so much, Samar!