X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Flambda-delta%2Fbasic_rg%2Fbrg.ml;h=e42db3319b5739aea2bb9f00218b102f411adf35;hb=be0ca791abbf1084b7218f2d17ab48462fbb3049;hp=45777ead4f41d41dcc1ab793d5473a35b54df016;hpb=25fba20748a951f7061188cc5fabece8f5ac97b9;p=helm.git diff --git a/helm/software/lambda-delta/basic_rg/brg.ml b/helm/software/lambda-delta/basic_rg/brg.ml index 45777ead4..e42db3319 100644 --- a/helm/software/lambda-delta/basic_rg/brg.ml +++ b/helm/software/lambda-delta/basic_rg/brg.ml @@ -9,18 +9,80 @@ \ / This software is distributed as is, NO WARRANTY. V_______________________________________________________________ *) +(* kernel version: basic, relative, global *) +(* note : ufficial basic lambda-delta *) + type uri = NUri.uri type id = Aut.id -type bind = Abst | Abbr (* abstraction, abbreviation *) +type bind = Void (* exclusion *) + | Abst of term (* abstraction *) + | Abbr of term (* abbreviation *) + +and term = Sort of attrs * int (* attrs, hierarchy index *) + | LRef of attrs * int (* attrs, position index *) + | GRef of attrs * uri (* attrs, reference *) + | Cast of attrs * term * term (* attrs, type, term *) + | Appl of attrs * term * term (* attrs, argument, function *) + | Bind of attrs * bind * term (* attrs, binder, scope *) + +and attr = Name of bool * id (* real?, name *) + | Entry of int * bind (* age, binder *) -type term = Sort of int (* hierarchy index *) - | LRef of int (* reverse de Bruijn index *) - | GRef of uri (* reference *) - | Cast of term * term (* type, term *) - | Appl of term * term (* argument, function *) - | Bind of id * bind * term * term (* name, binder, content, scope *) +and attrs = attr list -type obj = int * uri * bind * term (* age, uri, binder, contents *) +type obj = int * uri * bind (* age, uri, binder, contents *) type item = obj option + +type context = (attrs * bind) list (* attrs, binder *) + +type message = (context, term) Log.item list + +(* Currified constructors ***************************************************) + +let abst w = Abst w + +let abbr v = Abbr v + +let lref a i = LRef (a, i) + +let cast a u t = Cast (a, u, t) + +let appl a u t = Appl (a, u, t) + +let bind a b t = Bind (a, b, t) + +let bind_abst a u t = Bind (a, Abst u, t) + +let bind_abbr a v t = Bind (a, Abbr v, t) + +(* context handling functions ***********************************************) + +let empty_context = [] + +let push f es a b = + let c = (a, b) :: es in f c + +let append f es1 es2 = + f (List.append es2 es1) + +let map f map es = + Cps.list_map f map es + +let contents f es = f es + +let get f es i = + let rec aux e i = function + | [] -> f e None + | hd :: tl -> + if i = 0 then f e (Some hd) else + let e = match hd with _, Abst _ -> succ e | _ -> e in + aux e (pred i) tl + in + aux 0 i es + +let rec name f = function + | [] -> f None + | Name (r, n) :: _ -> f (Some (r, n)) + | _ :: tl -> name f tl