Module Reductionops.Stack
type case_stk
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 pr : (EConstr.t -> Pp.t) -> t -> Pp.t
val empty : t
val is_empty : t -> bool
val compare_shape : t -> t -> bool
val fold2 : ('a -> EConstr.constr -> EConstr.constr -> 'a) -> 'a -> t -> t -> 'a
fold2 f x sk1 sk2
foldsf
on any pair of term in(sk1,sk2)
.- returns
the result and the lifts to apply on the terms
- raises IncompatibleFold2
when
sk1
andsk2
have incompatible shapes
val append_app_list : EConstr.t list -> t -> t
append_app_list args sk
pushes list of argumentsargs
onsk
val strip_app : t -> t * t
if
strip_app sk
=(sk1,sk2)
, thensk = sk1 @ sk2
withsk1
purely applicative andsk2
does 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) option
decomp sk
extracts the first argument of reversed stacksk
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 returnsSome sk
turned into a list of arguments ifsk
is purely applicative andNone
otherwise
val args_size : t -> int
args_size sk
returns the number of arguments available at the head ofsk
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