module Conditions:sig
..end
Sequent
type
step = private {
|
mutable id : |
(* | See | *) |
|
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
List of steps
typesequent =
sequence * Lang.F.pred
val pretty : (Stdlib.Format.formatter -> sequent -> unit) Stdlib.ref
val step : ?descr:string ->
?stmt:Cil_types.stmt ->
?deps:Property.t list ->
?warn:Warning.Set.t -> condition -> step
val update_cond : ?descr:string ->
?deps:Property.t list ->
?warn:Warning.Set.t ->
step -> condition -> step
Updates the condition of a step and merges descr
, deps
and warn
val is_true : sequence -> bool
Only true or empty steps
val is_empty : sequence -> bool
No step at all
val vars_hyp : sequence -> Lang.F.Vars.t
val vars_seq : sequent -> Lang.F.Vars.t
val empty : sequence
val trivial : sequent
val sequence : step list -> sequence
val seq_branch : ?stmt:Cil_types.stmt ->
Lang.F.pred ->
sequence -> sequence -> sequence
val append : sequence -> sequence -> sequence
val concat : sequence list -> sequence
val iter : (step -> unit) -> sequence -> unit
Iterate only over the head steps of the sequence
val list : sequence -> step list
The internal list of steps
val size : sequence -> int
val steps : sequence -> int
Attributes unique indices to every step.id
in the sequence, starting from zero.
Returns the number of steps in the sequence.
val index : sequent -> unit
Compute steps' id of sequent left hand-side.
Same as ignore (steps (fst s))
.
val step_at : sequence -> int -> step
Retrieve a step by id
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 -> bool
val map_condition : (Lang.F.pred -> Lang.F.pred) -> condition -> condition
val map_step : (Lang.F.pred -> Lang.F.pred) -> step -> step
val map_sequence : (Lang.F.pred -> Lang.F.pred) -> sequence -> sequence
val map_sequent : (Lang.F.pred -> Lang.F.pred) -> sequent -> sequent
val insert : ?at:int -> step -> sequent -> sequent
Insert a step in the sequent immediately at
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 -> sequent
replace a step in the sequent, the one at
the specified position.
Invalid_argument
if the index is out of bounds.val subst : (Lang.F.term -> Lang.F.term) -> sequent -> sequent
Apply the atomic substitution recursively using Lang.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 -> sequent option
Performs existential, universal and hypotheses introductions
val introduction_eq : sequent -> sequent
Same as introduction
but returns the same sequent is None
val lemma : Lang.F.pred -> sequent
Performs existential, universal and hypotheses introductions
val head : step -> Lang.F.pred
Predicate for Have and such, Condition for Branch, True for Either
val have : step -> Lang.F.pred
Predicate for Have and such, True for any other
val condition : sequence -> Lang.F.pred
With free variables kept.
val close : sequent -> Lang.F.pred
With free variables quantified.
val at_closure : (sequent -> sequent) -> unit
register a transformation applied just before close
Bundles are mergeable pre-sequences. This the key structure for merging hypotheses with linear complexity during backward weakest pre-condition calculus.
type
bundle
type'a
attributed =?descr:string ->
?stmt:Cil_types.stmt -> ?deps:Property.t list -> ?warn:Warning.Set.t -> 'a
val nil : bundle
val occurs : Lang.F.var -> bundle -> bool
val intersect : Lang.F.pred -> bundle -> bool
val merge : bundle list -> bundle
val domain : Lang.F.pred list -> bundle -> bundle
val intros : Lang.F.pred list -> bundle -> bundle
val state : ?descr:string ->
?stmt:Cil_types.stmt ->
Mstate.state -> bundle -> bundle
val assume : (?init:bool -> Lang.F.pred -> bundle -> bundle)
attributed
val branch : (Lang.F.pred -> bundle -> bundle -> bundle)
attributed
val either : (bundle list -> bundle) attributed
val extract : bundle -> Lang.F.pred list
val bundle : bundle -> sequence
val clean : sequent -> sequent
val filter : sequent -> sequent
val parasite : sequent -> sequent
val simplify : ?solvers:Lang.simplifier list ->
?intros:int -> sequent -> sequent
val pruning : ?solvers:Lang.simplifier list -> sequent -> sequent