40 lines
823 B
OCaml
40 lines
823 B
OCaml
(* 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
|
|
| TAnd of ty * ty
|
|
| TOr of ty * ty
|
|
| TFalse
|
|
| TTrue;;
|
|
|
|
(* λ-terme *)
|
|
type lam =
|
|
| LFun of var_lambda * ty * lam
|
|
| LApp of lam * lam
|
|
| LVar of var_lambda
|
|
| LExf of lam * ty
|
|
| LCouple of lam * lam
|
|
| LFst of lam
|
|
| LSnd of lam
|
|
| LIg of lam * ty
|
|
| LId of lam * ty
|
|
| LCase of lam * lam * lam
|
|
| LI;;
|
|
|
|
(* Environnement de typage *)
|
|
type gam = (var_type * ty) list;;
|
|
|
|
(* λ-terme avec des trous *)
|
|
type lho = (lam list) -> lam;;
|