2 ||M|| This file is part of HELM, an Hypertextual, Electronic
3 ||A|| Library of Mathematics, developed at the Computer Science
4 ||T|| Department, University of Bologna, Italy.
6 ||T|| HELM is free software; you can redistribute it and/or
7 ||A|| modify it under the terms of the GNU General Public License
8 \ / version 2 or (at your option) any later version.
9 \ / This software is distributed as is, NO WARRANTY.
10 V_______________________________________________________________ *)
17 type id = string (* identifier *)
19 type name = id * bool (* token, real? *)
21 type arity = int * int (* sort, degree *)
23 type meta = Main (* main object *)
24 | InProp (* inhabitant of a proposition *)
25 | Progress (* uncompleted object *)
26 | Private (* private global definition *)
29 n_apix: int; (* additional position index *)
33 a_rest: bool; (* restricted application? *)
34 a_main: arity; (* main arity *)
35 a_side: arity; (* side arity *)
39 b_name: name option; (* name *)
40 b_main: arity; (* main arity *)
41 b_side: arity; (* side arity *)
45 r_meta: meta list; (* metaliguistic classification *)
46 r_info: (string * string) option; (* metaliguistic annotation: language (defaults to "en-US"), text *)
50 e_side: arity; (* arity *)
54 type 'term bind = Abst of env_attrs * 'term (* declaration: attrs, domain *)
55 | Abbr of env_attrs * 'term (* definition: attrs, body *)
56 | Void (* exclusion *)
58 type 'term entity = root_attrs * node_attrs * uri * 'term bind (* attrs, uri, binder *)
60 (* helpers ******************************************************************)
62 let node_attrs ?(apix=0) () = {
66 let appl_attrs ?(main=(0,0)) ?(side=(0,0)) rest = {
67 a_rest = rest; a_main = main; a_side = side;
70 let bind_attrs ?name ?(main=(0,0)) ?(side=(0,0)) () = {
71 b_name = name; b_main = main; b_side = side;
74 let root_attrs ?(meta=[]) ?info () = {
75 r_meta = meta; r_info = info;
78 let env_attrs ?(side=(0,0)) () = {
82 let empty_node = node_attrs ()
84 let empty_bind = bind_attrs ()
86 let empty_root = root_attrs ()
88 let empty_env = env_attrs ()
90 let abst a t = Abst (a, t)
92 let abbr a t = Abbr (a, t)
94 let common f (ra, na, u, _) = f ra na u
96 let succ (sort, degr) = sort, succ degr
98 let compose av yt = {av with b_main = yt}
100 let rec name err f a = match a.b_name with
101 | Some (n, r) -> f n r
104 let rec info err f a = match a.r_info with
105 | Some (lg, tx) -> f lg tx
108 let xlate f xlate_term = function
109 | ra, na, uri, Abst (a, t) ->
110 let f t = f (ra, na, uri, abst a t) in xlate_term f t
111 | ra, na, uri, Abbr (a, t) ->
112 let f t = f (ra, na, uri, abbr a t) in xlate_term f t