Module InferModules.Prover
val atom_negate : InferIR.Tenv.t -> InferIR.Sil.atom -> InferIR.Sil.atomNegate an atom
Ordinary Theorem Proving
val check_zero : InferIR.Tenv.t -> InferIR.Exp.t -> boolCheck
|- e=0. Resultfalsemeans "don't know".
val check_equal : InferIR.Tenv.t -> Prop.normal Prop.t -> InferIR.Exp.t -> InferIR.Exp.t -> boolCheck
prop |- exp1=exp2. Resultfalsemeans "don't know".
val check_disequal : InferIR.Tenv.t -> Prop.normal Prop.t -> InferIR.Exp.t -> InferIR.Exp.t -> boolCheck whether
prop |- exp1!=exp2. Resultfalsemeans "don't know".
val type_size_comparable : InferIR.Typ.t -> InferIR.Typ.t -> boolReturn true if the two types have sizes which can be compared
val check_type_size_leq : InferIR.Typ.t -> InferIR.Typ.t -> boolCheck <= on the size of comparable types
val check_atom : InferIR.Tenv.t -> Prop.normal Prop.t -> InferIR.Sil.atom -> boolCheck whether
prop |- a. Resultfalsemeans "don't know".
val check_inconsistency_base : InferIR.Tenv.t -> Prop.normal Prop.t -> boolInconsistency checking ignoring footprint.
val check_inconsistency : InferIR.Tenv.t -> Prop.normal Prop.t -> boolInconsistency checking.
val check_allocatedness : InferIR.Tenv.t -> Prop.normal Prop.t -> InferIR.Exp.t -> boolCheck whether
prop |- allocated(exp).
val is_root : InferIR.Tenv.t -> Prop.normal Prop.t -> InferIR.Exp.t -> InferIR.Exp.t -> InferIR.Sil.offset list optionis_root prop base_exp expchecks whetherbase_exp = exp.offlistfor some list of offsetsofflist. If so, it returnsSome(offlist). Otherwise, it returnsNone. Assumes thatbase_exppoints to the beginning of a structure, not the middle.
val expand_hpred_pointer : InferIR.Tenv.t -> bool -> InferIR.Sil.hpred -> bool * bool * InferIR.Sil.hpredexpand_hpred_pointer calc_index_frame hpredexpandshpredif it is a |-> whose lhs is a Lfield or Lindex or ptr+off. Return(changed, calc_index_frame', hpred')wherechangedindicates whether the predicate has changed.
val get_bounds : InferIR.Tenv.t -> Prop.normal Prop.t -> InferIR.Exp.t -> InferIR.IntLit.t option * InferIR.IntLit.t optionGet upper and lower bounds of an expression, if any
Abduction prover
val check_implication : InferIR.Typ.Procname.t -> InferIR.Tenv.t -> Prop.normal Prop.t -> Prop.exposed Prop.t -> boolcheck_implication p1 p2returns true ifp1|-p2
type check=|Bounds_check|Class_cast_check of InferIR.Exp.t * InferIR.Exp.t * InferIR.Exp.t
val d_typings : (InferIR.Exp.t * InferIR.Exp.t) list -> unit
type implication_result=|ImplOK of check list * InferIR.Sil.subst * InferIR.Sil.subst * InferIR.Sil.hpred list * InferIR.Sil.atom list * InferIR.Sil.hpred list * InferIR.Sil.hpred list * InferIR.Sil.hpred list * (InferIR.Exp.t * InferIR.Exp.t) list * (InferIR.Exp.t * InferIR.Exp.t) list|ImplFail of check list
val check_implication_for_footprint : InferIR.Typ.Procname.t -> InferIR.Tenv.t -> Prop.normal Prop.t -> Prop.exposed Prop.t -> implication_resultcheck_implication_for_footprint p1 p2returnsSome(sub, frame, missing)ifsub(p1 * missing) |- sub(p2 * frame)wheresubis a substitution which instantiates the primed vars ofp1andp2, which are assumed to be disjoint.
Cover: minimum set of pi's whose disjunction is equivalent to true
val find_minimum_pure_cover : InferIR.Tenv.t -> (InferIR.Sil.atom list * 'a) list -> (InferIR.Sil.atom list * 'a) list optionFind minimum set of pi's in
caseswhose disjunction covers true
Subtype checking
module Subtyping_check : sig ... end