Dolmen_std.Exprtype 'a tag = 'a Tag.ttype builtin =
< ty : ty
; ty_var : ty_var
; ty_cst : ty_cst
; term : term
; term_var : term_var
; term_cst : term_cst >
Builtin.tExtensible variant type for builtin operations.
and 'ty id = private {id_ty : 'ty; | |
index : index; | (* unique index *) |
path : Path.t; | |
builtin : builtin; | |
mutable tags : Tag.map; |
}The type of identifiers. 'ty is the type for representing the type of the id.
and ty_descr = | TyVar of ty_var | (* Type variables *) |
| TyApp of ty_cst * ty list | (* Application *) |
| Arrow of ty list * ty | (* Function type *) |
| Pi of ty_var list * ty | (* Type quantification *) |
Type descriptions.
and ty = private {mutable ty_hash : hash; |
mutable ty_tags : Tag.map; |
mutable ty_descr : ty_descr; |
mutable ty_head : ty; |
}Types, which wrap type description with a memoized hash and some tags.
and pattern = termpatterns are simply terms
and term_descr = | Var of term_var | (* Variables *) |
| Cst of term_cst | (* Constants *) |
| App of term * ty list * term list | (* Application *) |
| Binder of binder * term | (* Binders *) |
| Match of term * (pattern * term) list | (* Pattern matching *) |
Term descriptions.
and binder = | Let_seq of (term_var * term) list |
| Let_par of (term_var * term) list |
| Lambda of ty_var list * term_var list |
| Exists of ty_var list * term_var list |
| Forall of ty_var list * term_var list |
Binders.
and term = {term_ty : ty; |
term_descr : term_descr; |
mutable term_hash : hash; |
mutable term_tags : Tag.map; |
}Term, which wrap term descriptions.
and formula = termAlias for signature compatibility (with Dolmen_loop.Pipes.Make for instance).
exception Already_aliased of ty_cstexception Type_already_defined of ty_cstexception Record_type_expected of ty_cstmodule Tags : sig ... endmodule Print : sig ... endmodule Subst : sig ... endModule to handle substitutions
module Id : sig ... endmodule Ty : sig ... endmodule Term : sig ... endSignature required by terms for typing first-order polymorphic terms.