Reductionops.Stack
type 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_red |
and t = member list
val empty : t
val is_empty : t -> bool
val fold2 :
( 'a -> EConstr.constr -> EConstr.constr -> 'a ) ->
'a ->
t ->
t ->
'a
fold2 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 -> bool
not_purely_applicative sk
val list_of_app_stack : t -> EConstr.constr list option
list_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 -> int
args_size sk
returns the number of arguments available at the head of sk
val zip : Evd.evar_map -> (EConstr.constr * t) -> EConstr.constr
zip 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