Prover9 Semantic Guidance
Using finite interpretations to help select the given clause.
How it Works
-
Include one or more interpretations in the input file.
-
They must be in in Mace4's default "standard" format.
-
When a clause is kept, it is evaluated in the interpretations.
If it is false in all of the interpretations, it is given
the attribute "label(false)". You will see this label when
the clause is printed to the output file.
-
If there are no interpretations in the input file, Prover9 uses
a default interpretation in which positive literals are true
and negative literals are false; that is, a clause gets the
label "false" iff all literals are negative.
-
If a clause contains a symbol that is not in the interpretations,
or if evaluation would take too long (see parameter eval_limit),
it is given the value "true".
-
The "false" attribute is not considered when calculating the
weight of a clause, and it is not used when deciding whether
to discard a clause. It is used only when selecting the given clause.
-
When selecting the given clause, Prover9 cycles through three
methods, in a ratio determined by the parameters
- age_part: clause with lowest ID (the oldest clause)
- false_part: false clause with lowest weight
- true_part: true clause with lowest weight
The default ratio is age_part=1, false_part=4, true_part=4,
meaning that for one iteration it selects the oldest,
then for 4 iterations the lowest weight "false" clause,
then for 4 iterations the lowest weight "true" clause;
and so on.
Examples
Here are some examples of semantic guidance on difficult problems.
These Prover9 jobs use set(lex_order_vars), which
is risky, because it can block all proofs.
See the Prover9
manual for the description of lex_order_vars.
Lattice Theory Huntington Identities
Get guiding interpretation.
mace4 -N12 -f LT-interp.in | get_interps | isofilter ignore_constants wrap > LT-interp.out
Job with guidance (1 seconds).
prover9 -f LT.in LT-interp.out > LT.out ; ### ( LT.out.xml )
Job without guidance (23 seconds).
prover9 -t 7200 -f LT.in > LT-base.out ; ### ( LT-base.out.xml )
Boolean Algebra 2-Basis
Get guiding interpretation.
mace4 -n6 -m -1 -f BA2-interp.in | get_interps | isofilter ignore_constants wrap > BA2-interp.out
Job with guidance (20 seconds).
prover9 -f BA2.in BA2-interp.out > BA2.out ; ### ( BA2.out.xml )
Job without guidance (46 seconds).
prover9 -f BA2.in > BA2-base.out ; ### ( BA2-base.out.xml )
Modular Ortholattice Single Axiom
The Prover9 jobs in this section use the flag
set(lex_order_vars) (see the
manual),
which reduces redundancy, but it can easily block proofs. It works
very well for these examples, both with and without semantic guidance.
Associativity Property
Get guiding interpretation.
mace4 -n8 -m -1 -f MOL-A-interp.in | get_interps | isofilter ignore_constants wrap > MOL-A-interp.out
Job with guidance (46 seconds).
prover9 -f MOL-A.in MOL-A-interp.out > MOL-A.out ; ### ( MOL-A.out.xml )
Modularity Property
Get guiding interpretation.
mace4 -n10 -m -1 -f MOL-M-interp.in | get_interps | isofilter ignore_constants wrap > MOL-M-interp.out
Job with guidance (649 seconds).
prover9 -f MOL-M.in MOL-M-interp.out > MOL-M.out ; ### ( MOL-M.out.xml )
Associativity and Modularity Properties Together, without Guidance
(Associativity 169 seconds, Modularity 2891 seconds.)
prover9 -f MOL-base.in > MOL-base.out ; ### ( MOL-base.out.xml )