class type dpll =Term level interface to a DPLL solver. A newly created DPLL solver has the following initial properties:object
..end
Solver_api.dpll.decision_level
= 0
not
Solver_api.dpll.conflict_detected
Term_set.is_empty
Solver_api.dpll.variables
method owns_constant : Term.term -> bool
method add_clause : Term.term list -> unit
method proxy : Term.term -> Term.term
method add_interface_variable : Term.term -> unit
add_interface_variables v
treats the variable v
and its
negation as an interface literal.
Term.is_variable
v
Term_set.mem v
Solver_api.dpll.variables
method variables : Term.Term_set.t
method decision_level : int
0 <= decision_level
method inference_possible : bool
method get_literal_possible : bool
Solver_api.dpll.get_literal
since it was
assigned?method conflict_detected : bool
method decision_possible : bool
method backjump_possible : bool
Solver_api.dpll.conflict_detected
|| not
Solver_api.dpll.backjump_possible
not (
Solver_api.dpll.backjump_possible
&&
Solver_api.dpll.unsatisfiable
)
method satisfied : bool
satisfied = not (
Solver_api.dpll.conflict_detected
||
Solver_api.dpll.decision_possible
||
Solver_api.dpll.inference_possible
)
method unsatisfiable : bool
not unsatisfiable ||
Solver_api.dpll.conflict_detected
method is_interface_literal : Term.term -> bool
l
an interface literal for the solver.
Term_literal.is_literal
l
is_interface_literal l =
Term_set.mem (
Term_literal.variable
l)
Solver_api.dpll.variables
method is_true : Term.term -> bool
method level : Term.term -> int
l
was assigned true.
Solver_api.dpll.is_interface_literal
l
Solver_api.dpll.is_true
l
literal l >= 0
method decide : unit
not
Solver_api.dpll.conflict_detected
not
Solver_api.dpll.inference_possible
Solver_api.dpll.decision_possible
Solver_api.dpll.decision_level
> 0
not
Solver_api.dpll.conflict_detected
method infer : unit
not
Solver_api.dpll.conflict_detected
Solver_api.dpll.inference_possible
method set_literal : Term.term -> unit
set_literal l
attempts to make a variable assignment
inferred by an external agent. The interface literal is
ignored if the corresponding variable is already assigned in
the current partial model.
not
Solver_api.dpll.conflict_detected
Solver_api.dpll.is_interface_literal
l
method get_literal : Term.term
Solver_api.dpll.get_literal_possible
Solver_api.dpll.is_true
get_literal
method set_conflict_clause : Term.term list -> unit
set_conflict_clause ls
initializes the conflict clause with
the disjoined literals.
not
Solver_api.dpll.conflict_detected
List.for_all (fun l ->
Solver_api.dpll.is_true
(
Term_literal.negation
l)) ls
List.for_all
Solver_api.dpll.is_interface_literal
ls
Solver_api.dpll.conflict_detected
method literal_to_explain : Term.term
Solver_api.dpll.conflict_detected
not
Solver_api.dpll.unsatisfiable
not
Solver_api.dpll.backjump_possible
Solver_api.dpll.is_true
literal_to_explain
method set_literal_explanation : Term.term list -> unit
set_literal_explanation ls
removes Solver_api.dpll.literal_to_explain
from the set of conflict literals using the provided
explanation ls
.
Solver_api.dpll.conflict_detected
not
Solver_api.dpll.unsatisfiable
not
Solver_api.dpll.backjump_possible
List.mem
Solver_api.dpll.literal_to_explain
ls
List.for_all
(fun l -> l =
Solver_api.dpll.literal_to_explain
||
Solver_api.dpll.is_true
(
Term_literal.negation
l)) ls
List.for_all
Solver_api.dpll.is_interface_literal
ls
Solver_api.dpll.conflict_detected
not
Solver_api.dpll.unsatisfiable
method backjump : unit
method forget_some_learned_clauses : unit
not
Solver_api.dpll.conflict_detected
not
Solver_api.dpll.conflict_detected
method restart : unit
not
Solver_api.dpll.conflict_detected
not
Solver_api.dpll.conflict_detected
Solver_api.dpll.decision_level
= 0
method num_vars : int
method num_clauses : int
method num_learneds : int
method num_conflicts : int
method num_decisions : int
method num_inferences : int
method num_externally_set : int
Solver_api.dpll.set_literal
.