Module CClosure
type finverttype evar_repacktype usubs= fconstr Esubst.subs UVars.puniversestype table_key= Names.Constant.t UVars.puniverses Names.tableKeytype fterm=Relevances (eg in binder_annot or case_info) have NOT been substituted when there is a usubs field
type 'a next_native_args= (CPrimitives.arg_kind * 'a) listtype stack_member=|Zapp of fconstr array|ZcaseT of Constr.case_info * UVars.Instance.t * Constr.constr array * Constr.case_return * Constr.case_branch array * usubs|Zproj of Names.Projection.Repr.t * Sorts.relevance|Zfix of fconstr * stack|Zprimitive of CPrimitives.t * Constr.pconstant * fconstr list * fconstr next_native_args|Zshift of int|Zupdate of fconstrand stack= stack_member list
val empty_stack : stackval append_stack : fconstr array -> stack -> stackval check_native_args : CPrimitives.t -> stack -> boolval get_native_args1 : CPrimitives.t -> Constr.pconstant -> stack -> fconstr list * fconstr * fconstr next_native_args * stackval stack_args_size : stack -> intval inductive_subst : Declarations.mutual_inductive_body -> UVars.Instance.t -> fconstr array -> usubsval usubs_lift : usubs -> usubsval usubs_liftn : int -> usubs -> usubsval usubs_cons : fconstr -> usubs -> usubsval usubst_instance : 'a UVars.puniverses -> UVars.Instance.t -> UVars.Instance.tidentity if the first instance is empty
val usubst_binder : _ UVars.puniverses -> 'a Context.binder_annot -> 'a Context.binder_annot
val inject : Constr.constr -> fconstrval mk_atom : Constr.constr -> fconstrmk_atom: prevents a term from being evaluated
val fterm_of : fconstr -> ftermval term_of_fconstr : fconstr -> Constr.constrval destFLambda : (usubs -> Constr.constr -> fconstr) -> fconstr -> Names.Name.t Context.binder_annot * fconstr * fconstr
type clos_tabtype 'a evar_expansion=|EvarDefined of 'a|EvarUndefined of Evar.t * 'a listtype 'constr evar_handler={evar_expand : 'constr Constr.pexistential -> 'constr evar_expansion;evar_repack : (Evar.t * 'constr list) -> 'constr;evar_irrelevant : 'constr Constr.pexistential -> bool;qvar_irrelevant : Sorts.QVar.t -> bool;}
val default_evar_handler : Environ.env -> 'constr evar_handlerval create_conv_infos : ?univs:UGraph.t -> ?evars:Constr.constr evar_handler -> RedFlags.reds -> Environ.env -> clos_infosval create_clos_infos : ?univs:UGraph.t -> ?evars:Constr.constr evar_handler -> RedFlags.reds -> Environ.env -> clos_infosval oracle_of_infos : clos_infos -> Conv_oracle.oracleval create_tab : unit -> clos_tabval info_env : clos_infos -> Environ.envval info_flags : clos_infos -> RedFlags.redsval info_univs : clos_infos -> UGraph.tval unfold_projection : clos_infos -> Names.Projection.t -> Sorts.relevance -> stack_member optionval push_relevance : clos_infos -> 'b Context.binder_annot -> clos_infosval push_relevances : clos_infos -> 'b Context.binder_annot array -> clos_infosval set_info_relevances : clos_infos -> Sorts.relevance Range.t -> clos_infosval info_relevances : clos_infos -> Sorts.relevance Range.tval is_irrelevant : clos_infos -> Sorts.relevance -> boolval infos_with_reds : clos_infos -> RedFlags.reds -> clos_infos
val norm_val : clos_infos -> clos_tab -> fconstr -> Constr.constrnorm_valis for strong normalization
val norm_term : clos_infos -> clos_tab -> usubs -> Constr.constr -> Constr.constrSame as
norm_valbut for terms
val whd_val : clos_infos -> clos_tab -> fconstr -> Constr.constrwhd_valis for weak head normalization
val whd_stack : clos_infos -> clos_tab -> fconstr -> stack -> fconstr * stackwhd_stackperforms weak head normalization in a given stack. It stops whenever a reduction is blocked.
val skip_irrelevant_stack : clos_infos -> stack -> stackval eta_expand_stack : clos_infos -> Names.Name.t Context.binder_annot -> stack -> stackval eta_expand_ind_stack : Environ.env -> Constr.pinductive -> fconstr -> stack -> (fconstr * stack) -> stack * stacketa_expand_ind_stack env ind c s tcomputes stacks corresponding to the conversion of the eta expansion of t, considered as an inhabitant of ind, and the Constructor c of this inductive type applied to arguments s. Assumestis a rigid term, and not a constructor.indis the inductive of the constructor termc- raises Not_found
if the inductive is not a primitive record, or if the constructor is partially applied.
val unfold_ref_with_args : clos_infos -> clos_tab -> table_key -> stack -> (fconstr * stack) optionLike
unfold_reference, but handles primitives: if there are not enough arguments, returnNone. Otherwise returnSomewithZPrimitiveadded to the stack. Produces aFIrrelevantwhen the reference is irrelevant and the infos was created withcreate_conv_infos.
val set_conv : (clos_infos -> clos_tab -> fconstr -> fconstr -> bool) -> unitHook for Reduction
val lift_fconstr : int -> fconstr -> fconstrval lift_fconstr_vect : int -> fconstr array -> fconstr arrayval mk_clos : usubs -> Constr.constr -> fconstrval mk_clos_vect : usubs -> Constr.constr array -> fconstr arrayval kni : clos_infos -> clos_tab -> fconstr -> stack -> fconstr * stackval knr : clos_infos -> clos_tab -> fconstr -> stack -> fconstr * stackval kl : clos_infos -> clos_tab -> fconstr -> Constr.constrval zip : fconstr -> stack -> fconstrval term_of_process : fconstr -> stack -> Constr.constrval to_constr : Esubst.lift UVars.puniverses -> fconstr -> Constr.constr