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