Prover9 Manual | Version 2009-11A |
The mechanism uses the Clause Properties language for specifying clauses that are to be kept or deleted.
Two lists can be given in the input: a "keep" list and a "delete" list. Here are examples of each.
list(keep). -horn & literals=3 & variables=0 & level<4. horn & variables<3. end_of_list. list(delete). weight > 30. weight > 20 & (-horn | variables > 4). end_of_list.
Given a newly derived clause, the following procedure is applied.
If the clause satisfies any rule in the "keep" list, then the clause is kept; else if the clause satisfies any rule in the "delete" list, then the clause is deleted; else the clause is kept;Note that if the clause satisfies rules in both lists, it is kept.
The ordinary parameters max_weight, max_vars, max_literals, and max_depth are can be thought of as shorthand for simple rules in the "delete" list. For example the pair of commands
assign(max_literals, 3). assign(max_vars, 0).are operationally equivalent to the "delete" list
list(delete). literals > 3. variables > 4. end_of_list.In fact, the parameters max_weight, max_vars, max_literals, and max_depth are implemented in Prover9 by constructing an internal "delete" list, and any "delete" list given by the user is simply appended to the internal list.
The rules in the "delete" list are not applied to initial clauses; that is, clauses that are input or derived before the selection of the first given clause.