Hint Resolve @corable_andp @corable_orp @corable_allp @corable_exp
@corable_imp @corable_prop @corable_sepcon @corable_wand @corable_later.
Hint Resolve @corable_prop : norm.
(* The followings are not in auto-rewrite lib. *)

(* Specifications: *)
Lemma sepcon_left_corable: forall {A}{NA: NatDed A}{SA: SepLog A}{CA: CorableSepLog A} (P Q: A), corable P -> (P * Q = (P && Q) * TT).
Lemma andp_left_corable: forall {A}{NA: NatDed A}{SA: SepLog A}{ClA: ClassicalSep A}{CA: CorableSepLog A} (P Q: A), corable P -> P && Q = (P && emp) * Q.
Lemma TT_sepcon_TT: forall {A} `{ClassicalSep A}, TT * TT = TT.
Lemma not_prop_right: forall {A} {NA: NatDed A} (P: A) (Q: Prop), (Q -> derives P FF) -> derives P (prop (not Q)).
Lemma prop_and {A} {NA: NatDed A}:
forall P Q: Prop, prop (P /\ Q) = (prop P && prop Q).
Lemma prop_impl {A} {NA: NatDed A}:
forall P Q: Prop, prop (P -> Q) = (prop P --> prop Q).
Lemma prop_forall {A B} {NA: NatDed A}:
forall P: B -> Prop, prop (forall b, P b) = ALL b: B, !! P b.
Lemma sepcon_prop_prop:
forall {A} `{ClassicalSep A} P Q, !! P * !! Q = !! (P /\ Q).
Lemma corable_sepcon_TT: forall {A}{NA: NatDed A}{SA: SepLog A}{ClA: ClassicalSep A}{CA: CorableSepLog A} (P : A), corable P -> P * TT = P.
Lemma derives_left_sepcon_right_corable: forall {A}{NA: NatDed A}{SA: SepLog A}{ClA: ClassicalSep A}{CA: CorableSepLog A} (P Q R: A), corable P -> (Q |-- P) -> Q * R |-- P.
Lemma later_prop_andp_sepcon: forall {A: Type} {A}{NA: NatDed A}{SA: SepLog A}{ClA: ClassicalSep A}{IA: Indir A}{CSL: CorableSepLog A} {CI: CorableIndir A} (P: Prop) (Q R: A),
((|> !! P) && Q) * R = (|> !! P) && (Q * R).
Lemma sepcon_corable_corable:
forall {A} `{CorableSepLog A} {ClS: ClassicalSep A} P Q, corable P -> corable Q -> P * Q = P && Q.
Lemma prop_false_andp {A}{NA :NatDed A}:
forall P Q, ~P -> !! P && Q = FF.
Lemma andp_prop_derives: forall {A} {NA: NatDed A} (P P': Prop) (Q Q': A),
(P <-> P') ->
(P -> Q |-- Q') ->
!! P && Q |-- !! P' && Q'.
Lemma andp_prop_ext:
forall {A}{NA: NatDed A} (P P': Prop) (Q Q': A),
(P<->P') ->
(P -> (Q=Q')) ->
!! P && Q = !! P' && Q'.
Lemma prop_and_same_derives {A}{NA: NatDed A}:
forall P Q, Q |-- !! P   ->   Q |-- !!P && Q.