Functions for Theorem Proving
val check_zero : InferIR.Tenv.t ‑> InferIR.Exp.t ‑> boolCheck |- e=0. Result false means "don't know".
val check_equal : InferIR.Tenv.t ‑> Prop.normal Prop.t ‑> InferIR.Exp.t ‑> InferIR.Exp.t ‑> boolCheck prop |- exp1=exp2. Result false means "don't know".
val check_disequal : InferIR.Tenv.t ‑> Prop.normal Prop.t ‑> InferIR.Exp.t ‑> InferIR.Exp.t ‑> boolCheck whether prop |- exp1!=exp2. Result false means "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. Result false means "don't know".
val check_inconsistency_base : InferIR.Tenv.t ‑> Prop.normal Prop.t ‑> boolInconsistency checking ignoring footprint.
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 exp checks whether base_exp =
exp.offlist for some list of offsets offlist. If so, it returns
Some(offlist). Otherwise, it returns None. Assumes that
base_exp points 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 hpred expands hpred if it is a |-> whose lhs is a Lfield or Lindex or ptr+off.
Return (changed, calc_index_frame', hpred') where changed indicates 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
val check_implication : InferIR.Typ.Procname.t ‑> InferIR.Tenv.t ‑> Prop.normal Prop.t ‑> Prop.exposed Prop.t ‑> boolcheck_implication p1 p2 returns true if p1|-p2
val d_typings : (InferIR.Exp.t * InferIR.Exp.t) list ‑> unittype implication_result = | ImplOK of check list * InferIR.Sil.exp_subst * InferIR.Sil.exp_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 p2 returns
Some(sub, frame, missing) if sub(p1 * missing) |- sub(p2 *
frame) where sub is a substitution which instantiates the
primed vars of p1 and p2, which are assumed to be disjoint.
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 cases whose disjunction covers true
module Subtyping_check : sig ... end