InductiveopsThe following three functions are similar to the ones defined in Inductive, but they expect an env
val type_of_inductive : Environ.env -> Constr.pinductive -> Constr.typesval e_type_of_inductive : 
  Environ.env ->
  Evd.evar_map ->
  Names.inductive EConstr.puniverses ->
  EConstr.typesval type_of_constructor : Environ.env -> Constr.pconstructor -> Constr.typesReturn type as quoted by the user
val e_type_of_constructor : 
  Environ.env ->
  Evd.evar_map ->
  Names.constructor EConstr.puniverses ->
  EConstr.typesval type_of_constructors : 
  Environ.env ->
  Constr.pinductive ->
  Constr.types arrayval arities_of_constructors : 
  Environ.env ->
  Constr.pinductive ->
  Constr.types arrayReturn constructor types in normal form
An inductive type with its parameters (transparently supports reasoning either with only recursively uniform parameters or with all parameters including the recursively non-uniform ones
val make_ind_family : 
  (Names.inductive Univ.puniverses * Constr.constr list) ->
  inductive_familyval dest_ind_family : 
  inductive_family ->
  Names.inductive Univ.puniverses * Constr.constr listval map_ind_family : 
  ( Constr.constr -> Constr.constr ) ->
  inductive_family ->
  inductive_familyval liftn_inductive_family : int -> int -> inductive_family -> inductive_familyval lift_inductive_family : int -> inductive_family -> inductive_familyval substnl_ind_family : 
  Constr.constr list ->
  int ->
  inductive_family ->
  inductive_familyval relevance_of_inductive_family : 
  Environ.env ->
  inductive_family ->
  Sorts.relevanceAn inductive type with its parameters and real arguments
val make_ind_type : (inductive_family * EConstr.constr list) -> inductive_typeval dest_ind_type : inductive_type -> inductive_family * EConstr.constr listval map_inductive_type : 
  ( EConstr.constr -> EConstr.constr ) ->
  inductive_type ->
  inductive_typeval liftn_inductive_type : int -> int -> inductive_type -> inductive_typeval lift_inductive_type : int -> inductive_type -> inductive_typeval substnl_ind_type : 
  EConstr.constr list ->
  int ->
  inductive_type ->
  inductive_typeval ind_of_ind_type : inductive_type -> Names.inductiveval relevance_of_inductive_type : 
  Environ.env ->
  inductive_type ->
  Sorts.relevanceval mkAppliedInd : inductive_type -> EConstr.constrval mis_is_recursive_subset : int list -> Declarations.wf_paths -> boolval mis_is_recursive : 
  (Names.inductive
   * Declarations.mutual_inductive_body
   * Declarations.one_inductive_body) ->
  boolval mis_nf_constructor_type : 
  Constr.pconstructor ->
  (Declarations.mutual_inductive_body * Declarations.one_inductive_body) ->
  Constr.constrval nconstructors : Environ.env -> Names.inductive -> intval nconstructors_env : Environ.env -> Names.inductive -> intval constructors_nrealargs : Environ.env -> Names.inductive -> int arrayval constructors_nrealargs_env : Environ.env -> Names.inductive -> int arrayval constructors_nrealdecls : Environ.env -> Names.inductive -> int arrayval constructors_nrealdecls_env : Environ.env -> Names.inductive -> int arrayval inductive_nrealargs : Environ.env -> Names.inductive -> intval inductive_nrealargs_env : Environ.env -> Names.inductive -> intval inductive_nrealdecls : Environ.env -> Names.inductive -> intval inductive_nrealdecls_env : Environ.env -> Names.inductive -> intval inductive_nallargs : Environ.env -> Names.inductive -> intval inductive_nallargs_env : Environ.env -> Names.inductive -> intval inductive_nalldecls : Environ.env -> Names.inductive -> intval inductive_nalldecls_env : Environ.env -> Names.inductive -> intval inductive_nparams : Environ.env -> Names.inductive -> intval inductive_nparams_env : Environ.env -> Names.inductive -> intval inductive_nparamdecls : Environ.env -> Names.inductive -> intval inductive_nparamdecls_env : Environ.env -> Names.inductive -> intval inductive_paramdecls : 
  Environ.env ->
  Constr.pinductive ->
  Constr.rel_contextval inductive_paramdecls_env : 
  Environ.env ->
  Constr.pinductive ->
  Constr.rel_contextval inductive_alldecls : Environ.env -> Constr.pinductive -> Constr.rel_contextval inductive_alldecls_env : 
  Environ.env ->
  Constr.pinductive ->
  Constr.rel_contextval constructor_nallargs : Environ.env -> Names.constructor -> intval constructor_nallargs_env : Environ.env -> Names.constructor -> intval constructor_nalldecls : Environ.env -> Names.constructor -> intval constructor_nalldecls_env : Environ.env -> Names.constructor -> intval constructor_nrealargs : Environ.env -> Names.constructor -> intval constructor_nrealargs_env : Environ.env -> Names.constructor -> intval constructor_nrealdecls : Environ.env -> Names.constructor -> intval constructor_nrealdecls_env : Environ.env -> Names.constructor -> intval inductive_alltags : Environ.env -> Names.inductive -> bool listval constructor_alltags : Environ.env -> Names.constructor -> bool listval constructor_has_local_defs : Environ.env -> Names.constructor -> boolIs there local defs in params or args ?
val inductive_has_local_defs : Environ.env -> Names.inductive -> boolval sorts_below : Sorts.family -> Sorts.family listval top_allowed_sort : Environ.env -> Names.inductive -> Sorts.familyval has_dependent_elim : Declarations.mind_specif -> bool(Co)Inductive records with primitive projections do not have eta-conversion, hence no dependent elimination.
val type_of_projection_knowing_arg : 
  Environ.env ->
  Evd.evar_map ->
  Names.Projection.t ->
  EConstr.t ->
  EConstr.types ->
  Constr.typesPrimitive projections
Extract information from an inductive family
type constructor_summary = {| cs_cstr : Constr.pconstructor; | 
| cs_params : Constr.constr list; | 
| cs_nargs : int; | 
| cs_args : Constr.rel_context; | 
| cs_concl_realargs : Constr.constr array; | 
}val lift_constructor : int -> constructor_summary -> constructor_summaryval get_constructor : 
  (Constr.pinductive
   * Declarations.mutual_inductive_body
   * Declarations.one_inductive_body
   * Constr.constr list) ->
  int ->
  constructor_summaryval get_constructors : 
  Environ.env ->
  inductive_family ->
  constructor_summary arrayval get_arity : Environ.env -> inductive_family -> Constr.rel_contextget_arity returns the arity of the inductive family instantiated with the parameters; if recursively non-uniform parameters are not part of the inductive family, they appears in the arity
val build_dependent_constructor : constructor_summary -> Constr.constrval build_dependent_inductive : 
  Environ.env ->
  inductive_family ->
  Constr.constrval make_arity_signature : 
  Environ.env ->
  Evd.evar_map ->
  bool ->
  inductive_family ->
  EConstr.rel_contextval make_arity : 
  Environ.env ->
  Evd.evar_map ->
  bool ->
  inductive_family ->
  EConstr.ESorts.t ->
  EConstr.typesval extract_mrectype : 
  Evd.evar_map ->
  EConstr.t ->
  (Names.inductive * EConstr.EInstance.t) * EConstr.constr listRaise Not_found if not given a valid inductive type
val find_mrectype : 
  Environ.env ->
  Evd.evar_map ->
  EConstr.types ->
  (Names.inductive * EConstr.EInstance.t) * EConstr.constr listval find_mrectype_vect : 
  Environ.env ->
  Evd.evar_map ->
  EConstr.types ->
  (Names.inductive * EConstr.EInstance.t) * EConstr.constr arrayval find_rectype : 
  Environ.env ->
  Evd.evar_map ->
  EConstr.types ->
  inductive_typeval find_inductive : 
  Environ.env ->
  Evd.evar_map ->
  EConstr.types ->
  (Names.inductive * EConstr.EInstance.t) * Constr.constr listval find_coinductive : 
  Environ.env ->
  Evd.evar_map ->
  EConstr.types ->
  (Names.inductive * EConstr.EInstance.t) * Constr.constr listval instantiate_constructor_params : 
  Constr.pconstructor ->
  Declarations.mind_specif ->
  Constr.constr list ->
  Constr.constrinstantiate_constructor_params cstr mind params instantiates the type of the given constructor with parameters params
val arity_of_case_predicate : 
  Environ.env ->
  inductive_family ->
  bool ->
  Sorts.t ->
  Constr.typesBuilds the case predicate arity (dependent or not)
val make_case_info : 
  Environ.env ->
  Names.inductive ->
  Sorts.relevance ->
  Constr.case_style ->
  Constr.case_infoAnnotation for cases
val make_case_or_project : 
  Environ.env ->
  Evd.evar_map ->
  inductive_type ->
  Constr.case_info ->
  EConstr.constr ->
  EConstr.constr ->
  EConstr.constr array ->
  EConstr.constrMake a case or substitute projections if the inductive type is a record with primitive projections. Fail with an error if the elimination is dependent while the inductive type does not allow dependent elimination.
val simple_make_case_or_project : 
  Environ.env ->
  Evd.evar_map ->
  Constr.case_info ->
  EConstr.constr ->
  EConstr.case_invert ->
  EConstr.constr ->
  EConstr.constr array ->
  EConstr.constrSometimes make_case_or_project is nicer to call with a pre-built case_invert than inductive_type.
val make_case_invert : 
  Environ.env ->
  inductive_type ->
  Constr.case_info ->
  EConstr.case_invertval compute_projections : 
  Environ.env ->
  Names.inductive ->
  (Constr.constr * Constr.types) arrayGiven a primitive record type, for every field computes the eta-expanded projection and its type.
val type_of_inductive_knowing_conclusion : 
  Environ.env ->
  Evd.evar_map ->
  Declarations.mind_specif Univ.puniverses ->
  EConstr.types ->
  Evd.evar_map * EConstr.typesval control_only_guard : Environ.env -> Evd.evar_map -> EConstr.types -> unit