Module Pulselib.PulseArithmetic

module AbductiveDomain = PulseAbductiveDomain
module AccessResult = PulseAccessResult
val and_nonnegative : PulseBasicInterface.AbstractValue.t -> AbductiveDomain.t -> AbductiveDomain.t AccessResult.t
val and_positive : PulseBasicInterface.AbstractValue.t -> AbductiveDomain.t -> AbductiveDomain.t AccessResult.t
val and_eq_int : PulseBasicInterface.AbstractValue.t -> IR.IntLit.t -> AbductiveDomain.t -> AbductiveDomain.t AccessResult.t
type operand = PulseBasicInterface.PathCondition.operand =
| LiteralOperand of IR.IntLit.t
| AbstractValueOperand of PulseBasicInterface.AbstractValue.t
| FunctionApplicationOperand of {
f : PulseFormula.function_symbol;
actuals : PulseBasicInterface.AbstractValue.t list;
}
val and_equal : operand -> operand -> AbductiveDomain.t -> AbductiveDomain.t AccessResult.t
val eval_binop : PulseBasicInterface.AbstractValue.t -> IR.Binop.t -> operand -> operand -> AbductiveDomain.t -> AbductiveDomain.t AccessResult.t
val eval_unop : PulseBasicInterface.AbstractValue.t -> IR.Unop.t -> PulseBasicInterface.AbstractValue.t -> AbductiveDomain.t -> AbductiveDomain.t AccessResult.t
val prune_binop : negated:bool -> IR.Binop.t -> operand -> operand -> AbductiveDomain.t -> AbductiveDomain.t AccessResult.t
val prune_eq_zero : PulseBasicInterface.AbstractValue.t -> AbductiveDomain.t -> AbductiveDomain.t AccessResult.t

helper function wrapping prune_binop

val prune_positive : PulseBasicInterface.AbstractValue.t -> AbductiveDomain.t -> AbductiveDomain.t AccessResult.t

helper function wrapping prune_binop

val is_known_zero : AbductiveDomain.t -> PulseBasicInterface.AbstractValue.t -> bool
val is_unsat_cheap : AbductiveDomain.t -> bool
val has_no_assumptions : AbductiveDomain.t -> bool
val and_equal_instanceof : PulseBasicInterface.AbstractValue.t -> PulseBasicInterface.AbstractValue.t -> IR.Typ.t -> AbductiveDomain.t -> AbductiveDomain.t AccessResult.t