X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fhelena%2Fsrc%2Fcommon%2Fentity.ml;h=039ed63a4cab12b5f15112130b13786ac7b27afd;hb=88977b2d546e547e23b046792fe2ad8f6ff192a4;hp=d834ed53e3804ce5769210b674be0fe9e75621c8;hpb=2cf2e883f91164ce614bdc86b5c5e2419b98f68d;p=helm.git diff --git a/helm/software/helena/src/common/entity.ml b/helm/software/helena/src/common/entity.ml index d834ed53e..039ed63a4 100644 --- a/helm/software/helena/src/common/entity.ml +++ b/helm/software/helena/src/common/entity.ml @@ -26,10 +26,19 @@ type meta = Main (* main object *) | Private (* private global definition *) type node_attrs = { - n_name: name option; (* name *) - n_apix: int; (* additional position index *) - n_main: arity; (* main arity *) - n_side: arity; (* side arity *) + 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 *) + b_side: arity; (* side arity *) } type root_attrs = { @@ -37,35 +46,58 @@ 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 *) (* helpers ******************************************************************) -let node_attrs ?name ?(main=(0,0)) ?(side=(0,0)) () = { - n_apix = 0; n_name = name; n_main = main; n_side = side; +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; } 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 n_main = at.n_main} - -let shift av = {av with n_side = av.n_main} +let compose av yt = {av with b_main = yt} -let rec name err f a = match a.n_name with +let rec name err f a = match a.b_name with | Some (n, r) -> f n r | None -> err () @@ -74,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