Ltac pull_left A := repeat (rewrite <- (pull_right A) || rewrite <- (pull_right0 A)).

(* Specifications: *)
Lemma andp_assoc' {A}{NA: NatDed A}: forall P Q R : A, Q && (P && R) = P && (Q && R).
Lemma corable_andp_sepcon2{A}{NA: NatDed A}{SA: SepLog A}{CA: CorableSepLog A}: forall P Q R : A, corable P -> (Q && P) * R = P && (Q * R).
Lemma corable_sepcon_andp1 {A}{NA: NatDed A}{SA: SepLog A}{CA: CorableSepLog A}: forall P Q R : A, corable P -> Q * (P && R) = P && (Q * R).
Lemma corable_sepcon_andp2 {A}{NA: NatDed A}{SA: SepLog A}{CA: CorableSepLog A}: forall P Q R : A, corable P -> Q * (R && P) = P && (Q * R).
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 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 sepcon_corable_corable: forall {A} `{CorableSepLog A} {ClS: ClassicalSep A} P Q, corable P -> corable Q -> P * Q = P && Q.