pieuvre/structs.ml

26 lines
541 B
OCaml

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