Section FancyUpdates.
Context {inv_names : invG}.
Definition fupd (E1 E2 : Ensemble iname) P :=
(wsat * ghost_set g_en E1) -* |==> except0 (wsat * ghost_set g_en E2 * P).
Notation "|={ E1 , E2 }=> P" := (fupd E1 E2 P) (at level 62): logic.
Notation "|={ E }=> P" := (fupd E E P) (at level 62): logic.

Lemma inv_close_aux : forall E (i : iname) P,
ghost_list(P := token_PCM) g_dis (list_singleton i (Some tt)) * invariant i P * |> P *
(wsat * ghost_set g_en (Subtract E i))
|-- |==> except0 (wsat * (ghost_set g_en (Singleton i) * ghost_set g_en (Subtract E i))).