Reductionops.Stackval mkCaseStk : (Constr.case_info * EConstr.EInstance.t * EConstr.t array * EConstr.case_return * EConstr.t Constr.pcase_invert * EConstr.case_branch array) -> case_stktype member = | App of app_node |
| Case of case_stk |
| Proj of Names.Projection.t * EConstr.ERelevance.t |
| Fix of EConstr.fixpoint * t |
| Primitive of CPrimitives.t * Names.Constant.t * EConstr.EInstance.t * t * CPrimitives.args_red |
and t = member listval empty : tval is_empty : t -> boolval fold2 : ('a -> EConstr.constr -> EConstr.constr -> 'a) -> 'a -> t -> t -> 'afold2 f x sk1 sk2 folds f on any pair of term in (sk1,sk2).
append_app_list args sk pushes list of arguments args on sk
if strip_app sk = (sk1,sk2), then sk = sk1 @ sk2 with sk1 purely applicative and sk2 does not start with an argument
decomp sk extracts the first argument of reversed stack sk is there is some
val not_purely_applicative : t -> boolnot_purely_applicative sk
val list_of_app_stack : t -> EConstr.constr list optionlist_of_app_stack sk either returns Some sk turned into a list of arguments if sk is purely applicative and None otherwise
val args_size : t -> intargs_size sk returns the number of arguments available at the head of sk
val zip : Evd.evar_map -> (EConstr.constr * t) -> EConstr.constrzip sigma t sk
val expand_case : Environ.env -> Evd.evar_map -> case_stk -> Constr.case_info * EConstr.EInstance.t * EConstr.constr array * ((EConstr.rel_context * EConstr.constr) * EConstr.ERelevance.t) * (EConstr.rel_context * EConstr.constr) array