Module Reductionops.Stack
type case_stktype member=|App of app_node|Case of case_stk|Proj of Names.Projection.t|Fix of EConstr.fixpoint * t|Primitive of CPrimitives.t * Names.Constant.t * EConstr.EInstance.t * t * CPrimitives.args_redand t= member list
val pr : (EConstr.t -> Pp.t) -> t -> Pp.tval empty : tval is_empty : t -> boolval compare_shape : t -> t -> bool
val fold2 : ('a -> EConstr.constr -> EConstr.constr -> 'a) -> 'a -> t -> t -> 'afold2 f x sk1 sk2foldsfon any pair of term in(sk1,sk2).- returns
the result and the lifts to apply on the terms
- raises IncompatibleFold2
when
sk1andsk2have incompatible shapes
val append_app_list : EConstr.t list -> t -> tappend_app_list args skpushes list of argumentsargsonsk
val strip_app : t -> t * tif
strip_app sk=(sk1,sk2), thensk = sk1 @ sk2withsk1purely applicative andsk2does not start with an argument
val strip_n_app : int -> t -> (t * EConstr.t * t) option- returns
(the nth first elements, the (n+1)th element, the remaining stack) if there enough of those
val decomp_rev : t -> (EConstr.t * t) optiondecomp skextracts the first argument of reversed stackskis 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 skeither returnsSome skturned into a list of arguments ifskis purely applicative andNoneotherwise
val args_size : t -> intargs_size skreturns the number of arguments available at the head ofsk
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.rel_context * EConstr.constr) array