Prover9 Manual | Version 2009-02A |
Comments are not echoed to the output file. Clauses can have label attributes which can serve as different kind of comment which does appear in the output file.
Whitespace (spaces, newlines, tabs, etc.) is optional in most places. The important exception is that whitespace is required around some operations in clauses and formulas (see the page Clauses and Formulas).
formulas(sos). % clauses to be placed in the sos list -man(x) | mortal(x). man(george). -mortal(george). end_of_list.Prover9 will take the clauses, use its automatic mode to decide on the inference rules, and then search for a refutation.
The preceding example can also be stated in a more natural way by using a non-clausal formula for the man-implies-mortal rule and the goals list for the conclusion, as follows.
formulas(assumptions). % synonym for formulas(sos). man(x) -> mortal(x). % open formula with free variable x man(george). end_of_list. formulas(goals). % to be negated and placed in the sos list mortal(george). end_of_list.Prover9 will transform the formulas in this input to the same clauses as in the basic input above before starting the search for a refutation.
In Otter and in earlier versions of Prover9, "clauses" and "formulas" were distinct types of object, and formulas could not have free variables. Now, clauses are a subset of formulas, and Prover9 decides which formulas are non-clausal and takes the appropriate actions to transform them to clauses.
formulas(sos). p(x). end_of_list. % the primary input list formulas(assumptions). p(x). end_of_list. % synonym for formulas(sos) formulas(goals). p(x). end_of_list. % some restrictions (see Goals) formulas(usable). p(x). end_of_list. % seldom used formulas(demodulators). f(x)=x. end_of_list. % seldom used, must be equalities formulas(hints). p(x). end_of_list. % should be used more often (see Hints) list(weights). weight(a) = 10. end_of_list. % see Weighting list(kbo_weights). a = 3. end_of_list. % see Term Ordering list(actions). given = 100 -> set(print_kept). end_of_list. % see Actions list(interpretations). interpretation(2,[],[relation(p,[1])]). end_of_list. % see SemanticsIf the input contains more than one list of a particular type/name, the lists are simply concatenated by Prover9 as they are read.
op(400, infix_right, ["+", "--"]). % declare parse precedence and type (see Clauses and Formulas) redeclare(negation, "~"]). % change the negation symbol (see Clauses and Formulas) set(print_kept). % set a flag clear(auto_inference). % clear a flag assign(max_weight, 40). % integer parameter assign(stats, some). % string parameter assoc_comm(*). % not currently used for Prover9 commutative(g). % not currently used for Prover9 predicate_order([=,<=,P,Q). % predicate symbol precedence (see Term Ordering) function_order([0,1,a,b,f,g,*,+]). % function symbol precedence (see Term Ordering) lex([0,1,a,b,f,g,*,+]). % synonym for "function_order" skolem([a,b,f,g]). % declare symbols to be Skolem functions (rarely used)
if(program-name). ... conditionally-included input ... end_if.For example, to specify that Mace4 and Prover9 have different time limits, one can write
if(Mace4). assign(max_seconds, 30). end_if. if(Prover9). assign(max_seconds, 3600). end_if.The conditional-inclusion construct cannot occur within a list of objects (formulas, weighting rules, etc.).