Hint Rewrite local_sepcon_assoc1 local_sepcon_assoc2 : norm2.
Definition do_canon (x y : environ->mpred) := (sepcon x y).
Ltac strip1_later P :=
match P with
| do_canon ?L ?R => let L' := strip1_later L in let R' := strip1_later R in constr:(do_canon L' R')
| PROPx ?P ?QR => let QR' := strip1_later QR in constr:(PROPx P QR')
| LOCALx ?Q ?R => let R' := strip1_later R in constr:(LOCALx Q R')
| SEPx ?R => let R' := strip1_later R in constr:(SEPx R')
| ?L::?R => let L' := strip1_later L in let R' := strip1_later R in constr:(L'::R')
| nil => constr:(nil)
| ?L && ?R => let L' := strip1_later L in let R' := strip1_later R in constr:(L' && R')
| ?L * ?R => let L' := strip1_later L in let R' := strip1_later R in constr:(L'*R')
| |> ?L => constr:(L)
| ?L => constr:(L)
end.

Lemma andp_later_derives {A} {NA: NatDed A}{IA: Indir A}:
forall P Q P' Q': A, P |-- |> P' -> Q |-- |> Q' -> P && Q |-- |> (P' && Q').