Module Eq
module Eq: sig
.. end
Équations du premier ordre et leur résolution
Pcf typé
Pour le TP numéro 6
type
eqs = (T.Type.t * T.Type.t) list
type
subst
Types des ensembles d'équations et des substitutions
val print_eqs : Pervasives.out_channel -> eqs -> unit
val print_subst : Pervasives.out_channel -> subst -> unit
Et leurs afficheurs
val fresh_var : unit -> int
Renvoie une variable de type fraîche.
val subst : subst -> int -> T.Type.t
Applique une substitution à une variable de type
val subst_type : subst -> T.Type.t -> T.Type.t
L'appel subst s t
applique la substitution s
au type t
.
val mgu : eqs -> subst
Résolution des équations, renvoie une solution principale.
val mgu_incr : T.Type.t -> T.Type.t -> subst -> subst
Résolution incrémentale, on peut voir l'appel mgu_incr t1 t2 s
comme renvoyant la substitution mgu(s(t1),s(t2)) o s.
Pour le TP numéro 7
type
scheme = int list * T.Type.t
Schéma de type : une paire (vs,t)
, où vs
est la liste des variables
quantifiées dans le type ty
.
val print_scheme : Pervasives.out_channel -> scheme -> unit
Afficheur
module Vars: sig
.. end
with type elt = int
Ensembles de variables de types (ensembles de int
, donc).
val dom : subst -> Vars.t
Support d'une substitution, i.e. ensemble des variables de type
x telles que s(x) est différent de x.
val id : subst
Substitution identitée id(x) = x pour tout x.
val delta : int -> T.Type.t -> subst
L'appel delta x ty
fabrique la substitution s(x) = ty
et s(y) = y pour tout y différent de x
val comp : subst -> subst -> subst
Composition des substitutions,
ne fonctionne que pour des substitutions de supports disjoints.