(* Variables des λ-termes *) type var = string;; let varRegex = Str.regexp "^([a-z]+)([0-9]*)$";; (* Variable des types simples *) type type_var = string;; type tvar = type_var;; (* TODEL *) let tvarRegex = Str.regexp "^([A-Z]+)([0-9]*)$";; (* Type complexe *) type ty = | TSimple of type_var | TImpl of ty * ty | TFalse;; (* λ-terme *) type lam = | LFun of var * ty * lam | LApp of lam * lam | LVar of var | LExf of lam * ty;; (* Environnement de typage *) type gam = (type_var * ty) list;; (* λ-terme avec des trous *) type lho = (lam list) -> lam;;