X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Fng_kernel%2FnCic.ml;h=4fd950af0f80c51d0be583080a04993dad576a05;hb=b7535cd20248c564e942cc4e9058d34fbb062c6f;hp=6691acd479c5e8c36f92d447cb3812546e72d51e;hpb=53ce2802674bae2ebe5f8fccb446fb9c36f90522;p=helm.git diff --git a/helm/software/components/ng_kernel/nCic.ml b/helm/software/components/ng_kernel/nCic.ml index 6691acd47..4fd950af0 100644 --- a/helm/software/components/ng_kernel/nCic.ml +++ b/helm/software/components/ng_kernel/nCic.ml @@ -29,8 +29,10 @@ type sort = Prop | Set | Type of int | CProp type implicit_annotation = [ `Closed | `Type | `Hole | `Term ] -type local_context = int * (term list) option (* shift (0 -> no shift), - subst (None means id) *) +type lc_kind = Irl of int | Ctx of term list + +and local_context = int * lc_kind (* shift (0 -> no shift), + subst (None means id) *) and term = | Rel of int (* DeBruijn index, 1 based *) | Meta of int * local_context @@ -61,32 +63,38 @@ type conjecture = int * string option * context * term type metasenv = conjecture list -type substitution = (int * (string option * context * term * term)) list +type subst_entry = string option * context * term * term + +type substitution = (int * subst_entry) list (******************************** OBJECTS **********************************) -type inductiveFun = string * int * term * term +type relevance = bool list (* relevance of arguments for conversion *) + +type inductiveFun = relevance * string * int * term * term (* if coinductive, the int has no meaning and must be set to -1 *) -type constructor = string * term (* id, type *) +type constructor = relevance * string * term (* id, type *) type inductiveType = - string * bool * term * int * (* typename, inductive, arity, leftno *) - constructor list (* constructors *) + relevance * string * term * constructor list + (* relevance, typename, arity, constructors *) type def_flavour = (* presentational *) - [ `Definition | `Fact | `Lemma | `Remark | `Theorem | `Corollary ] + [ `Definition | `Fact | `Lemma | `Theorem | `Corollary | `Example ] type def_pragma = (* pragmatic of the object *) [ `Coercion of int | `Elim of sort (* elimination principle; universe is not relevant *) | `Projection (* record projection *) | `InversionPrinciple (* inversion principle *) - | `Variant ] + | `Variant + | `Local + | `Regular ] (* Local = hidden technicality *) type ind_pragma = (* pragmatic of the object *) - [ `Record of (string * bool * int) list ] + [ `Record of (string * bool * int) list | `Regular ] (* inductive type that encodes a record; the arguments are the record * fields names and if they are coercions and then the coercion arity *) @@ -97,8 +105,12 @@ type f_attr = generated * def_flavour type i_attr = generated * ind_pragma (* invariant: metasenv and substitution have disjoint domains *) -type obj = - | Constant of NUri.uri * metasenv * substitution * string * term option * term * c_attr - | Fixpoint of NUri.uri * metasenv * substitution * bool * inductiveFun list * f_attr - | Inductive of NUri.uri * metasenv * substitution * inductiveType list * i_attr - +type obj_kind = + | Constant of relevance * string * term option * term * c_attr + | Fixpoint of bool * inductiveFun list * f_attr + (* true -> fix, funcs, arrts *) + | Inductive of bool * int * inductiveType list * i_attr + (* true -> inductive, leftno, types *) + + (* the int must be 0 if the object has no body *) +type obj = NUri.uri * int * metasenv * substitution * obj_kind