functor (D : Mdata.S) ->
functor
(A : sig
module D :
sig
module F :
sig
type 'a term = 'a D.F.term
type pred = D.F.pred
val e_int : int -> Formula.integer term
val e_call :
string ->
Formula.abstract term list -> Formula.abstract term
val p_call : string -> Formula.abstract term list -> pred
val wrap : 'a term -> Formula.abstract term
val unwrap : Formula.abstract term -> 'a term
val e_true : Formula.boolean term
val e_false : Formula.boolean term
val e_int : int -> Formula.integer term
val e_float : float -> Formula.real term
val e_icst : string -> Formula.integer term
val e_rcst : string -> Formula.real term
val e_int64 : int64 -> Formula.integer term
val e_ineg : Formula.integer term -> Formula.integer term
val e_rneg : Formula.real term -> Formula.real term
val e_iop :
Formula.integer_op ->
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rop :
Formula.real_op ->
Formula.real term ->
Formula.real term -> Formula.real term
val e_icmp :
Formula.cmp_op ->
Formula.integer term ->
Formula.integer term -> Formula.boolean term
val e_rcmp :
Formula.cmp_op ->
Formula.real term ->
Formula.real term -> Formula.boolean term
val p_icmp :
Formula.cmp_op ->
Formula.integer term -> Formula.integer term -> pred
val p_rcmp :
Formula.cmp_op ->
Formula.real term -> Formula.real term -> pred
val e_bnot : Formula.integer term -> Formula.integer term
val e_band :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bxor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_lshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val integer_of_real :
Formula.real term -> Formula.integer term
val real_of_integer :
Formula.integer term -> Formula.real term
val e_bool : Formula.boolean term -> Formula.integer term
val e_not : Formula.boolean term -> Formula.boolean term
val e_and :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_or :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_cond :
Formula.boolean term -> 'a term -> 'a term -> 'a term
val p_cond : Formula.boolean term -> pred -> pred -> pred
val p_true : pred
val p_false : pred
val p_bool : Formula.boolean term -> pred
val p_and : pred -> pred -> pred
val p_or : pred -> pred -> pred
val p_xor : pred -> pred -> pred
val p_not : pred -> pred
val p_implies : pred -> pred -> pred
val p_iff : pred -> pred -> pred
val p_eq : 'a term -> 'a term -> pred
val p_neq : 'a term -> 'a term -> pred
val p_conj : pred list -> pred
val p_disj : pred list -> pred
val p_named : string -> pred -> pred
val is_true : pred -> bool
val is_false : pred -> bool
val huge_term : int -> 'a term -> bool
val huge_pred : int -> pred -> bool
type var = D.F.var
type pool = D.F.pool
val pool : unit -> pool
val fresh : pool -> string -> Formula.kind -> var
val freshen : pool -> var -> var
val var : var -> 'a term
val eq_var : var -> var -> bool
val name_of_var : var -> string
val tau_of_var : var -> Formula.tau
val kind_of_var : var -> Formula.kind
val term_has_var : var list -> 'a term -> bool
val pred_has_var : var list -> pred -> bool
val term_closed : 'a term -> bool
val pred_closed : pred -> bool
val p_forall : var list -> pred -> pred
val p_exists : var list -> pred -> pred
val p_subst :
(var -> var option) -> var -> 'a term -> pred -> pred
val e_subst :
(var -> var option) ->
var -> 'a term -> 'b term -> 'b term
val e_rename : (var * var) list -> 'a term -> 'a term
val equal_terms : 'a term -> 'a term -> bool
type alpha = D.F.alpha
val empty_alpha : alpha
val fold_alpha :
(var -> var -> 'a -> 'a) -> alpha -> 'a -> 'a
val p_more_alpha_cv : alpha -> pred -> alpha * pred
val p_alpha_cv : pred -> var list * pred
val pp_var : Format.formatter -> var -> unit
val pp_term : Format.formatter -> 'a term -> unit
val pp_pred : Format.formatter -> pred -> unit
val pp_decl :
Format.formatter -> pred Formula.declaration -> unit
val pp_goal : Format.formatter -> string -> pred -> unit
end
type format = Formula.m_format F.term
type abstract = Formula.abstract F.term
type integer = Formula.integer F.term
type real = Formula.real F.term
type boolean = Formula.boolean F.term
type record = Formula.m_array F.term
type urecord = Formula.m_array F.term
type array = Formula.m_array F.term
type set = Formula.m_set F.term
type name = Formula.integer F.term
type pointer = Formula.m_pointer F.term
val pp_kind : Format.formatter -> Mdata.kind -> unit
type interval =
D.interval = {
inf : integer option;
sup : integer option;
}
type 'a assigned =
'a D.assigned =
Aloc of Ctypes.c_object * 'a
| Arange of Ctypes.c_object * 'a * interval
val pp_interval : Format.formatter -> interval -> unit
val e_app0 : string -> 'a F.term
val e_app1 : string -> 'a F.term -> 'b F.term
val e_app2 : string -> 'a F.term -> 'b F.term -> 'c F.term
val e_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> 'd F.term
val e_app4 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term
val e_app5 :
string ->
'a F.term ->
'b F.term ->
'c F.term -> 'd F.term -> 'e F.term -> 'f F.term
val p_app0 : string -> F.pred
val p_app1 : string -> 'a F.term -> F.pred
val p_app2 : string -> 'a F.term -> 'b F.term -> F.pred
val p_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> F.pred
val p_app4 :
string ->
'a F.term -> 'b F.term -> 'c F.term -> 'd F.term -> F.pred
val p_app5 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term -> F.pred
val tau_of_logic_type : Cil_types.logic_type -> Formula.tau
type context = D.context
type bindings = D.bindings
class type hint =
object
method capture : F.var list -> unit
method has_var : F.var list -> bool
method pretty : Format.formatter -> unit
method subst : F.var -> Formula.abstract F.term -> unit
end
val closed : bindings
val close : bindings -> F.pred -> F.pred
val capture : hint list -> bindings -> unit
val push :
string -> F.pool -> bindings -> hint list -> context
val pop : string -> context -> bindings
val kill : string -> context -> unit
val flush : string -> context -> F.pred -> F.pred
val term_such_that :
Formula.tau -> ('a F.term -> F.pred) -> 'a F.term
val forall : F.var list -> F.pred -> F.pred
val exists : F.var list -> F.pred -> F.pred
val subst : F.var -> 'a F.term -> F.pred -> F.pred
val fresh : string -> Mdata.vkind -> F.var
val alpha : F.var -> F.var option
val pool : unit -> F.pool
val vkind_of_var : F.var -> Mdata.vkind
val has_vars : F.var list -> F.pred -> bool
type substitution = D.substitution
val apply : substitution -> 'a F.term -> 'a F.term
type havoc =
D.havoc =
Fresh of F.var
| Update of F.var *
(substitution -> Formula.abstract F.term)
val havoc_static : havoc list -> F.pred -> F.pred
val havoc_inductive : havoc list -> F.pred -> F.pred
val clear : unit -> unit
val on_clear : (unit -> unit) -> unit
val fresh_name : string -> string -> string
val add_declaration : F.pred Formula.declaration -> unit
val iter :
Formula.section ->
(F.pred Formula.declaration -> unit) -> unit
val iter_all : (F.pred Formula.declaration -> unit) -> unit
val dummy : unit -> F.pred
module type Identifiable =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Registry =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module type Declarator =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
val clear : unit -> unit
val section : Formula.section
val declare : t -> string -> F.pred Formula.item
end
module Register :
functor (D : Declarator) ->
sig
type t = D.t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module Varinfo :
sig
type t = Cil_types.varinfo
module H :
sig
type key = D.Varinfo.H.key
type 'a t = 'a D.Varinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Varaddr :
sig
type t = Cil_types.varinfo
module H :
sig
type key = D.Varaddr.H.key
type 'a t = 'a D.Varaddr.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Fieldinfo :
sig
type t = Cil_types.fieldinfo
module H :
sig
type key = D.Fieldinfo.H.key
type 'a t = 'a D.Fieldinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Compinfo :
sig
type t = Cil_types.compinfo
module H :
sig
type key = D.Compinfo.H.key
type 'a t = 'a D.Compinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Arrayinfo :
sig
type t = Ctypes.arrayinfo
module H :
sig
type key = D.Arrayinfo.H.key
type 'a t = 'a D.Arrayinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Logicvar :
sig
type t = Cil_types.logic_var
module H :
sig
type key = D.Logicvar.H.key
type 'a t = 'a D.Logicvar.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Indexed =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Dindex :
functor (I : Identifiable) ->
sig
type t = I.t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Findex :
sig
type t = Cil_types.fieldinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Xindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Aindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Tindex :
sig
type t = Cil_types.compinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
val modulo : Ctypes.c_int -> integer -> integer
val guard : Ctypes.c_int -> integer -> F.pred
val i_convert :
Ctypes.c_int -> Ctypes.c_int -> integer -> integer
val round : Ctypes.c_float -> real -> real
val f_guard : Ctypes.c_float -> real -> F.pred
val f_convert :
Ctypes.c_float -> Ctypes.c_float -> real -> real
val has_type : abstract -> Cil_types.logic_type -> F.pred
val get_range_index : array -> interval -> abstract
val set_range_index : array -> interval -> array
val empty : set
val singleton : abstract -> set
val union : set -> set -> set
val unions : set list -> set
val inter : set -> set -> set
val remove : set -> set -> set
val set_of_list : abstract list -> set
val add_set : set -> set -> set
val mult_set : set -> set -> set
val neg_set : set -> set
val interval : interval -> set
val equal_pointer_bool : pointer -> pointer -> boolean
val lt_pointer_bool : pointer -> pointer -> boolean
val le_pointer_bool : pointer -> pointer -> boolean
val lt_pointer : pointer -> pointer -> F.pred
val le_pointer : pointer -> pointer -> F.pred
val minus_pointer : pointer -> pointer -> integer
val is_null : pointer -> boolean
val null : pointer
val tau_of_object : Ctypes.c_object -> Formula.tau
val tau_of_ctype : Cil_types.typ -> Formula.tau
val int_format : format
val real_format : format
val pointer_format : format
val record_format : format
val urecord_format : format
val array_format : format -> format
val format_of_object : Ctypes.c_object -> format
val decode : format -> abstract -> 'a F.term
val encode : format -> 'a F.term -> abstract
val acc_field : record -> Cil_types.fieldinfo -> abstract
val upd_field :
record -> Cil_types.fieldinfo -> abstract -> record
val acc_index : array -> integer -> abstract
val upd_index : array -> integer -> abstract -> array
val equal : Ctypes.c_object -> abstract -> abstract -> F.pred
val eq_array : Ctypes.arrayinfo -> array -> array -> F.pred
val eq_record :
Cil_types.compinfo -> record -> record -> F.pred
end
val i_neg : Ctypes.c_int -> D.integer -> D.integer
val i_op :
Ctypes.c_int ->
Formula.integer_op -> D.integer -> D.integer -> D.integer
val i_cmp :
Ctypes.c_int ->
Formula.cmp_op -> D.integer -> D.integer -> D.boolean
val bits_not : Ctypes.c_int -> D.integer -> D.integer
val bits_and : Ctypes.c_int -> D.integer -> D.integer -> D.integer
val bits_or : Ctypes.c_int -> D.integer -> D.integer -> D.integer
val bits_xor : Ctypes.c_int -> D.integer -> D.integer -> D.integer
val bits_lshift :
Ctypes.c_int -> D.integer -> D.integer -> D.integer
val bits_rshift :
Ctypes.c_int -> D.integer -> D.integer -> D.integer
end) ->
functor
(R : sig
module D :
sig
module F :
sig
type 'a term = 'a D.F.term
type pred = D.F.pred
val e_int : int -> Formula.integer term
val e_call :
string ->
Formula.abstract term list -> Formula.abstract term
val p_call :
string -> Formula.abstract term list -> pred
val wrap : 'a term -> Formula.abstract term
val unwrap : Formula.abstract term -> 'a term
val e_true : Formula.boolean term
val e_false : Formula.boolean term
val e_int : int -> Formula.integer term
val e_float : float -> Formula.real term
val e_icst : string -> Formula.integer term
val e_rcst : string -> Formula.real term
val e_int64 : int64 -> Formula.integer term
val e_ineg :
Formula.integer term -> Formula.integer term
val e_rneg : Formula.real term -> Formula.real term
val e_iop :
Formula.integer_op ->
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rop :
Formula.real_op ->
Formula.real term ->
Formula.real term -> Formula.real term
val e_icmp :
Formula.cmp_op ->
Formula.integer term ->
Formula.integer term -> Formula.boolean term
val e_rcmp :
Formula.cmp_op ->
Formula.real term ->
Formula.real term -> Formula.boolean term
val p_icmp :
Formula.cmp_op ->
Formula.integer term -> Formula.integer term -> pred
val p_rcmp :
Formula.cmp_op ->
Formula.real term -> Formula.real term -> pred
val e_bnot :
Formula.integer term -> Formula.integer term
val e_band :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bxor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_lshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val integer_of_real :
Formula.real term -> Formula.integer term
val real_of_integer :
Formula.integer term -> Formula.real term
val e_bool :
Formula.boolean term -> Formula.integer term
val e_not : Formula.boolean term -> Formula.boolean term
val e_and :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_or :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_cond :
Formula.boolean term -> 'a term -> 'a term -> 'a term
val p_cond :
Formula.boolean term -> pred -> pred -> pred
val p_true : pred
val p_false : pred
val p_bool : Formula.boolean term -> pred
val p_and : pred -> pred -> pred
val p_or : pred -> pred -> pred
val p_xor : pred -> pred -> pred
val p_not : pred -> pred
val p_implies : pred -> pred -> pred
val p_iff : pred -> pred -> pred
val p_eq : 'a term -> 'a term -> pred
val p_neq : 'a term -> 'a term -> pred
val p_conj : pred list -> pred
val p_disj : pred list -> pred
val p_named : string -> pred -> pred
val is_true : pred -> bool
val is_false : pred -> bool
val huge_term : int -> 'a term -> bool
val huge_pred : int -> pred -> bool
type var = D.F.var
type pool = D.F.pool
val pool : unit -> pool
val fresh : pool -> string -> Formula.kind -> var
val freshen : pool -> var -> var
val var : var -> 'a term
val eq_var : var -> var -> bool
val name_of_var : var -> string
val tau_of_var : var -> Formula.tau
val kind_of_var : var -> Formula.kind
val term_has_var : var list -> 'a term -> bool
val pred_has_var : var list -> pred -> bool
val term_closed : 'a term -> bool
val pred_closed : pred -> bool
val p_forall : var list -> pred -> pred
val p_exists : var list -> pred -> pred
val p_subst :
(var -> var option) -> var -> 'a term -> pred -> pred
val e_subst :
(var -> var option) ->
var -> 'a term -> 'b term -> 'b term
val e_rename : (var * var) list -> 'a term -> 'a term
val equal_terms : 'a term -> 'a term -> bool
type alpha = D.F.alpha
val empty_alpha : alpha
val fold_alpha :
(var -> var -> 'a -> 'a) -> alpha -> 'a -> 'a
val p_more_alpha_cv : alpha -> pred -> alpha * pred
val p_alpha_cv : pred -> var list * pred
val pp_var : Format.formatter -> var -> unit
val pp_term : Format.formatter -> 'a term -> unit
val pp_pred : Format.formatter -> pred -> unit
val pp_decl :
Format.formatter -> pred Formula.declaration -> unit
val pp_goal : Format.formatter -> string -> pred -> unit
end
type format = Formula.m_format F.term
type abstract = Formula.abstract F.term
type integer = Formula.integer F.term
type real = Formula.real F.term
type boolean = Formula.boolean F.term
type record = Formula.m_array F.term
type urecord = Formula.m_array F.term
type array = Formula.m_array F.term
type set = Formula.m_set F.term
type name = Formula.integer F.term
type pointer = Formula.m_pointer F.term
val pp_kind : Format.formatter -> Mdata.kind -> unit
type interval =
D.interval = {
inf : integer option;
sup : integer option;
}
type 'a assigned =
'a D.assigned =
Aloc of Ctypes.c_object * 'a
| Arange of Ctypes.c_object * 'a * interval
val pp_interval : Format.formatter -> interval -> unit
val e_app0 : string -> 'a F.term
val e_app1 : string -> 'a F.term -> 'b F.term
val e_app2 : string -> 'a F.term -> 'b F.term -> 'c F.term
val e_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> 'd F.term
val e_app4 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term
val e_app5 :
string ->
'a F.term ->
'b F.term ->
'c F.term -> 'd F.term -> 'e F.term -> 'f F.term
val p_app0 : string -> F.pred
val p_app1 : string -> 'a F.term -> F.pred
val p_app2 : string -> 'a F.term -> 'b F.term -> F.pred
val p_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> F.pred
val p_app4 :
string ->
'a F.term -> 'b F.term -> 'c F.term -> 'd F.term -> F.pred
val p_app5 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term -> F.pred
val tau_of_logic_type : Cil_types.logic_type -> Formula.tau
type context = D.context
type bindings = D.bindings
class type hint =
object
method capture : F.var list -> unit
method has_var : F.var list -> bool
method pretty : Format.formatter -> unit
method subst : F.var -> Formula.abstract F.term -> unit
end
val closed : bindings
val close : bindings -> F.pred -> F.pred
val capture : hint list -> bindings -> unit
val push :
string -> F.pool -> bindings -> hint list -> context
val pop : string -> context -> bindings
val kill : string -> context -> unit
val flush : string -> context -> F.pred -> F.pred
val term_such_that :
Formula.tau -> ('a F.term -> F.pred) -> 'a F.term
val forall : F.var list -> F.pred -> F.pred
val exists : F.var list -> F.pred -> F.pred
val subst : F.var -> 'a F.term -> F.pred -> F.pred
val fresh : string -> Mdata.vkind -> F.var
val alpha : F.var -> F.var option
val pool : unit -> F.pool
val vkind_of_var : F.var -> Mdata.vkind
val has_vars : F.var list -> F.pred -> bool
type substitution = D.substitution
val apply : substitution -> 'a F.term -> 'a F.term
type havoc =
D.havoc =
Fresh of F.var
| Update of F.var *
(substitution -> Formula.abstract F.term)
val havoc_static : havoc list -> F.pred -> F.pred
val havoc_inductive : havoc list -> F.pred -> F.pred
val clear : unit -> unit
val on_clear : (unit -> unit) -> unit
val fresh_name : string -> string -> string
val add_declaration : F.pred Formula.declaration -> unit
val iter :
Formula.section ->
(F.pred Formula.declaration -> unit) -> unit
val iter_all : (F.pred Formula.declaration -> unit) -> unit
val dummy : unit -> F.pred
module type Identifiable =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Registry =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module type Declarator =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
val clear : unit -> unit
val section : Formula.section
val declare : t -> string -> F.pred Formula.item
end
module Register :
functor (D : Declarator) ->
sig
type t = D.t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module Varinfo :
sig
type t = Cil_types.varinfo
module H :
sig
type key = D.Varinfo.H.key
type 'a t = 'a D.Varinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Varaddr :
sig
type t = Cil_types.varinfo
module H :
sig
type key = D.Varaddr.H.key
type 'a t = 'a D.Varaddr.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Fieldinfo :
sig
type t = Cil_types.fieldinfo
module H :
sig
type key = D.Fieldinfo.H.key
type 'a t = 'a D.Fieldinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Compinfo :
sig
type t = Cil_types.compinfo
module H :
sig
type key = D.Compinfo.H.key
type 'a t = 'a D.Compinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Arrayinfo :
sig
type t = Ctypes.arrayinfo
module H :
sig
type key = D.Arrayinfo.H.key
type 'a t = 'a D.Arrayinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Logicvar :
sig
type t = Cil_types.logic_var
module H :
sig
type key = D.Logicvar.H.key
type 'a t = 'a D.Logicvar.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Indexed =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Dindex :
functor (I : Identifiable) ->
sig
type t = I.t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Findex :
sig
type t = Cil_types.fieldinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Xindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Aindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Tindex :
sig
type t = Cil_types.compinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
val modulo : Ctypes.c_int -> integer -> integer
val guard : Ctypes.c_int -> integer -> F.pred
val i_convert :
Ctypes.c_int -> Ctypes.c_int -> integer -> integer
val round : Ctypes.c_float -> real -> real
val f_guard : Ctypes.c_float -> real -> F.pred
val f_convert :
Ctypes.c_float -> Ctypes.c_float -> real -> real
val has_type : abstract -> Cil_types.logic_type -> F.pred
val get_range_index : array -> interval -> abstract
val set_range_index : array -> interval -> array
val empty : set
val singleton : abstract -> set
val union : set -> set -> set
val unions : set list -> set
val inter : set -> set -> set
val remove : set -> set -> set
val set_of_list : abstract list -> set
val add_set : set -> set -> set
val mult_set : set -> set -> set
val neg_set : set -> set
val interval : interval -> set
val equal_pointer_bool : pointer -> pointer -> boolean
val lt_pointer_bool : pointer -> pointer -> boolean
val le_pointer_bool : pointer -> pointer -> boolean
val lt_pointer : pointer -> pointer -> F.pred
val le_pointer : pointer -> pointer -> F.pred
val minus_pointer : pointer -> pointer -> integer
val is_null : pointer -> boolean
val null : pointer
val tau_of_object : Ctypes.c_object -> Formula.tau
val tau_of_ctype : Cil_types.typ -> Formula.tau
val int_format : format
val real_format : format
val pointer_format : format
val record_format : format
val urecord_format : format
val array_format : format -> format
val format_of_object : Ctypes.c_object -> format
val decode : format -> abstract -> 'a F.term
val encode : format -> 'a F.term -> abstract
val acc_field : record -> Cil_types.fieldinfo -> abstract
val upd_field :
record -> Cil_types.fieldinfo -> abstract -> record
val acc_index : array -> integer -> abstract
val upd_index : array -> integer -> abstract -> array
val equal :
Ctypes.c_object -> abstract -> abstract -> F.pred
val eq_array : Ctypes.arrayinfo -> array -> array -> F.pred
val eq_record :
Cil_types.compinfo -> record -> record -> F.pred
end
val f_neg : Ctypes.c_float -> D.real -> D.real
val f_op :
Ctypes.c_float ->
Formula.real_op -> D.real -> D.real -> D.real
val f_cmp :
Ctypes.c_float ->
Formula.cmp_op -> D.real -> D.real -> D.boolean
end) ->
sig
module F :
sig
type 'a term = 'a D.F.term
type pred = D.F.pred
val e_int : int -> Formula.integer term
val e_call :
string -> Formula.abstract term list -> Formula.abstract term
val p_call : string -> Formula.abstract term list -> pred
val wrap : 'a term -> Formula.abstract term
val unwrap : Formula.abstract term -> 'a term
val e_true : Formula.boolean term
val e_false : Formula.boolean term
val e_int : int -> Formula.integer term
val e_float : float -> Formula.real term
val e_icst : string -> Formula.integer term
val e_rcst : string -> Formula.real term
val e_int64 : int64 -> Formula.integer term
val e_ineg : Formula.integer term -> Formula.integer term
val e_rneg : Formula.real term -> Formula.real term
val e_iop :
Formula.integer_op ->
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rop :
Formula.real_op ->
Formula.real term -> Formula.real term -> Formula.real term
val e_icmp :
Formula.cmp_op ->
Formula.integer term ->
Formula.integer term -> Formula.boolean term
val e_rcmp :
Formula.cmp_op ->
Formula.real term -> Formula.real term -> Formula.boolean term
val p_icmp :
Formula.cmp_op ->
Formula.integer term -> Formula.integer term -> pred
val p_rcmp :
Formula.cmp_op ->
Formula.real term -> Formula.real term -> pred
val e_bnot : Formula.integer term -> Formula.integer term
val e_band :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bxor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_lshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val integer_of_real : Formula.real term -> Formula.integer term
val real_of_integer : Formula.integer term -> Formula.real term
val e_bool : Formula.boolean term -> Formula.integer term
val e_not : Formula.boolean term -> Formula.boolean term
val e_and :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_or :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_cond :
Formula.boolean term -> 'a term -> 'a term -> 'a term
val p_cond : Formula.boolean term -> pred -> pred -> pred
val p_true : pred
val p_false : pred
val p_bool : Formula.boolean term -> pred
val p_and : pred -> pred -> pred
val p_or : pred -> pred -> pred
val p_xor : pred -> pred -> pred
val p_not : pred -> pred
val p_implies : pred -> pred -> pred
val p_iff : pred -> pred -> pred
val p_eq : 'a term -> 'a term -> pred
val p_neq : 'a term -> 'a term -> pred
val p_conj : pred list -> pred
val p_disj : pred list -> pred
val p_named : string -> pred -> pred
val is_true : pred -> bool
val is_false : pred -> bool
val huge_term : int -> 'a term -> bool
val huge_pred : int -> pred -> bool
type var = D.F.var
type pool = D.F.pool
val pool : unit -> pool
val fresh : pool -> string -> Formula.kind -> var
val freshen : pool -> var -> var
val var : var -> 'a term
val eq_var : var -> var -> bool
val name_of_var : var -> string
val tau_of_var : var -> Formula.tau
val kind_of_var : var -> Formula.kind
val term_has_var : var list -> 'a term -> bool
val pred_has_var : var list -> pred -> bool
val term_closed : 'a term -> bool
val pred_closed : pred -> bool
val p_forall : var list -> pred -> pred
val p_exists : var list -> pred -> pred
val p_subst :
(var -> var option) -> var -> 'a term -> pred -> pred
val e_subst :
(var -> var option) -> var -> 'a term -> 'b term -> 'b term
val e_rename : (var * var) list -> 'a term -> 'a term
val equal_terms : 'a term -> 'a term -> bool
type alpha = D.F.alpha
val empty_alpha : alpha
val fold_alpha : (var -> var -> 'a -> 'a) -> alpha -> 'a -> 'a
val p_more_alpha_cv : alpha -> pred -> alpha * pred
val p_alpha_cv : pred -> var list * pred
val pp_var : Format.formatter -> var -> unit
val pp_term : Format.formatter -> 'a term -> unit
val pp_pred : Format.formatter -> pred -> unit
val pp_decl :
Format.formatter -> pred Formula.declaration -> unit
val pp_goal : Format.formatter -> string -> pred -> unit
end
type m_mbits
val t_mbits : Formula.tau
type mem_bits = Runtime_mem.Create.m_mbits Runtime_mem.Create.F.term
type m_alloc
val t_alloc : Formula.tau
type mem_alloc = Runtime_mem.Create.m_alloc Runtime_mem.Create.F.term
type m_mem
val t_mem : Formula.tau
type memory = {
vbits : Runtime_mem.Create.F.var;
valloc : Runtime_mem.Create.F.var;
}
type mem =
Runtime_mem.Create.memory *
Runtime_mem.Create.F.var Cil_datatype.Varinfo.Hashtbl.t option
val vbits_of_mem :
Runtime_mem.Create.memory * 'a -> Runtime_mem.Create.F.var
val valloc_of_mem :
Runtime_mem.Create.memory * 'a -> Runtime_mem.Create.F.var
val logic_of_mem : 'a * 'b -> 'b
val mbits_of_mem :
Runtime_mem.Create.memory * 'a -> Runtime_mem.Create.mem_bits
val malloc_of_mem :
Runtime_mem.Create.memory * 'a -> Runtime_mem.Create.mem_alloc
val tcomp_of_comp : Cil_types.compinfo -> Cil_types.typ
val cil_field_info : Cil_types.fieldinfo -> int * int
val cil_field_offset : Cil_types.fieldinfo -> int
val cil_field_size : Cil_types.fieldinfo -> int
val name_of_var : D.Xindex.t -> D.name
val name_of_field : D.Findex.t -> D.integer
val format_of_c_int_type : Ctypes.c_int -> D.format
val format_of_c_float_type : Ctypes.c_float -> D.format
val format_of_addr : 'a -> 'b D.F.term
val compute_int_mode : Runtime_mem.compute_int_mode
type 'a tint = D.integer
module Aint :
sig
type 'a t
val of_int : int -> 'a Runtime_mem.Create.??.t
val of_int64 : Int64.t -> 'a Runtime_mem.Create.??.t
val of_term :
'a Runtime_mem.Create.tint -> 'a Runtime_mem.Create.??.t
val add :
'a Runtime_mem.Create.??.t ->
'b Runtime_mem.Create.??.t -> 'a Runtime_mem.Create.??.t
val sub :
'a Runtime_mem.Create.??.t ->
'b Runtime_mem.Create.??.t -> 'a Runtime_mem.Create.??.t
val cnst_mult :
Int64.t ->
'a Runtime_mem.Create.??.t -> 'a Runtime_mem.Create.??.t
val mult :
'a Runtime_mem.Create.??.t ->
'b Runtime_mem.Create.??.t -> 'b Runtime_mem.Create.??.t
val to_term :
'a Runtime_mem.Create.??.t -> 'a Runtime_mem.Create.tint
val eq_pred :
'a Runtime_mem.Create.??.t ->
'a Runtime_mem.Create.??.t -> Runtime_mem.Create.F.pred
end
type m_addr
type m_offset
type m_size
type m_zone
type t_addr = Runtime_mem.Create.m_addr Runtime_mem.Create.tint
type t_offset = Runtime_mem.Create.m_offset Runtime_mem.Create.tint
type t_size = Runtime_mem.Create.m_size Runtime_mem.Create.tint
type t_zone = Runtime_mem.Create.m_zone Runtime_mem.Create.F.term
module Tint :
sig
type x_addr
val xaddr_of_var :
Runtime_mem.Create.mem_alloc ->
Cil_types.varinfo -> Runtime_mem.Create.??.x_addr
val xaddr_of_gvar :
Cil_types.varinfo -> Runtime_mem.Create.??.x_addr
val xaddr_of_integer : D.integer -> Runtime_mem.Create.??.x_addr
val integer_of_xaddr : Runtime_mem.Create.??.x_addr -> D.integer
val pointer_of_xaddr : Runtime_mem.Create.??.x_addr -> D.pointer
val varinfo_of_xaddr :
Runtime_mem.Create.??.x_addr -> Cil_types.varinfo option
val xaddr_of_pointer : D.pointer -> Runtime_mem.Create.??.x_addr
val pp_addr :
Format.formatter -> Runtime_mem.Create.??.x_addr -> unit
val base :
Runtime_mem.Create.mem_alloc ->
Runtime_mem.Create.??.x_addr -> Runtime_mem.Create.??.x_addr
val term_of_xaddr :
Runtime_mem.Create.??.x_addr -> Runtime_mem.Create.t_addr
type x_size
val size_of_int : int -> Runtime_mem.Create.??.x_size
val size_of_int64 : Int64.t -> Runtime_mem.Create.??.x_size
val cnst_mult_size :
Int64.t ->
Runtime_mem.Create.??.x_size -> Runtime_mem.Create.??.x_size
val xsize_of_range :
D.integer ->
D.integer ->
Runtime_mem.Create.??.x_size -> Runtime_mem.Create.??.x_size
val term_of_xsize :
Runtime_mem.Create.??.x_size -> Runtime_mem.Create.t_size
val shift_n_elem :
Runtime_mem.Create.??.x_addr ->
D.integer ->
Runtime_mem.Create.??.x_size -> Runtime_mem.Create.??.x_addr
val shift_field :
Runtime_mem.Create.??.x_addr ->
Cil_types.fieldinfo -> Runtime_mem.Create.??.x_addr
val toffset_of_field :
?mode:Runtime_mem.compute_int_mode ->
Cil_types.fieldinfo -> Runtime_mem.Create.t_offset
val tsize_of_field :
?mode:Runtime_mem.compute_int_mode ->
Cil_types.fieldinfo -> Runtime_mem.Create.t_size
type x_zone
val mk_xzone :
Runtime_mem.Create.??.x_addr ->
Runtime_mem.Create.??.x_size -> Runtime_mem.Create.??.x_zone
val xzone_of_var :
Runtime_mem.Create.mem_alloc ->
Cil_types.varinfo ->
Runtime_mem.Create.??.x_size -> Runtime_mem.Create.??.x_zone
val pp_xzone :
Format.formatter -> Runtime_mem.Create.??.x_zone -> unit
val term_of_xzone :
Runtime_mem.Create.??.x_zone ->
Runtime_mem.Create.m_zone Runtime_mem.Create.F.term
val eq_zone :
Runtime_mem.Create.??.x_zone ->
Runtime_mem.Create.??.x_zone -> Runtime_mem.Create.F.pred
val xzone_disj :
Runtime_mem.Create.??.x_zone ->
Runtime_mem.Create.??.x_zone -> Runtime_mem.Create.F.pred
end
val sizeof_c_object :
Ctypes.c_object -> Runtime_mem.Create.Tint.x_size
type m_bits
type t_bits = Runtime_mem.Create.m_bits Runtime_mem.Create.F.term
type m_dzone
type dzone = Runtime_mem.Create.m_dzone Runtime_mem.Create.F.term
module RtLib :
sig
val rt_global : D.name -> Runtime_mem.Create.F.pred
val rt_gsize : D.name -> Runtime_mem.Create.t_size
val rt_vformat : D.name -> D.format
val rt_fformat : D.name -> D.format
val load :
Runtime_mem.Create.mem_bits ->
Runtime_mem.Create.t_zone -> Runtime_mem.Create.t_bits
val store :
Runtime_mem.Create.mem_bits ->
Runtime_mem.Create.t_addr ->
Runtime_mem.Create.t_bits -> Runtime_mem.Create.mem_bits
val havoc :
Runtime_mem.Create.mem_bits ->
Runtime_mem.Create.t_zone -> Runtime_mem.Create.mem_bits
val to_bits : D.format -> D.abstract -> Runtime_mem.Create.t_bits
val from_bits :
Runtime_mem.Create.t_bits -> D.format -> D.abstract
val alloc :
Runtime_mem.Create.mem_alloc ->
D.name ->
Runtime_mem.Create.t_size -> Runtime_mem.Create.mem_alloc
val block_length :
Runtime_mem.Create.mem_alloc ->
Runtime_mem.Create.t_addr -> Runtime_mem.Create.t_size
val valid :
Runtime_mem.Create.mem_alloc ->
Runtime_mem.Create.t_zone -> Runtime_mem.Create.F.pred
val is_havoc :
Runtime_mem.Create.mem_alloc ->
Runtime_mem.Create.mem_bits ->
Runtime_mem.Create.dzone ->
Runtime_mem.Create.mem_bits -> Runtime_mem.Create.F.pred
val free :
Runtime_mem.Create.mem_alloc ->
D.name -> Runtime_mem.Create.mem_alloc
val zs_empty : Runtime_mem.Create.dzone
val zs_singleton :
Runtime_mem.Create.t_zone -> Runtime_mem.Create.dzone
val zs_union :
Runtime_mem.Create.dzone ->
Runtime_mem.Create.dzone -> Runtime_mem.Create.dzone
val zs_incl :
Runtime_mem.Create.dzone ->
Runtime_mem.Create.dzone -> Runtime_mem.Create.F.pred
end
val z_from_bits : Runtime_mem.Create.t_bits -> D.format -> D.integer
val real_from_bits : Runtime_mem.Create.t_bits -> D.format -> D.real
module Model :
sig
module D :
sig
module F :
sig
type 'a term = 'a D.F.term
type pred = D.F.pred
val e_int : int -> Formula.integer term
val e_call :
string ->
Formula.abstract term list -> Formula.abstract term
val p_call : string -> Formula.abstract term list -> pred
val wrap : 'a term -> Formula.abstract term
val unwrap : Formula.abstract term -> 'a term
val e_true : Formula.boolean term
val e_false : Formula.boolean term
val e_int : int -> Formula.integer term
val e_float : float -> Formula.real term
val e_icst : string -> Formula.integer term
val e_rcst : string -> Formula.real term
val e_int64 : int64 -> Formula.integer term
val e_ineg : Formula.integer term -> Formula.integer term
val e_rneg : Formula.real term -> Formula.real term
val e_iop :
Formula.integer_op ->
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rop :
Formula.real_op ->
Formula.real term ->
Formula.real term -> Formula.real term
val e_icmp :
Formula.cmp_op ->
Formula.integer term ->
Formula.integer term -> Formula.boolean term
val e_rcmp :
Formula.cmp_op ->
Formula.real term ->
Formula.real term -> Formula.boolean term
val p_icmp :
Formula.cmp_op ->
Formula.integer term -> Formula.integer term -> pred
val p_rcmp :
Formula.cmp_op ->
Formula.real term -> Formula.real term -> pred
val e_bnot : Formula.integer term -> Formula.integer term
val e_band :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bxor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_lshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val integer_of_real :
Formula.real term -> Formula.integer term
val real_of_integer :
Formula.integer term -> Formula.real term
val e_bool : Formula.boolean term -> Formula.integer term
val e_not : Formula.boolean term -> Formula.boolean term
val e_and :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_or :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_cond :
Formula.boolean term -> 'a term -> 'a term -> 'a term
val p_cond : Formula.boolean term -> pred -> pred -> pred
val p_true : pred
val p_false : pred
val p_bool : Formula.boolean term -> pred
val p_and : pred -> pred -> pred
val p_or : pred -> pred -> pred
val p_xor : pred -> pred -> pred
val p_not : pred -> pred
val p_implies : pred -> pred -> pred
val p_iff : pred -> pred -> pred
val p_eq : 'a term -> 'a term -> pred
val p_neq : 'a term -> 'a term -> pred
val p_conj : pred list -> pred
val p_disj : pred list -> pred
val p_named : string -> pred -> pred
val is_true : pred -> bool
val is_false : pred -> bool
val huge_term : int -> 'a term -> bool
val huge_pred : int -> pred -> bool
type var = D.F.var
type pool = D.F.pool
val pool : unit -> pool
val fresh : pool -> string -> Formula.kind -> var
val freshen : pool -> var -> var
val var : var -> 'a term
val eq_var : var -> var -> bool
val name_of_var : var -> string
val tau_of_var : var -> Formula.tau
val kind_of_var : var -> Formula.kind
val term_has_var : var list -> 'a term -> bool
val pred_has_var : var list -> pred -> bool
val term_closed : 'a term -> bool
val pred_closed : pred -> bool
val p_forall : var list -> pred -> pred
val p_exists : var list -> pred -> pred
val p_subst :
(var -> var option) -> var -> 'a term -> pred -> pred
val e_subst :
(var -> var option) ->
var -> 'a term -> 'b term -> 'b term
val e_rename : (var * var) list -> 'a term -> 'a term
val equal_terms : 'a term -> 'a term -> bool
type alpha = D.F.alpha
val empty_alpha : alpha
val fold_alpha :
(var -> var -> 'a -> 'a) -> alpha -> 'a -> 'a
val p_more_alpha_cv : alpha -> pred -> alpha * pred
val p_alpha_cv : pred -> var list * pred
val pp_var : Format.formatter -> var -> unit
val pp_term : Format.formatter -> 'a term -> unit
val pp_pred : Format.formatter -> pred -> unit
val pp_decl :
Format.formatter -> pred Formula.declaration -> unit
val pp_goal : Format.formatter -> string -> pred -> unit
end
type format = Formula.m_format F.term
type abstract = Formula.abstract F.term
type integer = Formula.integer F.term
type real = Formula.real F.term
type boolean = Formula.boolean F.term
type record = Formula.m_array F.term
type urecord = Formula.m_array F.term
type array = Formula.m_array F.term
type set = Formula.m_set F.term
type name = Formula.integer F.term
type pointer = Formula.m_pointer F.term
val pp_kind : Format.formatter -> Mdata.kind -> unit
type interval =
D.interval = {
inf : integer option;
sup : integer option;
}
type 'a assigned =
'a D.assigned =
Aloc of Ctypes.c_object * 'a
| Arange of Ctypes.c_object * 'a * interval
val pp_interval : Format.formatter -> interval -> unit
val e_app0 : string -> 'a F.term
val e_app1 : string -> 'a F.term -> 'b F.term
val e_app2 : string -> 'a F.term -> 'b F.term -> 'c F.term
val e_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> 'd F.term
val e_app4 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term
val e_app5 :
string ->
'a F.term ->
'b F.term ->
'c F.term -> 'd F.term -> 'e F.term -> 'f F.term
val p_app0 : string -> F.pred
val p_app1 : string -> 'a F.term -> F.pred
val p_app2 : string -> 'a F.term -> 'b F.term -> F.pred
val p_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> F.pred
val p_app4 :
string ->
'a F.term -> 'b F.term -> 'c F.term -> 'd F.term -> F.pred
val p_app5 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term -> F.pred
val tau_of_logic_type : Cil_types.logic_type -> Formula.tau
type context = D.context
type bindings = D.bindings
class type hint =
object
method capture : F.var list -> unit
method has_var : F.var list -> bool
method pretty : Format.formatter -> unit
method subst : F.var -> Formula.abstract F.term -> unit
end
val closed : bindings
val close : bindings -> F.pred -> F.pred
val capture : hint list -> bindings -> unit
val push :
string -> F.pool -> bindings -> hint list -> context
val pop : string -> context -> bindings
val kill : string -> context -> unit
val flush : string -> context -> F.pred -> F.pred
val term_such_that :
Formula.tau -> ('a F.term -> F.pred) -> 'a F.term
val forall : F.var list -> F.pred -> F.pred
val exists : F.var list -> F.pred -> F.pred
val subst : F.var -> 'a F.term -> F.pred -> F.pred
val fresh : string -> Mdata.vkind -> F.var
val alpha : F.var -> F.var option
val pool : unit -> F.pool
val vkind_of_var : F.var -> Mdata.vkind
val has_vars : F.var list -> F.pred -> bool
type substitution = D.substitution
val apply : substitution -> 'a F.term -> 'a F.term
type havoc =
D.havoc =
Fresh of F.var
| Update of F.var *
(substitution -> Formula.abstract F.term)
val havoc_static : havoc list -> F.pred -> F.pred
val havoc_inductive : havoc list -> F.pred -> F.pred
val clear : unit -> unit
val on_clear : (unit -> unit) -> unit
val fresh_name : string -> string -> string
val add_declaration : F.pred Formula.declaration -> unit
val iter :
Formula.section ->
(F.pred Formula.declaration -> unit) -> unit
val iter_all : (F.pred Formula.declaration -> unit) -> unit
val dummy : unit -> F.pred
module type Identifiable =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Registry =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module type Declarator =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
val clear : unit -> unit
val section : Formula.section
val declare : t -> string -> F.pred Formula.item
end
module Register :
functor (D : Declarator) ->
sig
type t = D.t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module Varinfo :
sig
type t = Cil_types.varinfo
module H :
sig
type key = D.Varinfo.H.key
type 'a t = 'a D.Varinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Varaddr :
sig
type t = Cil_types.varinfo
module H :
sig
type key = D.Varaddr.H.key
type 'a t = 'a D.Varaddr.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Fieldinfo :
sig
type t = Cil_types.fieldinfo
module H :
sig
type key = D.Fieldinfo.H.key
type 'a t = 'a D.Fieldinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Compinfo :
sig
type t = Cil_types.compinfo
module H :
sig
type key = D.Compinfo.H.key
type 'a t = 'a D.Compinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Arrayinfo :
sig
type t = Ctypes.arrayinfo
module H :
sig
type key = D.Arrayinfo.H.key
type 'a t = 'a D.Arrayinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Logicvar :
sig
type t = Cil_types.logic_var
module H :
sig
type key = D.Logicvar.H.key
type 'a t = 'a D.Logicvar.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Indexed =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Dindex :
functor (I : Identifiable) ->
sig
type t = I.t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Findex :
sig
type t = Cil_types.fieldinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Xindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Aindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Tindex :
sig
type t = Cil_types.compinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
val modulo : Ctypes.c_int -> integer -> integer
val guard : Ctypes.c_int -> integer -> F.pred
val i_convert :
Ctypes.c_int -> Ctypes.c_int -> integer -> integer
val round : Ctypes.c_float -> real -> real
val f_guard : Ctypes.c_float -> real -> F.pred
val f_convert :
Ctypes.c_float -> Ctypes.c_float -> real -> real
val has_type : abstract -> Cil_types.logic_type -> F.pred
val get_range_index : array -> interval -> abstract
val set_range_index : array -> interval -> array
val empty : set
val singleton : abstract -> set
val union : set -> set -> set
val unions : set list -> set
val inter : set -> set -> set
val remove : set -> set -> set
val set_of_list : abstract list -> set
val add_set : set -> set -> set
val mult_set : set -> set -> set
val neg_set : set -> set
val interval : interval -> set
val equal_pointer_bool : pointer -> pointer -> boolean
val lt_pointer_bool : pointer -> pointer -> boolean
val le_pointer_bool : pointer -> pointer -> boolean
val lt_pointer : pointer -> pointer -> F.pred
val le_pointer : pointer -> pointer -> F.pred
val minus_pointer : pointer -> pointer -> integer
val is_null : pointer -> boolean
val null : pointer
val tau_of_object : Ctypes.c_object -> Formula.tau
val tau_of_ctype : Cil_types.typ -> Formula.tau
val int_format : format
val real_format : format
val pointer_format : format
val record_format : format
val urecord_format : format
val array_format : format -> format
val format_of_object : Ctypes.c_object -> format
val decode : format -> abstract -> 'a F.term
val encode : format -> 'a F.term -> abstract
val acc_field : record -> Cil_types.fieldinfo -> abstract
val upd_field :
record -> Cil_types.fieldinfo -> abstract -> record
val acc_index : array -> integer -> abstract
val upd_index : array -> integer -> abstract -> array
val equal : Ctypes.c_object -> abstract -> abstract -> F.pred
val eq_array : Ctypes.arrayinfo -> array -> array -> F.pred
val eq_record :
Cil_types.compinfo -> record -> record -> F.pred
end
module A :
sig
module D :
sig
module F :
sig
type 'a term = 'a D.F.term
type pred = D.F.pred
val e_int : int -> Formula.integer term
val e_call :
string ->
Formula.abstract term list -> Formula.abstract term
val p_call :
string -> Formula.abstract term list -> pred
val wrap : 'a term -> Formula.abstract term
val unwrap : Formula.abstract term -> 'a term
val e_true : Formula.boolean term
val e_false : Formula.boolean term
val e_int : int -> Formula.integer term
val e_float : float -> Formula.real term
val e_icst : string -> Formula.integer term
val e_rcst : string -> Formula.real term
val e_int64 : int64 -> Formula.integer term
val e_ineg :
Formula.integer term -> Formula.integer term
val e_rneg : Formula.real term -> Formula.real term
val e_iop :
Formula.integer_op ->
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rop :
Formula.real_op ->
Formula.real term ->
Formula.real term -> Formula.real term
val e_icmp :
Formula.cmp_op ->
Formula.integer term ->
Formula.integer term -> Formula.boolean term
val e_rcmp :
Formula.cmp_op ->
Formula.real term ->
Formula.real term -> Formula.boolean term
val p_icmp :
Formula.cmp_op ->
Formula.integer term ->
Formula.integer term -> pred
val p_rcmp :
Formula.cmp_op ->
Formula.real term -> Formula.real term -> pred
val e_bnot :
Formula.integer term -> Formula.integer term
val e_band :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bxor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_lshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val integer_of_real :
Formula.real term -> Formula.integer term
val real_of_integer :
Formula.integer term -> Formula.real term
val e_bool :
Formula.boolean term -> Formula.integer term
val e_not :
Formula.boolean term -> Formula.boolean term
val e_and :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_or :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_cond :
Formula.boolean term ->
'a term -> 'a term -> 'a term
val p_cond :
Formula.boolean term -> pred -> pred -> pred
val p_true : pred
val p_false : pred
val p_bool : Formula.boolean term -> pred
val p_and : pred -> pred -> pred
val p_or : pred -> pred -> pred
val p_xor : pred -> pred -> pred
val p_not : pred -> pred
val p_implies : pred -> pred -> pred
val p_iff : pred -> pred -> pred
val p_eq : 'a term -> 'a term -> pred
val p_neq : 'a term -> 'a term -> pred
val p_conj : pred list -> pred
val p_disj : pred list -> pred
val p_named : string -> pred -> pred
val is_true : pred -> bool
val is_false : pred -> bool
val huge_term : int -> 'a term -> bool
val huge_pred : int -> pred -> bool
type var = D.F.var
type pool = D.F.pool
val pool : unit -> pool
val fresh : pool -> string -> Formula.kind -> var
val freshen : pool -> var -> var
val var : var -> 'a term
val eq_var : var -> var -> bool
val name_of_var : var -> string
val tau_of_var : var -> Formula.tau
val kind_of_var : var -> Formula.kind
val term_has_var : var list -> 'a term -> bool
val pred_has_var : var list -> pred -> bool
val term_closed : 'a term -> bool
val pred_closed : pred -> bool
val p_forall : var list -> pred -> pred
val p_exists : var list -> pred -> pred
val p_subst :
(var -> var option) ->
var -> 'a term -> pred -> pred
val e_subst :
(var -> var option) ->
var -> 'a term -> 'b term -> 'b term
val e_rename : (var * var) list -> 'a term -> 'a term
val equal_terms : 'a term -> 'a term -> bool
type alpha = D.F.alpha
val empty_alpha : alpha
val fold_alpha :
(var -> var -> 'a -> 'a) -> alpha -> 'a -> 'a
val p_more_alpha_cv : alpha -> pred -> alpha * pred
val p_alpha_cv : pred -> var list * pred
val pp_var : Format.formatter -> var -> unit
val pp_term : Format.formatter -> 'a term -> unit
val pp_pred : Format.formatter -> pred -> unit
val pp_decl :
Format.formatter ->
pred Formula.declaration -> unit
val pp_goal :
Format.formatter -> string -> pred -> unit
end
type format = Formula.m_format F.term
type abstract = Formula.abstract F.term
type integer = Formula.integer F.term
type real = Formula.real F.term
type boolean = Formula.boolean F.term
type record = Formula.m_array F.term
type urecord = Formula.m_array F.term
type array = Formula.m_array F.term
type set = Formula.m_set F.term
type name = Formula.integer F.term
type pointer = Formula.m_pointer F.term
val pp_kind : Format.formatter -> Mdata.kind -> unit
type interval =
D.interval = {
inf : integer option;
sup : integer option;
}
type 'a assigned =
'a D.assigned =
Aloc of Ctypes.c_object * 'a
| Arange of Ctypes.c_object * 'a * interval
val pp_interval : Format.formatter -> interval -> unit
val e_app0 : string -> 'a F.term
val e_app1 : string -> 'a F.term -> 'b F.term
val e_app2 :
string -> 'a F.term -> 'b F.term -> 'c F.term
val e_app3 :
string ->
'a F.term -> 'b F.term -> 'c F.term -> 'd F.term
val e_app4 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term
val e_app5 :
string ->
'a F.term ->
'b F.term ->
'c F.term -> 'd F.term -> 'e F.term -> 'f F.term
val p_app0 : string -> F.pred
val p_app1 : string -> 'a F.term -> F.pred
val p_app2 : string -> 'a F.term -> 'b F.term -> F.pred
val p_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> F.pred
val p_app4 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> F.pred
val p_app5 :
string ->
'a F.term ->
'b F.term ->
'c F.term -> 'd F.term -> 'e F.term -> F.pred
val tau_of_logic_type :
Cil_types.logic_type -> Formula.tau
type context = D.context
type bindings = D.bindings
class type hint =
object
method capture : F.var list -> unit
method has_var : F.var list -> bool
method pretty : Format.formatter -> unit
method subst :
F.var -> Formula.abstract F.term -> unit
end
val closed : bindings
val close : bindings -> F.pred -> F.pred
val capture : hint list -> bindings -> unit
val push :
string -> F.pool -> bindings -> hint list -> context
val pop : string -> context -> bindings
val kill : string -> context -> unit
val flush : string -> context -> F.pred -> F.pred
val term_such_that :
Formula.tau -> ('a F.term -> F.pred) -> 'a F.term
val forall : F.var list -> F.pred -> F.pred
val exists : F.var list -> F.pred -> F.pred
val subst : F.var -> 'a F.term -> F.pred -> F.pred
val fresh : string -> Mdata.vkind -> F.var
val alpha : F.var -> F.var option
val pool : unit -> F.pool
val vkind_of_var : F.var -> Mdata.vkind
val has_vars : F.var list -> F.pred -> bool
type substitution = D.substitution
val apply : substitution -> 'a F.term -> 'a F.term
type havoc =
D.havoc =
Fresh of F.var
| Update of F.var *
(substitution -> Formula.abstract F.term)
val havoc_static : havoc list -> F.pred -> F.pred
val havoc_inductive : havoc list -> F.pred -> F.pred
val clear : unit -> unit
val on_clear : (unit -> unit) -> unit
val fresh_name : string -> string -> string
val add_declaration : F.pred Formula.declaration -> unit
val iter :
Formula.section ->
(F.pred Formula.declaration -> unit) -> unit
val iter_all :
(F.pred Formula.declaration -> unit) -> unit
val dummy : unit -> F.pred
module type Identifiable =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Registry =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module type Declarator =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
val clear : unit -> unit
val section : Formula.section
val declare : t -> string -> F.pred Formula.item
end
module Register :
functor (D : Declarator) ->
sig
type t = D.t
val define : t -> unit
val get_definition :
t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module Varinfo :
sig
type t = Cil_types.varinfo
module H :
sig
type key = D.Varinfo.H.key
type 'a t = 'a D.Varinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Varaddr :
sig
type t = Cil_types.varinfo
module H :
sig
type key = D.Varaddr.H.key
type 'a t = 'a D.Varaddr.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Fieldinfo :
sig
type t = Cil_types.fieldinfo
module H :
sig
type key = D.Fieldinfo.H.key
type 'a t = 'a D.Fieldinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Compinfo :
sig
type t = Cil_types.compinfo
module H :
sig
type key = D.Compinfo.H.key
type 'a t = 'a D.Compinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Arrayinfo :
sig
type t = Ctypes.arrayinfo
module H :
sig
type key = D.Arrayinfo.H.key
type 'a t = 'a D.Arrayinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Logicvar :
sig
type t = Cil_types.logic_var
module H :
sig
type key = D.Logicvar.H.key
type 'a t = 'a D.Logicvar.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Indexed =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Dindex :
functor (I : Identifiable) ->
sig
type t = I.t
val define : t -> unit
val get_definition :
t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Findex :
sig
type t = Cil_types.fieldinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Xindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Aindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Tindex :
sig
type t = Cil_types.compinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
val modulo : Ctypes.c_int -> integer -> integer
val guard : Ctypes.c_int -> integer -> F.pred
val i_convert :
Ctypes.c_int -> Ctypes.c_int -> integer -> integer
val round : Ctypes.c_float -> real -> real
val f_guard : Ctypes.c_float -> real -> F.pred
val f_convert :
Ctypes.c_float -> Ctypes.c_float -> real -> real
val has_type : abstract -> Cil_types.logic_type -> F.pred
val get_range_index : array -> interval -> abstract
val set_range_index : array -> interval -> array
val empty : set
val singleton : abstract -> set
val union : set -> set -> set
val unions : set list -> set
val inter : set -> set -> set
val remove : set -> set -> set
val set_of_list : abstract list -> set
val add_set : set -> set -> set
val mult_set : set -> set -> set
val neg_set : set -> set
val interval : interval -> set
val equal_pointer_bool : pointer -> pointer -> boolean
val lt_pointer_bool : pointer -> pointer -> boolean
val le_pointer_bool : pointer -> pointer -> boolean
val lt_pointer : pointer -> pointer -> F.pred
val le_pointer : pointer -> pointer -> F.pred
val minus_pointer : pointer -> pointer -> integer
val is_null : pointer -> boolean
val null : pointer
val tau_of_object : Ctypes.c_object -> Formula.tau
val tau_of_ctype : Cil_types.typ -> Formula.tau
val int_format : format
val real_format : format
val pointer_format : format
val record_format : format
val urecord_format : format
val array_format : format -> format
val format_of_object : Ctypes.c_object -> format
val decode : format -> abstract -> 'a F.term
val encode : format -> 'a F.term -> abstract
val acc_field : record -> Cil_types.fieldinfo -> abstract
val upd_field :
record -> Cil_types.fieldinfo -> abstract -> record
val acc_index : array -> integer -> abstract
val upd_index : array -> integer -> abstract -> array
val equal :
Ctypes.c_object -> abstract -> abstract -> F.pred
val eq_array :
Ctypes.arrayinfo -> array -> array -> F.pred
val eq_record :
Cil_types.compinfo -> record -> record -> F.pred
end
val i_neg : Ctypes.c_int -> D.integer -> D.integer
val i_op :
Ctypes.c_int ->
Formula.integer_op -> D.integer -> D.integer -> D.integer
val i_cmp :
Ctypes.c_int ->
Formula.cmp_op -> D.integer -> D.integer -> D.boolean
val bits_not : Ctypes.c_int -> D.integer -> D.integer
val bits_and :
Ctypes.c_int -> D.integer -> D.integer -> D.integer
val bits_or :
Ctypes.c_int -> D.integer -> D.integer -> D.integer
val bits_xor :
Ctypes.c_int -> D.integer -> D.integer -> D.integer
val bits_lshift :
Ctypes.c_int -> D.integer -> D.integer -> D.integer
val bits_rshift :
Ctypes.c_int -> D.integer -> D.integer -> D.integer
end
module R :
sig
module D :
sig
module F :
sig
type 'a term = 'a D.F.term
type pred = D.F.pred
val e_int : int -> Formula.integer term
val e_call :
string ->
Formula.abstract term list -> Formula.abstract term
val p_call :
string -> Formula.abstract term list -> pred
val wrap : 'a term -> Formula.abstract term
val unwrap : Formula.abstract term -> 'a term
val e_true : Formula.boolean term
val e_false : Formula.boolean term
val e_int : int -> Formula.integer term
val e_float : float -> Formula.real term
val e_icst : string -> Formula.integer term
val e_rcst : string -> Formula.real term
val e_int64 : int64 -> Formula.integer term
val e_ineg :
Formula.integer term -> Formula.integer term
val e_rneg : Formula.real term -> Formula.real term
val e_iop :
Formula.integer_op ->
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rop :
Formula.real_op ->
Formula.real term ->
Formula.real term -> Formula.real term
val e_icmp :
Formula.cmp_op ->
Formula.integer term ->
Formula.integer term -> Formula.boolean term
val e_rcmp :
Formula.cmp_op ->
Formula.real term ->
Formula.real term -> Formula.boolean term
val p_icmp :
Formula.cmp_op ->
Formula.integer term ->
Formula.integer term -> pred
val p_rcmp :
Formula.cmp_op ->
Formula.real term -> Formula.real term -> pred
val e_bnot :
Formula.integer term -> Formula.integer term
val e_band :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bxor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_lshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val integer_of_real :
Formula.real term -> Formula.integer term
val real_of_integer :
Formula.integer term -> Formula.real term
val e_bool :
Formula.boolean term -> Formula.integer term
val e_not :
Formula.boolean term -> Formula.boolean term
val e_and :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_or :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_cond :
Formula.boolean term ->
'a term -> 'a term -> 'a term
val p_cond :
Formula.boolean term -> pred -> pred -> pred
val p_true : pred
val p_false : pred
val p_bool : Formula.boolean term -> pred
val p_and : pred -> pred -> pred
val p_or : pred -> pred -> pred
val p_xor : pred -> pred -> pred
val p_not : pred -> pred
val p_implies : pred -> pred -> pred
val p_iff : pred -> pred -> pred
val p_eq : 'a term -> 'a term -> pred
val p_neq : 'a term -> 'a term -> pred
val p_conj : pred list -> pred
val p_disj : pred list -> pred
val p_named : string -> pred -> pred
val is_true : pred -> bool
val is_false : pred -> bool
val huge_term : int -> 'a term -> bool
val huge_pred : int -> pred -> bool
type var = D.F.var
type pool = D.F.pool
val pool : unit -> pool
val fresh : pool -> string -> Formula.kind -> var
val freshen : pool -> var -> var
val var : var -> 'a term
val eq_var : var -> var -> bool
val name_of_var : var -> string
val tau_of_var : var -> Formula.tau
val kind_of_var : var -> Formula.kind
val term_has_var : var list -> 'a term -> bool
val pred_has_var : var list -> pred -> bool
val term_closed : 'a term -> bool
val pred_closed : pred -> bool
val p_forall : var list -> pred -> pred
val p_exists : var list -> pred -> pred
val p_subst :
(var -> var option) ->
var -> 'a term -> pred -> pred
val e_subst :
(var -> var option) ->
var -> 'a term -> 'b term -> 'b term
val e_rename : (var * var) list -> 'a term -> 'a term
val equal_terms : 'a term -> 'a term -> bool
type alpha = D.F.alpha
val empty_alpha : alpha
val fold_alpha :
(var -> var -> 'a -> 'a) -> alpha -> 'a -> 'a
val p_more_alpha_cv : alpha -> pred -> alpha * pred
val p_alpha_cv : pred -> var list * pred
val pp_var : Format.formatter -> var -> unit
val pp_term : Format.formatter -> 'a term -> unit
val pp_pred : Format.formatter -> pred -> unit
val pp_decl :
Format.formatter ->
pred Formula.declaration -> unit
val pp_goal :
Format.formatter -> string -> pred -> unit
end
type format = Formula.m_format F.term
type abstract = Formula.abstract F.term
type integer = Formula.integer F.term
type real = Formula.real F.term
type boolean = Formula.boolean F.term
type record = Formula.m_array F.term
type urecord = Formula.m_array F.term
type array = Formula.m_array F.term
type set = Formula.m_set F.term
type name = Formula.integer F.term
type pointer = Formula.m_pointer F.term
val pp_kind : Format.formatter -> Mdata.kind -> unit
type interval =
D.interval = {
inf : integer option;
sup : integer option;
}
type 'a assigned =
'a D.assigned =
Aloc of Ctypes.c_object * 'a
| Arange of Ctypes.c_object * 'a * interval
val pp_interval : Format.formatter -> interval -> unit
val e_app0 : string -> 'a F.term
val e_app1 : string -> 'a F.term -> 'b F.term
val e_app2 :
string -> 'a F.term -> 'b F.term -> 'c F.term
val e_app3 :
string ->
'a F.term -> 'b F.term -> 'c F.term -> 'd F.term
val e_app4 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term
val e_app5 :
string ->
'a F.term ->
'b F.term ->
'c F.term -> 'd F.term -> 'e F.term -> 'f F.term
val p_app0 : string -> F.pred
val p_app1 : string -> 'a F.term -> F.pred
val p_app2 : string -> 'a F.term -> 'b F.term -> F.pred
val p_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> F.pred
val p_app4 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> F.pred
val p_app5 :
string ->
'a F.term ->
'b F.term ->
'c F.term -> 'd F.term -> 'e F.term -> F.pred
val tau_of_logic_type :
Cil_types.logic_type -> Formula.tau
type context = D.context
type bindings = D.bindings
class type hint =
object
method capture : F.var list -> unit
method has_var : F.var list -> bool
method pretty : Format.formatter -> unit
method subst :
F.var -> Formula.abstract F.term -> unit
end
val closed : bindings
val close : bindings -> F.pred -> F.pred
val capture : hint list -> bindings -> unit
val push :
string -> F.pool -> bindings -> hint list -> context
val pop : string -> context -> bindings
val kill : string -> context -> unit
val flush : string -> context -> F.pred -> F.pred
val term_such_that :
Formula.tau -> ('a F.term -> F.pred) -> 'a F.term
val forall : F.var list -> F.pred -> F.pred
val exists : F.var list -> F.pred -> F.pred
val subst : F.var -> 'a F.term -> F.pred -> F.pred
val fresh : string -> Mdata.vkind -> F.var
val alpha : F.var -> F.var option
val pool : unit -> F.pool
val vkind_of_var : F.var -> Mdata.vkind
val has_vars : F.var list -> F.pred -> bool
type substitution = D.substitution
val apply : substitution -> 'a F.term -> 'a F.term
type havoc =
D.havoc =
Fresh of F.var
| Update of F.var *
(substitution -> Formula.abstract F.term)
val havoc_static : havoc list -> F.pred -> F.pred
val havoc_inductive : havoc list -> F.pred -> F.pred
val clear : unit -> unit
val on_clear : (unit -> unit) -> unit
val fresh_name : string -> string -> string
val add_declaration : F.pred Formula.declaration -> unit
val iter :
Formula.section ->
(F.pred Formula.declaration -> unit) -> unit
val iter_all :
(F.pred Formula.declaration -> unit) -> unit
val dummy : unit -> F.pred
module type Identifiable =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Registry =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module type Declarator =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
val clear : unit -> unit
val section : Formula.section
val declare : t -> string -> F.pred Formula.item
end
module Register :
functor (D : Declarator) ->
sig
type t = D.t
val define : t -> unit
val get_definition :
t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module Varinfo :
sig
type t = Cil_types.varinfo
module H :
sig
type key = D.Varinfo.H.key
type 'a t = 'a D.Varinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Varaddr :
sig
type t = Cil_types.varinfo
module H :
sig
type key = D.Varaddr.H.key
type 'a t = 'a D.Varaddr.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Fieldinfo :
sig
type t = Cil_types.fieldinfo
module H :
sig
type key = D.Fieldinfo.H.key
type 'a t = 'a D.Fieldinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Compinfo :
sig
type t = Cil_types.compinfo
module H :
sig
type key = D.Compinfo.H.key
type 'a t = 'a D.Compinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Arrayinfo :
sig
type t = Ctypes.arrayinfo
module H :
sig
type key = D.Arrayinfo.H.key
type 'a t = 'a D.Arrayinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Logicvar :
sig
type t = Cil_types.logic_var
module H :
sig
type key = D.Logicvar.H.key
type 'a t = 'a D.Logicvar.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Indexed =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Dindex :
functor (I : Identifiable) ->
sig
type t = I.t
val define : t -> unit
val get_definition :
t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Findex :
sig
type t = Cil_types.fieldinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Xindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Aindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Tindex :
sig
type t = Cil_types.compinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
val modulo : Ctypes.c_int -> integer -> integer
val guard : Ctypes.c_int -> integer -> F.pred
val i_convert :
Ctypes.c_int -> Ctypes.c_int -> integer -> integer
val round : Ctypes.c_float -> real -> real
val f_guard : Ctypes.c_float -> real -> F.pred
val f_convert :
Ctypes.c_float -> Ctypes.c_float -> real -> real
val has_type : abstract -> Cil_types.logic_type -> F.pred
val get_range_index : array -> interval -> abstract
val set_range_index : array -> interval -> array
val empty : set
val singleton : abstract -> set
val union : set -> set -> set
val unions : set list -> set
val inter : set -> set -> set
val remove : set -> set -> set
val set_of_list : abstract list -> set
val add_set : set -> set -> set
val mult_set : set -> set -> set
val neg_set : set -> set
val interval : interval -> set
val equal_pointer_bool : pointer -> pointer -> boolean
val lt_pointer_bool : pointer -> pointer -> boolean
val le_pointer_bool : pointer -> pointer -> boolean
val lt_pointer : pointer -> pointer -> F.pred
val le_pointer : pointer -> pointer -> F.pred
val minus_pointer : pointer -> pointer -> integer
val is_null : pointer -> boolean
val null : pointer
val tau_of_object : Ctypes.c_object -> Formula.tau
val tau_of_ctype : Cil_types.typ -> Formula.tau
val int_format : format
val real_format : format
val pointer_format : format
val record_format : format
val urecord_format : format
val array_format : format -> format
val format_of_object : Ctypes.c_object -> format
val decode : format -> abstract -> 'a F.term
val encode : format -> 'a F.term -> abstract
val acc_field : record -> Cil_types.fieldinfo -> abstract
val upd_field :
record -> Cil_types.fieldinfo -> abstract -> record
val acc_index : array -> integer -> abstract
val upd_index : array -> integer -> abstract -> array
val equal :
Ctypes.c_object -> abstract -> abstract -> F.pred
val eq_array :
Ctypes.arrayinfo -> array -> array -> F.pred
val eq_record :
Cil_types.compinfo -> record -> record -> F.pred
end
val f_neg : Ctypes.c_float -> D.real -> D.real
val f_op :
Ctypes.c_float ->
Formula.real_op -> D.real -> D.real -> D.real
val f_cmp :
Ctypes.c_float ->
Formula.cmp_op -> D.real -> D.real -> D.boolean
end
type loc = Runtime_mem.Create.Tint.x_addr
val pp_loc :
Format.formatter -> Runtime_mem.Create.Tint.x_addr -> unit
val pointer_of_loc :
Runtime_mem.Create.Tint.x_addr ->
Runtime_mem.Create.Model.D.pointer
val loc_of_pointer :
'a ->
Runtime_mem.Create.Model.D.pointer ->
Runtime_mem.Create.Model.loc
val cast_loc_to_int :
'a ->
Runtime_mem.Create.Tint.x_addr ->
Ctypes.c_int -> Runtime_mem.Create.Model.D.integer
val cast_int_to_loc :
Ctypes.c_int ->
Runtime_mem.Create.Model.D.integer ->
'a -> Runtime_mem.Create.Model.loc
end
val startof : 'a -> 'b -> 'a
val cast_loc_to_loc : 'a -> 'b -> 'c -> 'c
val tau_of_dzone : Formula.tau
val xzone_assigned :
Runtime_mem.Create.Tint.x_addr D.assigned ->
Runtime_mem.Create.Tint.x_zone
val dzone_assigned :
Runtime_mem.Create.Tint.x_addr D.assigned ->
Runtime_mem.Create.dzone
val dzone_empty : unit -> Runtime_mem.Create.dzone
val dzone_subset :
Runtime_mem.Create.dzone ->
Runtime_mem.Create.dzone -> Runtime_mem.Create.F.pred
val dzone_union :
Runtime_mem.Create.dzone ->
Runtime_mem.Create.dzone -> Runtime_mem.Create.dzone
val effect_supported : bool
type region
val pp_region : 'a -> 'b -> unit
val region_assigned : 'a -> 'b
val region_empty : 'a -> 'b
val region_union : 'a -> 'b -> 'c
val region_included : 'a -> 'b -> 'c
val region_separated : 'a -> 'b -> 'c
val region_fingerprint : 'a -> 'b -> 'c
val region_supported : bool
val int_format_for_hyp : Ctypes.c_object -> D.format option
val add_int_format_hyp :
Formula.m_format Runtime_mem.Create.F.term ->
Ctypes.c_object ->
Runtime_mem.Create.F.pred -> Runtime_mem.Create.F.pred
module VarDecl :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> D.F.pred Formula.declaration
val on_definition :
(t -> D.F.pred Formula.declaration -> unit) -> unit
end
module Fields :
sig
type t = Cil_types.fieldinfo
val define : t -> unit
val get_definition : t -> D.F.pred Formula.declaration
val on_definition :
(t -> D.F.pred Formula.declaration -> unit) -> unit
end
module Data :
sig
module D :
sig
module F :
sig
type 'a term = 'a Model.D.F.term
type pred = Model.D.F.pred
val e_int : int -> Formula.integer term
val e_call :
string ->
Formula.abstract term list -> Formula.abstract term
val p_call : string -> Formula.abstract term list -> pred
val wrap : 'a term -> Formula.abstract term
val unwrap : Formula.abstract term -> 'a term
val e_true : Formula.boolean term
val e_false : Formula.boolean term
val e_int : int -> Formula.integer term
val e_float : float -> Formula.real term
val e_icst : string -> Formula.integer term
val e_rcst : string -> Formula.real term
val e_int64 : int64 -> Formula.integer term
val e_ineg : Formula.integer term -> Formula.integer term
val e_rneg : Formula.real term -> Formula.real term
val e_iop :
Formula.integer_op ->
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rop :
Formula.real_op ->
Formula.real term ->
Formula.real term -> Formula.real term
val e_icmp :
Formula.cmp_op ->
Formula.integer term ->
Formula.integer term -> Formula.boolean term
val e_rcmp :
Formula.cmp_op ->
Formula.real term ->
Formula.real term -> Formula.boolean term
val p_icmp :
Formula.cmp_op ->
Formula.integer term -> Formula.integer term -> pred
val p_rcmp :
Formula.cmp_op ->
Formula.real term -> Formula.real term -> pred
val e_bnot : Formula.integer term -> Formula.integer term
val e_band :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bxor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_lshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val integer_of_real :
Formula.real term -> Formula.integer term
val real_of_integer :
Formula.integer term -> Formula.real term
val e_bool : Formula.boolean term -> Formula.integer term
val e_not : Formula.boolean term -> Formula.boolean term
val e_and :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_or :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_cond :
Formula.boolean term -> 'a term -> 'a term -> 'a term
val p_cond : Formula.boolean term -> pred -> pred -> pred
val p_true : pred
val p_false : pred
val p_bool : Formula.boolean term -> pred
val p_and : pred -> pred -> pred
val p_or : pred -> pred -> pred
val p_xor : pred -> pred -> pred
val p_not : pred -> pred
val p_implies : pred -> pred -> pred
val p_iff : pred -> pred -> pred
val p_eq : 'a term -> 'a term -> pred
val p_neq : 'a term -> 'a term -> pred
val p_conj : pred list -> pred
val p_disj : pred list -> pred
val p_named : string -> pred -> pred
val is_true : pred -> bool
val is_false : pred -> bool
val huge_term : int -> 'a term -> bool
val huge_pred : int -> pred -> bool
type var = Model.D.F.var
type pool = Model.D.F.pool
val pool : unit -> pool
val fresh : pool -> string -> Formula.kind -> var
val freshen : pool -> var -> var
val var : var -> 'a term
val eq_var : var -> var -> bool
val name_of_var : var -> string
val tau_of_var : var -> Formula.tau
val kind_of_var : var -> Formula.kind
val term_has_var : var list -> 'a term -> bool
val pred_has_var : var list -> pred -> bool
val term_closed : 'a term -> bool
val pred_closed : pred -> bool
val p_forall : var list -> pred -> pred
val p_exists : var list -> pred -> pred
val p_subst :
(var -> var option) -> var -> 'a term -> pred -> pred
val e_subst :
(var -> var option) ->
var -> 'a term -> 'b term -> 'b term
val e_rename : (var * var) list -> 'a term -> 'a term
val equal_terms : 'a term -> 'a term -> bool
type alpha = Model.D.F.alpha
val empty_alpha : alpha
val fold_alpha :
(var -> var -> 'a -> 'a) -> alpha -> 'a -> 'a
val p_more_alpha_cv : alpha -> pred -> alpha * pred
val p_alpha_cv : pred -> var list * pred
val pp_var : Format.formatter -> var -> unit
val pp_term : Format.formatter -> 'a term -> unit
val pp_pred : Format.formatter -> pred -> unit
val pp_decl :
Format.formatter -> pred Formula.declaration -> unit
val pp_goal : Format.formatter -> string -> pred -> unit
end
type format = Formula.m_format F.term
type abstract = Formula.abstract F.term
type integer = Formula.integer F.term
type real = Formula.real F.term
type boolean = Formula.boolean F.term
type record = Formula.m_array F.term
type urecord = Formula.m_array F.term
type array = Formula.m_array F.term
type set = Formula.m_set F.term
type name = Formula.integer F.term
type pointer = Formula.m_pointer F.term
val pp_kind : Format.formatter -> Mdata.kind -> unit
type interval =
Model.D.interval = {
inf : integer option;
sup : integer option;
}
type 'a assigned =
'a Model.D.assigned =
Aloc of Ctypes.c_object * 'a
| Arange of Ctypes.c_object * 'a * interval
val pp_interval : Format.formatter -> interval -> unit
val e_app0 : string -> 'a F.term
val e_app1 : string -> 'a F.term -> 'b F.term
val e_app2 : string -> 'a F.term -> 'b F.term -> 'c F.term
val e_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> 'd F.term
val e_app4 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term
val e_app5 :
string ->
'a F.term ->
'b F.term ->
'c F.term -> 'd F.term -> 'e F.term -> 'f F.term
val p_app0 : string -> F.pred
val p_app1 : string -> 'a F.term -> F.pred
val p_app2 : string -> 'a F.term -> 'b F.term -> F.pred
val p_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> F.pred
val p_app4 :
string ->
'a F.term -> 'b F.term -> 'c F.term -> 'd F.term -> F.pred
val p_app5 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term -> F.pred
val tau_of_logic_type : Cil_types.logic_type -> Formula.tau
type context = Model.D.context
type bindings = Model.D.bindings
class type hint =
object
method capture : F.var list -> unit
method has_var : F.var list -> bool
method pretty : Format.formatter -> unit
method subst : F.var -> Formula.abstract F.term -> unit
end
val closed : bindings
val close : bindings -> F.pred -> F.pred
val capture : hint list -> bindings -> unit
val push :
string -> F.pool -> bindings -> hint list -> context
val pop : string -> context -> bindings
val kill : string -> context -> unit
val flush : string -> context -> F.pred -> F.pred
val term_such_that :
Formula.tau -> ('a F.term -> F.pred) -> 'a F.term
val forall : F.var list -> F.pred -> F.pred
val exists : F.var list -> F.pred -> F.pred
val subst : F.var -> 'a F.term -> F.pred -> F.pred
val fresh : string -> Mdata.vkind -> F.var
val alpha : F.var -> F.var option
val pool : unit -> F.pool
val vkind_of_var : F.var -> Mdata.vkind
val has_vars : F.var list -> F.pred -> bool
type substitution = Model.D.substitution
val apply : substitution -> 'a F.term -> 'a F.term
type havoc =
Model.D.havoc =
Fresh of F.var
| Update of F.var *
(substitution -> Formula.abstract F.term)
val havoc_static : havoc list -> F.pred -> F.pred
val havoc_inductive : havoc list -> F.pred -> F.pred
val clear : unit -> unit
val on_clear : (unit -> unit) -> unit
val fresh_name : string -> string -> string
val add_declaration : F.pred Formula.declaration -> unit
val iter :
Formula.section ->
(F.pred Formula.declaration -> unit) -> unit
val iter_all : (F.pred Formula.declaration -> unit) -> unit
val dummy : unit -> F.pred
module type Identifiable =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Registry =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module type Declarator =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
val clear : unit -> unit
val section : Formula.section
val declare : t -> string -> F.pred Formula.item
end
module Register :
functor (D : Declarator) ->
sig
type t = D.t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module Varinfo :
sig
type t = Cil_types.varinfo
module H :
sig
type key = Model.D.Varinfo.H.key
type 'a t = 'a Model.D.Varinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Varaddr :
sig
type t = Cil_types.varinfo
module H :
sig
type key = Model.D.Varaddr.H.key
type 'a t = 'a Model.D.Varaddr.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Fieldinfo :
sig
type t = Cil_types.fieldinfo
module H :
sig
type key = Model.D.Fieldinfo.H.key
type 'a t = 'a Model.D.Fieldinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Compinfo :
sig
type t = Cil_types.compinfo
module H :
sig
type key = Model.D.Compinfo.H.key
type 'a t = 'a Model.D.Compinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Arrayinfo :
sig
type t = Ctypes.arrayinfo
module H :
sig
type key = Model.D.Arrayinfo.H.key
type 'a t = 'a Model.D.Arrayinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Logicvar :
sig
type t = Cil_types.logic_var
module H :
sig
type key = Model.D.Logicvar.H.key
type 'a t = 'a Model.D.Logicvar.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Indexed =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Dindex :
functor (I : Identifiable) ->
sig
type t = I.t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Findex :
sig
type t = Cil_types.fieldinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Xindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Aindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Tindex :
sig
type t = Cil_types.compinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
val modulo : Ctypes.c_int -> integer -> integer
val guard : Ctypes.c_int -> integer -> F.pred
val i_convert :
Ctypes.c_int -> Ctypes.c_int -> integer -> integer
val round : Ctypes.c_float -> real -> real
val f_guard : Ctypes.c_float -> real -> F.pred
val f_convert :
Ctypes.c_float -> Ctypes.c_float -> real -> real
val has_type : abstract -> Cil_types.logic_type -> F.pred
val get_range_index : array -> interval -> abstract
val set_range_index : array -> interval -> array
val empty : set
val singleton : abstract -> set
val union : set -> set -> set
val unions : set list -> set
val inter : set -> set -> set
val remove : set -> set -> set
val set_of_list : abstract list -> set
val add_set : set -> set -> set
val mult_set : set -> set -> set
val neg_set : set -> set
val interval : interval -> set
val equal_pointer_bool : pointer -> pointer -> boolean
val lt_pointer_bool : pointer -> pointer -> boolean
val le_pointer_bool : pointer -> pointer -> boolean
val lt_pointer : pointer -> pointer -> F.pred
val le_pointer : pointer -> pointer -> F.pred
val minus_pointer : pointer -> pointer -> integer
val is_null : pointer -> boolean
val null : pointer
val tau_of_object : Ctypes.c_object -> Formula.tau
val tau_of_ctype : Cil_types.typ -> Formula.tau
val int_format : format
val real_format : format
val pointer_format : format
val record_format : format
val urecord_format : format
val array_format : format -> format
val format_of_object : Ctypes.c_object -> format
val decode : format -> abstract -> 'a F.term
val encode : format -> 'a F.term -> abstract
val acc_field : record -> Cil_types.fieldinfo -> abstract
val upd_field :
record -> Cil_types.fieldinfo -> abstract -> record
val acc_index : array -> integer -> abstract
val upd_index : array -> integer -> abstract -> array
val equal : Ctypes.c_object -> abstract -> abstract -> F.pred
val eq_array : Ctypes.arrayinfo -> array -> array -> F.pred
val eq_record :
Cil_types.compinfo -> record -> record -> F.pred
end
module A :
sig
module D :
sig
module F :
sig
type 'a term = 'a Model.D.F.term
type pred = Model.D.F.pred
val e_int : int -> Formula.integer term
val e_call :
string ->
Formula.abstract term list -> Formula.abstract term
val p_call :
string -> Formula.abstract term list -> pred
val wrap : 'a term -> Formula.abstract term
val unwrap : Formula.abstract term -> 'a term
val e_true : Formula.boolean term
val e_false : Formula.boolean term
val e_int : int -> Formula.integer term
val e_float : float -> Formula.real term
val e_icst : string -> Formula.integer term
val e_rcst : string -> Formula.real term
val e_int64 : int64 -> Formula.integer term
val e_ineg :
Formula.integer term -> Formula.integer term
val e_rneg : Formula.real term -> Formula.real term
val e_iop :
Formula.integer_op ->
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rop :
Formula.real_op ->
Formula.real term ->
Formula.real term -> Formula.real term
val e_icmp :
Formula.cmp_op ->
Formula.integer term ->
Formula.integer term -> Formula.boolean term
val e_rcmp :
Formula.cmp_op ->
Formula.real term ->
Formula.real term -> Formula.boolean term
val p_icmp :
Formula.cmp_op ->
Formula.integer term ->
Formula.integer term -> pred
val p_rcmp :
Formula.cmp_op ->
Formula.real term -> Formula.real term -> pred
val e_bnot :
Formula.integer term -> Formula.integer term
val e_band :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bxor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_lshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val integer_of_real :
Formula.real term -> Formula.integer term
val real_of_integer :
Formula.integer term -> Formula.real term
val e_bool :
Formula.boolean term -> Formula.integer term
val e_not :
Formula.boolean term -> Formula.boolean term
val e_and :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_or :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_cond :
Formula.boolean term ->
'a term -> 'a term -> 'a term
val p_cond :
Formula.boolean term -> pred -> pred -> pred
val p_true : pred
val p_false : pred
val p_bool : Formula.boolean term -> pred
val p_and : pred -> pred -> pred
val p_or : pred -> pred -> pred
val p_xor : pred -> pred -> pred
val p_not : pred -> pred
val p_implies : pred -> pred -> pred
val p_iff : pred -> pred -> pred
val p_eq : 'a term -> 'a term -> pred
val p_neq : 'a term -> 'a term -> pred
val p_conj : pred list -> pred
val p_disj : pred list -> pred
val p_named : string -> pred -> pred
val is_true : pred -> bool
val is_false : pred -> bool
val huge_term : int -> 'a term -> bool
val huge_pred : int -> pred -> bool
type var = Model.D.F.var
type pool = Model.D.F.pool
val pool : unit -> pool
val fresh : pool -> string -> Formula.kind -> var
val freshen : pool -> var -> var
val var : var -> 'a term
val eq_var : var -> var -> bool
val name_of_var : var -> string
val tau_of_var : var -> Formula.tau
val kind_of_var : var -> Formula.kind
val term_has_var : var list -> 'a term -> bool
val pred_has_var : var list -> pred -> bool
val term_closed : 'a term -> bool
val pred_closed : pred -> bool
val p_forall : var list -> pred -> pred
val p_exists : var list -> pred -> pred
val p_subst :
(var -> var option) ->
var -> 'a term -> pred -> pred
val e_subst :
(var -> var option) ->
var -> 'a term -> 'b term -> 'b term
val e_rename : (var * var) list -> 'a term -> 'a term
val equal_terms : 'a term -> 'a term -> bool
type alpha = Model.D.F.alpha
val empty_alpha : alpha
val fold_alpha :
(var -> var -> 'a -> 'a) -> alpha -> 'a -> 'a
val p_more_alpha_cv : alpha -> pred -> alpha * pred
val p_alpha_cv : pred -> var list * pred
val pp_var : Format.formatter -> var -> unit
val pp_term : Format.formatter -> 'a term -> unit
val pp_pred : Format.formatter -> pred -> unit
val pp_decl :
Format.formatter ->
pred Formula.declaration -> unit
val pp_goal :
Format.formatter -> string -> pred -> unit
end
type format = Formula.m_format F.term
type abstract = Formula.abstract F.term
type integer = Formula.integer F.term
type real = Formula.real F.term
type boolean = Formula.boolean F.term
type record = Formula.m_array F.term
type urecord = Formula.m_array F.term
type array = Formula.m_array F.term
type set = Formula.m_set F.term
type name = Formula.integer F.term
type pointer = Formula.m_pointer F.term
val pp_kind : Format.formatter -> Mdata.kind -> unit
type interval =
Model.D.interval = {
inf : integer option;
sup : integer option;
}
type 'a assigned =
'a Model.D.assigned =
Aloc of Ctypes.c_object * 'a
| Arange of Ctypes.c_object * 'a * interval
val pp_interval : Format.formatter -> interval -> unit
val e_app0 : string -> 'a F.term
val e_app1 : string -> 'a F.term -> 'b F.term
val e_app2 :
string -> 'a F.term -> 'b F.term -> 'c F.term
val e_app3 :
string ->
'a F.term -> 'b F.term -> 'c F.term -> 'd F.term
val e_app4 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term
val e_app5 :
string ->
'a F.term ->
'b F.term ->
'c F.term -> 'd F.term -> 'e F.term -> 'f F.term
val p_app0 : string -> F.pred
val p_app1 : string -> 'a F.term -> F.pred
val p_app2 : string -> 'a F.term -> 'b F.term -> F.pred
val p_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> F.pred
val p_app4 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> F.pred
val p_app5 :
string ->
'a F.term ->
'b F.term ->
'c F.term -> 'd F.term -> 'e F.term -> F.pred
val tau_of_logic_type :
Cil_types.logic_type -> Formula.tau
type context = Model.D.context
type bindings = Model.D.bindings
class type hint =
object
method capture : F.var list -> unit
method has_var : F.var list -> bool
method pretty : Format.formatter -> unit
method subst :
F.var -> Formula.abstract F.term -> unit
end
val closed : bindings
val close : bindings -> F.pred -> F.pred
val capture : hint list -> bindings -> unit
val push :
string -> F.pool -> bindings -> hint list -> context
val pop : string -> context -> bindings
val kill : string -> context -> unit
val flush : string -> context -> F.pred -> F.pred
val term_such_that :
Formula.tau -> ('a F.term -> F.pred) -> 'a F.term
val forall : F.var list -> F.pred -> F.pred
val exists : F.var list -> F.pred -> F.pred
val subst : F.var -> 'a F.term -> F.pred -> F.pred
val fresh : string -> Mdata.vkind -> F.var
val alpha : F.var -> F.var option
val pool : unit -> F.pool
val vkind_of_var : F.var -> Mdata.vkind
val has_vars : F.var list -> F.pred -> bool
type substitution = Model.D.substitution
val apply : substitution -> 'a F.term -> 'a F.term
type havoc =
Model.D.havoc =
Fresh of F.var
| Update of F.var *
(substitution -> Formula.abstract F.term)
val havoc_static : havoc list -> F.pred -> F.pred
val havoc_inductive : havoc list -> F.pred -> F.pred
val clear : unit -> unit
val on_clear : (unit -> unit) -> unit
val fresh_name : string -> string -> string
val add_declaration : F.pred Formula.declaration -> unit
val iter :
Formula.section ->
(F.pred Formula.declaration -> unit) -> unit
val iter_all :
(F.pred Formula.declaration -> unit) -> unit
val dummy : unit -> F.pred
module type Identifiable =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Registry =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module type Declarator =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
val clear : unit -> unit
val section : Formula.section
val declare : t -> string -> F.pred Formula.item
end
module Register :
functor (D : Declarator) ->
sig
type t = D.t
val define : t -> unit
val get_definition :
t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module Varinfo :
sig
type t = Cil_types.varinfo
module H :
sig
type key = Model.D.Varinfo.H.key
type 'a t = 'a Model.D.Varinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Varaddr :
sig
type t = Cil_types.varinfo
module H :
sig
type key = Model.D.Varaddr.H.key
type 'a t = 'a Model.D.Varaddr.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Fieldinfo :
sig
type t = Cil_types.fieldinfo
module H :
sig
type key = Model.D.Fieldinfo.H.key
type 'a t = 'a Model.D.Fieldinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Compinfo :
sig
type t = Cil_types.compinfo
module H :
sig
type key = Model.D.Compinfo.H.key
type 'a t = 'a Model.D.Compinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Arrayinfo :
sig
type t = Ctypes.arrayinfo
module H :
sig
type key = Model.D.Arrayinfo.H.key
type 'a t = 'a Model.D.Arrayinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Logicvar :
sig
type t = Cil_types.logic_var
module H :
sig
type key = Model.D.Logicvar.H.key
type 'a t = 'a Model.D.Logicvar.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Indexed =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Dindex :
functor (I : Identifiable) ->
sig
type t = I.t
val define : t -> unit
val get_definition :
t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Findex :
sig
type t = Cil_types.fieldinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Xindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Aindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Tindex :
sig
type t = Cil_types.compinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
val modulo : Ctypes.c_int -> integer -> integer
val guard : Ctypes.c_int -> integer -> F.pred
val i_convert :
Ctypes.c_int -> Ctypes.c_int -> integer -> integer
val round : Ctypes.c_float -> real -> real
val f_guard : Ctypes.c_float -> real -> F.pred
val f_convert :
Ctypes.c_float -> Ctypes.c_float -> real -> real
val has_type : abstract -> Cil_types.logic_type -> F.pred
val get_range_index : array -> interval -> abstract
val set_range_index : array -> interval -> array
val empty : set
val singleton : abstract -> set
val union : set -> set -> set
val unions : set list -> set
val inter : set -> set -> set
val remove : set -> set -> set
val set_of_list : abstract list -> set
val add_set : set -> set -> set
val mult_set : set -> set -> set
val neg_set : set -> set
val interval : interval -> set
val equal_pointer_bool : pointer -> pointer -> boolean
val lt_pointer_bool : pointer -> pointer -> boolean
val le_pointer_bool : pointer -> pointer -> boolean
val lt_pointer : pointer -> pointer -> F.pred
val le_pointer : pointer -> pointer -> F.pred
val minus_pointer : pointer -> pointer -> integer
val is_null : pointer -> boolean
val null : pointer
val tau_of_object : Ctypes.c_object -> Formula.tau
val tau_of_ctype : Cil_types.typ -> Formula.tau
val int_format : format
val real_format : format
val pointer_format : format
val record_format : format
val urecord_format : format
val array_format : format -> format
val format_of_object : Ctypes.c_object -> format
val decode : format -> abstract -> 'a F.term
val encode : format -> 'a F.term -> abstract
val acc_field : record -> Cil_types.fieldinfo -> abstract
val upd_field :
record -> Cil_types.fieldinfo -> abstract -> record
val acc_index : array -> integer -> abstract
val upd_index : array -> integer -> abstract -> array
val equal :
Ctypes.c_object -> abstract -> abstract -> F.pred
val eq_array :
Ctypes.arrayinfo -> array -> array -> F.pred
val eq_record :
Cil_types.compinfo -> record -> record -> F.pred
end
val i_neg : Ctypes.c_int -> D.integer -> D.integer
val i_op :
Ctypes.c_int ->
Formula.integer_op -> D.integer -> D.integer -> D.integer
val i_cmp :
Ctypes.c_int ->
Formula.cmp_op -> D.integer -> D.integer -> D.boolean
val bits_not : Ctypes.c_int -> D.integer -> D.integer
val bits_and :
Ctypes.c_int -> D.integer -> D.integer -> D.integer
val bits_or :
Ctypes.c_int -> D.integer -> D.integer -> D.integer
val bits_xor :
Ctypes.c_int -> D.integer -> D.integer -> D.integer
val bits_lshift :
Ctypes.c_int -> D.integer -> D.integer -> D.integer
val bits_rshift :
Ctypes.c_int -> D.integer -> D.integer -> D.integer
end
module R :
sig
module D :
sig
module F :
sig
type 'a term = 'a Model.D.F.term
type pred = Model.D.F.pred
val e_int : int -> Formula.integer term
val e_call :
string ->
Formula.abstract term list -> Formula.abstract term
val p_call :
string -> Formula.abstract term list -> pred
val wrap : 'a term -> Formula.abstract term
val unwrap : Formula.abstract term -> 'a term
val e_true : Formula.boolean term
val e_false : Formula.boolean term
val e_int : int -> Formula.integer term
val e_float : float -> Formula.real term
val e_icst : string -> Formula.integer term
val e_rcst : string -> Formula.real term
val e_int64 : int64 -> Formula.integer term
val e_ineg :
Formula.integer term -> Formula.integer term
val e_rneg : Formula.real term -> Formula.real term
val e_iop :
Formula.integer_op ->
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rop :
Formula.real_op ->
Formula.real term ->
Formula.real term -> Formula.real term
val e_icmp :
Formula.cmp_op ->
Formula.integer term ->
Formula.integer term -> Formula.boolean term
val e_rcmp :
Formula.cmp_op ->
Formula.real term ->
Formula.real term -> Formula.boolean term
val p_icmp :
Formula.cmp_op ->
Formula.integer term ->
Formula.integer term -> pred
val p_rcmp :
Formula.cmp_op ->
Formula.real term -> Formula.real term -> pred
val e_bnot :
Formula.integer term -> Formula.integer term
val e_band :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bxor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_lshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val integer_of_real :
Formula.real term -> Formula.integer term
val real_of_integer :
Formula.integer term -> Formula.real term
val e_bool :
Formula.boolean term -> Formula.integer term
val e_not :
Formula.boolean term -> Formula.boolean term
val e_and :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_or :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_cond :
Formula.boolean term ->
'a term -> 'a term -> 'a term
val p_cond :
Formula.boolean term -> pred -> pred -> pred
val p_true : pred
val p_false : pred
val p_bool : Formula.boolean term -> pred
val p_and : pred -> pred -> pred
val p_or : pred -> pred -> pred
val p_xor : pred -> pred -> pred
val p_not : pred -> pred
val p_implies : pred -> pred -> pred
val p_iff : pred -> pred -> pred
val p_eq : 'a term -> 'a term -> pred
val p_neq : 'a term -> 'a term -> pred
val p_conj : pred list -> pred
val p_disj : pred list -> pred
val p_named : string -> pred -> pred
val is_true : pred -> bool
val is_false : pred -> bool
val huge_term : int -> 'a term -> bool
val huge_pred : int -> pred -> bool
type var = Model.D.F.var
type pool = Model.D.F.pool
val pool : unit -> pool
val fresh : pool -> string -> Formula.kind -> var
val freshen : pool -> var -> var
val var : var -> 'a term
val eq_var : var -> var -> bool
val name_of_var : var -> string
val tau_of_var : var -> Formula.tau
val kind_of_var : var -> Formula.kind
val term_has_var : var list -> 'a term -> bool
val pred_has_var : var list -> pred -> bool
val term_closed : 'a term -> bool
val pred_closed : pred -> bool
val p_forall : var list -> pred -> pred
val p_exists : var list -> pred -> pred
val p_subst :
(var -> var option) ->
var -> 'a term -> pred -> pred
val e_subst :
(var -> var option) ->
var -> 'a term -> 'b term -> 'b term
val e_rename : (var * var) list -> 'a term -> 'a term
val equal_terms : 'a term -> 'a term -> bool
type alpha = Model.D.F.alpha
val empty_alpha : alpha
val fold_alpha :
(var -> var -> 'a -> 'a) -> alpha -> 'a -> 'a
val p_more_alpha_cv : alpha -> pred -> alpha * pred
val p_alpha_cv : pred -> var list * pred
val pp_var : Format.formatter -> var -> unit
val pp_term : Format.formatter -> 'a term -> unit
val pp_pred : Format.formatter -> pred -> unit
val pp_decl :
Format.formatter ->
pred Formula.declaration -> unit
val pp_goal :
Format.formatter -> string -> pred -> unit
end
type format = Formula.m_format F.term
type abstract = Formula.abstract F.term
type integer = Formula.integer F.term
type real = Formula.real F.term
type boolean = Formula.boolean F.term
type record = Formula.m_array F.term
type urecord = Formula.m_array F.term
type array = Formula.m_array F.term
type set = Formula.m_set F.term
type name = Formula.integer F.term
type pointer = Formula.m_pointer F.term
val pp_kind : Format.formatter -> Mdata.kind -> unit
type interval =
Model.D.interval = {
inf : integer option;
sup : integer option;
}
type 'a assigned =
'a Model.D.assigned =
Aloc of Ctypes.c_object * 'a
| Arange of Ctypes.c_object * 'a * interval
val pp_interval : Format.formatter -> interval -> unit
val e_app0 : string -> 'a F.term
val e_app1 : string -> 'a F.term -> 'b F.term
val e_app2 :
string -> 'a F.term -> 'b F.term -> 'c F.term
val e_app3 :
string ->
'a F.term -> 'b F.term -> 'c F.term -> 'd F.term
val e_app4 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term
val e_app5 :
string ->
'a F.term ->
'b F.term ->
'c F.term -> 'd F.term -> 'e F.term -> 'f F.term
val p_app0 : string -> F.pred
val p_app1 : string -> 'a F.term -> F.pred
val p_app2 : string -> 'a F.term -> 'b F.term -> F.pred
val p_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> F.pred
val p_app4 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> F.pred
val p_app5 :
string ->
'a F.term ->
'b F.term ->
'c F.term -> 'd F.term -> 'e F.term -> F.pred
val tau_of_logic_type :
Cil_types.logic_type -> Formula.tau
type context = Model.D.context
type bindings = Model.D.bindings
class type hint =
object
method capture : F.var list -> unit
method has_var : F.var list -> bool
method pretty : Format.formatter -> unit
method subst :
F.var -> Formula.abstract F.term -> unit
end
val closed : bindings
val close : bindings -> F.pred -> F.pred
val capture : hint list -> bindings -> unit
val push :
string -> F.pool -> bindings -> hint list -> context
val pop : string -> context -> bindings
val kill : string -> context -> unit
val flush : string -> context -> F.pred -> F.pred
val term_such_that :
Formula.tau -> ('a F.term -> F.pred) -> 'a F.term
val forall : F.var list -> F.pred -> F.pred
val exists : F.var list -> F.pred -> F.pred
val subst : F.var -> 'a F.term -> F.pred -> F.pred
val fresh : string -> Mdata.vkind -> F.var
val alpha : F.var -> F.var option
val pool : unit -> F.pool
val vkind_of_var : F.var -> Mdata.vkind
val has_vars : F.var list -> F.pred -> bool
type substitution = Model.D.substitution
val apply : substitution -> 'a F.term -> 'a F.term
type havoc =
Model.D.havoc =
Fresh of F.var
| Update of F.var *
(substitution -> Formula.abstract F.term)
val havoc_static : havoc list -> F.pred -> F.pred
val havoc_inductive : havoc list -> F.pred -> F.pred
val clear : unit -> unit
val on_clear : (unit -> unit) -> unit
val fresh_name : string -> string -> string
val add_declaration : F.pred Formula.declaration -> unit
val iter :
Formula.section ->
(F.pred Formula.declaration -> unit) -> unit
val iter_all :
(F.pred Formula.declaration -> unit) -> unit
val dummy : unit -> F.pred
module type Identifiable =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Registry =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module type Declarator =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
val clear : unit -> unit
val section : Formula.section
val declare : t -> string -> F.pred Formula.item
end
module Register :
functor (D : Declarator) ->
sig
type t = D.t
val define : t -> unit
val get_definition :
t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module Varinfo :
sig
type t = Cil_types.varinfo
module H :
sig
type key = Model.D.Varinfo.H.key
type 'a t = 'a Model.D.Varinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Varaddr :
sig
type t = Cil_types.varinfo
module H :
sig
type key = Model.D.Varaddr.H.key
type 'a t = 'a Model.D.Varaddr.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Fieldinfo :
sig
type t = Cil_types.fieldinfo
module H :
sig
type key = Model.D.Fieldinfo.H.key
type 'a t = 'a Model.D.Fieldinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Compinfo :
sig
type t = Cil_types.compinfo
module H :
sig
type key = Model.D.Compinfo.H.key
type 'a t = 'a Model.D.Compinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Arrayinfo :
sig
type t = Ctypes.arrayinfo
module H :
sig
type key = Model.D.Arrayinfo.H.key
type 'a t = 'a Model.D.Arrayinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Logicvar :
sig
type t = Cil_types.logic_var
module H :
sig
type key = Model.D.Logicvar.H.key
type 'a t = 'a Model.D.Logicvar.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Indexed =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Dindex :
functor (I : Identifiable) ->
sig
type t = I.t
val define : t -> unit
val get_definition :
t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Findex :
sig
type t = Cil_types.fieldinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Xindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Aindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Tindex :
sig
type t = Cil_types.compinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
val modulo : Ctypes.c_int -> integer -> integer
val guard : Ctypes.c_int -> integer -> F.pred
val i_convert :
Ctypes.c_int -> Ctypes.c_int -> integer -> integer
val round : Ctypes.c_float -> real -> real
val f_guard : Ctypes.c_float -> real -> F.pred
val f_convert :
Ctypes.c_float -> Ctypes.c_float -> real -> real
val has_type : abstract -> Cil_types.logic_type -> F.pred
val get_range_index : array -> interval -> abstract
val set_range_index : array -> interval -> array
val empty : set
val singleton : abstract -> set
val union : set -> set -> set
val unions : set list -> set
val inter : set -> set -> set
val remove : set -> set -> set
val set_of_list : abstract list -> set
val add_set : set -> set -> set
val mult_set : set -> set -> set
val neg_set : set -> set
val interval : interval -> set
val equal_pointer_bool : pointer -> pointer -> boolean
val lt_pointer_bool : pointer -> pointer -> boolean
val le_pointer_bool : pointer -> pointer -> boolean
val lt_pointer : pointer -> pointer -> F.pred
val le_pointer : pointer -> pointer -> F.pred
val minus_pointer : pointer -> pointer -> integer
val is_null : pointer -> boolean
val null : pointer
val tau_of_object : Ctypes.c_object -> Formula.tau
val tau_of_ctype : Cil_types.typ -> Formula.tau
val int_format : format
val real_format : format
val pointer_format : format
val record_format : format
val urecord_format : format
val array_format : format -> format
val format_of_object : Ctypes.c_object -> format
val decode : format -> abstract -> 'a F.term
val encode : format -> 'a F.term -> abstract
val acc_field : record -> Cil_types.fieldinfo -> abstract
val upd_field :
record -> Cil_types.fieldinfo -> abstract -> record
val acc_index : array -> integer -> abstract
val upd_index : array -> integer -> abstract -> array
val equal :
Ctypes.c_object -> abstract -> abstract -> F.pred
val eq_array :
Ctypes.arrayinfo -> array -> array -> F.pred
val eq_record :
Cil_types.compinfo -> record -> record -> F.pred
end
val f_neg : Ctypes.c_float -> D.real -> D.real
val f_op :
Ctypes.c_float ->
Formula.real_op -> D.real -> D.real -> D.real
val f_cmp :
Ctypes.c_float ->
Formula.cmp_op -> D.real -> D.real -> D.boolean
end
type loc = Model.loc
val loc_of_pointer : Ctypes.c_object -> D.pointer -> loc
val pointer_of_loc : loc -> D.pointer
val cast_loc_to_int :
Cil_types.typ -> loc -> Ctypes.c_int -> D.integer
val cast_int_to_loc :
Ctypes.c_int -> D.integer -> Cil_types.typ -> loc
val pp_loc : Format.formatter -> loc -> unit
type value =
Datalib.Cvalues(Model).value =
V_int of Ctypes.c_int * D.integer
| V_float of Ctypes.c_float * D.real
| V_pointer of Cil_types.typ * loc
| V_record of Cil_types.compinfo * D.record
| V_union of Cil_types.compinfo * D.urecord
| V_array of Ctypes.arrayinfo * D.array
val pp_value : Format.formatter -> value -> unit
val logic_of_value : value -> D.abstract
val value_of_logic : Ctypes.c_object -> D.abstract -> value
type m_of_mem = Runtime_mem.Create.m_mbits
val tau_of_mem : Formula.tau
val forall_loc :
Runtime_mem.Create.F.pool ->
Runtime_mem.Create.F.var list * Runtime_mem.Create.Tint.x_addr
val cvar :
Runtime_mem.Create.memory * 'a ->
Runtime_mem.Create.VarDecl.t -> Runtime_mem.Create.Tint.x_addr
val shift : loc -> Ctypes.c_object -> D.integer -> loc
val index : loc -> Ctypes.c_object -> D.integer -> loc
val field : loc -> Runtime_mem.Create.Fields.t -> loc
val value_of_bits :
(Ctypes.c_object -> Runtime_mem.Create.t_bits -> value)
Pervasives.ref
val bits_of_value :
(Ctypes.c_object -> value -> Runtime_mem.Create.t_bits)
Pervasives.ref
val load_mem :
Runtime_mem.Create.mem_bits ->
Ctypes.c_object -> Runtime_mem.Create.Tint.x_addr -> value
val store_mem :
Runtime_mem.Create.mem_bits ->
Ctypes.c_object ->
Runtime_mem.Create.Tint.x_addr ->
value -> Runtime_mem.Create.mem_bits
end
module DF :
sig
val record_format : Cil_types.compinfo -> Data.D.format
val array_format : Ctypes.arrayinfo -> Data.D.format
val loaded : Ctypes.c_object -> unit
val stored : Ctypes.c_object -> unit
end
val load :
Runtime_mem.Create.memory *
Runtime_mem.Create.F.var Cil_datatype.Varinfo.Hashtbl.t option ->
Ctypes.c_object ->
Runtime_mem.Create.Tint.x_addr -> Runtime_mem.Create.Data.value
val store :
Runtime_mem.Create.memory * 'a ->
Runtime_mem.Create.Tint.x_addr ->
Ctypes.c_object ->
Runtime_mem.Create.Data.value -> Runtime_mem.Create.mem_bits
module D :
sig
module F :
sig
type 'a term = 'a Model.D.F.term
type pred = Model.D.F.pred
val e_int : int -> Formula.integer term
val e_call :
string ->
Formula.abstract term list -> Formula.abstract term
val p_call : string -> Formula.abstract term list -> pred
val wrap : 'a term -> Formula.abstract term
val unwrap : Formula.abstract term -> 'a term
val e_true : Formula.boolean term
val e_false : Formula.boolean term
val e_int : int -> Formula.integer term
val e_float : float -> Formula.real term
val e_icst : string -> Formula.integer term
val e_rcst : string -> Formula.real term
val e_int64 : int64 -> Formula.integer term
val e_ineg : Formula.integer term -> Formula.integer term
val e_rneg : Formula.real term -> Formula.real term
val e_iop :
Formula.integer_op ->
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rop :
Formula.real_op ->
Formula.real term -> Formula.real term -> Formula.real term
val e_icmp :
Formula.cmp_op ->
Formula.integer term ->
Formula.integer term -> Formula.boolean term
val e_rcmp :
Formula.cmp_op ->
Formula.real term ->
Formula.real term -> Formula.boolean term
val p_icmp :
Formula.cmp_op ->
Formula.integer term -> Formula.integer term -> pred
val p_rcmp :
Formula.cmp_op ->
Formula.real term -> Formula.real term -> pred
val e_bnot : Formula.integer term -> Formula.integer term
val e_band :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bxor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_lshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val integer_of_real :
Formula.real term -> Formula.integer term
val real_of_integer :
Formula.integer term -> Formula.real term
val e_bool : Formula.boolean term -> Formula.integer term
val e_not : Formula.boolean term -> Formula.boolean term
val e_and :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_or :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_cond :
Formula.boolean term -> 'a term -> 'a term -> 'a term
val p_cond : Formula.boolean term -> pred -> pred -> pred
val p_true : pred
val p_false : pred
val p_bool : Formula.boolean term -> pred
val p_and : pred -> pred -> pred
val p_or : pred -> pred -> pred
val p_xor : pred -> pred -> pred
val p_not : pred -> pred
val p_implies : pred -> pred -> pred
val p_iff : pred -> pred -> pred
val p_eq : 'a term -> 'a term -> pred
val p_neq : 'a term -> 'a term -> pred
val p_conj : pred list -> pred
val p_disj : pred list -> pred
val p_named : string -> pred -> pred
val is_true : pred -> bool
val is_false : pred -> bool
val huge_term : int -> 'a term -> bool
val huge_pred : int -> pred -> bool
type var = Model.D.F.var
type pool = Model.D.F.pool
val pool : unit -> pool
val fresh : pool -> string -> Formula.kind -> var
val freshen : pool -> var -> var
val var : var -> 'a term
val eq_var : var -> var -> bool
val name_of_var : var -> string
val tau_of_var : var -> Formula.tau
val kind_of_var : var -> Formula.kind
val term_has_var : var list -> 'a term -> bool
val pred_has_var : var list -> pred -> bool
val term_closed : 'a term -> bool
val pred_closed : pred -> bool
val p_forall : var list -> pred -> pred
val p_exists : var list -> pred -> pred
val p_subst :
(var -> var option) -> var -> 'a term -> pred -> pred
val e_subst :
(var -> var option) -> var -> 'a term -> 'b term -> 'b term
val e_rename : (var * var) list -> 'a term -> 'a term
val equal_terms : 'a term -> 'a term -> bool
type alpha = Model.D.F.alpha
val empty_alpha : alpha
val fold_alpha :
(var -> var -> 'a -> 'a) -> alpha -> 'a -> 'a
val p_more_alpha_cv : alpha -> pred -> alpha * pred
val p_alpha_cv : pred -> var list * pred
val pp_var : Format.formatter -> var -> unit
val pp_term : Format.formatter -> 'a term -> unit
val pp_pred : Format.formatter -> pred -> unit
val pp_decl :
Format.formatter -> pred Formula.declaration -> unit
val pp_goal : Format.formatter -> string -> pred -> unit
end
type format = Formula.m_format F.term
type abstract = Formula.abstract F.term
type integer = Formula.integer F.term
type real = Formula.real F.term
type boolean = Formula.boolean F.term
type record = Formula.m_array F.term
type urecord = Formula.m_array F.term
type array = Formula.m_array F.term
type set = Formula.m_set F.term
type name = Formula.integer F.term
type pointer = Formula.m_pointer F.term
val pp_kind : Format.formatter -> Mdata.kind -> unit
type interval =
Model.D.interval = {
inf : integer option;
sup : integer option;
}
type 'a assigned =
'a Model.D.assigned =
Aloc of Ctypes.c_object * 'a
| Arange of Ctypes.c_object * 'a * interval
val pp_interval : Format.formatter -> interval -> unit
val e_app0 : string -> 'a F.term
val e_app1 : string -> 'a F.term -> 'b F.term
val e_app2 : string -> 'a F.term -> 'b F.term -> 'c F.term
val e_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> 'd F.term
val e_app4 :
string ->
'a F.term -> 'b F.term -> 'c F.term -> 'd F.term -> 'e F.term
val e_app5 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term -> 'f F.term
val p_app0 : string -> F.pred
val p_app1 : string -> 'a F.term -> F.pred
val p_app2 : string -> 'a F.term -> 'b F.term -> F.pred
val p_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> F.pred
val p_app4 :
string ->
'a F.term -> 'b F.term -> 'c F.term -> 'd F.term -> F.pred
val p_app5 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term -> F.pred
val tau_of_logic_type : Cil_types.logic_type -> Formula.tau
type context = Model.D.context
type bindings = Model.D.bindings
class type hint =
object
method capture : F.var list -> unit
method has_var : F.var list -> bool
method pretty : Format.formatter -> unit
method subst : F.var -> Formula.abstract F.term -> unit
end
val closed : bindings
val close : bindings -> F.pred -> F.pred
val capture : hint list -> bindings -> unit
val push : string -> F.pool -> bindings -> hint list -> context
val pop : string -> context -> bindings
val kill : string -> context -> unit
val flush : string -> context -> F.pred -> F.pred
val term_such_that :
Formula.tau -> ('a F.term -> F.pred) -> 'a F.term
val forall : F.var list -> F.pred -> F.pred
val exists : F.var list -> F.pred -> F.pred
val subst : F.var -> 'a F.term -> F.pred -> F.pred
val fresh : string -> Mdata.vkind -> F.var
val alpha : F.var -> F.var option
val pool : unit -> F.pool
val vkind_of_var : F.var -> Mdata.vkind
val has_vars : F.var list -> F.pred -> bool
type substitution = Model.D.substitution
val apply : substitution -> 'a F.term -> 'a F.term
type havoc =
Model.D.havoc =
Fresh of F.var
| Update of F.var * (substitution -> Formula.abstract F.term)
val havoc_static : havoc list -> F.pred -> F.pred
val havoc_inductive : havoc list -> F.pred -> F.pred
val clear : unit -> unit
val on_clear : (unit -> unit) -> unit
val fresh_name : string -> string -> string
val add_declaration : F.pred Formula.declaration -> unit
val iter :
Formula.section -> (F.pred Formula.declaration -> unit) -> unit
val iter_all : (F.pred Formula.declaration -> unit) -> unit
val dummy : unit -> F.pred
module type Identifiable =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Registry =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module type Declarator =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
val clear : unit -> unit
val section : Formula.section
val declare : t -> string -> F.pred Formula.item
end
module Register :
functor (D : Declarator) ->
sig
type t = D.t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module Varinfo :
sig
type t = Cil_types.varinfo
module H :
sig
type key = Model.D.Varinfo.H.key
type 'a t = 'a Model.D.Varinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Varaddr :
sig
type t = Cil_types.varinfo
module H :
sig
type key = Model.D.Varaddr.H.key
type 'a t = 'a Model.D.Varaddr.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Fieldinfo :
sig
type t = Cil_types.fieldinfo
module H :
sig
type key = Model.D.Fieldinfo.H.key
type 'a t = 'a Model.D.Fieldinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Compinfo :
sig
type t = Cil_types.compinfo
module H :
sig
type key = Model.D.Compinfo.H.key
type 'a t = 'a Model.D.Compinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Arrayinfo :
sig
type t = Ctypes.arrayinfo
module H :
sig
type key = Model.D.Arrayinfo.H.key
type 'a t = 'a Model.D.Arrayinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Logicvar :
sig
type t = Cil_types.logic_var
module H :
sig
type key = Model.D.Logicvar.H.key
type 'a t = 'a Model.D.Logicvar.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Indexed =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Dindex :
functor (I : Identifiable) ->
sig
type t = I.t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Findex :
sig
type t = Cil_types.fieldinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Xindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Aindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Tindex :
sig
type t = Cil_types.compinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
val modulo : Ctypes.c_int -> integer -> integer
val guard : Ctypes.c_int -> integer -> F.pred
val i_convert :
Ctypes.c_int -> Ctypes.c_int -> integer -> integer
val round : Ctypes.c_float -> real -> real
val f_guard : Ctypes.c_float -> real -> F.pred
val f_convert : Ctypes.c_float -> Ctypes.c_float -> real -> real
val has_type : abstract -> Cil_types.logic_type -> F.pred
val get_range_index : array -> interval -> abstract
val set_range_index : array -> interval -> array
val empty : set
val singleton : abstract -> set
val union : set -> set -> set
val unions : set list -> set
val inter : set -> set -> set
val remove : set -> set -> set
val set_of_list : abstract list -> set
val add_set : set -> set -> set
val mult_set : set -> set -> set
val neg_set : set -> set
val interval : interval -> set
val equal_pointer_bool : pointer -> pointer -> boolean
val lt_pointer_bool : pointer -> pointer -> boolean
val le_pointer_bool : pointer -> pointer -> boolean
val lt_pointer : pointer -> pointer -> F.pred
val le_pointer : pointer -> pointer -> F.pred
val minus_pointer : pointer -> pointer -> integer
val is_null : pointer -> boolean
val null : pointer
val tau_of_object : Ctypes.c_object -> Formula.tau
val tau_of_ctype : Cil_types.typ -> Formula.tau
val int_format : format
val real_format : format
val pointer_format : format
val record_format : format
val urecord_format : format
val array_format : format -> format
val format_of_object : Ctypes.c_object -> format
val decode : format -> abstract -> 'a F.term
val encode : format -> 'a F.term -> abstract
val acc_field : record -> Cil_types.fieldinfo -> abstract
val upd_field :
record -> Cil_types.fieldinfo -> abstract -> record
val acc_index : array -> integer -> abstract
val upd_index : array -> integer -> abstract -> array
val equal : Ctypes.c_object -> abstract -> abstract -> F.pred
val eq_array : Ctypes.arrayinfo -> array -> array -> F.pred
val eq_record : Cil_types.compinfo -> record -> record -> F.pred
end
module A :
sig
module D :
sig
module F :
sig
type 'a term = 'a Model.D.F.term
type pred = Model.D.F.pred
val e_int : int -> Formula.integer term
val e_call :
string ->
Formula.abstract term list -> Formula.abstract term
val p_call : string -> Formula.abstract term list -> pred
val wrap : 'a term -> Formula.abstract term
val unwrap : Formula.abstract term -> 'a term
val e_true : Formula.boolean term
val e_false : Formula.boolean term
val e_int : int -> Formula.integer term
val e_float : float -> Formula.real term
val e_icst : string -> Formula.integer term
val e_rcst : string -> Formula.real term
val e_int64 : int64 -> Formula.integer term
val e_ineg : Formula.integer term -> Formula.integer term
val e_rneg : Formula.real term -> Formula.real term
val e_iop :
Formula.integer_op ->
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rop :
Formula.real_op ->
Formula.real term ->
Formula.real term -> Formula.real term
val e_icmp :
Formula.cmp_op ->
Formula.integer term ->
Formula.integer term -> Formula.boolean term
val e_rcmp :
Formula.cmp_op ->
Formula.real term ->
Formula.real term -> Formula.boolean term
val p_icmp :
Formula.cmp_op ->
Formula.integer term -> Formula.integer term -> pred
val p_rcmp :
Formula.cmp_op ->
Formula.real term -> Formula.real term -> pred
val e_bnot : Formula.integer term -> Formula.integer term
val e_band :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bxor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_lshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val integer_of_real :
Formula.real term -> Formula.integer term
val real_of_integer :
Formula.integer term -> Formula.real term
val e_bool : Formula.boolean term -> Formula.integer term
val e_not : Formula.boolean term -> Formula.boolean term
val e_and :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_or :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_cond :
Formula.boolean term -> 'a term -> 'a term -> 'a term
val p_cond : Formula.boolean term -> pred -> pred -> pred
val p_true : pred
val p_false : pred
val p_bool : Formula.boolean term -> pred
val p_and : pred -> pred -> pred
val p_or : pred -> pred -> pred
val p_xor : pred -> pred -> pred
val p_not : pred -> pred
val p_implies : pred -> pred -> pred
val p_iff : pred -> pred -> pred
val p_eq : 'a term -> 'a term -> pred
val p_neq : 'a term -> 'a term -> pred
val p_conj : pred list -> pred
val p_disj : pred list -> pred
val p_named : string -> pred -> pred
val is_true : pred -> bool
val is_false : pred -> bool
val huge_term : int -> 'a term -> bool
val huge_pred : int -> pred -> bool
type var = Model.D.F.var
type pool = Model.D.F.pool
val pool : unit -> pool
val fresh : pool -> string -> Formula.kind -> var
val freshen : pool -> var -> var
val var : var -> 'a term
val eq_var : var -> var -> bool
val name_of_var : var -> string
val tau_of_var : var -> Formula.tau
val kind_of_var : var -> Formula.kind
val term_has_var : var list -> 'a term -> bool
val pred_has_var : var list -> pred -> bool
val term_closed : 'a term -> bool
val pred_closed : pred -> bool
val p_forall : var list -> pred -> pred
val p_exists : var list -> pred -> pred
val p_subst :
(var -> var option) -> var -> 'a term -> pred -> pred
val e_subst :
(var -> var option) ->
var -> 'a term -> 'b term -> 'b term
val e_rename : (var * var) list -> 'a term -> 'a term
val equal_terms : 'a term -> 'a term -> bool
type alpha = Model.D.F.alpha
val empty_alpha : alpha
val fold_alpha :
(var -> var -> 'a -> 'a) -> alpha -> 'a -> 'a
val p_more_alpha_cv : alpha -> pred -> alpha * pred
val p_alpha_cv : pred -> var list * pred
val pp_var : Format.formatter -> var -> unit
val pp_term : Format.formatter -> 'a term -> unit
val pp_pred : Format.formatter -> pred -> unit
val pp_decl :
Format.formatter -> pred Formula.declaration -> unit
val pp_goal : Format.formatter -> string -> pred -> unit
end
type format = Formula.m_format F.term
type abstract = Formula.abstract F.term
type integer = Formula.integer F.term
type real = Formula.real F.term
type boolean = Formula.boolean F.term
type record = Formula.m_array F.term
type urecord = Formula.m_array F.term
type array = Formula.m_array F.term
type set = Formula.m_set F.term
type name = Formula.integer F.term
type pointer = Formula.m_pointer F.term
val pp_kind : Format.formatter -> Mdata.kind -> unit
type interval =
Model.D.interval = {
inf : integer option;
sup : integer option;
}
type 'a assigned =
'a Model.D.assigned =
Aloc of Ctypes.c_object * 'a
| Arange of Ctypes.c_object * 'a * interval
val pp_interval : Format.formatter -> interval -> unit
val e_app0 : string -> 'a F.term
val e_app1 : string -> 'a F.term -> 'b F.term
val e_app2 : string -> 'a F.term -> 'b F.term -> 'c F.term
val e_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> 'd F.term
val e_app4 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term
val e_app5 :
string ->
'a F.term ->
'b F.term ->
'c F.term -> 'd F.term -> 'e F.term -> 'f F.term
val p_app0 : string -> F.pred
val p_app1 : string -> 'a F.term -> F.pred
val p_app2 : string -> 'a F.term -> 'b F.term -> F.pred
val p_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> F.pred
val p_app4 :
string ->
'a F.term -> 'b F.term -> 'c F.term -> 'd F.term -> F.pred
val p_app5 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term -> F.pred
val tau_of_logic_type : Cil_types.logic_type -> Formula.tau
type context = Model.D.context
type bindings = Model.D.bindings
class type hint =
object
method capture : F.var list -> unit
method has_var : F.var list -> bool
method pretty : Format.formatter -> unit
method subst : F.var -> Formula.abstract F.term -> unit
end
val closed : bindings
val close : bindings -> F.pred -> F.pred
val capture : hint list -> bindings -> unit
val push :
string -> F.pool -> bindings -> hint list -> context
val pop : string -> context -> bindings
val kill : string -> context -> unit
val flush : string -> context -> F.pred -> F.pred
val term_such_that :
Formula.tau -> ('a F.term -> F.pred) -> 'a F.term
val forall : F.var list -> F.pred -> F.pred
val exists : F.var list -> F.pred -> F.pred
val subst : F.var -> 'a F.term -> F.pred -> F.pred
val fresh : string -> Mdata.vkind -> F.var
val alpha : F.var -> F.var option
val pool : unit -> F.pool
val vkind_of_var : F.var -> Mdata.vkind
val has_vars : F.var list -> F.pred -> bool
type substitution = Model.D.substitution
val apply : substitution -> 'a F.term -> 'a F.term
type havoc =
Model.D.havoc =
Fresh of F.var
| Update of F.var *
(substitution -> Formula.abstract F.term)
val havoc_static : havoc list -> F.pred -> F.pred
val havoc_inductive : havoc list -> F.pred -> F.pred
val clear : unit -> unit
val on_clear : (unit -> unit) -> unit
val fresh_name : string -> string -> string
val add_declaration : F.pred Formula.declaration -> unit
val iter :
Formula.section ->
(F.pred Formula.declaration -> unit) -> unit
val iter_all : (F.pred Formula.declaration -> unit) -> unit
val dummy : unit -> F.pred
module type Identifiable =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Registry =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module type Declarator =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
val clear : unit -> unit
val section : Formula.section
val declare : t -> string -> F.pred Formula.item
end
module Register :
functor (D : Declarator) ->
sig
type t = D.t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module Varinfo :
sig
type t = Cil_types.varinfo
module H :
sig
type key = Model.D.Varinfo.H.key
type 'a t = 'a Model.D.Varinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Varaddr :
sig
type t = Cil_types.varinfo
module H :
sig
type key = Model.D.Varaddr.H.key
type 'a t = 'a Model.D.Varaddr.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Fieldinfo :
sig
type t = Cil_types.fieldinfo
module H :
sig
type key = Model.D.Fieldinfo.H.key
type 'a t = 'a Model.D.Fieldinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Compinfo :
sig
type t = Cil_types.compinfo
module H :
sig
type key = Model.D.Compinfo.H.key
type 'a t = 'a Model.D.Compinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Arrayinfo :
sig
type t = Ctypes.arrayinfo
module H :
sig
type key = Model.D.Arrayinfo.H.key
type 'a t = 'a Model.D.Arrayinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Logicvar :
sig
type t = Cil_types.logic_var
module H :
sig
type key = Model.D.Logicvar.H.key
type 'a t = 'a Model.D.Logicvar.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Indexed =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Dindex :
functor (I : Identifiable) ->
sig
type t = I.t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Findex :
sig
type t = Cil_types.fieldinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Xindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Aindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Tindex :
sig
type t = Cil_types.compinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
val modulo : Ctypes.c_int -> integer -> integer
val guard : Ctypes.c_int -> integer -> F.pred
val i_convert :
Ctypes.c_int -> Ctypes.c_int -> integer -> integer
val round : Ctypes.c_float -> real -> real
val f_guard : Ctypes.c_float -> real -> F.pred
val f_convert :
Ctypes.c_float -> Ctypes.c_float -> real -> real
val has_type : abstract -> Cil_types.logic_type -> F.pred
val get_range_index : array -> interval -> abstract
val set_range_index : array -> interval -> array
val empty : set
val singleton : abstract -> set
val union : set -> set -> set
val unions : set list -> set
val inter : set -> set -> set
val remove : set -> set -> set
val set_of_list : abstract list -> set
val add_set : set -> set -> set
val mult_set : set -> set -> set
val neg_set : set -> set
val interval : interval -> set
val equal_pointer_bool : pointer -> pointer -> boolean
val lt_pointer_bool : pointer -> pointer -> boolean
val le_pointer_bool : pointer -> pointer -> boolean
val lt_pointer : pointer -> pointer -> F.pred
val le_pointer : pointer -> pointer -> F.pred
val minus_pointer : pointer -> pointer -> integer
val is_null : pointer -> boolean
val null : pointer
val tau_of_object : Ctypes.c_object -> Formula.tau
val tau_of_ctype : Cil_types.typ -> Formula.tau
val int_format : format
val real_format : format
val pointer_format : format
val record_format : format
val urecord_format : format
val array_format : format -> format
val format_of_object : Ctypes.c_object -> format
val decode : format -> abstract -> 'a F.term
val encode : format -> 'a F.term -> abstract
val acc_field : record -> Cil_types.fieldinfo -> abstract
val upd_field :
record -> Cil_types.fieldinfo -> abstract -> record
val acc_index : array -> integer -> abstract
val upd_index : array -> integer -> abstract -> array
val equal : Ctypes.c_object -> abstract -> abstract -> F.pred
val eq_array : Ctypes.arrayinfo -> array -> array -> F.pred
val eq_record :
Cil_types.compinfo -> record -> record -> F.pred
end
val i_neg : Ctypes.c_int -> D.integer -> D.integer
val i_op :
Ctypes.c_int ->
Formula.integer_op -> D.integer -> D.integer -> D.integer
val i_cmp :
Ctypes.c_int ->
Formula.cmp_op -> D.integer -> D.integer -> D.boolean
val bits_not : Ctypes.c_int -> D.integer -> D.integer
val bits_and :
Ctypes.c_int -> D.integer -> D.integer -> D.integer
val bits_or : Ctypes.c_int -> D.integer -> D.integer -> D.integer
val bits_xor :
Ctypes.c_int -> D.integer -> D.integer -> D.integer
val bits_lshift :
Ctypes.c_int -> D.integer -> D.integer -> D.integer
val bits_rshift :
Ctypes.c_int -> D.integer -> D.integer -> D.integer
end
module R :
sig
module D :
sig
module F :
sig
type 'a term = 'a Model.D.F.term
type pred = Model.D.F.pred
val e_int : int -> Formula.integer term
val e_call :
string ->
Formula.abstract term list -> Formula.abstract term
val p_call : string -> Formula.abstract term list -> pred
val wrap : 'a term -> Formula.abstract term
val unwrap : Formula.abstract term -> 'a term
val e_true : Formula.boolean term
val e_false : Formula.boolean term
val e_int : int -> Formula.integer term
val e_float : float -> Formula.real term
val e_icst : string -> Formula.integer term
val e_rcst : string -> Formula.real term
val e_int64 : int64 -> Formula.integer term
val e_ineg : Formula.integer term -> Formula.integer term
val e_rneg : Formula.real term -> Formula.real term
val e_iop :
Formula.integer_op ->
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rop :
Formula.real_op ->
Formula.real term ->
Formula.real term -> Formula.real term
val e_icmp :
Formula.cmp_op ->
Formula.integer term ->
Formula.integer term -> Formula.boolean term
val e_rcmp :
Formula.cmp_op ->
Formula.real term ->
Formula.real term -> Formula.boolean term
val p_icmp :
Formula.cmp_op ->
Formula.integer term -> Formula.integer term -> pred
val p_rcmp :
Formula.cmp_op ->
Formula.real term -> Formula.real term -> pred
val e_bnot : Formula.integer term -> Formula.integer term
val e_band :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_bxor :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_lshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val e_rshift :
Formula.integer term ->
Formula.integer term -> Formula.integer term
val integer_of_real :
Formula.real term -> Formula.integer term
val real_of_integer :
Formula.integer term -> Formula.real term
val e_bool : Formula.boolean term -> Formula.integer term
val e_not : Formula.boolean term -> Formula.boolean term
val e_and :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_or :
Formula.boolean term ->
Formula.boolean term -> Formula.boolean term
val e_cond :
Formula.boolean term -> 'a term -> 'a term -> 'a term
val p_cond : Formula.boolean term -> pred -> pred -> pred
val p_true : pred
val p_false : pred
val p_bool : Formula.boolean term -> pred
val p_and : pred -> pred -> pred
val p_or : pred -> pred -> pred
val p_xor : pred -> pred -> pred
val p_not : pred -> pred
val p_implies : pred -> pred -> pred
val p_iff : pred -> pred -> pred
val p_eq : 'a term -> 'a term -> pred
val p_neq : 'a term -> 'a term -> pred
val p_conj : pred list -> pred
val p_disj : pred list -> pred
val p_named : string -> pred -> pred
val is_true : pred -> bool
val is_false : pred -> bool
val huge_term : int -> 'a term -> bool
val huge_pred : int -> pred -> bool
type var = Model.D.F.var
type pool = Model.D.F.pool
val pool : unit -> pool
val fresh : pool -> string -> Formula.kind -> var
val freshen : pool -> var -> var
val var : var -> 'a term
val eq_var : var -> var -> bool
val name_of_var : var -> string
val tau_of_var : var -> Formula.tau
val kind_of_var : var -> Formula.kind
val term_has_var : var list -> 'a term -> bool
val pred_has_var : var list -> pred -> bool
val term_closed : 'a term -> bool
val pred_closed : pred -> bool
val p_forall : var list -> pred -> pred
val p_exists : var list -> pred -> pred
val p_subst :
(var -> var option) -> var -> 'a term -> pred -> pred
val e_subst :
(var -> var option) ->
var -> 'a term -> 'b term -> 'b term
val e_rename : (var * var) list -> 'a term -> 'a term
val equal_terms : 'a term -> 'a term -> bool
type alpha = Model.D.F.alpha
val empty_alpha : alpha
val fold_alpha :
(var -> var -> 'a -> 'a) -> alpha -> 'a -> 'a
val p_more_alpha_cv : alpha -> pred -> alpha * pred
val p_alpha_cv : pred -> var list * pred
val pp_var : Format.formatter -> var -> unit
val pp_term : Format.formatter -> 'a term -> unit
val pp_pred : Format.formatter -> pred -> unit
val pp_decl :
Format.formatter -> pred Formula.declaration -> unit
val pp_goal : Format.formatter -> string -> pred -> unit
end
type format = Formula.m_format F.term
type abstract = Formula.abstract F.term
type integer = Formula.integer F.term
type real = Formula.real F.term
type boolean = Formula.boolean F.term
type record = Formula.m_array F.term
type urecord = Formula.m_array F.term
type array = Formula.m_array F.term
type set = Formula.m_set F.term
type name = Formula.integer F.term
type pointer = Formula.m_pointer F.term
val pp_kind : Format.formatter -> Mdata.kind -> unit
type interval =
Model.D.interval = {
inf : integer option;
sup : integer option;
}
type 'a assigned =
'a Model.D.assigned =
Aloc of Ctypes.c_object * 'a
| Arange of Ctypes.c_object * 'a * interval
val pp_interval : Format.formatter -> interval -> unit
val e_app0 : string -> 'a F.term
val e_app1 : string -> 'a F.term -> 'b F.term
val e_app2 : string -> 'a F.term -> 'b F.term -> 'c F.term
val e_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> 'd F.term
val e_app4 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term
val e_app5 :
string ->
'a F.term ->
'b F.term ->
'c F.term -> 'd F.term -> 'e F.term -> 'f F.term
val p_app0 : string -> F.pred
val p_app1 : string -> 'a F.term -> F.pred
val p_app2 : string -> 'a F.term -> 'b F.term -> F.pred
val p_app3 :
string -> 'a F.term -> 'b F.term -> 'c F.term -> F.pred
val p_app4 :
string ->
'a F.term -> 'b F.term -> 'c F.term -> 'd F.term -> F.pred
val p_app5 :
string ->
'a F.term ->
'b F.term -> 'c F.term -> 'd F.term -> 'e F.term -> F.pred
val tau_of_logic_type : Cil_types.logic_type -> Formula.tau
type context = Model.D.context
type bindings = Model.D.bindings
class type hint =
object
method capture : F.var list -> unit
method has_var : F.var list -> bool
method pretty : Format.formatter -> unit
method subst : F.var -> Formula.abstract F.term -> unit
end
val closed : bindings
val close : bindings -> F.pred -> F.pred
val capture : hint list -> bindings -> unit
val push :
string -> F.pool -> bindings -> hint list -> context
val pop : string -> context -> bindings
val kill : string -> context -> unit
val flush : string -> context -> F.pred -> F.pred
val term_such_that :
Formula.tau -> ('a F.term -> F.pred) -> 'a F.term
val forall : F.var list -> F.pred -> F.pred
val exists : F.var list -> F.pred -> F.pred
val subst : F.var -> 'a F.term -> F.pred -> F.pred
val fresh : string -> Mdata.vkind -> F.var
val alpha : F.var -> F.var option
val pool : unit -> F.pool
val vkind_of_var : F.var -> Mdata.vkind
val has_vars : F.var list -> F.pred -> bool
type substitution = Model.D.substitution
val apply : substitution -> 'a F.term -> 'a F.term
type havoc =
Model.D.havoc =
Fresh of F.var
| Update of F.var *
(substitution -> Formula.abstract F.term)
val havoc_static : havoc list -> F.pred -> F.pred
val havoc_inductive : havoc list -> F.pred -> F.pred
val clear : unit -> unit
val on_clear : (unit -> unit) -> unit
val fresh_name : string -> string -> string
val add_declaration : F.pred Formula.declaration -> unit
val iter :
Formula.section ->
(F.pred Formula.declaration -> unit) -> unit
val iter_all : (F.pred Formula.declaration -> unit) -> unit
val dummy : unit -> F.pred
module type Identifiable =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Registry =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module type Declarator =
sig
type t
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
val clear : unit -> unit
val section : Formula.section
val declare : t -> string -> F.pred Formula.item
end
module Register :
functor (D : Declarator) ->
sig
type t = D.t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
end
module Varinfo :
sig
type t = Cil_types.varinfo
module H :
sig
type key = Model.D.Varinfo.H.key
type 'a t = 'a Model.D.Varinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Varaddr :
sig
type t = Cil_types.varinfo
module H :
sig
type key = Model.D.Varaddr.H.key
type 'a t = 'a Model.D.Varaddr.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Fieldinfo :
sig
type t = Cil_types.fieldinfo
module H :
sig
type key = Model.D.Fieldinfo.H.key
type 'a t = 'a Model.D.Fieldinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Compinfo :
sig
type t = Cil_types.compinfo
module H :
sig
type key = Model.D.Compinfo.H.key
type 'a t = 'a Model.D.Compinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Arrayinfo :
sig
type t = Ctypes.arrayinfo
module H :
sig
type key = Model.D.Arrayinfo.H.key
type 'a t = 'a Model.D.Arrayinfo.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Logicvar :
sig
type t = Cil_types.logic_var
module H :
sig
type key = Model.D.Logicvar.H.key
type 'a t = 'a Model.D.Logicvar.H.t
val create : int -> 'a t
val clear : 'a t -> unit
val copy : 'a t -> 'a t
val add : 'a t -> key -> 'a -> unit
val remove : 'a t -> key -> unit
val find : 'a t -> key -> 'a
val find_all : 'a t -> key -> 'a list
val replace : 'a t -> key -> 'a -> unit
val mem : 'a t -> key -> bool
val iter : (key -> 'a -> unit) -> 'a t -> unit
val fold :
(key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
val length : 'a t -> int
end
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Log.source option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module type Indexed =
sig
type t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Dindex :
functor (I : Identifiable) ->
sig
type t = I.t
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Findex :
sig
type t = Cil_types.fieldinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Xindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Aindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
module Tindex :
sig
type t = Cil_types.compinfo
val define : t -> unit
val get_definition : t -> F.pred Formula.declaration
val on_definition :
(t -> F.pred Formula.declaration -> unit) -> unit
val get_ind : t -> integer
end
val modulo : Ctypes.c_int -> integer -> integer
val guard : Ctypes.c_int -> integer -> F.pred
val i_convert :
Ctypes.c_int -> Ctypes.c_int -> integer -> integer
val round : Ctypes.c_float -> real -> real
val f_guard : Ctypes.c_float -> real -> F.pred
val f_convert :
Ctypes.c_float -> Ctypes.c_float -> real -> real
val has_type : abstract -> Cil_types.logic_type -> F.pred
val get_range_index : array -> interval -> abstract
val set_range_index : array -> interval -> array
val empty : set
val singleton : abstract -> set
val union : set -> set -> set
val unions : set list -> set
val inter : set -> set -> set
val remove : set -> set -> set
val set_of_list : abstract list -> set
val add_set : set -> set -> set
val mult_set : set -> set -> set
val neg_set : set -> set
val interval : interval -> set
val equal_pointer_bool : pointer -> pointer -> boolean
val lt_pointer_bool : pointer -> pointer -> boolean
val le_pointer_bool : pointer -> pointer -> boolean
val lt_pointer : pointer -> pointer -> F.pred
val le_pointer : pointer -> pointer -> F.pred
val minus_pointer : pointer -> pointer -> integer
val is_null : pointer -> boolean
val null : pointer
val tau_of_object : Ctypes.c_object -> Formula.tau
val tau_of_ctype : Cil_types.typ -> Formula.tau
val int_format : format
val real_format : format
val pointer_format : format
val record_format : format
val urecord_format : format
val array_format : format -> format
val format_of_object : Ctypes.c_object -> format
val decode : format -> abstract -> 'a F.term
val encode : format -> 'a F.term -> abstract
val acc_field : record -> Cil_types.fieldinfo -> abstract
val upd_field :
record -> Cil_types.fieldinfo -> abstract -> record
val acc_index : array -> integer -> abstract
val upd_index : array -> integer -> abstract -> array
val equal : Ctypes.c_object -> abstract -> abstract -> F.pred
val eq_array : Ctypes.arrayinfo -> array -> array -> F.pred
val eq_record :
Cil_types.compinfo -> record -> record -> F.pred
end
val f_neg : Ctypes.c_float -> D.real -> D.real
val f_op :
Ctypes.c_float -> Formula.real_op -> D.real -> D.real -> D.real
val f_cmp :
Ctypes.c_float ->
Formula.cmp_op -> D.real -> D.real -> D.boolean
end
type loc = Model.loc
val loc_of_pointer : Ctypes.c_object -> D.pointer -> loc
val pointer_of_loc : loc -> D.pointer
val cast_loc_to_int :
Cil_types.typ -> loc -> Ctypes.c_int -> D.integer
val cast_int_to_loc :
Ctypes.c_int -> D.integer -> Cil_types.typ -> loc
val pp_loc : Format.formatter -> loc -> unit
type value =
Datalib.Cvalues(Model).value =
V_int of Ctypes.c_int * D.integer
| V_float of Ctypes.c_float * D.real
| V_pointer of Cil_types.typ * loc
| V_record of Cil_types.compinfo * D.record
| V_union of Cil_types.compinfo * D.urecord
| V_array of Ctypes.arrayinfo * D.array
val pp_value : Format.formatter -> value -> unit
val logic_of_value : value -> D.abstract
val value_of_logic : Ctypes.c_object -> D.abstract -> value
type m_of_mem = m_mbits
val tau_of_mem : Formula.tau
val forall_loc : F.pool -> F.var list * Tint.x_addr
val cvar : memory * 'a -> VarDecl.t -> Tint.x_addr
val shift : loc -> Ctypes.c_object -> D.integer -> loc
val index : loc -> Ctypes.c_object -> D.integer -> loc
val field : loc -> Fields.t -> loc
val value_of_bits : (Ctypes.c_object -> t_bits -> value) ref
val bits_of_value : (Ctypes.c_object -> value -> t_bits) ref
val load_mem : mem_bits -> Ctypes.c_object -> Tint.x_addr -> value
val store_mem :
mem_bits -> Ctypes.c_object -> Tint.x_addr -> value -> mem_bits
val format_of_compinfo :
Cil_types.compinfo -> Runtime_mem.Create.Data.D.format
val format_of_array :
Ctypes.arrayinfo -> Runtime_mem.Create.Data.D.format
val rt_format_of_ctype : Ctypes.c_object -> D.format
val value_of_bits :
Ctypes.c_object ->
Runtime_mem.Create.t_bits -> Runtime_mem.Create.Data.value
val bits_of_value : 'a -> value -> Runtime_mem.Create.t_bits
type frame = {
mutable memories : (Clabels.c_label * Runtime_mem.Create.mem) list;
return : Cil_types.typ option;
mutable result : Runtime_mem.Create.F.var option;
mutable exit_status : Runtime_mem.Create.F.var option;
}
val new_frame :
Kernel_function.t ->
m_here:Runtime_mem.Create.mem option ->
m_pre:Runtime_mem.Create.mem option ->
m_post:Runtime_mem.Create.mem option ->
Runtime_mem.Create.F.var option -> Runtime_mem.Create.frame
val new_mem : unit -> Runtime_mem.Create.memory
val find_mem_at :
Runtime_mem.Create.frame ->
Clabels.c_label -> Runtime_mem.Create.mem
val mem_at :
Runtime_mem.Create.frame ->
Clabels.c_label -> Runtime_mem.Create.mem
val result :
Runtime_mem.Create.frame ->
Runtime_mem.Create.F.var * Cil_types.typ
val exit_status :
Runtime_mem.Create.frame -> Runtime_mem.Create.F.var
val set_exit_status :
Runtime_mem.Create.frame ->
Runtime_mem.Create.F.var -> Runtime_mem.Create.frame
val get_exit_status :
Runtime_mem.Create.frame -> Runtime_mem.Create.F.var option
val valid :
Runtime_mem.Create.memory * 'a ->
Runtime_mem.Create.Tint.x_addr D.assigned ->
Runtime_mem.Create.F.pred
val separated :
Runtime_mem.Create.Tint.x_addr D.assigned ->
Runtime_mem.Create.Tint.x_addr D.assigned ->
Runtime_mem.Create.F.pred
val tbits_of_var :
Runtime_mem.Create.F.var -> Runtime_mem.Create.t_bits
val subst_havoc :
Runtime_mem.Create.frame ->
Runtime_mem.Create.Tint.x_addr D.assigned -> D.havoc list
val assigns_goal :
Runtime_mem.Create.frame ->
Clabels.c_label ->
Runtime_mem.Create.Tint.x_addr D.assigned list ->
Clabels.c_label -> Runtime_mem.Create.F.pred
val assigns_supported : bool
val base_address :
Runtime_mem.Create.memory * 'a ->
Runtime_mem.Create.Tint.x_addr -> Runtime_mem.Create.Tint.x_addr
val block_length :
Runtime_mem.Create.memory * 'a ->
Runtime_mem.Create.Tint.x_addr -> Runtime_mem.Create.t_size
type closure = Mem of string | Alloc of string
val pp_closure :
Format.formatter -> Runtime_mem.Create.closure -> unit
val userdef_frame : unit -> Runtime_mem.Create.frame
val userdef_signature :
Runtime_mem.Create.frame ->
'a ->
'b ->
Runtime_mem.Create.F.var list * Runtime_mem.Create.closure list
val userdef_closure :
Runtime_mem.Create.memory * 'a ->
Runtime_mem.Create.closure ->
Formula.abstract Runtime_mem.Create.F.term
val label_at_closure : Runtime_mem.Create.closure -> string
val update_at_label :
Runtime_mem.Create.frame -> Clabels.c_label -> D.F.pred -> D.F.pred
val quantify_at_label :
Runtime_mem.Create.frame -> Clabels.c_label -> D.F.pred -> D.F.pred
val subst_lval :
Runtime_mem.Create.frame ->
Ctypes.c_object ->
Runtime_mem.Create.Tint.x_addr ->
Runtime_mem.Create.Data.value -> D.F.pred -> D.F.pred
val subst_result :
Runtime_mem.Create.frame -> value option -> D.F.pred -> D.F.pred
val local_scope :
Runtime_mem.Create.frame ->
Cil_datatype.Varinfo.Hashtbl.key list ->
Mcfg.scope -> D.F.pred -> D.F.pred
type goal = Runtime_mem.Create.F.pred
val make_goal : 'a -> 'b -> 'b
end