module Conditions:sig..end
type step = private {
|
mutable id : |
(* |
See
index | *) |
|
size : |
|||
|
vars : |
|||
|
stmt : |
|||
|
descr : |
|||
|
deps : |
|||
|
warn : |
|||
|
condition : |
type condition =
| |
Type of |
| |
Have of |
| |
When of |
| |
Core of |
| |
Init of |
| |
Branch of |
| |
Either of |
| |
State of |
type sequence
typesequent =sequence * Wp.Lang.F.pred
val step : ?descr:string ->
?stmt:Cil_types.stmt ->
?deps:Property.t list ->
?warn:Wp.Warning.Set.t -> condition -> step
val update_cond : ?descr:string ->
?deps:Property.t list ->
?warn:Wp.Warning.Set.t ->
step -> condition -> stepdescr, deps and warnval is_true : sequence -> boolval is_empty : sequence -> boolval vars_hyp : sequence -> Wp.Lang.F.Vars.t
val vars_seq : sequent -> Wp.Lang.F.Vars.t
val empty : sequence
val sequence : step list -> sequence
val seq_branch : ?stmt:Cil_types.stmt ->
Wp.Lang.F.pred ->
sequence -> sequence -> sequence
val append : sequence -> sequence -> sequence
val concat : sequence list -> sequence
val iter : (step -> unit) -> sequence -> unitval list : sequence -> step listval size : sequence -> int
val steps : sequence -> intstep.id in the sequence, starting from zero.
Returns the number of steps in the sequence.val index : sequent -> unitignore (steps (fst s)).val step_at : sequence -> int -> stepid in the sequence.
The index function must have been called on the sequence before
retrieving the index properly.Not_found if the index is out of bounds.val is_trivial : sequent -> boolval map_condition : (Wp.Lang.F.pred -> Wp.Lang.F.pred) ->
condition -> condition
val map_step : (Wp.Lang.F.pred -> Wp.Lang.F.pred) ->
step -> step
val map_sequence : (Wp.Lang.F.pred -> Wp.Lang.F.pred) ->
sequence -> sequence
val map_sequent : (Wp.Lang.F.pred -> Wp.Lang.F.pred) ->
sequent -> sequent
val insert : ?at:int ->
step -> sequent -> sequentat the specified position.
Parameter at can be size to insert at the end of the sequent (default).Invalid_argument if the index is out of bounds.val replace : at:int ->
step -> sequent -> sequentat the specified position.Invalid_argument if the index is out of bounds.val subst : (Wp.Lang.F.term -> Wp.Lang.F.term) ->
sequent -> sequentLang.F.p_subst f.
Function f should only transform the head of the predicate, and can assume
its sub-terms have been already substituted. The atomic substitution is also applied
to predicates.val introduction : sequent -> sequentval lemma : Wp.Lang.F.pred -> sequentval head : step -> Wp.Lang.F.predval have : step -> Wp.Lang.F.predval condition : sequence -> Wp.Lang.F.predval close : sequent -> Wp.Lang.F.predval at_closure : (sequent -> sequent) -> unit
Bundles are mergeable pre-sequences.
This the key structure for merging hypotheses with linear complexity
during backward weakest pre-condition calculus.
type bundle
type'aattributed =?descr:string ->
?stmt:Cil_types.stmt -> ?deps:Property.t list -> ?warn:Wp.Warning.Set.t -> 'a
val nil : bundle
val occurs : Wp.Lang.F.var -> bundle -> bool
val intersect : Wp.Lang.F.pred -> bundle -> bool
val merge : bundle list -> bundle
val domain : Wp.Lang.F.pred list -> bundle -> bundle
val intros : Wp.Lang.F.pred list -> bundle -> bundle
val state : ?descr:string ->
?stmt:Cil_types.stmt ->
Wp.Mstate.state -> bundle -> bundle
val assume : (?init:bool -> Wp.Lang.F.pred -> bundle -> bundle)
attributed
val branch : (Wp.Lang.F.pred ->
bundle -> bundle -> bundle)
attributed
val either : (bundle list -> bundle) attributed
val extract : bundle -> Wp.Lang.F.pred list
val bundle : bundle -> sequenceexception Contradiction
class type simplifier =object..end
val clean : sequent -> sequent
val filter : sequent -> sequent
val letify : ?solvers:simplifier list ->
?intros:int -> sequent -> sequent
val pruning : ?solvers:simplifier list ->
sequent -> sequent