Program Definition unfash {A} `{agA: ageable A} (P: pred nat) : pred A :=
fun x => P (level x).
Next Obligation.
apply age_level in H.
rewrite H in H0.
eapply pred_hereditary; eauto. unfold age;  simpl. auto.
Qed.
Notation "'!' e" := (unfash e) (at level 30, right associativity): pred.

(* Specifications: *)
Lemma level_later {A} `{H : ageable A}: forall {w: A} {n': nat},
laterR (level w) n' ->
exists w', laterR w w' /\ n' = level w'.
Lemma later_unfash {A} `{H : ageable A}:
forall P, |> (unfash P: pred A) = unfash ( |> P).
Lemma subp_derives {A} `{agA : ageable A} :
forall (P P' Q Q': pred A),
P' |-- P ->
Q |-- Q' ->
(P >=> Q) |-- (P' >=> Q').
Lemma derives_subp {A} `{agA : ageable A} :
forall (P Q: pred A) (st: nat), (P |-- Q) -> (P >=> Q) st.
Lemma exp_subp' {A} `{H : ageable A}:
forall (T: Type) (P Q: T -> pred A) (st: nat),
(forall x, (P x >=> Q x) st) -> ((EX x : T, P x) >=> (EX x : T, Q x)) st.
Lemma fash_subp {A} `{agA: ageable A}:
forall (P Q: pred A), fashionable (P >=> Q).