V_______________________________________________________________ *)
module U = NUri
-module N = Level
+module N = Layer
type uri = U.uri
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 = {
| 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 () = {
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 ()