sig
type boolean
type integer
type real
type abstract
type m_name
type m_format
type m_pointer
type m_array
type m_record
type m_urecord
type m_set
type m_zone
type tau =
Integer
| Real
| Boolean
| Pointer
| Set of Formula.tau
| Record of Cil_types.compinfo
| Array of Ctypes.arrayinfo
| ADT of string * Formula.tau list
type kind =
Model of Formula.tau
| Acsl of Formula.tau * Cil_types.logic_type
type integer_op = Iadd | Isub | Imul | Idiv | Imod
type real_op = Radd | Rsub | Rmul | Rdiv
type cmp_op = Ceq | Cneq | Clt | Cleq
type section = S_name | S_typedef | S_userdef | S_goals
type 'a item =
Type of int
| Name of int
| Cons of int
| Function of Formula.tau list * Formula.tau
| Predicate of Formula.tau list
| Axiom of 'a
type 'a declaration = {
d_section : Formula.section;
d_name : string;
d_title : Format.formatter -> unit;
d_descr : Format.formatter -> unit;
d_source : Log.source option;
d_item : 'a Formula.item;
}
module type Vernacular =
sig
type 'a term
type pred
val e_int : int -> Formula.integer Formula.Vernacular.term
val e_call :
string ->
Formula.abstract Formula.Vernacular.term list ->
Formula.abstract Formula.Vernacular.term
val p_call :
string ->
Formula.abstract Formula.Vernacular.term list ->
Formula.Vernacular.pred
val wrap :
'a Formula.Vernacular.term ->
Formula.abstract Formula.Vernacular.term
val unwrap :
Formula.abstract Formula.Vernacular.term ->
'a Formula.Vernacular.term
end
module type S =
sig
type 'a term
type pred
val e_int : int -> integer term
val e_call : string -> abstract term list -> abstract term
val p_call : string -> abstract term list -> pred
val wrap : 'a term -> abstract term
val unwrap : 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
type pool
val pool : unit -> Formula.S.pool
val fresh : Formula.S.pool -> string -> Formula.kind -> Formula.S.var
val freshen : Formula.S.pool -> Formula.S.var -> Formula.S.var
val var : Formula.S.var -> 'a term
val eq_var : Formula.S.var -> Formula.S.var -> bool
val name_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 term -> bool
val pred_has_var : Formula.S.var list -> pred -> bool
val term_closed : 'a term -> bool
val pred_closed : pred -> bool
val p_forall : Formula.S.var list -> pred -> pred
val p_exists : Formula.S.var list -> pred -> pred
val p_subst :
(Formula.S.var -> Formula.S.var option) ->
Formula.S.var -> 'a term -> pred -> pred
val e_subst :
(Formula.S.var -> Formula.S.var option) ->
Formula.S.var -> 'a term -> 'b term -> 'b term
val e_rename :
(Formula.S.var * Formula.S.var) list -> 'a term -> 'a term
val equal_terms : 'a term -> 'a 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 -> pred -> Formula.S.alpha * pred
val p_alpha_cv : pred -> Formula.S.var list * pred
val pp_var : Format.formatter -> Formula.S.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
end