]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/helena/src/common/entity.ml
optional parameters added to the syntax of definitions,
[helm.git] / helm / software / helena / src / common / entity.ml
index c447190501854daee08e11455956be0ae1477105..ab99e24cd5641c0285e825cf858911c0127f0502 100644 (file)
@@ -10,7 +10,7 @@
       V_______________________________________________________________ *)
 
 module U = NUri
-module N = Level
+module N = Layer
 
 type uri = U.uri
 
@@ -18,16 +18,21 @@ type id = string (* identifier *)
 
 type name = id * bool (* token, real? *)
 
+type arity = int * int (* sort, degree *)
+
 type meta = Main     (* main object *)
           | InProp   (* inhabitant of a proposition *)
           | Progress (* uncompleted object *)
          | Private  (* private global definition *)
 
 type node_attrs = {
-   n_name: name option; (* name *)
-   n_apix: int option;  (* additional position index *)
-   n_degr: int;         (* degree *)
-   n_real: bool;        (* real node? (not generated) *)
+   n_apix: int; (* additional position index *)
+}
+
+type bind_attrs = {
+   b_name: name option; (* name *)
+   b_main: arity;       (* main arity *)
+   b_side: arity;       (* side arity *)
 }
 
 type root_attrs = {
@@ -39,12 +44,16 @@ type 'term bind = Abst of 'term (* declaration: domain *)
                 | Abbr of 'term (* definition: body    *)
                | Void          (* exclusion           *)
 
-type 'term entity = root_attrs * node_attrs * uri * 'term bind (* attrs,  uri, binder *)
+type 'term entity = root_attrs * node_attrs * uri * 'term bind (* attrs, uri, binder *)
 
 (* helpers ******************************************************************)
 
-let node_attrs ?(real=true) ?apix ?name ?(degr=0) () = {
-   n_real = real; n_apix = apix; n_name = name; n_degr = degr;
+let node_attrs ?(apix=0) () = {
+   n_apix = apix;
+}
+
+let bind_attrs ?name ?(main=(0,0)) ?(side=(0,0)) () = {
+   b_name = name; b_main = main; b_side = side;
 }
 
 let root_attrs ?(meta=[]) ?info () = {
@@ -53,18 +62,22 @@ let root_attrs ?(meta=[]) ?info () = {
 
 let empty_node = node_attrs ()
 
+let empty_bind = bind_attrs ()
+
 let empty_root = root_attrs ()
 
 let common f (ra, na, u, _) = f ra na u
 
-let rec name err f a = match a.n_name with
+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 rec name err f a = match a.b_name with
    | Some (n, r) -> f n r
    | None        -> err ()
 
-let rec apix err f a = match a.n_apix with
-   | Some i -> f i
-   | None   -> err ()
-
 let rec info err f a = match a.r_info with
    | Some (lg, tx) -> f lg tx
    | None          -> err ()