pieuvre/structs.ml
2022-05-08 18:10:00 +02:00

29 lines
589 B
OCaml

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