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 *)
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 *)
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;
}
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
| 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