Module Trashcan.
(* Note: This approach to proving HOcontractive doesn't automate as well as the methods above.*)

(* Specifications: *)
Lemma orp_HOcontractive {A}{agA: ageable A}: forall X (P Q: (X -> pred A) -> (X -> pred A)),
HOcontractive P -> HOcontractive Q -> HOcontractive (fun R x => P R x || Q R x).
Lemma andp_HOcontractive {A}{agA: ageable A}: forall X (P Q: (X -> pred A) -> (X -> pred A)),
HOcontractive P -> HOcontractive Q -> HOcontractive (fun R x => P R x && Q R x).
Lemma sepcon_HOcontractive {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}{AG: ageable A}{XA: Age_alg A}: forall X (P Q: (X -> pred A) -> (X -> pred A)),
HOcontractive P -> HOcontractive Q -> HOcontractive (fun R x => P R x * Q R x).
Lemma const_HOcontractive{A}{agA: ageable A}: forall X (P : X -> pred A), HOcontractive (fun _ => P).
Lemma exp_HOcontractive {A}{agA: ageable A}:
forall X Y (G: Y -> X -> X) (F: Y -> X -> pred A -> pred A),
(forall y x, contractive (F y x)) ->
HOcontractive (fun (R: X -> pred A) (x: X) => EX y: Y, F y x (R (G y x))).
Lemma const_contractive {A}{agA: ageable A}: forall P : pred A, contractive (fun _ => P).
Lemma later_contractive' {A} `{ageable A} : contractive (box laterM).
End Trashcan.