Module Terme


module Terme: sig .. end
Fichier .mli (interface) non existante


Le type des termes


type ('a, 'b) t =
| Var of 'b
| Operation of 'a * ('a, 'b) t list
Termes sur un signature 'a et une ensemble de variables 'b

Itérateurs sur les termes

val iter_term1 : ('a -> 'b) ->
('c -> 'd -> 'b) -> ('d -> 'b -> 'd) -> 'd -> ('c, 'a) t -> 'b
Itérateur sur les termes, première version. On utilise List.map pour les calculs recursifs sur les fils. On utilise List.fold_left, recursif terminal.
val iter_term2 : ('a -> 'b) ->
('c -> 'd -> 'b) -> ('d -> 'b -> 'd) -> 'd -> ('c, 'a) t -> 'b
Itérateur sur les termes, deuxième version. On n'utilise pas List.map. On utilise seulement List.fold_left.
val iter_term : ('a -> 'b) ->
('c -> 'd -> 'b) -> ('d -> 'b -> 'd) -> 'd -> ('c, 'a) t -> 'b
Itérateur sur les termes, version finale. Il s'agit de iter_yerm2.

Opérations sur les termes

val vars : ('a, 'b) t -> 'b list
Calcul des variables dans un terme.
val occurs : 'a -> ('b, 'a) t -> bool
Est ce que une variable occurre un terme?.

Le type des substitutions

type ('a, 'b) s = ('b * ('a, 'b) t) list 
Type des substitutions. Une substitution est une liste de couple. Chaque couple est formée par une variable de type 'b, et d'un terme de type ('a,'b) t.

Opérations sur les substitutions (et les termes)

val apply_subst : ('a, 'b) s -> ('a, 'b) t -> ('a, 'b) t
Appliquer une substitition s à un terme t.
val compsubst1 : ('a, 'b) s ->
('b * ('a, 'b) t) list -> ('b * ('a, 'b) t) list
Calcul de la composition de deux substitutions. Il s'agit de s2 o s1 : d'abord on applilque s1 et puis on applique s2.
val compsubst2 : ('a, 'b) s ->
('b * ('a, 'b) t) list -> ('b * ('a, 'b) t) list
Calcul de la composition de deux substitution, deuxième version. On se sert du fait que List.assoc cherche la premiere occurrence dans une liste.
val compsubst : ('a, 'b) s -> ('a, 'b) s -> ('a, 'b) s
Calcul de la composition de deux substitution, version finale.

Filtrage


Filtrage, traitement des erreurs faible

exception Match_exc1
val add_subst1 : ('a, 'b) s -> 'b * ('a, 'b) t -> ('a, 'b) s
val matching1 : ('a, 'b) t * ('a, 'b) t -> ('a, 'b) s
Filtrage, première version
val matching2 : ('a, 'b) t * ('a, 'b) t -> ('a, 'b) s
Filtrage, deuxième version. On intercepte les exception lévées par List.combine

Filtrage, traitement des erreurs amelioré

exception Match_exc of string
val add_subst2 : ('a, string) s -> string * ('a, string) t -> ('a, string) s
val matching3 : (string, string) t * (string, string) t ->
(string, string) s
Filtrage, version avec traitment d'erreurs.
val matching : (string, string) t * (string, string) t ->
(string, string) s
Filtrage, version finale.

Unification

val unify : (('a, 'b) t * ('a, 'b) t) list -> ('a, 'b) s
Unification