(* Variables des λ-termes *) type var = string;; let varRegex = Str.regexp "^([a-z]+)([0-9]*)$";; (* Variable des types simples *) type tvar = string;; let tvarRegex = Str.regexp "^([A-Z]+)([0-9]*)$";; (* Type complexe *) type ty = | TSimple of tvar | 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 = (tvar * ty) list;; (* λ-terme avec des trous *) type lho = (lam list) -> lam;;