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.
(* Consider putting rules for invariants and fancy updates in msl (a la ghost_seplog), and proofs in veric (a la own). *)

Corollary fview_shift_nonexpansive : forall E1 E2 P Q n,
approx n (P -* |={E1,E2}=> Q)%logic = approx n (approx n P  -* |={E1,E2}=> approx n Q)%logic.