Definition nonlocal (Q: environ->mpred) := True.Ltac check_nonlocal :=
  match goal with
  |  |- nonlocal (local _) => fail 1
  |  |- nonlocal (prop _) => fail 1
  |  |- nonlocal (andp _ _) => fail 1
  |  |- nonlocal (sepcon _ _) => fail 1
  | |- _ => apply I
 end.

Lemma canon6: forall Q R S, nonlocal Q -> Q && (prop R && S) = prop R && (Q && S).