type ty = T.Ty.ttype term = T.Term.ttype term_store = T.Term.storetype ty_store = T.Ty.storetype proof = P.ttype t = Sidekick_msat_solver.Make(Solver_arg).Solver_internal.ttype solver = t
val tst : t -> term_storeval ty_st : t -> ty_storeval stats : t -> Sidekick_util.Stat.t
type actions = Sidekick_msat_solver.Make(Solver_arg).Solver_internal.actions
type lit = Lit.t
val define_const : t -> const:term -> rhs:term -> unit
val cc : t -> CC.t
type simplify_hook = Simplify.hook
val add_simplifier : t -> Simplify.hook -> unitval simplifier : t -> Simplify.tval simplify_t : t -> term -> (term * proof) optionval simp_t : t -> term -> term * proofval raise_conflict : t -> actions -> lit list -> proof -> 'aval push_decision : t -> actions -> lit -> unitval propagate : t -> actions -> lit -> reason:(unit -> lit list * proof) -> unitval propagate_l : t -> actions -> lit -> lit list -> proof -> unitval add_clause_temp : t -> actions -> lit list -> proof -> unitval add_clause_permanent : t -> actions -> lit list -> proof -> unitval mk_lit : t -> actions -> ?sign:bool -> term -> litval preprocess_term : t -> add_clause:(Lit.t list -> proof -> unit) -> term -> term * proofval add_lit : t -> actions -> lit -> unitval add_lit_t : t -> actions -> ?sign:bool -> term -> unitval cc_raise_conflict_expl : t -> actions -> CC.Expl.t -> 'aval cc_find : t -> CC.N.t -> CC.N.tval cc_are_equal : t -> term -> term -> boolval cc_merge : t -> actions -> CC.N.t -> CC.N.t -> CC.Expl.t -> unitval cc_merge_t : t -> actions -> term -> term -> CC.Expl.t -> unitval cc_add_term : t -> term -> CC.N.tval cc_mem_term : t -> term -> boolval on_cc_pre_merge : t -> (CC.t -> actions -> CC.N.t -> CC.N.t -> CC.Expl.t -> unit) -> unitval on_cc_post_merge : t -> (CC.t -> actions -> CC.N.t -> CC.N.t -> unit) -> unitval on_cc_new_term : t -> (CC.t -> CC.N.t -> term -> unit) -> unitval on_cc_is_subterm : t -> (CC.N.t -> term -> unit) -> unitval on_cc_conflict : t -> (CC.t -> th:bool -> lit list -> unit) -> unitval on_cc_propagate : t -> (CC.t -> lit -> (unit -> lit list * proof) -> unit) -> unitval on_partial_check : t -> (t -> actions -> lit Iter.t -> unit) -> unitval on_final_check : t -> (t -> actions -> lit Iter.t -> unit) -> unit
type preprocess_hook = t -> mk_lit:(term -> lit) -> add_clause:(lit list -> proof -> unit) -> term -> (term * proof) option
val on_preprocess : t -> preprocess_hook -> unit
type model_hook = recurse:(t -> CC.N.t -> term) -> t -> CC.N.t -> term option
val on_model_gen : t -> model_hook -> unit