AllSchemeval compute_params_rec_strpos : Environ.env -> Names.MutInd.t -> Declarations.mutual_inductive_body -> bool listComputes which uniform parameters are strictly positive in a mutual inductive body
val compute_positive_uparams_and_suffix : Environ.env -> Names.MutInd.t -> Declarations.mutual_inductive_body -> Names.Id.t list option -> bool list * (string * string) * (string * string)Compute the default positivity of the uniform parameters, and generates the suffix for naming the all predicate, and its predicate, as well as the key for registering. If a positivity specification is given by users bool list option, it is checked to be included in the default one, and the suffix are modified accordingly.
val lookup_all_theorem : Names.inductive -> Names.inductive -> bool list -> (bool * Names.GlobRef.t * Names.GlobRef.t) optionLookup the partial all predicate and its theorem for ind_nested for args_are_nested. If they are not found, lookup the general all predicate and its theorem. Returns if the partial all was found, and the global references. Raise a warning if none is found.
val make_all_predicate : partial_nesting:bool ->
Names.GlobRef.t -> bool list -> EConstr.constr array -> EConstr.constr option array -> EConstr.constr array -> EConstr.constr -> EConstr.constr LibBinding.State.tMake the all predicate for a fresh instance and using Typing.checked_appvect, given:
all predicate is the partial one, or the general one partial_nesting:boolbool listconstr arrayconstr option array, using fun ... => True if the values are none, and all is the general predicateval make_all_theorem : partial_nesting:bool ->
Names.GlobRef.t -> bool list -> EConstr.constr array -> EConstr.constr option array -> EConstr.constr option array -> EConstr.constr array -> EConstr.constr -> EConstr.constr LibBinding.State.tMake the theorem for the all predicate for a fresh instance and using Typing.checked_appvect, given:
all predicate is the partial one, or the general one partial_nesting:boolbool listconstr arrayconstr option array, using fun ... => True and fun _ => I if the values are none, and all is the general predicatetype head_argument = | ArgIsSPUparam of int * EConstr.constr array | (* constant context, position of the uniform parameter, args *) |
| ArgIsInd of int * EConstr.constr array * EConstr.constr array | (* constant context, position of the one_inductive body, inst_nuparams inst_indices *) |
| ArgIsNested of Names.MutInd.t * int * Declarations.mutual_inductive_body * bool list * Declarations.one_inductive_body * EConstr.constr array * EConstr.constr array | (* constant context, ind_nested, mutual and one body, strictly positivity of its uniform parameters, instantiation uniform paramerters, and of both non_uniform parameters and indices *) |
| ArgIsCst |
type argument = EConstr.rel_context * head_argumentView to decompose arguments as forall locs, X where X is further decomposed as a uniform parameter, the inductive, a nested argument or a constant.
val view_argument : Names.MutInd.t -> Declarations.mutual_inductive_body -> LibBinding.State.access_key list -> bool list -> EConstr.constr -> argument LibBinding.State.tDecompose the argument in it_Prod_or_LetIn local, X where X is a uniform parameter, Ind, nested or a constant
val generate_all_predicate : Environ.env -> Evd.evar_map -> Names.MutInd.t -> Evd.einstance -> Declarations.mutual_inductive_body -> bool list -> string -> UState.t * Entries.mutual_inductive_entryval generate_all_theorem : Environ.env -> Evd.evar_map -> Names.MutInd.t -> Names.MutInd.t -> int -> Evd.einstance -> Declarations.mutual_inductive_body -> bool list -> Evd.evar_map * EConstr.constr