Local Open Scope logic.
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 canon8: forall R1 R2 R3 PQR,
do_canon ((R1 && R2) && R3) PQR = do_canon (R1 && (R2 && R3)) PQR.