Local Open Scope logic_base.
Local Open Scope syntax.
Local Open Scope kripke_model.
Section Sound_Flat.
Context {L: Language}
{minL: MinimunLanguage L}
{pL: PropositionalLanguage L}
{sL: SeparationLanguage L}
{MD: Model}
{kMD: KripkeModel MD}
(M: Kmodel)
{R: Relation (Kworlds M)}
{po_R: PreOrder Krelation}
{J: Join (Kworlds M)}
{SA: SeparationAlgebra (Kworlds M)}
{dSA: DownwardsClosedSeparationAlgebra (Kworlds M)}
{SM: Semantics L MD}
{kiSM: KripkeIntuitionisticSemantics L MD M SM}
{kminSM: KripkeMinimunSemantics L MD M SM}
{kpSM: KripkePropositionalSemantics L MD M SM}
{fsSM: FlatSemantics.SeparatingSemantics L MD M SM}.

(* Specifications: *)
Lemma sound_sepcon_comm:
forall x y: expr,
forall m,
KRIPKE: M, m |= x * y --> y * x.
Lemma sound_sepcon_assoc:
forall x y z: expr,
forall m,
KRIPKE: M, m |= x * (y * z) <--> (x * y) * z.
Lemma sound_wand_sepcon_adjoint:
forall x y z: expr,
(forall m, KRIPKE: M, m |= x * y --> z) <-> (forall m, KRIPKE: M, m |= x --> (y -* z)).
Lemma sound_sepcon_mono:
forall x1 x2 y1 y2: expr,
(forall m, KRIPKE: M, m |= x1 --> x2) ->
(forall m, KRIPKE: M, m |= y1 --> y2) ->
(forall m, KRIPKE: M, m |= x1 * y1 --> x2 * y2).
Lemma sound_sepcon_elim1 {incrSA: IncreasingSeparationAlgebra (Kworlds M)}:
forall x y: expr,
forall m, KRIPKE: M, m |= x * y --> x.