A basic way to select the given clause is to always select the lightest clause in sos. Otter has the ability to mix two methods of selecting the given clause in a ratio determined by a parameter --- selecting the lightest clause and selecting the oldest clause. This method adds a breadth-first component to the search. See the pick_given_ratio parameter below.
Prover9 uses three components, dividing the "lightest"
component into two components based on semantics.
The following options are used.
Under the default interpretation, for example, if
age_part = 1,
true_part = 2, and
false_part = 3,
given clauses will be selected in a cycle of size six: one clause
by lowest ID, then two clauses because they are the lightest
non-negative (i.e., true) clauses, then three clauses because they are the
lightest negative (i.e., false) clauses. And so on.
Anomalies:
assign(age_part, n). % default n=1, range [0 .. INT_MAX]
assign(true_part, n). % default n=2, range [0 .. INT_MAX]
assign(false_part, n). % default n=2, range [0 .. INT_MAX]
These three parameters work together to specify a 3-way ratio for
selection of the given clauses:
The true/false distinction is determined by a set of interpretations.
The default interpretation is that non-negative clauses are
true, and negative clauses are false. To use explicit interpretations,
see the section on semantic guidance.
Other Options
assign(pick_given_ratio, n). % default n=0, range [0 .. INT_MAX]
If n>0, the given clauses are chosen in the ratio
one part by age, and n parts by weight. The false/true
distinction is ignored.
This parameter works by making the following changes.
assign(pick_given_ratio, n) -> assign(age_part, 1).
assign(pick_given_ratio, n) -> assign(true_part, n).
assign(pick_given_ratio, n) -> assign(false_part, 0).
set(breadth_first).
clear(breadth_first). % default clear
If this flag is set, the sos list operates as a queue, giving a breadth-first
search. That is, the oldest clause is always selected as the given clause.
This flag operates by making the following changes.
set(breadth_first) -> assign(age_part, 1).
set(breadth_first) -> assign(true_part, 0).
set(breadth_first) -> assign(false_part, 0).
set(input_sos_first). % default set
clear(input_sos_first).
If this flag is set, the clauses in the initial sos list are selected
as given clauses (in the order in which they occur in the sos list)
before any derived clauses are selected. This flag is useful if the input
contains heavy clauses that should enter the search right away.