Pulselib.PulseCItvConcrete interval domain (CItv)
include Ppx_compare_lib.Comparable.S with type t := tval compare : t Base__Ppx_compare_lib.compareinclude Ppx_compare_lib.Equal.S with type t := tval equal : t Base__Ppx_compare_lib.equalval equal_to : IR.IntLit.t -> tval is_equal_to_zero : t -> boolval is_not_equal_to_zero : t -> boolwhether this is literally ≠0
val is_non_pointer : t -> boolwhether both lb and ub are primitive integers
val pp : F.formatter -> t -> unitval abduce_binop_is_true :
negated:bool ->
IR.Binop.t ->
t option ->
t option ->
abduction_resultgiven arith_lhs_opt bop arith_rhs_opt and if not negated, return either
Unsatisfiable iff lhs bop rhs = ∅Satisfiable (abduced_lhs_opt,abduced_rhs_opt) iff lhs bop rhs ≠ ∅, such that (taking lhs=true if lhs_opt is None, same for rhs) abduced_lhs_opt=Some alhs if (lhs bop rhs ≠ ∅ => alhs⇔lhs) (and similarly for rhs)If negated then imagine a similar explanation replacing "= ∅" with "≠ ∅" and vice-versa.
val binop : IR.Binop.t -> t -> t -> t optionval to_singleton : t -> IR.IntLit.t optionval requires_integer_reasoning : t -> boolwhether the interval can be expressed by a relation over rationals; used in PulseFormula to decide whether an interval is already expressed by another part of the formula