Module Logic_const


module Logic_const: sig .. end
Smart constructors for the logic.
Consult the Plugin Development Guide for additional details.


Smart constructors for the logic.

Identification Numbers


val new_code_annotation : (Cil_types.term, Cil_types.predicate Cil_types.named,
Cil_types.identified_predicate, Cil_types.identified_term)
Cil_types.code_annot -> Cil_types.code_annotation
val fresh_code_annotation : unit -> int
val refresh_code_annotation : Cil_types.code_annotation -> Cil_types.code_annotation
val new_predicate : Cil_types.predicate Cil_types.named -> Cil_types.identified_predicate
val fresh_predicate_id : unit -> int
val pred_of_id_pred : Cil_types.identified_predicate -> Cil_types.predicate Cil_types.named
val new_identified_term : Cil_types.term -> Cil_types.identified_term
val fresh_term_id : unit -> int

Smart constructors



pre-defined logic labels


val pre_label : Cil_types.logic_label
val post_label : Cil_types.logic_label
val here_label : Cil_types.logic_label
val old_label : Cil_types.logic_label

Predicate constructors


val unamed : ?loc:Cil_types.location -> 'a -> 'a Cil_types.named
val ptrue : Cil_types.predicate Cil_types.named
val pfalse : Cil_types.predicate Cil_types.named
val pold : ?loc:Cil_types.location ->
Cil_types.predicate Cil_types.named -> Cil_types.predicate Cil_types.named
val papp : ?loc:Cil_types.location ->
Cil_types.logic_info * (Cil_types.logic_label * Cil_types.logic_label) list *
Cil_types.term list -> Cil_types.predicate Cil_types.named
val pand : ?loc:Cil_types.location ->
Cil_types.predicate Cil_types.named * Cil_types.predicate Cil_types.named ->
Cil_types.predicate Cil_types.named
val por : ?loc:Cil_types.location ->
Cil_types.predicate Cil_types.named * Cil_types.predicate Cil_types.named ->
Cil_types.predicate Cil_types.named
val pxor : ?loc:Cil_types.location ->
Cil_types.predicate Cil_types.named * Cil_types.predicate Cil_types.named ->
Cil_types.predicate Cil_types.named
val pnot : ?loc:Cil_types.location ->
Cil_types.predicate Cil_types.named -> Cil_types.predicate Cil_types.named
val pands : Cil_types.predicate Cil_types.named list ->
Cil_types.predicate Cil_types.named
val pors : Cil_types.predicate Cil_types.named list ->
Cil_types.predicate Cil_types.named
val plet : ?loc:Cil_types.location ->
(Cil_types.logic_info * Cil_types.predicate Cil_types.named) Cil_types.named ->
Cil_types.predicate Cil_types.named
val pimplies : ?loc:Cil_types.location ->
Cil_types.predicate Cil_types.named * Cil_types.predicate Cil_types.named ->
Cil_types.predicate Cil_types.named
val pif : ?loc:Cil_types.location ->
Cil_types.term * Cil_types.predicate Cil_types.named *
Cil_types.predicate Cil_types.named -> Cil_types.predicate Cil_types.named
val piff : ?loc:Cil_types.location ->
Cil_types.predicate Cil_types.named * Cil_types.predicate Cil_types.named ->
Cil_types.predicate Cil_types.named
val prel : ?loc:Cil_types.location ->
Cil_types.relation * Cil_types.term * Cil_types.term ->
Cil_types.predicate Cil_types.named
Consult the Plugin Development Guide for additional details.
val pforall : ?loc:Cil_types.location ->
Cil_types.quantifiers * Cil_types.predicate Cil_types.named ->
Cil_types.predicate Cil_types.named
val pexists : ?loc:Cil_types.location ->
Cil_types.quantifiers * Cil_types.predicate Cil_types.named ->
Cil_types.predicate Cil_types.named
val pfresh : ?loc:Cil_types.location ->
Cil_types.term -> Cil_types.predicate Cil_types.named
val pvalid : ?loc:Cil_types.location ->
Cil_types.term -> Cil_types.predicate Cil_types.named
val pat : ?loc:Cil_types.location ->
Cil_types.predicate Cil_types.named * Cil_types.logic_label ->
Cil_types.predicate Cil_types.named
val pvalid_index : ?loc:Cil_types.location ->
Cil_types.term * Cil_types.term -> Cil_types.predicate Cil_types.named
val pvalid_range : ?loc:Cil_types.location ->
Cil_types.term * Cil_types.term * Cil_types.term ->
Cil_types.predicate Cil_types.named
val psubtype : ?loc:Cil_types.location ->
Cil_types.term * Cil_types.term -> Cil_types.predicate Cil_types.named
val pseparated : ?loc:Cil_types.location ->
Cil_types.term list -> Cil_types.predicate Cil_types.named

Types


val set_conversion : Cil_types.logic_type -> Cil_types.logic_type -> Cil_types.logic_type
set_conversion ty1 ty2 returns a set type as soon as ty1 and/or ty2 is a set. Elements have type ty1, or the type of the elements of ty1 if it is itself a set-type ( we do not build set of sets that way).
val make_set_type : Cil_types.logic_type -> Cil_types.logic_type
converts a type into the corresponding set type if needed.
val type_of_element : Cil_types.logic_type -> Cil_types.logic_type
returns the type of elements of a set type.
Raises Failure if the input type is not a set type.
val plain_or_set : (Cil_types.logic_type -> 'a) -> Cil_types.logic_type -> 'a
plain_or_set f t applies f to t or to the type of elements of t if it is a set type
val is_plain_type : Cil_types.logic_type -> bool

Terms


val taddrof : ?loc:Lexing.position * Lexing.position ->
Cil_types.term_lval -> Cil_types.logic_type -> Cil_types.term
val term : ?loc:Lexing.position * Lexing.position ->
Cil_types.term_node -> Cil_types.logic_type -> Cil_types.term
Consult the Plugin Development Guide for additional details.
val trange : ?loc:Lexing.position * Lexing.position ->
Cil_types.term option * Cil_types.term option -> Cil_types.term
range of integers
val tinteger : ?loc:Lexing.position * Lexing.position -> int -> Cil_types.term
An integer constant (of type integer).
val tinteger_s64 : ?loc:Lexing.position * Lexing.position -> int64 -> Cil_types.term
An integer constant (of type integer) from an int64 .
val tat : ?loc:Lexing.position * Lexing.position ->
Cil_types.term * Cil_types.logic_label -> Cil_types.term
val tvar : ?loc:Lexing.position * Lexing.position ->
Cil_types.logic_var -> Cil_types.term
val tresult : ?loc:Lexing.position * Lexing.position -> Cil_types.typ -> Cil_types.term
val is_result : Cil_types.term -> bool
true if the given term is a lvalue denoting result or part of it