Module Mdata.S.F


module F: Formula.S 

include Formula.Vernacular

Terms


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

Arithmetics


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

Booleans


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

Conditional


val e_cond : Formula.boolean term -> 'a term -> 'a term -> 'a term
val p_cond : Formula.boolean term -> pred -> pred -> pred

Predicates


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

Utilities


val is_true : pred -> bool
val is_false : pred -> bool
val huge_term : int -> 'a term -> bool
val huge_pred : int -> pred -> bool

Variables

Pools are used to generate fresh free variables. Do not mix non-closed terms from different pools.

type var 
type 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
Requires domain to be disjoint from co-domain
val equal_terms : 'a term -> 'a term -> bool
Returns true when the two terms are syntactically equals

Alpha conversion


type alpha 
Maping from old var to new var

Empty mapping

val empty_alpha : alpha
val fold_alpha : (var -> var -> 'a -> 'a) -> alpha -> 'a -> 'a
val p_more_alpha_cv : alpha -> pred -> alpha * pred
alpha', p' = p_more_alpha_cv alpha p build p' from p by renaming all the variable v into v' according to the mapping alpha. Add new mappings for the variables that are not already mapped.
val p_alpha_cv : pred -> var list * pred
easier to use when doing a simple alpha conversion.
Returns the new predicate and the newly created variables.

Pretty printers


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