All projects will use the same grammar and precedence rules. As the course proceeds, we will enlarge this grammar.
Whitespace space ( ) tab (\t) newline (\n) form feed (\f) other characters not listed below are illegal Comment % to newline (\n) all characters except newline (\n) are allowed in comment Identifiers id start with a letter A-Z or a-z followed by letters A-Z or a-z or digits 0-9 keywords `prove', `refute', `axiom', `lemma', `theorem', `T', `F' are ruled out. Number num sequence of digits 0-9 Terms t ::= id % constant or variable | id(tseq) % function with arguments tseq ::= t % single term | t,tseq % term sequence Atomic Propositions P ::= id % propositional constant | id(tseq) % predicate with arguments Propositions A ::= P | ~ A % negation | A & A % conjunction | A v A % disjunction | A => A % implication | T % truth | F % falsehood | {id} A % universal quantification | <id> A % existential quantification | (A) % parentheses to override precedence Operator Precedence ~ > & > v > => & v are left associative => is right associative {} <> are prefix operators weaker than => {x} and <x> bind x, shadowing previous bindings Identifer declaration iddec ::= % empty | id/num iddec % declaration of id with arity num Declaration D ::= constant iddec. % constant declarations | predicate iddec. % predicate declaration | prove A. % prove A | refute A. % refute A | axiom id : A. % assume A | lemma id : A. % prove and then assume A | theorem id : A. % synonym for lemma Identifiers are names of assumptions for further reference and to build proof terms. Constants, predicates, and axiom/theorem identifiers share the same name space. Redeclaration of constants is an error. Declarations may not contain free variables. File Contents F ::= % empty | D F % declaration
Measurement this week is only concerned with qualitative measures. Below are some examples for the two styles of prover. These could be refined into different kinds of sequents (active or focus). Make the kind of measurement your find helpful to characterize or analyze the prover.
Tanel Tammet has provided me with some first-order benchmarks he used in the intuitionistic version of the Gandalf prover, mostly using Lisp/Scheme syntax.
Chad Brown has converted these to conform to our grammar and collected them into the file tammet.thy.
Jacob Howe has provided me with some propositional benchmarks used in his investigation of provers for intuitionistic propositional calculus, plus a Prolog program by Roy Dyckhoff to generate decision problems (some of them hard). Again, if you convert some of these, please let me and the other groups know.
Brigitte Pientka has converted Roy Dyckhoff's program to generate difficult cases for the propositional decision procedure from Prolog to ML. You can find it in dyckhoff.sml.
See under additional reading on the handouts page.