(* Later distributes over almost everything! *)

(* Specifications: *)
Lemma later_commute_dia {A} `{ageable A} : forall M (P:pred A),
diamond M (|> P) |-- |> (diamond M P).
Lemma later_commute {A} `{ageable A} : forall M (P:pred A),
box M (|>P) = |>(box M P).
Lemma later_and {A} `{ageable A} : forall P Q,
|>(P && Q) = |>P && |> Q.
Lemma later_or {A} `{ageable A} : forall (P Q:pred A),
|>(P || Q) = |>P || |>Q.
Lemma later_ex {A} `{ageable A} : forall B (F:B->pred A),
B ->
|>(exp F) = EX x:B, |>(F x).
Lemma later_ex'' {A} `{ageable A} : forall B (F:B->pred A),
|>(exp F) |-- (EX x:B, |>(F x)) || |> FF.
Lemma later_imp {A} `{ageable A} : forall P Q,
|>(P --> Q) = |>P --> |>Q.
Lemma TT_boxy {A} `{ageable A} : forall M,
boxy M TT.
Lemma positive_boxy {A} `{ageable A} : forall P Q M,
boxy M P ->
P |-- Q ->
P |-- box M Q.
Lemma forallI {A} `{ageable A} : forall A G X,
(forall x:A, G |-- X x) ->
G |-- allp X.
Lemma TT_and {A} `{ageable A} : forall P,
TT && P = P.
Lemma andp_comm {A} `{ageable A} : forall P Q,
P && Q = Q && P.
Lemma andp_assoc {A} `{ageable A} : forall P Q R,
(P && Q) && R = P && (Q && R).
Lemma ex_and : forall {A} `{ageable A} B (P:B->pred A) Q,
(exp P) && Q = EX x:B, P x && Q.
Lemma FF_and : forall {A} `{ageable A} (P:pred A),
FF && P = FF.
Lemma boxy_e {A} `{H : ageable A}: forall (M: modality) P,  boxy M P ->
forall w w', app_mode M w w' -> P w -> P w'.
Lemma boxy_andp {A} `{H : ageable A}:
forall (M: modality) , reflexive _ (app_mode M) ->
forall P Q, boxy M P -> boxy M Q -> boxy M (P && Q).