15-317 Constructive Logic
Recitation 8: G4ip review and Prolog tutorial

Today in recitation, we reviewed some of the rules of the G4ip calculus by constructing a proof of the double-negation of Peirce's Law: ¬ ¬ (((P ⊃ Q) ⊃ P) ⊃ P). In constructing the proof, we discussed the importance of remembering choice points when we apply non-invertible rules like ⊃⊃L, although we never found ourselves needing to backtrack while proving this particular theorem. We also discussed the importance of never throwing a hypothesis away without good reason, in case it might be needed later in the proof.

After that, we played around with GNU Prolog a bit, writing the plus and times examples from class. We saw how plus could be used to compute subtraction, but times could not necessarily be used to compute (even exact) division. The intuitive reason is that times cannot be given an appropriate mode (i.e. specification of inputs and outputs) to be interpreted as division unless we rewrote it with a different subgoal order, in which case it could no longer be interpreted as multiplication. In both cases, the failure was to backtrack infinitely after finding one correct answer.

References:

  • Plus and Times code in Prolog, with discussion of modes: plustimes.pl
(Recall that to load a file file.pl into Prolog, you give the query ['file.pl']. at the ?- prompt.)


[ Home | Schedule | Assignments | Handouts | Software ]

fp@cs
Frank Pfenning