Local Open Scope logic_base.
Local Open Scope syntax.
Section DerivedRules.
Context {L: Language}
{minL: MinimunLanguage L}
{pL: PropositionalLanguage L}
{sL: SeparationLanguage L}
{Gamma: ProofTheory L}
{minAX: MinimunAxiomatization L Gamma}
{ipGamma: IntuitionisticPropositionalLogic L Gamma}
{sGamma: SeparationLogic L Gamma}.

(* Specifications: *)
Lemma provable_sepcon_andp_left: forall (x y z: expr),
|-- (x && y) * z --> (x * z) && (y * z).
Lemma provable_sepcon_andp_right: forall (x y z: expr),
|-- x * (y && z) --> (x * y) && (x * z).
Lemma provable_truep_sepcon_truep {ExtsGamma: ExtSeparationLogic L Gamma}:
|-- TT * TT <--> TT.
Lemma derivable_emp {s'L: SeparationEmpLanguage L} {eGamma: EmpSeparationLogic L Gamma} {gcsGamma: GarbageCollectSeparationLogic L Gamma}: forall (x y: expr),
|-- emp.
Lemma GC_Ext_Classical_collapse_aux {cpGamma: ClassicalPropositionalLogic L Gamma} {gcsGamma: GarbageCollectSeparationLogic L Gamma} {ExtsGamma: ExtSeparationLogic L Gamma}: forall (x: expr),
|-- x --> x * x.
Theorem GC_Ext_Classical_collapse {cpGamma: ClassicalPropositionalLogic L Gamma} {gcsGamma: GarbageCollectSeparationLogic L Gamma} {ExtsGamma: ExtSeparationLogic L Gamma}: forall (x y: expr),
|-- x * y <--> x && y.