pieuvre/structs.ml

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;;