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.