Definition fashionable  (P: pred nat) := # P = P.
Notation "P '>=>' Q" := (# (P --> Q)) (at level 55, right associativity) : pred.
Notation "P '<=>' Q" := (# (P <--> Q)) (at level 57, no associativity) : pred.

(* Specifications: *)
Lemma subp_eqp {A} `{ageable A} : forall G (P Q: pred A),
G |-- P >=> Q ->
G |-- Q >=> P ->
G |-- P <=> Q.
Lemma eqp_subp {A} `{ageable A} : forall G P Q,
G |-- P <=> Q ->
G |-- P >=> Q.
Lemma eqp_subp2 {A} `{ageable A} : forall G P Q,
G |-- P <=> Q ->
G |-- Q >=> P.
Lemma eqp_comm : forall {A} `{ageable A} (P Q:pred A),
P <=> Q = Q <=> P.
Lemma subp_refl {A} `{ageable A} : forall G P,
G |-- P >=> P.
Lemma subp_trans {A} `{ageable A} : forall G P Q R,
G |-- P >=> Q ->
G |-- Q >=> R ->
G |-- P >=> R.
Lemma subp_top {A} `{ageable A} : forall G P,
G |-- P >=> TT.
Lemma subp_bot {A} `{ageable A} : forall G P,
G |-- FF >=> P.
Lemma subp_andp {A} `{ageable A} : forall G P P' Q Q',
G |-- P >=> P' ->
G |-- Q >=> Q' ->
G |-- P && Q >=> (P' && Q').
Lemma subp_imp {A} `{ageable A} : forall G P P' Q Q',
G |-- P' >=> P ->
G |-- Q >=> Q' ->
G |-- (P --> Q) >=> (P' --> Q').
Lemma subp_orp {A} `{ageable A} : forall G P P' Q Q',
G |-- P >=> P' ->
G |-- Q >=> Q' ->
G |-- (P || Q) >=> (P' || Q').
Lemma subp_subp {A}{agA: ageable A}:
forall (G: pred nat) (P Q R S: pred A),
G |-- (R >=> P) ->
G |-- (Q >=> S) ->
G |-- (P >=> Q) >=> (R >=> S).
Lemma subp_allp {A} `{ageable A} : forall G B (X Y:B -> pred A),
(forall x:B, G |-- X x >=> Y x) ->
G |-- allp X >=> allp Y.
Lemma subp_exp {A} `{ageable A} : forall G B (X Y:B -> pred A),
(forall x:B, G |-- X x >=> Y x) ->
G |-- exp X >=> exp Y.
Lemma subp_allp_spec {A} `{ageable A} : forall G B (X:B -> pred A) x,
G |-- allp X >=> X x.
Lemma subp_exp_spec {A} `{ageable A} : forall G B(X:B -> pred A) x,
G |-- X x >=> exp X.
Lemma later_fash1 {A} `{agA: ageable A}:
forall P, |> # P |-- # |> P.
Lemma later_fash {A} `{agA : ageable A}:
forall P, |> # P = # |> P.
Lemma subp_later1 {A} `{ageable A} : forall P Q,
|>(P >=> Q)  |--   |>P >=> |>Q.
Lemma subp_later {A} `{ageable A} : forall P Q,
|>(P >=> Q) = |>P >=> |>Q.
Lemma eqp_later1 {A} `{ageable A} : forall P Q,
|>(P <=> Q)  |--   |>P <=> |>Q.
Lemma eqp_later {A} `{ageable A} : forall P Q,
(|>(P <=> Q) = |>P <=> |>Q)%pred.