Section NOSTACK.
Variable bc: block_classification.
Hypothesis NOSTACK: bc_nostack bc.
End NOSTACK.
(** ** Construction 1: allocating the stack frame at function entry *)
Ltac splitall := repeat (match goal with |- _ /\ _ => split end).
(** Construction 2: turn the stack into an "other" block, at public calls or function returns *)
(** Construction 3: turn the stack into an invalid block, at private calls *)

Theorem hide_stack:
forall m sp bc ge rm am,
genv_match bc ge ->
romatch bc m rm ->
mmatch bc m am ->
bc sp = BCstack ->
pge Nonstack am.(am_nonstack) ->
exists bc',
bc_nostack bc'
/\ bc' sp = BCinvalid
/\ (forall b, b <> sp -> bc' b = bc b)
/\ (forall v x, vge (Ifptr Nonstack) x -> vmatch bc v x -> vmatch bc' v Vtop)
/\ genv_match bc' ge
/\ romatch bc' m rm
/\ mmatch bc' m mtop.