Pulselib.PulseFormulaAtommodule L = IBase.Loggingmodule CItv = PulseCItvmodule SatUnsat = PulseSatUnsatmodule Debug = PulseFormulaDebugmodule Var = PulseFormulaVarmodule Q = QSafeCappedmodule Z = ZSafemodule LinArith = PulseFormulaLinAritmodule Term = PulseFormulaTermBasically boolean terms, used to build the part of a formula that is not equalities between linear arithmetic.
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.tval pp_with_pp_var :
(Term.F.formatter -> Term.LinArith.Var.t -> unit) ->
F.formatter ->
t ->
unitpreserve physical equality if f does
val fold_variables : t -> init:'a -> f:('a -> Term.LinArith.Var.t -> 'a) -> 'aval eval_result_of_bool : bool -> eval_resultval atoms_of_term :
is_neq_zero:(Term.t -> bool) ->
negated:bool ->
?force_to_atom:bool ->
Term.t ->
t list optionatoms_of_term ~negated t is Some [atom1; ..; atomN] if t (or ¬t if negated) is (mostly syntactically) equivalent to atom1 ∧ .. ∧ atomN. For example atoms_of_term ~negated:false (Equal (Or (x, Not y), 0)) should be [Equal (x, 0); NotEqual (y, 0)]. When the term y is known as a boolean, it generates a preciser atom Equal (y, 1).
is_neq_zero is a function that can tell if a term is known to be ≠0, and force_to_atom can be used to force converting the term into an atom even if it does not make it simpler or stronger.
similar to atoms_of_term but takes an atom and "flattens" it to possibly several atoms whose conjunction is equivalent to the original atom
val eval_const_shallow : t -> eval_resultval eval_syntactically_equal_terms : t -> eval_resultval eval_with_normalized_terms :
is_neq_zero:(Term.t -> bool) ->
t ->
t list option SatUnsat.Import.sat_unsat_tval eval_atoms_with_normalized_terms :
is_neq_zero:(Term.t -> bool) ->
t list ->
t list SatUnsat.tval eval_term :
is_neq_zero:(Term.t -> bool) ->
Term.t ->
Term.t Term.SatUnsat.Import.sat_unsat_tval fold_subst_variables :
init:'a ->
f_subst:('a -> Term.LinArith.Var.t -> 'a * Term.t Term.LinArith.subst_target) ->
?f_post:(prev:Term.t -> 'a -> Term.t -> 'a * Term.t) ->
t ->
'a * tval subst_variables :
t ->
f:(Term.LinArith.Var.t -> Term.t Term.LinArith.subst_target) ->
tval has_var_notin : Term.Var.Set.t -> t -> boolval get_as_var_neq_zero : t -> Term.Var.t optionval get_as_disequal_vars : t -> (Term.Var.t * Term.Var.t) optionmodule Set : sig ... endmodule Map : sig ... end