class type theory =Term level interface to all theory solvers. A newly created theory solver has the following initial properties:object..end
Solver_api.theory.decision_level = 0not Solver_api.theory.conflict_detectedTerm_set.is_empty Solver_api.theory.variablesmethod owns_constant : Term.term -> boolowns_constant t holds when the solver responsible for
reasoning about the constant t.
Term.is_constant tmethod proxy : Term.term -> Term.termmethod add_interface_variable : Term.term -> unitadd_interface_variable v treats the variable v and its
negation as an interface literal.
Term.is_variable vTerm_set.mem v Solver_api.theory.variablesmethod variables : Term.Term_set.t
method decision_level : int
decision_level >= 0method inference_possible : boolmethod get_literal_possible : boolSolver_api.theory.get_literal?method get_lemma_possible : boolSolver_api.theory.get_lemma?method conflict_detected : boolmethod is_interface_literal : Term.term -> booll an interface literal for the solver.
Term_literal.is_literal l is_interface_literal l =
Term_set.mem (Term_literal.variable l) Solver_api.theory.variablesmethod is_true : Term.term -> booll assigned true in the solver state?
Solver_api.theory.is_interface_literal lmethod infer : unit
not Solver_api.theory.conflict_detected Solver_api.theory.inference_possiblemethod set_literal : Term.term -> unitset_literal l attempts to make a variable assignment
inferred by an external agent.
Solver_api.theory.is_interface_literal lnot Solver_api.theory.conflict_detectedmethod get_literal : Term.term
Solver_api.theory.get_literal_possibleSolver_api.theory.is_true get_literalmethod get_lemma : Term.term list
Solver_api.theory.get_lemma_possible List.for_all Solver_api.theory.is_interface_literal lsmethod final_check : unitmethod increment_level : unit
not Solver_api.theory.conflict_detected not Solver_api.theory.inference_possiblenot Solver_api.theory.get_literal_possiblenot Solver_api.theory.conflict_detected not Solver_api.theory.inference_possiblenot Solver_api.theory.get_literal_possibleSolver_api.theory.decision_level > 0method backjump : int -> unit
For backjump level:
0 <= levellevel < Solver_api.theory.decision_levellevel = Solver_api.theory.decision_level(not Solver_api.theory.conflict_detected)method restart : unit
not Solver_api.theory.conflict_detectedSolver_api.theory.decision_level = 0 not Solver_api.theory.conflict_detectedmethod conflict_clause : Term.term list
Solver_api.theory.conflict_detectedList.for_all
(fun l -> Solver_api.theory.is_true (Term_literal.negation l))
conflict_clause conflict_clause != []method literal_explanation : Term.term -> Term.term listSolver_api.theory.set_literal.
let cls = literal_explanation l
List.for_all Solver_api.theory.is_interface_literal clsList.mem l clsList.for_all
(fun m -> Solver_api.theory.is_true (Term_literal.negation m)
|| Term.term_equal l m)
cls