Local Open Scope logic_base.
Local Open Scope syntax.
Class SepconMonoAxiomatization
(L: Language)
{minL: MinimumLanguage L}
{sepconL: SepconLanguage L}
(Gamma: Provable L) := {
__sepcon_mono: forall x1 x2 y1 y2 : expr, |-- x1 --> x2 -> |-- y1 --> y2 -> |-- x1 * y1 --> x2 * y2
}.
Class SepconAxiomatization_weak
(L: Language)
{minL: MinimumLanguage L}
{sepconL: SepconLanguage L}
(Gamma: Provable L) := {
__sepcon_comm_impp: forall x y, |-- x * y --> y * x;
__sepcon_assoc1: forall x y z, |-- x * (y * z) --> (x * y) * z;
}.
Class SepconAxiomatization_weak_iffp
(L: Language)
{minL: MinimumLanguage L}
{pL: PropositionalLanguage L}
{sepconL: SepconLanguage L}
(Gamma: Provable L) := {
__sepcon_comm: forall x y, |-- x * y <--> y * x;
__sepcon_assoc: forall x y z, |-- x * (y * z) <--> (x * y) * z;
}.
Class EmpAxiomatization_iffp
(L: Language)
{minL: MinimumLanguage L}
{pL: PropositionalLanguage L}
{sepconL: SepconLanguage L}
{empL: EmpLanguage L}
(Gamma: Provable L) := {
__sepcon_emp: forall x, |-- x * emp <--> x
}.

Lemma SepconAxiomatizationWeak2SepconAxiomatization
{L: Language}
{minL: MinimumLanguage L}
{sepconL: SepconLanguage L}
{Gamma: Provable L}
{minAX: MinimumAxiomatization L Gamma}
{sepconAX: SepconAxiomatization_weak L Gamma}
{sepcon_mono_AX: SepconMonoAxiomatization L Gamma}:
SepconAxiomatization L Gamma.