sig
type var
type 'a term
type pred
type abstract = Formula.m_abstract Formula.S.term
type integer = Formula.m_integer Formula.S.term
type real = Formula.m_real Formula.S.term
type boolean = Formula.m_boolean Formula.S.term
type record = Formula.m_record Formula.S.term
type urecord = Formula.m_array Formula.S.term
type array = Formula.m_array Formula.S.term
type set = Formula.m_set Formula.S.term
type name = Formula.m_integer Formula.S.term
type decl =
(Formula.S.var, Formula.S.abstract, Formula.S.pred) Formula.declaration
val e_int : int -> Formula.S.integer
val e_call : string -> Formula.S.abstract list -> Formula.S.abstract
val p_call : string -> Formula.S.abstract list -> Formula.S.pred
val wrap : 'a Formula.S.term -> Formula.S.abstract
val unwrap : Formula.S.abstract -> 'a Formula.S.term
val clear : unit -> unit
val on_clear : (unit -> unit) -> unit
val fresh_name : string -> string -> string
val add_declaration : Formula.S.decl -> unit
val has_declaration : string -> bool
val iter_all : (string -> unit) -> (Formula.S.decl -> unit) -> unit
module type Identifiable =
sig
type t
module H : Hashtbl.S
val index : Formula.S.Identifiable.t -> H.key
val prefix : string
val basename : Formula.S.Identifiable.t -> string
val location : Formula.S.Identifiable.t -> Lexing.position option
val pp_title : Format.formatter -> Formula.S.Identifiable.t -> unit
val pp_descr : Format.formatter -> Formula.S.Identifiable.t -> unit
end
module type Registry =
sig
type t
val define : Formula.S.Registry.t -> unit
val get_definition : Formula.S.Registry.t -> Formula.S.decl
val on_definition :
(Formula.S.Registry.t -> Formula.S.decl -> 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 -> Lexing.position 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 ->
(Formula.S.var, Formula.S.abstract, Formula.S.pred) Formula.item
end
module DRegister :
functor (D : Declarator) ->
sig
type t = D.t
val define : t -> unit
val get_definition : t -> decl
val on_definition : (t -> decl -> unit) -> unit
end
module Varinfo :
sig
type t = Cil_types.varinfo
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Lexing.position 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 : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Lexing.position 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 : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Lexing.position 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 : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Lexing.position 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 : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Lexing.position 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 : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Lexing.position option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module LTypeinfo :
sig
type t = Cil_types.logic_type
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Lexing.position option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module Cobject :
sig
type t = Ctypes.c_object
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Lexing.position option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
module ArrayDim :
sig
type t = Ctypes.c_object * int
module H : Hashtbl.S
val index : t -> H.key
val prefix : string
val basename : t -> string
val location : t -> Lexing.position option
val pp_title : Format.formatter -> t -> unit
val pp_descr : Format.formatter -> t -> unit
end
val adt_decl : Cil_types.logic_type_info -> string
val pp_tau : Format.formatter -> Formula.tau -> unit
val e_true : Formula.S.boolean
val e_false : Formula.S.boolean
val e_float : float -> Formula.S.real
val e_icst : string -> Formula.S.integer
val e_rcst : string -> Formula.S.real
val e_int64 : int64 -> Formula.S.integer
val e_ineg : Formula.S.integer -> Formula.S.integer
val e_rneg : Formula.S.real -> Formula.S.real
val e_iop :
Formula.int_op ->
Formula.S.integer -> Formula.S.integer -> Formula.S.integer
val e_rop :
Formula.real_op -> Formula.S.real -> Formula.S.real -> Formula.S.real
val e_icmp :
Formula.cmp_op ->
Formula.S.integer -> Formula.S.integer -> Formula.S.boolean
val e_rcmp :
Formula.cmp_op -> Formula.S.real -> Formula.S.real -> Formula.S.boolean
val p_icmp :
Formula.cmp_op ->
Formula.S.integer -> Formula.S.integer -> Formula.S.pred
val p_rcmp :
Formula.cmp_op -> Formula.S.real -> Formula.S.real -> Formula.S.pred
val e_bnot : Formula.S.integer -> Formula.S.integer
val e_band : Formula.S.integer -> Formula.S.integer -> Formula.S.integer
val e_bor : Formula.S.integer -> Formula.S.integer -> Formula.S.integer
val e_bxor : Formula.S.integer -> Formula.S.integer -> Formula.S.integer
val e_lshift : Formula.S.integer -> Formula.S.integer -> Formula.S.integer
val e_rshift : Formula.S.integer -> Formula.S.integer -> Formula.S.integer
val integer_of_real : Formula.S.real -> Formula.S.integer
val real_of_integer : Formula.S.integer -> Formula.S.real
val e_bool : Formula.S.boolean -> Formula.S.integer
val e_not : Formula.S.boolean -> Formula.S.boolean
val e_and : Formula.S.boolean -> Formula.S.boolean -> Formula.S.boolean
val e_or : Formula.S.boolean -> Formula.S.boolean -> Formula.S.boolean
val e_cond :
Formula.S.boolean ->
'a Formula.S.term -> 'a Formula.S.term -> 'a Formula.S.term
val p_cond :
Formula.S.boolean -> Formula.S.pred -> Formula.S.pred -> Formula.S.pred
val e_getfield :
Cil_types.fieldinfo -> Formula.S.record -> Formula.S.abstract
val e_setfield :
Cil_types.fieldinfo ->
Formula.S.record -> Formula.S.abstract -> Formula.S.record
val e_access : Formula.S.array -> Formula.S.integer -> Formula.S.abstract
val e_update :
Formula.S.array ->
Formula.S.integer -> Formula.S.abstract -> Formula.S.array
val p_true : Formula.S.pred
val p_false : Formula.S.pred
val p_bool : Formula.S.boolean -> Formula.S.pred
val p_and : Formula.S.pred -> Formula.S.pred -> Formula.S.pred
val p_or : Formula.S.pred -> Formula.S.pred -> Formula.S.pred
val p_xor : Formula.S.pred -> Formula.S.pred -> Formula.S.pred
val p_not : Formula.S.pred -> Formula.S.pred
val p_implies : Formula.S.pred -> Formula.S.pred -> Formula.S.pred
val p_iff : Formula.S.pred -> Formula.S.pred -> Formula.S.pred
val p_eq : 'a Formula.S.term -> 'a Formula.S.term -> Formula.S.pred
val p_neq : 'a Formula.S.term -> 'a Formula.S.term -> Formula.S.pred
val p_conj : Formula.S.pred list -> Formula.S.pred
val p_disj : Formula.S.pred list -> Formula.S.pred
val p_named : string -> Formula.S.pred -> Formula.S.pred
val is_true : Formula.S.pred -> bool
val is_false : Formula.S.pred -> bool
val huge_term : int -> 'a Formula.S.term -> bool
val huge_pred : int -> Formula.S.pred -> bool
type pool
val pool : unit -> Formula.S.pool
val p_fresh : Formula.S.pool -> string -> Formula.kind -> Formula.S.var
val p_freshen : Formula.S.pool -> Formula.S.var -> Formula.S.var
val var : Formula.S.var -> 'a Formula.S.term
val eq_var : Formula.S.var -> Formula.S.var -> bool
val name_of_var : Formula.S.var -> string
val basename_of_var : Formula.S.var -> string
val tau_of_var : Formula.S.var -> Formula.tau
val kind_of_var : Formula.S.var -> Formula.kind
val term_has_var : Formula.S.var list -> 'a Formula.S.term -> bool
val pred_has_var : Formula.S.var list -> Formula.S.pred -> bool
val term_calls : string -> 'a Formula.S.term -> bool
val pred_calls : string -> Formula.S.pred -> bool
val term_closed : 'a Formula.S.term -> bool
val pred_closed : Formula.S.pred -> bool
val freevars : Formula.S.pred -> Formula.S.var list
val p_forall : Formula.S.var list -> Formula.S.pred -> Formula.S.pred
val p_exists : Formula.S.var list -> Formula.S.pred -> Formula.S.pred
val p_subst :
(Formula.S.var -> Formula.S.var option) ->
Formula.S.var -> 'a Formula.S.term -> Formula.S.pred -> Formula.S.pred
val e_subst :
(Formula.S.var -> Formula.S.var option) ->
Formula.S.var ->
'a Formula.S.term -> 'b Formula.S.term -> 'b Formula.S.term
val e_rename :
(Formula.S.var * Formula.S.var) list ->
'a Formula.S.term -> 'a Formula.S.term
val equal_terms : 'a Formula.S.term -> 'a Formula.S.term -> bool
type alpha
val empty_alpha : Formula.S.alpha
val fold_alpha :
(Formula.S.var -> Formula.S.var -> 'a -> 'a) ->
Formula.S.alpha -> 'a -> 'a
val p_more_alpha_cv :
Formula.S.alpha -> Formula.S.pred -> Formula.S.alpha * Formula.S.pred
val p_alpha_cv : Formula.S.pred -> Formula.S.var list * Formula.S.pred
val pp_var : Format.formatter -> Formula.S.var -> unit
val pp_section : Format.formatter -> string -> unit
val pp_term : Format.formatter -> 'a Formula.S.term -> unit
val pp_pred : Format.formatter -> Formula.S.pred -> unit
val pp_decl : Format.formatter -> Formula.S.decl -> unit
val pp_goal : Format.formatter -> string -> Formula.S.pred -> unit
val pp_vkind : Format.formatter -> Formula.kind -> unit
val e_app0 : string -> 'a Formula.S.term
val e_app1 : string -> 'a Formula.S.term -> 'b Formula.S.term
val e_app2 :
string -> 'a Formula.S.term -> 'b Formula.S.term -> 'c Formula.S.term
val e_app3 :
string ->
'a Formula.S.term ->
'b Formula.S.term -> 'c Formula.S.term -> 'd Formula.S.term
val e_app4 :
string ->
'a Formula.S.term ->
'b Formula.S.term ->
'c Formula.S.term -> 'd Formula.S.term -> 'e Formula.S.term
val e_app5 :
string ->
'a Formula.S.term ->
'b Formula.S.term ->
'c Formula.S.term ->
'd Formula.S.term -> 'e Formula.S.term -> 'f Formula.S.term
val p_app0 : string -> Formula.S.pred
val p_app1 : string -> 'a Formula.S.term -> Formula.S.pred
val p_app2 :
string -> 'a Formula.S.term -> 'b Formula.S.term -> Formula.S.pred
val p_app3 :
string ->
'a Formula.S.term ->
'b Formula.S.term -> 'c Formula.S.term -> Formula.S.pred
val p_app4 :
string ->
'a Formula.S.term ->
'b Formula.S.term ->
'c Formula.S.term -> 'd Formula.S.term -> Formula.S.pred
val p_app5 :
string ->
'a Formula.S.term ->
'b Formula.S.term ->
'c Formula.S.term ->
'd Formula.S.term -> 'e Formula.S.term -> Formula.S.pred
val dummy : unit -> Formula.S.pred
val i_zero : Formula.S.integer
val r_zero : Formula.S.real
val i_one : Formula.S.integer
val i_add : Formula.S.integer -> Formula.S.integer -> Formula.S.integer
val i_mult : Formula.S.integer -> Formula.S.integer -> Formula.S.integer
val i_sub : Formula.S.integer -> Formula.S.integer -> Formula.S.integer
val guard : Ctypes.c_int -> Formula.S.integer -> Formula.S.pred
val modulo : Ctypes.c_int -> Formula.S.integer -> Formula.S.integer
val i_convert :
Ctypes.c_int -> Ctypes.c_int -> Formula.S.integer -> Formula.S.integer
type interval = {
inf : Formula.S.integer option;
sup : Formula.S.integer option;
}
type 'a assigned =
Aloc of Ctypes.c_object * 'a
| Arange of Ctypes.c_object * 'a * Formula.S.interval
type havoc =
Fresh of Formula.S.var
| Update of Formula.S.var *
((Formula.S.var * Formula.S.var) list -> Formula.S.abstract)
val pp_interval : Format.formatter -> Formula.S.interval -> unit
val set_range_index :
Formula.S.array -> Formula.S.interval -> Formula.S.array
val empty : Formula.S.set
val singleton : Formula.S.abstract -> Formula.S.set
val union : Formula.S.set -> Formula.S.set -> Formula.S.set
val unions : Formula.S.set list -> Formula.S.set
val inter : Formula.S.set -> Formula.S.set -> Formula.S.set
val remove : Formula.S.set -> Formula.S.set -> Formula.S.set
val set_of_list : Formula.S.abstract list -> Formula.S.set
val add_set : Formula.S.set -> Formula.S.set -> Formula.S.set
val mult_set : Formula.S.set -> Formula.S.set -> Formula.S.set
val neg_set : Formula.S.set -> Formula.S.set
val interval : Formula.S.interval -> Formula.S.set
val acc_field :
Formula.S.record -> Cil_types.fieldinfo -> Formula.S.abstract
val upd_field :
Formula.S.record ->
Cil_types.fieldinfo -> Formula.S.abstract -> Formula.S.record
val acc_index : Formula.S.array -> Formula.S.integer -> Formula.S.abstract
val upd_index :
Formula.S.array ->
Formula.S.integer -> Formula.S.abstract -> Formula.S.array
module type Indexed =
sig
type t
val define : t -> unit
val get_definition : t -> decl
val on_definition : (t -> decl -> unit) -> unit
val get_ind : t -> Formula.S.integer
val has_ind : t -> Formula.S.pred -> bool
end
module Dindex :
functor (I : Identifiable) ->
sig
type t = I.t
val define : t -> unit
val get_definition : t -> decl
val on_definition : (t -> decl -> unit) -> unit
val get_ind : t -> integer
val has_ind : t -> pred -> bool
end
module Findex :
sig
type t = Cil_types.fieldinfo
val define : t -> unit
val get_definition : t -> decl
val on_definition : (t -> decl -> unit) -> unit
val get_ind : t -> integer
val has_ind : t -> pred -> bool
end
module Xindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> decl
val on_definition : (t -> decl -> unit) -> unit
val get_ind : t -> integer
val has_ind : t -> pred -> bool
end
module Aindex :
sig
type t = Cil_types.varinfo
val define : t -> unit
val get_definition : t -> decl
val on_definition : (t -> decl -> unit) -> unit
val get_ind : t -> integer
val has_ind : t -> pred -> bool
end
module Tindex :
sig
type t = Cil_types.compinfo
val define : t -> unit
val get_definition : t -> decl
val on_definition : (t -> decl -> unit) -> unit
val get_ind : t -> integer
val has_ind : t -> pred -> bool
end
module LTindex :
sig
type t = Cil_types.logic_type
val define : t -> unit
val get_definition : t -> decl
val on_definition : (t -> decl -> unit) -> unit
val get_ind : t -> integer
val has_ind : t -> pred -> bool
end
end