Module Pulselib.PulsePathCondition
module AbstractValue = PulseAbstractValuemodule ValueHistory = PulseValueHistoryBuilding arithmetic constraints
val and_nonnegative : AbstractValue.t -> t -> tand_nonnegative v phiisphi ∧ v≥0
val and_positive : AbstractValue.t -> t -> tand_positive v phiisphi ∧ v>0
val and_eq_int : AbstractValue.t -> IR.IntLit.t -> t -> tand_eq_int v i phiisphi ∧ v=i
val simplify : keep:AbstractValue.Set.t -> t -> tsimplify ~keep phiattempts to get rid of as many variables infv phibut not inkeepas possible
val and_callee : (AbstractValue.t * ValueHistory.t) AbstractValue.Map.t -> t -> callee:t -> (AbstractValue.t * ValueHistory.t) AbstractValue.Map.t * t
Operations
type operand=|LiteralOperand of IR.IntLit.t|AbstractValueOperand of AbstractValue.t
val eval_binop : AbstractValue.t -> IR.Binop.t -> operand -> operand -> t -> tval eval_unop : AbstractValue.t -> IR.Unop.t -> AbstractValue.t -> t -> tval prune_binop : negated:bool -> IR.Binop.t -> operand -> operand -> t -> t
Queries
val is_known_zero : t -> AbstractValue.t -> boolis_known_zero phi treturnstrueifphi |- t = 0,falseif we don't know for sure
val is_unsat_cheap : t -> boolwhether the state contains a contradiction, call this as often as you want
val is_unsat_expensive : t -> boolwhether the state contains a contradiction, only call this when you absolutely have to