module Genarith:sig
..end
val enabled : unit -> bool
val args : (Arg.key * Arg.spec * Arg.doc) list
type
ga_node
val new_node : Assertions.cform -> ga_node
val put_edge_skip : ga_node -> ga_node -> unit
n1
to n2
val put_edge_implication : ga_node -> Exp.subst -> Pure.t -> ga_node -> unit
n1
to n2
val pp_function : Format.formatter -> string * ga_node -> unit
typeeform =
ga_node
typeeprop =
eform list
val cform_of_eform : eform -> Assertions.cform
val eprop_of_cprop : Assertions.cprop -> eprop
val eprop_of_cprop_at_start_node : Assertions.cprop -> ga_node * eprop
val eprop_false : eprop
val eprop_star : Assertions.cprop -> eprop -> eprop
val eprop_star_assume : Assertions.cprop -> eprop -> eprop
val eprop_or : eprop -> eprop -> eprop
val ext_append_return : eprop -> unit
val ext_append_comment : (unit -> string) -> eprop -> eprop
val ext_append_assign : (Exp.Id.t * Exp.exp option) list -> eprop -> eprop
val ext_append_case_split : eprop -> eprop * eprop
val ext_opt_transform1 : (Assertions.cform -> Assertions.cform list option) ->
eform -> eform list option
val plain_ext_transform : (Assertions.cform -> Assertions.cprop) -> eprop -> eprop
val ext_transform : (Assertions.cform -> Assertions.cprop) -> eprop -> eprop
val remove_eform_duplicates : eform list -> eform list
val map_eprop : (Exp.exp -> Exp.exp) -> eprop -> eprop
val naive_map_eprop : (Exp.exp -> Exp.exp) -> eprop -> eprop
val pp_eprop : Format.formatter -> eprop -> unit
typeudom =
Assertions.uform list * Assertions.uform list
uform
s for
calculating fix-points.
NB: The two components of udom
are to work round the possible
non-transitivity of the prover's entailment checking.
val udom_of_uform_list : Assertions.uform list -> udom
val uform_list_of_udom : udom -> Assertions.uform list
type
abstraction = {
|
uform_abs : |
|
uform_join : |
|
prop_abs : |
|
prop_join : |
|
set_abs : |
|
list_abs : |
uform_abs
is the analogue of prop_abs
for formulas with no boxes.
See below.
The boolean argument tells whether the abstraction should be aggressive
(disregard sentinel values).
uform_join
is the analogue of prop_join
for formulas with no boxes.
See below.
prop_abs cp
returns a cp'
belonging to a smaller domain such that
cp |- cp'
prop_join cp1a cp1b cp2
assumes that cp1a <==> cp1b
and returns
(cpa,cpb,cp2')
such that cpa <==> cpb
and cp1a |- cpa
and cp2' |- cpa
and (cp1b \/ cp2) ==> cpb
and cpb ==> (cp1b \/ cp2')
set_abs
returns a substitution that abstracts set values in the assertion
list_abs
returns a substitution that abstract list values in the assertion