]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/helena/src/common/entity.ml
update in helena
[helm.git] / helm / software / helena / src / common / entity.ml
index ab99e24cd5641c0285e825cf858911c0127f0502..039ed63a4cab12b5f15112130b13786ac7b27afd 100644 (file)
@@ -29,6 +29,12 @@ type node_attrs = {
    n_apix: int; (* additional position index *)
 }
 
+type appl_attrs = {
+   a_rest: bool;  (* restricted application? *)
+   a_main: arity; (* main arity *)
+   a_side: arity; (* side arity *)
+}
+
 type bind_attrs = {
    b_name: name option; (* name *)
    b_main: arity;       (* main arity *)
@@ -40,9 +46,14 @@ type root_attrs = {
    r_info: (string * string) option; (* metaliguistic annotation: language (defaults to "en-US"), text *)
 }
 
-type 'term bind = Abst of 'term (* declaration: domain *)
-                | Abbr of 'term (* definition: body    *)
-               | Void          (* exclusion           *)
+type env_attrs = {
+   e_side: arity; (* arity *)
+}
+
+
+type 'term bind = Abst of env_attrs * 'term (* declaration: attrs, domain *)
+                | Abbr of env_attrs * 'term (* definition: attrs, body    *)
+               | Void                      (* exclusion                  *)
 
 type 'term entity = root_attrs * node_attrs * uri * 'term bind (* attrs, uri, binder *)
 
@@ -52,6 +63,10 @@ let node_attrs ?(apix=0) () = {
    n_apix = apix;
 }
 
+let appl_attrs ?(main=(0,0)) ?(side=(0,0)) rest = {
+   a_rest = rest; a_main = main; a_side = side;
+}
+
 let bind_attrs ?name ?(main=(0,0)) ?(side=(0,0)) () = {
    b_name = name; b_main = main; b_side = side;
 }
@@ -60,19 +75,27 @@ let root_attrs ?(meta=[]) ?info () = {
    r_meta = meta; r_info = info;
 }
 
+let env_attrs ?(side=(0,0)) () = {
+   e_side = side;
+}
+
 let empty_node = node_attrs ()
 
 let empty_bind = bind_attrs ()
 
 let empty_root = root_attrs ()
 
+let empty_env = env_attrs ()
+
+let abst a t = Abst (a, t)
+
+let abbr a t = Abbr (a, t)
+
 let common f (ra, na, u, _) = f ra na u
 
 let succ (sort, degr) = sort, succ degr
 
-let compose av at = {av with b_main = at.b_main}
-
-let shift av = {av with b_side = av.b_main}
+let compose av yt = {av with b_main = yt}
 
 let rec name err f a = match a.b_name with
    | Some (n, r) -> f n r
@@ -83,9 +106,9 @@ let rec info err f a = match a.r_info with
    | None          -> err ()
 
 let xlate f xlate_term = function
-   | ra, na, uri, Abst t ->
-      let f t = f (ra, na, uri, Abst t) in xlate_term f t
-   | ra, na, uri, Abbr t ->
-      let f t = f (ra, na, uri, Abbr t) in xlate_term f t
-   | _, _, _, Void       ->
+   | ra, na, uri, Abst (a, t) ->
+      let f t = f (ra, na, uri, abst a t) in xlate_term f t
+   | ra, na, uri, Abbr (a, t) ->
+      let f t = f (ra, na, uri, abbr a t) in xlate_term f t
+   | _, _, _, Void            ->
       assert false