(** ** Construction 1: allocating the stack frame at function entry *)

Ltac splitall := repeat (match goal with |- _ /\ _ => split end).

Theorem anonymize_stack: forall m sp bc ge rm am, genv_match bc ge -> romatch bc m rm -> mmatch bc m am -> bc sp = BCstack -> exists bc', bc_nostack bc' /\ bc' sp = BCother /\ (forall b, b <> sp -> bc' b = bc b) /\ (forall v x, vmatch bc v x -> vmatch bc' v Vtop) /\ genv_match bc' ge /\ romatch bc' m rm /\ mmatch bc' m mtop.