module Genarith:sig..end
val enabled : unit -> boolval args : (Arg.key * Arg.spec * Arg.doc) listtype ga_node
val new_node : Assertions.cform -> ga_nodeval put_edge_skip : ga_node -> ga_node -> unitn1 to n2val put_edge_implication : ga_node -> Exp.subst -> Pure.t -> ga_node -> unitn1 to n2val pp_function : Format.formatter -> string * ga_node -> unittypeeform =ga_node
typeeprop =eform list
val cform_of_eform : eform -> Assertions.cform
val eprop_of_cprop : Assertions.cprop -> epropval 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 listval map_eprop : (Exp.exp -> Exp.exp) -> eprop -> eprop
val naive_map_eprop : (Exp.exp -> Exp.exp) -> eprop -> eprop
val pp_eprop : Format.formatter -> eprop -> unittypeudom =Assertions.uform list * Assertions.uform list
uforms 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