(******************************** 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 ] (* Local = hidden technicality *)
type ind_pragma = (* pragmatic of the object *)
[ `Record of (string * bool * int) list ]
(* invariant: metasenv and substitution have disjoint domains *)
type obj =
- | Constant of NUri.uri * metasenv * substitution * string * term option * term * c_attr
+ | Constant of NUri.uri * metasenv * substitution * relevance * 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
+ | Inductive of NUri.uri * metasenv * substitution * bool * int * inductiveType list * i_attr
+ (* uri, menv, subst, (co)inductive, leftno, types *)