Ltac slurp :=
apply imp_lem0;
match goal with |-  app_pred (_ --> _)  ?st =>
repeat match goal with
| H: app_pred ?P st |- app_pred (?b --> ?c) st =>
(apply (@conjoin_hyp0 _ _ P c st H) ||
(apply (@conjoin_hyp1 _ _ P b c st H)));
clear H
end;
try (revert st; apply derives_e)
end.

Lemma test_slurp {A} `{agA : ageable A} :  forall  (P Q R S : pred A) w ,
(P && (Q && R) --> S) w -> P w -> Q w -> R w -> S w.