AltErgoLib.TyTypes
This module defines the representation of types.
type t = | TintInteger numbers
*)| TrealReal numbers
*)| TboolBooleans
*)| Tvar of tvarType variables
*)| Tbitv of intBitvectors of a given length
*)| Text of t list * Dolmen.Std.Expr.ty_cstAbstract types applied to arguments. Text (args, s) is the application of the abstract type constructor s to arguments args.
| Tfarray of t * tFunctional arrays. TFarray (src,dst) maps values of type src to values of type dst.
| Tadt of Dolmen.Std.Expr.ty_cst * t listApplication of algebraic data types. Tadt (a, params) denotes the application of the polymorphic datatype a to the types parameters params.
For instance the type of integer lists can be represented by the value Tadt (Hstring.make "list", [Tint] where the identifier list denotes a polymorphic ADT defined by the user with t_adt.
type adt_constr = {constr : Dolmen.Std.Expr.term_cst;constructor of an ADT type
*)destrs : (Dolmen.Std.Expr.term_cst * t) list;the list of destructors associated with the constructor and their respective types
*)}type type_body = adt_constr listBodies of types definitions.
val assoc_destrs :
Dolmen.Std.Expr.term_cst ->
adt_constr list ->
(Dolmen.Std.Expr.term_cst * t) listassoc_destrs cons cases returns the list of destructors associated with the constructor cons in the ADT defined by cases.
val hash : t -> intHash function
val pp_smtlib : Stdlib.Format.formatter -> t -> unitPrinting function for types in smtlib2 format.
val print : Stdlib.Format.formatter -> t -> unitPrinting function for types (does not print the type of each fields for records).
val print_list : Stdlib.Format.formatter -> t list -> unitPrint function for lists of types (does not print the type of each fields for records).
val print_full : Stdlib.Format.formatter -> t -> unitPrint function including the record fields.
val vty_of : t -> TvSet.tReturns the set of type variables that occur in a given type.
val tunit : tThe unit type.
val fresh_tvar : unit -> tWrap the fresh_var function to return a type.
val fresh_empty_text : unit -> tReturn a fesh abstract type.
Apply the abstract type constructor to the list of type arguments given.
val t_adt :
?body:
(Dolmen.Std.Expr.term_cst * (Dolmen.Std.Expr.term_cst * t) list) list
option ->
Dolmen.Std.Expr.ty_cst ->
t list ->
tCreate an algebraic datatype. The body is a list of constructors, where each constructor is associated with the list of its destructors with their respective types. If body is none, then no definition will be registered for this type. The second argument is the name of the type. The third one provides its list of arguments.
type subst = t TvMap.tThe type of substitution, i.e. maps from type variables identifiers to types.
val print_subst : Stdlib.Format.formatter -> subst -> unitPrint function for substitutions.
val esubst : substThe empty substitution, a.k.a. the identity.
Exception raised during matching. TypeClash (u, v) is raised when u and v could not be matched (u and v may be sub-types of the types being actually matched).
Matching of types (non-destructive). matching pat t returns a substitution subst such that apply_subst subst pat is equal to t.
val fresh_hypothesis_name : goal_sort -> stringcreate a fresh hypothesis name given a goal sort.
Assuming a name generated by fresh_hypothesis_name, answers whether the name design a local hypothesis ?
Assuming a name generated by fresh_hypothesis_name, does the name design a global hypothesis ?
val print_goal_sort : Stdlib.Format.formatter -> goal_sort -> unitPrint a goal sort