Module Pulselib.PulseCItv
val equal_to : IR.IntLit.t -> tval is_equal_to_zero : t -> boolval is_not_equal_to_zero : t -> boolwhether this is literally
≠0
type abduction_result=|Unsatisfiablethe assertion is never true given the parameters
|Satisfiable of t option * t optionthe assertion is satisfiable and when it is true then the lhs and rhs can be optionally refined to the given new intervals
val abduce_binop_is_true : negated:bool -> IR.Binop.t -> t option -> t option -> abduction_resultgiven
arith_lhs_opt bop arith_rhs_optand if notnegated, return eitherUnsatisfiableiff lhs bop rhs = ∅
Satisfiable (abduced_lhs_opt,abduced_rhs_opt)iff lhs bop rhs ≠ ∅, such that (taking lhs=true if lhs_opt isNone, same for rhs)abduced_lhs_opt=Some alhsif (lhs bop rhs ≠ ∅ => alhs⇔lhs) (and similarly for rhs)
If
negatedthen imagine a similar explanation replacing "= ∅" with "≠ ∅" and vice-versa.
val binop : IR.Binop.t -> t -> t -> t optionval unop : IR.Unop.t -> t -> t optionval zero_inf : tval ge_to : IR.IntLit.t -> t