Returns Some(const) if name is a constant.
Returns Some(expandedDefinition) if name is a defined constant.
Returns Some(lkProof) if clause is valid modulo the background theory.
Returns Some(lkProof) if clause is valid modulo the background theory.
lkProof should end in a minimal sub-sequent of clause that is still valid.
Returns Some(typeDef) if name is a base type.
Decides whether the symbol with the given identifier should be a variable or constant, and what its type should be.
Decides whether the symbol with the given identifier should be a variable or constant, and what its type should be.
The name of the symbol.
Either IsVar(type) or IsConst(type).
Returns the type of the symbol with the given identifier.
Returns the type of the symbol with the given identifier.
The name of the symbol.
Returns true iff the symbol with the given identifier is a variable.
Returns true iff the symbol with the given identifier is a variable.
The name of the symbol.
Captures constants, types, definitions, and background theory used in a proof.
There are several inferences in our LK proofs for which it is not enough that are syntactically valid: An induction inference might follow the syntactical scheme of an induction inference and satisfy the eigenvariable criterion, however if it excludes a constructor of the inductive type, then it still allows us to prove non-theorems. The same is also true for definition rules and theory axioms.
Hence we store all information necessary to validate these inferences inside a Context object. For completeness, it also includes the collection of constant symbols.
TODO: implement validation
Having this information available is also important for a second reason: it allows us make decisions based on the current context: