Built with Alectryon, running vsrocq-language-server v9.1.1 5.4.0 / 2.5.0. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+πŸ–±οΈ to focus. On Mac, use ⌘ instead of Ctrl.

Classical.Phase: phase semantics and soundness for CLL

In the intuitionistic semantics (Intuitionistic/Phase.v), the closure operator cl is a free parameter of the model, and βŠ₯ is just one fact among others. Classical phase semantics fixes one set of phases instead, the pole β««. Think of it as the set of balanced situations, where everything produced was also consumed. Every other notion is defined from the pole by orthogonality:
        X^βŠ₯ = { y | βˆ€ x ∈ X, x Β· y ∈ β«« }      the "counter-bags" of X
The closure is then cl X = X^βŠ₯βŠ₯, and a fact is a set with X^βŠ₯βŠ₯ = X. Linear negation is literally ^βŠ₯ on sets. That is why A^βŠ₯^βŠ₯ = A holds classically, while in the intuitionistic semantics ∼∼A can be strictly larger than A.
Validity of a two-sided sequent takes a symmetric form. Take a bag for each hypothesis and a counter-bag (an element of ⟦B⟧^βŠ₯) for each conclusion. The sequent is valid when the combination of all of them always lies in the pole:
        Ξ“ ⊨ Ξ”   iff   ⟦Aβ‚βŸ§ βŠ™ … βŠ™ ⟦Aβ‚™βŸ§ βŠ™ ⟦Bβ‚βŸ§^βŠ₯ βŠ™ … βŠ™ ⟦Bβ‚˜βŸ§^βŠ₯  βŠ†  β««
Moving a formula across ⊒ swaps ⟦B⟧ with ⟦B⟧^βŠ₯. This is the semantic counterpart of the negation rules.
This file contains classical phase spaces, the interpretation, soundness, and countermodels based on resource balance.
[Loading ML file rocq-runtime.plugins.ring ... done]
[Loading ML file rocq-runtime.plugins.zify ... done]
[Loading ML file rocq-runtime.plugins.micromega_core ... done]
[Loading ML file rocq-runtime.plugins.micromega ... done]
[Loading ML file rocq-runtime.plugins.ssrmatching ... done]
[Loading ML file rocq-runtime.plugins.ssreflect ... done]
[Loading ML file rocq-runtime.plugins.btauto ... done]
[Loading ML file rocq-runtime.plugins.nsatz_core ... done]
[Loading ML file rocq-runtime.plugins.nsatz ... done]
From LinearLogic.Classical Require Export Sequent.

Classical phase spaces

A classical phase space has three components:
The field names start with cph_, to keep them apart from the intuitionistic ph_ fields.
Record cphase_space : Type := {
  ccarrier :> Type;
  cph_equiv : Equiv ccarrier;
  cph_op : ccarrier -> ccarrier -> ccarrier;
  cph_e  : ccarrier;
  cph_pole : propset ccarrier;
  cph_J  : propset ccarrier;

  cph_equivalence : Equivalence (@equiv _ cph_equiv);
  cph_op_proper : Proper (@equiv _ cph_equiv ==> @equiv _ cph_equiv ==>
                          @equiv _ cph_equiv) cph_op;
  cph_assoc  : βˆ€ x y z, @equiv _ cph_equiv (cph_op x (cph_op y z))
                                           (cph_op (cph_op x y) z);
  cph_comm   : βˆ€ x y, @equiv _ cph_equiv (cph_op x y) (cph_op y x);
  cph_unit_l : βˆ€ x, @equiv _ cph_equiv (cph_op cph_e x) x;

  cph_pole_proper : βˆ€ x y, @equiv _ cph_equiv x y -> x ∈ cph_pole -> y ∈ cph_pole;

  cph_J_proper : βˆ€ x y, @equiv _ cph_equiv x y -> x ∈ cph_J -> y ∈ cph_J;
  cph_J_unit   : cph_e ∈ cph_J;
  cph_J_op     : βˆ€ x y, x ∈ cph_J -> y ∈ cph_J -> cph_op x y ∈ cph_J;
  cph_J_weak   : βˆ€ j y, j ∈ cph_J -> y ∈ cph_pole -> cph_op j y ∈ cph_pole;
  cph_J_contr  : βˆ€ j y, j ∈ cph_J ->
      cph_op (cph_op j j) y ∈ cph_pole -> cph_op j y ∈ cph_pole;
}.

Arguments cph_op {_}. Arguments cph_e {_}. Arguments cph_pole {_}.
Arguments cph_J {_}. Arguments cph_assoc {_}. Arguments cph_comm {_}.
Arguments cph_unit_l {_}. Arguments cph_pole_proper {_}.
Arguments cph_J_proper {_}. Arguments cph_J_unit {_}. Arguments cph_J_op {_}.
Arguments cph_J_weak {_}. Arguments cph_J_contr {_}.

#[export] Existing Instance cph_equiv.
#[export] Instance cph_equivalence' (P : cphase_space) : Equivalence (≑@{P})
  := cph_equivalence P.
#[export] Instance cph_op_proper' (P : cphase_space)
  : Proper ((≑) ==> (≑) ==> (≑)) (@cph_op P) := cph_op_proper P.

Notations and set formers

Declare Scope cll_phase_scope.
Open Scope cll_phase_scope.

Notation "x Β· y" := (cph_op x y) (at level 40, left associativity)
  : cll_phase_scope.
Notation "β««" := cph_pole : cll_phase_scope.

Section SetFormers.
  Context {P : cphase_space}.
  Implicit Types (X Y : propset P) (x y z : P).
{Ξ΅} up to ≑, the product X βŠ™ Y, and the orthogonal X^βŠ₯.
  Definition one_set : propset P := {[ z | z ≑ cph_e ]}.
  Definition prod_set X Y : propset P := {[ z | βˆƒ a b, a ∈ X ∧ b ∈ Y ∧ z ≑ a Β· b ]}.
  Definition orth X : propset P := {[ y | βˆ€ x, x ∈ X -> x Β· y ∈ β«« ]}.
  Definition full_set : propset P := {[ _ | True ]}.

  
P: cphase_space
z: P

z ∈ one_set ↔ z ≑ cph_e
P: cphase_space
z: P

z ∈ one_set ↔ z ≑ cph_e
P: cphase_space
z: P

z ∈ {[ z0 | z0 ≑ cph_e ]} ↔ z ≑ cph_e
by rewrite elem_of_PropSet. Qed.
P: cphase_space
X, Y: propset P
z: P

z ∈ prod_set X Y ↔ βˆƒ a b : P, a ∈ X ∧ b ∈ Y ∧ z ≑ a Β· b
P: cphase_space
X, Y: propset P
z: P

z ∈ prod_set X Y ↔ βˆƒ a b : P, a ∈ X ∧ b ∈ Y ∧ z ≑ a Β· b
P: cphase_space
X, Y: propset P
z: P

z ∈ {[ z0 | βˆƒ a b : P, a ∈ X ∧ b ∈ Y ∧ z0 ≑ a Β· b ]} ↔ βˆƒ a b : P, a ∈ X ∧ b ∈ Y ∧ z ≑ a Β· b
by rewrite elem_of_PropSet. Qed.
P: cphase_space
X: propset P
y: P

y ∈ orth X ↔ βˆ€ x, x ∈ X β†’ x Β· y ∈ β««
P: cphase_space
X: propset P
y: P

y ∈ orth X ↔ βˆ€ x, x ∈ X β†’ x Β· y ∈ β««
P: cphase_space
X: propset P
y: P

y ∈ {[ y0 | βˆ€ x, x ∈ X β†’ x Β· y0 ∈ β«« ]} ↔ βˆ€ x, x ∈ X β†’ x Β· y ∈ β««
by rewrite elem_of_PropSet. Qed.
P: cphase_space
z: P

z ∈ full_set
P: cphase_space
z: P

z ∈ full_set
P: cphase_space
z: P

z ∈ {[ _ | True ]}
by rewrite elem_of_PropSet. Qed. End SetFormers. Infix "βŠ™" := prod_set (at level 40, left associativity) : cll_phase_scope. Notation "X ^βŠ₯" := (orth X) (at level 20, format "X ^βŠ₯") : cll_phase_scope.

The algebra of orthogonality

Section Orth.
  Context {P : cphase_space}.
  Implicit Types (X Y Z F R : propset P) (x y z : P).

  
P: cphase_space
x: P

x Β· cph_e ≑ x
P: cphase_space
x: P

x Β· cph_e ≑ x
P: cphase_space
x: P

cph_e Β· x ≑ x
apply cph_unit_l. Qed.
P: cphase_space
X: propset P
y, y': P

y ≑ y' β†’ y ∈ X^βŠ₯ β†’ y' ∈ X^βŠ₯
P: cphase_space
X: propset P
y, y': P

y ≑ y' β†’ y ∈ X^βŠ₯ β†’ y' ∈ X^βŠ₯
P: cphase_space
X: propset P
y, y': P

y ≑ y' β†’ (βˆ€ x, x ∈ X β†’ x Β· y ∈ β««) β†’ βˆ€ x, x ∈ X β†’ x Β· y' ∈ β««
P: cphase_space
X: propset P
y, y': P
Hy: y ≑ y'
H: βˆ€ x, x ∈ X β†’ x Β· y ∈ β««
x: P
Hx: x ∈ X

x · y' ∈ ⫫
apply (cph_pole_proper (x Β· y)); [by rewrite Hy | auto]. Qed.
P: cphase_space
X, Y: propset P

X βŠ† Y β†’ Y^βŠ₯ βŠ† X^βŠ₯
P: cphase_space
X, Y: propset P

X βŠ† Y β†’ Y^βŠ₯ βŠ† X^βŠ₯
P: cphase_space
X, Y: propset P
H: X βŠ† Y
y: P

y ∈ Y^βŠ₯ β†’ y ∈ X^βŠ₯
P: cphase_space
X, Y: propset P
H: X βŠ† Y
y: P

(βˆ€ x, x ∈ Y β†’ x Β· y ∈ β««) β†’ βˆ€ x, x ∈ X β†’ x Β· y ∈ β««
naive_solver. Qed.
X βŠ† X^βŠ₯βŠ₯: every bag is orthogonal to its counter-bags.
  
P: cphase_space
X: propset P

X βŠ† (X^βŠ₯)^βŠ₯
P: cphase_space
X: propset P

X βŠ† (X^βŠ₯)^βŠ₯
P: cphase_space
X: propset P
x: P
Hx: x ∈ X

x ∈ (X^βŠ₯)^βŠ₯
P: cphase_space
X: propset P
x: P
Hx: x ∈ X

βˆ€ x0, x0 ∈ X^βŠ₯ β†’ x0 Β· x ∈ β««
P: cphase_space
X: propset P
x: P
Hx: x ∈ X
y: P
Hy: y ∈ X^βŠ₯

y · x ∈ ⫫
P: cphase_space
X: propset P
x: P
Hx: x ∈ X
y: P
Hy: βˆ€ x, x ∈ X β†’ x Β· y ∈ β««

y · x ∈ ⫫
apply (cph_pole_proper (x Β· y)); [apply cph_comm | auto]. Qed.
P: cphase_space
X: propset P

((X^βŠ₯)^βŠ₯)^βŠ₯ βŠ† X^βŠ₯
P: cphase_space
X: propset P

((X^βŠ₯)^βŠ₯)^βŠ₯ βŠ† X^βŠ₯
apply orth_anti, biorth. Qed.
P: cphase_space
X, Y: propset P

X βŠ† Y β†’ (X^βŠ₯)^βŠ₯ βŠ† (Y^βŠ₯)^βŠ₯
P: cphase_space
X, Y: propset P

X βŠ† Y β†’ (X^βŠ₯)^βŠ₯ βŠ† (Y^βŠ₯)^βŠ₯
P: cphase_space
X, Y: propset P
H: X βŠ† Y

(X^βŠ₯)^βŠ₯ βŠ† (Y^βŠ₯)^βŠ₯
by apply orth_anti, orth_anti. Qed.
A fact is a set equal to its biorthogonal.
  Definition fact F : Prop := F^βŠ₯^βŠ₯ βŠ† F.

  
P: cphase_space
X: propset P

fact (X^βŠ₯)
P: cphase_space
X: propset P

fact (X^βŠ₯)
apply triorth. Qed.
P: cphase_space
X, Y: propset P

fact X β†’ fact Y β†’ fact (X ∩ Y)
P: cphase_space
X, Y: propset P

fact X β†’ fact Y β†’ fact (X ∩ Y)
P: cphase_space
X, Y: propset P
HX: fact X
HY: fact Y
z: P
Hz: z ∈ ((X ∩ Y)^βŠ₯)^βŠ₯

z ∈ X ∩ Y
P: cphase_space
X, Y: propset P
HX: fact X
HY: fact Y
z: P
Hz: z ∈ ((X ∩ Y)^βŠ₯)^βŠ₯

z ∈ X ∧ z ∈ Y
split; [apply HX | apply HY]; revert z Hz; apply biorth_mono; set_solver. Qed.
P: cphase_space

fact full_set
P: cphase_space

fact full_set
P: cphase_space
z: P

z ∈ full_set
apply elem_of_full. Qed.
P: cphase_space
F: propset P
x, y: P

fact F β†’ x ≑ y β†’ x ∈ F β†’ y ∈ F
P: cphase_space
F: propset P
x, y: P

fact F β†’ x ≑ y β†’ x ∈ F β†’ y ∈ F
P: cphase_space
F: propset P
x, y: P
HF: fact F
Hxy: x ≑ y
Hx: x ∈ F

y ∈ F
P: cphase_space
F: propset P
x, y: P
HF: fact F
Hxy: x ≑ y
Hx: x ∈ F

y ∈ (F^βŠ₯)^βŠ₯
apply (orth_proper _ x); [done | by apply biorth]. Qed.
The key adjunction: X βŠ™ Y βŠ† β«« iff Y βŠ† X^βŠ₯.
  
P: cphase_space
X, Y: propset P

X βŠ™ Y βŠ† β«« ↔ Y βŠ† X^βŠ₯
P: cphase_space
X, Y: propset P

X βŠ™ Y βŠ† β«« ↔ Y βŠ† X^βŠ₯
P: cphase_space
X, Y: propset P

X βŠ™ Y βŠ† β«« β†’ Y βŠ† X^βŠ₯
P: cphase_space
X, Y: propset P
Y βŠ† X^βŠ₯ β†’ X βŠ™ Y βŠ† β««
P: cphase_space
X, Y: propset P

X βŠ™ Y βŠ† β«« β†’ Y βŠ† X^βŠ₯
P: cphase_space
X, Y: propset P
H: X βŠ™ Y βŠ† β««
y: P
Hy: y ∈ Y

y ∈ X^βŠ₯
P: cphase_space
X, Y: propset P
H: X βŠ™ Y βŠ† β««
y: P
Hy: y ∈ Y

βˆ€ x, x ∈ X β†’ x Β· y ∈ β««
P: cphase_space
X, Y: propset P
H: X βŠ™ Y βŠ† β««
y: P
Hy: y ∈ Y
x: P
Hx: x ∈ X

x · y ∈ ⫫
P: cphase_space
X, Y: propset P
H: X βŠ™ Y βŠ† β««
y: P
Hy: y ∈ Y
x: P
Hx: x ∈ X

βˆƒ a b : P, a ∈ X ∧ b ∈ Y ∧ x Β· y ≑ a Β· b
by exists x, y.
P: cphase_space
X, Y: propset P

Y βŠ† X^βŠ₯ β†’ X βŠ™ Y βŠ† β««
P: cphase_space
X, Y: propset P
H: Y βŠ† X^βŠ₯
z, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hz: z ≑ a Β· b

z ∈ ⫫
P: cphase_space
X, Y: propset P
H: Y βŠ† X^βŠ₯
z, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hz: z ≑ a Β· b

a · b ∈ ⫫
P: cphase_space
X, Y: propset P
b: P
H: b ∈ X^βŠ₯
z, a: P
Ha: a ∈ X
Hb: b ∈ Y
Hz: z ≑ a Β· b

a · b ∈ ⫫
P: cphase_space
X, Y: propset P
b: P
H: βˆ€ x, x ∈ X β†’ x Β· b ∈ β««
z, a: P
Ha: a ∈ X
Hb: b ∈ Y
Hz: z ≑ a Β· b

a · b ∈ ⫫
auto. Qed.
P: cphase_space
X, X', Y, Y': propset P

X βŠ† X' β†’ Y βŠ† Y' β†’ X βŠ™ Y βŠ† X' βŠ™ Y'
P: cphase_space
X, X', Y, Y': propset P

X βŠ† X' β†’ Y βŠ† Y' β†’ X βŠ™ Y βŠ† X' βŠ™ Y'
P: cphase_space
X, X', Y, Y': propset P
HX: X βŠ† X'
HY: Y βŠ† Y'
z, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hz: z ≑ a Β· b

z ∈ X' βŠ™ Y'
P: cphase_space
X, X', Y, Y': propset P
HX: X βŠ† X'
HY: Y βŠ† Y'
z, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hz: z ≑ a Β· b

βˆƒ a0 b0 : P, a0 ∈ X' ∧ b0 ∈ Y' ∧ z ≑ a0 Β· b0
P: cphase_space
X, X', Y, Y': propset P
HX: X βŠ† X'
HY: Y βŠ† Y'
z, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hz: z ≑ a Β· b

a ∈ X' ∧ b ∈ Y' ∧ z ≑ a Β· b
auto. Qed.
P: cphase_space
X, Y, Z: propset P

X βŠ™ (Y βŠ™ Z) βŠ† X βŠ™ Y βŠ™ Z
P: cphase_space
X, Y, Z: propset P

X βŠ™ (Y βŠ™ Z) βŠ† X βŠ™ Y βŠ™ Z
P: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a ∈ X
b, c: P
Hb: b ∈ Y
Hc: c ∈ Z
Hw: w ≑ b Β· c
Hz: z ≑ a Β· w

z ∈ X βŠ™ Y βŠ™ Z
P: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a ∈ X
b, c: P
Hb: b ∈ Y
Hc: c ∈ Z
Hw: w ≑ b Β· c
Hz: z ≑ a Β· w

βˆƒ a0 b0 : P, a0 ∈ X βŠ™ Y ∧ b0 ∈ Z ∧ z ≑ a0 Β· b0
P: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a ∈ X
b, c: P
Hb: b ∈ Y
Hc: c ∈ Z
Hw: w ≑ b Β· c
Hz: z ≑ a Β· w

a Β· b ∈ X βŠ™ Y ∧ c ∈ Z ∧ z ≑ a Β· b Β· c
P: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a ∈ X
b, c: P
Hb: b ∈ Y
Hc: c ∈ Z
Hw: w ≑ b Β· c
Hz: z ≑ a Β· w

(βˆƒ a0 b0 : P, a0 ∈ X ∧ b0 ∈ Y ∧ a Β· b ≑ a0 Β· b0) ∧ c ∈ Z ∧ z ≑ a Β· b Β· c
P: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a ∈ X
b, c: P
Hb: b ∈ Y
Hc: c ∈ Z
Hw: w ≑ b Β· c
Hz: z ≑ a Β· w

βˆƒ a0 b0 : P, a0 ∈ X ∧ b0 ∈ Y ∧ a Β· b ≑ a0 Β· b0
P: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a ∈ X
b, c: P
Hb: b ∈ Y
Hc: c ∈ Z
Hw: w ≑ b Β· c
Hz: z ≑ a Β· w
z ≑ a Β· b Β· c
P: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a ∈ X
b, c: P
Hb: b ∈ Y
Hc: c ∈ Z
Hw: w ≑ b Β· c
Hz: z ≑ a Β· w

βˆƒ a0 b0 : P, a0 ∈ X ∧ b0 ∈ Y ∧ a Β· b ≑ a0 Β· b0
by exists a, b.
P: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a ∈ X
b, c: P
Hb: b ∈ Y
Hc: c ∈ Z
Hw: w ≑ b Β· c
Hz: z ≑ a Β· w

z ≑ a Β· b Β· c
P: cphase_space
X, Y, Z: propset P
z, a, w: P
Ha: a ∈ X
b, c: P
Hb: b ∈ Y
Hc: c ∈ Z
Hw: w ≑ b Β· c
Hz: z ≑ a Β· w

a Β· (b Β· c) ≑ a Β· b Β· c
apply cph_assoc. Qed.
P: cphase_space
X, Y, Z: propset P

X βŠ™ Y βŠ™ Z βŠ† X βŠ™ (Y βŠ™ Z)
P: cphase_space
X, Y, Z: propset P

X βŠ™ Y βŠ™ Z βŠ† X βŠ™ (Y βŠ™ Z)
P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hw: w ≑ a Β· b
Hc: c ∈ Z
Hz: z ≑ w Β· c

z ∈ X βŠ™ (Y βŠ™ Z)
P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hw: w ≑ a Β· b
Hc: c ∈ Z
Hz: z ≑ w Β· c

βˆƒ a0 b0 : P, a0 ∈ X ∧ b0 ∈ Y βŠ™ Z ∧ z ≑ a0 Β· b0
P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hw: w ≑ a Β· b
Hc: c ∈ Z
Hz: z ≑ w Β· c

a ∈ X ∧ b Β· c ∈ Y βŠ™ Z ∧ z ≑ a Β· (b Β· c)
P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hw: w ≑ a Β· b
Hc: c ∈ Z
Hz: z ≑ w Β· c

a ∈ X ∧ (βˆƒ a0 b0 : P, a0 ∈ Y ∧ b0 ∈ Z ∧ b Β· c ≑ a0 Β· b0) ∧ z ≑ a Β· (b Β· c)
P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hw: w ≑ a Β· b
Hc: c ∈ Z
Hz: z ≑ w Β· c

βˆƒ a0 b0 : P, a0 ∈ Y ∧ b0 ∈ Z ∧ b Β· c ≑ a0 Β· b0
P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hw: w ≑ a Β· b
Hc: c ∈ Z
Hz: z ≑ w Β· c
z ≑ a Β· (b Β· c)
P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hw: w ≑ a Β· b
Hc: c ∈ Z
Hz: z ≑ w Β· c

βˆƒ a0 b0 : P, a0 ∈ Y ∧ b0 ∈ Z ∧ b Β· c ≑ a0 Β· b0
by exists b, c.
P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hw: w ≑ a Β· b
Hc: c ∈ Z
Hz: z ≑ w Β· c

z ≑ a Β· (b Β· c)
P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hw: w ≑ a Β· b
Hc: c ∈ Z
Hz: z ≑ w Β· c

a Β· b Β· c ≑ a Β· (b Β· c)
P: cphase_space
X, Y, Z: propset P
z, w, c, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hw: w ≑ a Β· b
Hc: c ∈ Z
Hz: z ≑ w Β· c

a Β· (b Β· c) ≑ a Β· b Β· c
apply cph_assoc. Qed.
P: cphase_space
X, Y: propset P

X βŠ™ Y βŠ† Y βŠ™ X
P: cphase_space
X, Y: propset P

X βŠ™ Y βŠ† Y βŠ™ X
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hz: z ≑ a Β· b

z ∈ Y βŠ™ X
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hz: z ≑ a Β· b

βˆƒ a0 b0 : P, a0 ∈ Y ∧ b0 ∈ X ∧ z ≑ a0 Β· b0
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hz: z ≑ a Β· b

b ∈ Y ∧ a ∈ X ∧ z ≑ b Β· a
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ X
Hb: b ∈ Y
Hz: z ≑ a Β· b

z ≑ b Β· a
by rewrite Hz, cph_comm. Qed.
P: cphase_space
F: propset P

fact F β†’ F βŠ™ one_set βŠ† F
P: cphase_space
F: propset P

fact F β†’ F βŠ™ one_set βŠ† F
P: cphase_space
F: propset P
HF: fact F
z, a, b: P
Ha: a ∈ F
Hb: b ≑ cph_e
Hz: z ≑ a Β· b

z ∈ F
P: cphase_space
F: propset P
HF: fact F
z, a, b: P
Ha: a ∈ F
Hb: b ≑ cph_e
Hz: z ≑ a Β· b

a ≑ z
by rewrite Hz, Hb, cph_unit_r. Qed.
P: cphase_space
X: propset P

X βŠ† one_set βŠ™ X
P: cphase_space
X: propset P

X βŠ† one_set βŠ™ X
P: cphase_space
X: propset P
x: P
Hx: x ∈ X

x ∈ one_set βŠ™ X
P: cphase_space
X: propset P
x: P
Hx: x ∈ X

βˆƒ a b : P, a ∈ one_set ∧ b ∈ X ∧ x ≑ a Β· b
P: cphase_space
X: propset P
x: P
Hx: x ∈ X

cph_e ∈ one_set ∧ x ∈ X ∧ x ≑ cph_e Β· x
P: cphase_space
X: propset P
x: P
Hx: x ∈ X

cph_e ≑ cph_e ∧ x ∈ X ∧ x ≑ x
done. Qed.
Stability: X^βŠ₯βŠ₯ βŠ™ Y^βŠ₯βŠ₯ βŠ† (X βŠ™ Y)^βŠ₯βŠ₯. In the intuitionistic semantics this was an axiom about cl. Here it follows from the definition of ^βŠ₯.
  
P: cphase_space
X, Y: propset P

(X^βŠ₯)^βŠ₯ βŠ™ (Y^βŠ₯)^βŠ₯ βŠ† ((X βŠ™ Y)^βŠ₯)^βŠ₯
P: cphase_space
X, Y: propset P

(X^βŠ₯)^βŠ₯ βŠ™ (Y^βŠ₯)^βŠ₯ βŠ† ((X βŠ™ Y)^βŠ₯)^βŠ₯
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b

z ∈ ((X βŠ™ Y)^βŠ₯)^βŠ₯
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b

βˆ€ x, x ∈ (X βŠ™ Y)^βŠ₯ β†’ x Β· z ∈ β««
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: w ∈ (X βŠ™ Y)^βŠ₯

w · z ∈ ⫫
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««

w · z ∈ ⫫
(* first: for y ∈ Y, y · w is a counter-bag of X *)
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««

βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
H1: βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯
w · z ∈ ⫫
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««

βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
y: P
Hy: y ∈ Y

y Β· w ∈ X^βŠ₯
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
y: P
Hy: y ∈ Y

βˆ€ x, x ∈ X β†’ x Β· (y Β· w) ∈ β««
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
y: P
Hy: y ∈ Y
x: P
Hx: x ∈ X

x · (y · w) ∈ ⫫
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
y: P
Hy: y ∈ Y
x: P
Hx: x ∈ X

x · y · w ∈ ⫫
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
y: P
Hy: y ∈ Y
x: P
Hx: x ∈ X

βˆƒ a0 b0 : P, a0 ∈ X ∧ b0 ∈ Y ∧ x Β· y ≑ a0 Β· b0
by exists x, y.
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
H1: βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯

w · z ∈ ⫫
(* then: w Β· a is a counter-bag of Y *)
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
H1: βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯

w Β· a ∈ Y^βŠ₯
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
H1: βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯
H2: w Β· a ∈ Y^βŠ₯
w · z ∈ ⫫
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
H1: βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯

w Β· a ∈ Y^βŠ₯
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
H1: βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯

βˆ€ x, x ∈ Y β†’ x Β· (w Β· a) ∈ β««
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
H1: βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯
y: P
Hy: y ∈ Y

y · (w · a) ∈ ⫫
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: βˆ€ x, x ∈ X^βŠ₯ β†’ x Β· a ∈ β««
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
H1: βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯
y: P
Hy: y ∈ Y

y · (w · a) ∈ ⫫
P: cphase_space
X, Y: propset P
z, a, b, w, y: P
Ha: y · w · a ∈ ⫫
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
H1: βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯
Hy: y ∈ Y

y · (w · a) ∈ ⫫
apply (cph_pole_proper ((y Β· w) Β· a)); [symmetry; apply cph_assoc | done].
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: b ∈ (Y^βŠ₯)^βŠ₯
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
H1: βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯
H2: w Β· a ∈ Y^βŠ₯

w · z ∈ ⫫
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
Hb: βˆ€ x, x ∈ Y^βŠ₯ β†’ x Β· b ∈ β««
Hz: z ≑ a Β· b
w: P
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
H1: βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯
H2: w Β· a ∈ Y^βŠ₯

w · z ∈ ⫫
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
w: P
Hb: w · a · b ∈ ⫫
Hz: z ≑ a Β· b
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
H1: βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯
H2: w Β· a ∈ Y^βŠ₯

w · z ∈ ⫫
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
w: P
Hb: w · a · b ∈ ⫫
Hz: z ≑ a Β· b
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
H1: βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯
H2: w Β· a ∈ Y^βŠ₯

w Β· a Β· b ≑ w Β· z
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
w: P
Hb: w · a · b ∈ ⫫
Hz: z ≑ a Β· b
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
H1: βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯
H2: w Β· a ∈ Y^βŠ₯

w Β· a Β· b ≑ w Β· (a Β· b)
P: cphase_space
X, Y: propset P
z, a, b: P
Ha: a ∈ (X^βŠ₯)^βŠ₯
w: P
Hb: w · a · b ∈ ⫫
Hz: z ≑ a Β· b
Hw: βˆ€ x, x ∈ X βŠ™ Y β†’ x Β· w ∈ β««
H1: βˆ€ y, y ∈ Y β†’ y Β· w ∈ X^βŠ₯
H2: w Β· a ∈ Y^βŠ₯

w Β· (a Β· b) ≑ w Β· a Β· b
apply cph_assoc. Qed.
P: cphase_space
X, Y: propset P

X^βŠ₯ ∩ Y^βŠ₯ βŠ† (X βˆͺ Y)^βŠ₯
P: cphase_space
X, Y: propset P

X^βŠ₯ ∩ Y^βŠ₯ βŠ† (X βˆͺ Y)^βŠ₯
P: cphase_space
X, Y: propset P
z: P
HX: z ∈ X^βŠ₯
HY: z ∈ Y^βŠ₯

z ∈ (X βˆͺ Y)^βŠ₯
P: cphase_space
X, Y: propset P
z: P
HX: βˆ€ x, x ∈ X β†’ x Β· z ∈ β««
HY: βˆ€ x, x ∈ Y β†’ x Β· z ∈ β««

z ∈ (X βˆͺ Y)^βŠ₯
P: cphase_space
X, Y: propset P
z: P
HX: βˆ€ x, x ∈ X β†’ x Β· z ∈ β««
HY: βˆ€ x, x ∈ Y β†’ x Β· z ∈ β««

βˆ€ x, x ∈ X βˆͺ Y β†’ x Β· z ∈ β««
intros x [Hx | Hx]%elem_of_union; auto. Qed.
P: cphase_space
R: propset P

R βŠ† β«« β†’ R βŠ† one_set^βŠ₯
P: cphase_space
R: propset P

R βŠ† β«« β†’ R βŠ† one_set^βŠ₯
P: cphase_space
R: propset P
H: R βŠ† β««
r: P
Hr: r ∈ R

r ∈ one_set^βŠ₯
P: cphase_space
R: propset P
H: R βŠ† β««
r: P
Hr: r ∈ R

βˆ€ x, x ∈ one_set β†’ x Β· r ∈ β««
P: cphase_space
R: propset P
H: R βŠ† β««
r: P
Hr: r ∈ R
x: P
Hx: x ≑ cph_e

x · r ∈ ⫫
apply (cph_pole_proper r); [by rewrite Hx, cph_unit_l | auto]. Qed.
P: cphase_space
R1, R2, X: propset P

R1 βŠ† X β†’ R2 βŠ† X^βŠ₯ β†’ R1 βŠ™ R2 βŠ† β««
P: cphase_space
R1, R2, X: propset P

R1 βŠ† X β†’ R2 βŠ† X^βŠ₯ β†’ R1 βŠ™ R2 βŠ† β««
P: cphase_space
R1, R2, X: propset P
H1: R1 βŠ† X
H2: R2 βŠ† X^βŠ₯

R1 βŠ™ R2 βŠ† β««
P: cphase_space
R1, R2, X: propset P
H1: R1 βŠ† X
H2: R2 βŠ† X^βŠ₯

X βŠ™ X^βŠ₯ βŠ† β««
by apply prod_pole. Qed.

Reusable phases

  
Weakening: anything in the pole stays there after a reusable phase is added.
  
P: cphase_space
R, X: propset P

R βŠ† β«« β†’ R βŠ† (X ∩ cph_J)^βŠ₯
P: cphase_space
R, X: propset P

R βŠ† β«« β†’ R βŠ† (X ∩ cph_J)^βŠ₯
P: cphase_space
R, X: propset P
H: R βŠ† β««
r: P
Hr: r ∈ R

r ∈ (X ∩ cph_J)^βŠ₯
P: cphase_space
R, X: propset P
H: R βŠ† β««
r: P
Hr: r ∈ R

βˆ€ x, x ∈ X ∩ cph_J β†’ x Β· r ∈ β««
P: cphase_space
R, X: propset P
H: R βŠ† β««
r: P
Hr: r ∈ R
j: P
Hj: j ∈ cph_J

j · r ∈ ⫫
by apply cph_J_weak, H. Qed.
Contraction: a reusable phase that may be used twice may be used once.
  
P: cphase_space
R, X: propset P

R βŠ† (((X ∩ cph_J)^βŠ₯)^βŠ₯ βŠ™ ((X ∩ cph_J)^βŠ₯)^βŠ₯)^βŠ₯ β†’ R βŠ† (X ∩ cph_J)^βŠ₯
P: cphase_space
R, X: propset P

R βŠ† (((X ∩ cph_J)^βŠ₯)^βŠ₯ βŠ™ ((X ∩ cph_J)^βŠ₯)^βŠ₯)^βŠ₯ β†’ R βŠ† (X ∩ cph_J)^βŠ₯
P: cphase_space
R, X: propset P
H: R βŠ† (((X ∩ cph_J)^βŠ₯)^βŠ₯ βŠ™ ((X ∩ cph_J)^βŠ₯)^βŠ₯)^βŠ₯
r: P
Hr: r ∈ R

r ∈ (X ∩ cph_J)^βŠ₯
P: cphase_space
R, X: propset P
H: R βŠ† (((X ∩ cph_J)^βŠ₯)^βŠ₯ βŠ™ ((X ∩ cph_J)^βŠ₯)^βŠ₯)^βŠ₯
r: P
Hr: r ∈ R

βˆ€ x, x ∈ X ∩ cph_J β†’ x Β· r ∈ β««
P: cphase_space
R, X: propset P
H: R βŠ† (((X ∩ cph_J)^βŠ₯)^βŠ₯ βŠ™ ((X ∩ cph_J)^βŠ₯)^βŠ₯)^βŠ₯
r: P
Hr: r ∈ R
j: P
Hj: j ∈ X ∩ cph_J

j · r ∈ ⫫
P: cphase_space
R, X: propset P
H: R βŠ† (((X ∩ cph_J)^βŠ₯)^βŠ₯ βŠ™ ((X ∩ cph_J)^βŠ₯)^βŠ₯)^βŠ₯
r: P
Hr: r ∈ R
j: P
Hj: j ∈ X ∩ cph_J
HJ: j ∈ cph_J

j · r ∈ ⫫
P: cphase_space
R, X: propset P
H: R βŠ† (((X ∩ cph_J)^βŠ₯)^βŠ₯ βŠ™ ((X ∩ cph_J)^βŠ₯)^βŠ₯)^βŠ₯
r: P
Hr: r ∈ R
j: P
Hj: j ∈ X ∩ cph_J
HJ: j ∈ cph_J

j · j · r ∈ ⫫
P: cphase_space
R, X: propset P
r: P
H: r ∈ (((X ∩ cph_J)^βŠ₯)^βŠ₯ βŠ™ ((X ∩ cph_J)^βŠ₯)^βŠ₯)^βŠ₯
Hr: r ∈ R
j: P
Hj: j ∈ X ∩ cph_J
HJ: j ∈ cph_J

j · j · r ∈ ⫫
P: cphase_space
R, X: propset P
r: P
H: βˆ€ x, x ∈ ((X ∩ cph_J)^βŠ₯)^βŠ₯ βŠ™ ((X ∩ cph_J)^βŠ₯)^βŠ₯ β†’ x Β· r ∈ β««
Hr: r ∈ R
j: P
Hj: j ∈ X ∩ cph_J
HJ: j ∈ cph_J

j · j · r ∈ ⫫
P: cphase_space
R, X: propset P
r: P
H: βˆ€ x, x ∈ ((X ∩ cph_J)^βŠ₯)^βŠ₯ βŠ™ ((X ∩ cph_J)^βŠ₯)^βŠ₯ β†’ x Β· r ∈ β««
Hr: r ∈ R
j: P
Hj: j ∈ X ∩ cph_J
HJ: j ∈ cph_J

βˆƒ a b : P, a ∈ ((X ∩ cph_J)^βŠ₯)^βŠ₯ ∧ b ∈ ((X ∩ cph_J)^βŠ₯)^βŠ₯ ∧ j Β· j ≑ a Β· b
P: cphase_space
R, X: propset P
r: P
H: βˆ€ x, x ∈ ((X ∩ cph_J)^βŠ₯)^βŠ₯ βŠ™ ((X ∩ cph_J)^βŠ₯)^βŠ₯ β†’ x Β· r ∈ β««
Hr: r ∈ R
j: P
Hj: j ∈ X ∩ cph_J
HJ: j ∈ cph_J

j ∈ ((X ∩ cph_J)^βŠ₯)^βŠ₯ ∧ j ∈ ((X ∩ cph_J)^βŠ₯)^βŠ₯ ∧ j Β· j ≑ j Β· j
split_and!; [by apply biorth | by apply biorth | done]. Qed.
X is J-generated when it is included in the biorthogonal of its reusable part. Promotion needs every formula in the context to be J-generated.
  Definition jgen X : Prop := X βŠ† (X ∩ cph_J)^βŠ₯^βŠ₯.

  
P: cphase_space
Y: propset P

jgen (((Y ∩ cph_J)^βŠ₯)^βŠ₯)
P: cphase_space
Y: propset P

jgen (((Y ∩ cph_J)^βŠ₯)^βŠ₯)
P: cphase_space
Y: propset P

Y ∩ cph_J βŠ† ((Y ∩ cph_J)^βŠ₯)^βŠ₯ ∩ cph_J
P: cphase_space
Y: propset P
x: P
Hx: x ∈ Y
HJ: x ∈ cph_J

x ∈ ((Y ∩ cph_J)^βŠ₯)^βŠ₯ ∩ cph_J
P: cphase_space
Y: propset P
x: P
Hx: x ∈ Y
HJ: x ∈ cph_J

x ∈ ((Y ∩ cph_J)^βŠ₯)^βŠ₯ ∧ x ∈ cph_J
split; [by apply biorth | done]. Qed. End Orth.

Big products

⨀ [X₁; …; Xβ‚™] = X₁ βŠ™ … βŠ™ Xβ‚™ βŠ™ {Ξ΅}.
Fixpoint bigprod {P : cphase_space} (L : list (propset P)) : propset P :=
  match L with
  | [] => one_set
  | X :: L => X βŠ™ bigprod L
  end.
Notation "⨀ L" := (bigprod L) (at level 30) : cll_phase_scope.

Section BigProd.
  Context {P : cphase_space}.
  Implicit Types (L : list (propset P)).

  
P: cphase_space
L, L': list (propset P)

L β‰‘β‚š L' β†’ ⨀ L βŠ† ⨀ L'
P: cphase_space
L, L': list (propset P)

L β‰‘β‚š L' β†’ ⨀ L βŠ† ⨀ L'
P: cphase_space

one_set βŠ† one_set
P: cphase_space
X: propset P
L, L': list (propset P)
IH: ⨀ L βŠ† ⨀ L'
X βŠ™ ⨀ L βŠ† X βŠ™ ⨀ L'
P: cphase_space
X, Y: propset P
L: list (propset P)
Y βŠ™ (X βŠ™ ⨀ L) βŠ† X βŠ™ (Y βŠ™ ⨀ L)
P: cphase_space
L, L', L'': list (propset P)
IH1: ⨀ L βŠ† ⨀ L'
IH2: ⨀ L' βŠ† ⨀ L''
⨀ L βŠ† ⨀ L''
P: cphase_space

one_set βŠ† one_set
done.
P: cphase_space
X: propset P
L, L': list (propset P)
IH: ⨀ L βŠ† ⨀ L'

X βŠ™ ⨀ L βŠ† X βŠ™ ⨀ L'
by apply prod_mono.
P: cphase_space
X, Y: propset P
L: list (propset P)

Y βŠ™ (X βŠ™ ⨀ L) βŠ† X βŠ™ (Y βŠ™ ⨀ L)
P: cphase_space
X, Y: propset P
L: list (propset P)

Y βŠ™ X βŠ™ ⨀ L βŠ† X βŠ™ (Y βŠ™ ⨀ L)
P: cphase_space
X, Y: propset P
L: list (propset P)

X βŠ™ Y βŠ™ ⨀ L βŠ† X βŠ™ (Y βŠ™ ⨀ L)
apply prod_assoc_r.
P: cphase_space
L, L', L'': list (propset P)
IH1: ⨀ L βŠ† ⨀ L'
IH2: ⨀ L' βŠ† ⨀ L''

⨀ L βŠ† ⨀ L''
by etransitivity. Qed.
P: cphase_space
L1, L2: list (propset P)

⨀ (L1 ++ L2) βŠ† ⨀ L1 βŠ™ ⨀ L2
P: cphase_space
L1, L2: list (propset P)

⨀ (L1 ++ L2) βŠ† ⨀ L1 βŠ™ ⨀ L2
P: cphase_space
L2: list (propset P)

⨀ L2 βŠ† one_set βŠ™ ⨀ L2
P: cphase_space
X: propset P
L1, L2: list (propset P)
IH: ⨀ (L1 ++ L2) βŠ† ⨀ L1 βŠ™ ⨀ L2
X βŠ™ ⨀ (L1 ++ L2) βŠ† X βŠ™ ⨀ L1 βŠ™ ⨀ L2
P: cphase_space
L2: list (propset P)

⨀ L2 βŠ† one_set βŠ™ ⨀ L2
apply prod_one_l.
P: cphase_space
X: propset P
L1, L2: list (propset P)
IH: ⨀ (L1 ++ L2) βŠ† ⨀ L1 βŠ™ ⨀ L2

X βŠ™ ⨀ (L1 ++ L2) βŠ† X βŠ™ ⨀ L1 βŠ™ ⨀ L2
P: cphase_space
X: propset P
L1, L2: list (propset P)
IH: ⨀ (L1 ++ L2) βŠ† ⨀ L1 βŠ™ ⨀ L2

X βŠ™ (⨀ L1 βŠ™ ⨀ L2) βŠ† X βŠ™ ⨀ L1 βŠ™ ⨀ L2
apply prod_assoc_l. Qed.
A big product of J-generated sets is J-generated.
  
P: cphase_space
L: list (propset P)

Forall jgen L β†’ jgen (⨀ L)
P: cphase_space
L: list (propset P)

Forall jgen L β†’ jgen (⨀ L)
P: cphase_space

one_set βŠ† ((one_set ∩ cph_J)^βŠ₯)^βŠ₯
P: cphase_space
X: propset P
L: list (propset P)
HX: X βŠ† ((X ∩ cph_J)^βŠ₯)^βŠ₯
IH: ⨀ L βŠ† ((⨀ L ∩ cph_J)^βŠ₯)^βŠ₯
X βŠ™ ⨀ L βŠ† (((X βŠ™ ⨀ L) ∩ cph_J)^βŠ₯)^βŠ₯
P: cphase_space

one_set βŠ† ((one_set ∩ cph_J)^βŠ₯)^βŠ₯
P: cphase_space
z: P
Hz: z ∈ one_set

z ∈ ((one_set ∩ cph_J)^βŠ₯)^βŠ₯
P: cphase_space
z: P
Hz: z ∈ one_set

z ∈ one_set ∧ z ∈ cph_J
P: cphase_space
z: P
Hz: z ∈ one_set

z ∈ cph_J
P: cphase_space
z: P
Hz: z ≑ cph_e

z ∈ cph_J
apply (cph_J_proper cph_e); [by symmetry | apply cph_J_unit].
P: cphase_space
X: propset P
L: list (propset P)
HX: X βŠ† ((X ∩ cph_J)^βŠ₯)^βŠ₯
IH: ⨀ L βŠ† ((⨀ L ∩ cph_J)^βŠ₯)^βŠ₯

X βŠ™ ⨀ L βŠ† (((X βŠ™ ⨀ L) ∩ cph_J)^βŠ₯)^βŠ₯
P: cphase_space
X: propset P
L: list (propset P)
HX: X βŠ† ((X ∩ cph_J)^βŠ₯)^βŠ₯
IH: ⨀ L βŠ† ((⨀ L ∩ cph_J)^βŠ₯)^βŠ₯

((X ∩ cph_J)^βŠ₯)^βŠ₯ βŠ™ ((⨀ L ∩ cph_J)^βŠ₯)^βŠ₯ βŠ† (((X βŠ™ ⨀ L) ∩ cph_J)^βŠ₯)^βŠ₯
P: cphase_space
X: propset P
L: list (propset P)
HX: X βŠ† ((X ∩ cph_J)^βŠ₯)^βŠ₯
IH: ⨀ L βŠ† ((⨀ L ∩ cph_J)^βŠ₯)^βŠ₯

((X ∩ cph_J βŠ™ (⨀ L ∩ cph_J))^βŠ₯)^βŠ₯ βŠ† (((X βŠ™ ⨀ L) ∩ cph_J)^βŠ₯)^βŠ₯
P: cphase_space
X: propset P
L: list (propset P)
HX: X βŠ† ((X ∩ cph_J)^βŠ₯)^βŠ₯
IH: ⨀ L βŠ† ((⨀ L ∩ cph_J)^βŠ₯)^βŠ₯

X ∩ cph_J βŠ™ (⨀ L ∩ cph_J) βŠ† (X βŠ™ ⨀ L) ∩ cph_J
P: cphase_space
X: propset P
L: list (propset P)
HX: X βŠ† ((X ∩ cph_J)^βŠ₯)^βŠ₯
IH: ⨀ L βŠ† ((⨀ L ∩ cph_J)^βŠ₯)^βŠ₯
z, a, b: P
Ha: a ∈ X
HJa: a ∈ cph_J
Hb: b ∈ ⨀ L
HJb: b ∈ cph_J
Hz: z ≑ a Β· b

z ∈ (X βŠ™ ⨀ L) ∩ cph_J
P: cphase_space
X: propset P
L: list (propset P)
HX: X βŠ† ((X ∩ cph_J)^βŠ₯)^βŠ₯
IH: ⨀ L βŠ† ((⨀ L ∩ cph_J)^βŠ₯)^βŠ₯
z, a, b: P
Ha: a ∈ X
HJa: a ∈ cph_J
Hb: b ∈ ⨀ L
HJb: b ∈ cph_J
Hz: z ≑ a Β· b

z ∈ X βŠ™ ⨀ L ∧ z ∈ cph_J
P: cphase_space
X: propset P
L: list (propset P)
HX: X βŠ† ((X ∩ cph_J)^βŠ₯)^βŠ₯
IH: ⨀ L βŠ† ((⨀ L ∩ cph_J)^βŠ₯)^βŠ₯
z, a, b: P
Ha: a ∈ X
HJa: a ∈ cph_J
Hb: b ∈ ⨀ L
HJb: b ∈ cph_J
Hz: z ≑ a Β· b

z ∈ X βŠ™ ⨀ L
P: cphase_space
X: propset P
L: list (propset P)
HX: X βŠ† ((X ∩ cph_J)^βŠ₯)^βŠ₯
IH: ⨀ L βŠ† ((⨀ L ∩ cph_J)^βŠ₯)^βŠ₯
z, a, b: P
Ha: a ∈ X
HJa: a ∈ cph_J
Hb: b ∈ ⨀ L
HJb: b ∈ cph_J
Hz: z ≑ a Β· b
z ∈ cph_J
P: cphase_space
X: propset P
L: list (propset P)
HX: X βŠ† ((X ∩ cph_J)^βŠ₯)^βŠ₯
IH: ⨀ L βŠ† ((⨀ L ∩ cph_J)^βŠ₯)^βŠ₯
z, a, b: P
Ha: a ∈ X
HJa: a ∈ cph_J
Hb: b ∈ ⨀ L
HJb: b ∈ cph_J
Hz: z ≑ a Β· b

z ∈ X βŠ™ ⨀ L
P: cphase_space
X: propset P
L: list (propset P)
HX: X βŠ† ((X ∩ cph_J)^βŠ₯)^βŠ₯
IH: ⨀ L βŠ† ((⨀ L ∩ cph_J)^βŠ₯)^βŠ₯
z, a, b: P
Ha: a ∈ X
HJa: a ∈ cph_J
Hb: b ∈ ⨀ L
HJb: b ∈ cph_J
Hz: z ≑ a Β· b

βˆƒ a0 b0 : P, a0 ∈ X ∧ b0 ∈ ⨀ L ∧ z ≑ a0 Β· b0
by exists a, b.
P: cphase_space
X: propset P
L: list (propset P)
HX: X βŠ† ((X ∩ cph_J)^βŠ₯)^βŠ₯
IH: ⨀ L βŠ† ((⨀ L ∩ cph_J)^βŠ₯)^βŠ₯
z, a, b: P
Ha: a ∈ X
HJa: a ∈ cph_J
Hb: b ∈ ⨀ L
HJb: b ∈ cph_J
Hz: z ≑ a Β· b

z ∈ cph_J
apply (cph_J_proper (a Β· b)); [by symmetry | by apply cph_J_op]. Qed. End BigProd.

Interpreting formulas and sequents

The classical interpretation, connective by connective. Compare it with the intuitionistic one. Each cl has become ^βŠ₯βŠ₯, and each dual pair is related by ^βŠ₯:
      $p     ↦ (v p)^βŠ₯βŠ₯             A^βŠ₯    ↦ ⟦A⟧^βŠ₯
      πŸ™      ↦ {Ξ΅}^βŠ₯βŠ₯               βŠ₯      ↦ {Ξ΅}^βŠ₯
      A βŠ— B  ↦ (⟦A⟧ βŠ™ ⟦B⟧)^βŠ₯βŠ₯       A β…‹ B  ↦ (⟦A⟧^βŠ₯ βŠ™ ⟦B⟧^βŠ₯)^βŠ₯
      A & B  ↦ ⟦A⟧ ∩ ⟦B⟧            A βŠ• B  ↦ (⟦A⟧ βˆͺ ⟦B⟧)^βŠ₯βŠ₯
      ⊀      ↦ M                    𝟘      ↦ βˆ…^βŠ₯βŠ₯
      !A     ↦ (⟦A⟧ ∩ J)^βŠ₯βŠ₯         ? A    ↦ (⟦A⟧^βŠ₯ ∩ J)^βŠ₯
Fixpoint interp {P : cphase_space} (v : nat -> propset P) (A : cformula)
  : propset P :=
  match A with
  | CAtom p     => (v p)^βŠ₯^βŠ₯
  | CNeg A      => (interp v A)^βŠ₯
  | COne        => one_set^βŠ₯^βŠ₯
  | CBot        => one_set^βŠ₯
  | CTop        => full_set
  | CZero       => (βˆ… : propset P)^βŠ₯^βŠ₯
  | CTensor A B => (interp v A βŠ™ interp v B)^βŠ₯^βŠ₯
  | CPar A B    => ((interp v A)^βŠ₯ βŠ™ (interp v B)^βŠ₯)^βŠ₯
  | CWith A B   => interp v A ∩ interp v B
  | CPlus A B   => (interp v A βˆͺ interp v B)^βŠ₯^βŠ₯
  | CBang A     => (interp v A ∩ cph_J)^βŠ₯^βŠ₯
  | CWhy A      => ((interp v A)^βŠ₯ ∩ cph_J)^βŠ₯
  end.

Notation "⟦ A ⟧ v" := (interp v A)
  (at level 1, A at level 200, v at level 1, format "⟦ A ⟧ v")
  : cll_phase_scope.
A sequent becomes a list of sets: ⟦A⟧ for each hypothesis and ⟦B⟧^βŠ₯ for each conclusion.
Definition sq {P : cphase_space} (v : nat -> propset P) (Ξ“ Ξ” : list cformula)
  : list (propset P) :=
  map (interp v) Ξ“ ++ map (Ξ» B, (interp v B)^βŠ₯) Ξ”.

Definition valid_in {P : cphase_space} (v : nat -> propset P) Ξ“ Ξ” : Prop :=
  ⨀ (sq v Ξ“ Ξ”) βŠ† β««.

Definition valid (Ξ“ Ξ” : list cformula) : Prop :=
  βˆ€ (P : cphase_space) (v : nat -> propset P), valid_in v Ξ“ Ξ”.

Notation "Ξ“ ⊨ Ξ”" := (valid Ξ“ Ξ”) (at level 80, no associativity)
  : cll_phase_scope.

Section Sequents.
  Context {P : cphase_space} (v : nat -> propset P).
  Implicit Types (R : propset P).

  
P: cphase_space
v: nat β†’ propset P
A: cformula

fact ⟦A⟧v
P: cphase_space
v: nat β†’ propset P
A: cformula

fact ⟦A⟧v
induction A; simpl; auto using fact_orth, fact_inter, fact_full. Qed.
A hypothesis A at the head: its bag must be orthogonal to the rest.
  
P: cphase_space
v: nat β†’ propset P
A: cformula
Ξ“, Ξ”: list cformula

valid_in v (A :: Ξ“) Ξ” ↔ ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v^βŠ₯
P: cphase_space
v: nat β†’ propset P
A: cformula
Ξ“, Ξ”: list cformula

valid_in v (A :: Ξ“) Ξ” ↔ ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v^βŠ₯
apply prod_pole. Qed.
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula

sq v Ξ“ (B :: Ξ”) β‰‘β‚š ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula

sq v Ξ“ (B :: Ξ”) β‰‘β‚š ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula

map (interp v) Ξ“ ++ map (Ξ» B0 : cformula, ⟦B0⟧v^βŠ₯) (B :: Ξ”) β‰‘β‚š ⟦B⟧v^βŠ₯ :: map (interp v) Ξ“ ++ map (Ξ» B0 : cformula, ⟦B0⟧v^βŠ₯) Ξ”
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula

map (interp v) Ξ“ ++ ⟦B⟧v^βŠ₯ :: map (Ξ» B0 : cformula, ⟦B0⟧v^βŠ₯) Ξ” β‰‘β‚š ⟦B⟧v^βŠ₯ :: map (interp v) Ξ“ ++ map (Ξ» B0 : cformula, ⟦B0⟧v^βŠ₯) Ξ”
by rewrite Permutation_middle. Qed.
A conclusion B at the head: the rest must land in ⟦B⟧.
  
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula

valid_in v Ξ“ (B :: Ξ”) ↔ ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula

valid_in v Ξ“ (B :: Ξ”) ↔ ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula

⨀ sq v Ξ“ (B :: Ξ”) βŠ† β«« ↔ ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula

⨀ sq v Ξ“ (B :: Ξ”) βŠ† β«« β†’ ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula
⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v β†’ ⨀ sq v Ξ“ (B :: Ξ”) βŠ† β««
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula

⨀ sq v Ξ“ (B :: Ξ”) βŠ† β«« β†’ ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula
H: ⨀ sq v Ξ“ (B :: Ξ”) βŠ† β««

⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula
H: ⨀ sq v Ξ“ (B :: Ξ”) βŠ† β««

⨀ sq v Ξ“ Ξ” βŠ† (⟦B⟧v^βŠ₯)^βŠ₯
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula
H: ⨀ sq v Ξ“ (B :: Ξ”) βŠ† β««

⟦B⟧v^βŠ₯ βŠ™ ⨀ sq v Ξ“ Ξ” βŠ† β««
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula
H: ⨀ sq v Ξ“ (B :: Ξ”) βŠ† β««

⟦B⟧v^βŠ₯ βŠ™ ⨀ sq v Ξ“ Ξ” βŠ† ⨀ sq v Ξ“ (B :: Ξ”)
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula
H: ⨀ sq v Ξ“ (B :: Ξ”) βŠ† β««

⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ” β‰‘β‚š sq v Ξ“ (B :: Ξ”)
by rewrite sq_cons_r.
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula

⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v β†’ ⨀ sq v Ξ“ (B :: Ξ”) βŠ† β««
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula
H: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v

⨀ sq v Ξ“ (B :: Ξ”) βŠ† β««
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula
H: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v

⨀ (⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”) βŠ† β««
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula
H: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v

⟦B⟧v^βŠ₯ βŠ™ ⨀ sq v Ξ“ Ξ” βŠ† β««
P: cphase_space
v: nat β†’ propset P
B: cformula
Ξ“, Ξ”: list cformula
H: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v

⨀ sq v Ξ“ Ξ” βŠ† (⟦B⟧v^βŠ₯)^βŠ₯
etransitivity; [exact H | apply biorth]. Qed.
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula

valid_in v (A :: B :: Ξ“) Ξ” ↔ ⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v βŠ™ ⟦B⟧v)^βŠ₯
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula

valid_in v (A :: B :: Ξ“) Ξ” ↔ ⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v βŠ™ ⟦B⟧v)^βŠ₯
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula

⨀ sq v (A :: B :: Ξ“) Ξ” βŠ† β«« ↔ ⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v βŠ™ ⟦B⟧v)^βŠ₯
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula

⟦A⟧v βŠ™ (⟦B⟧v βŠ™ ⨀ (map (interp v) Ξ“ ++ map (Ξ» B0 : cformula, ⟦B0⟧v^βŠ₯) Ξ”)) βŠ† β«« ↔ ⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v βŠ™ ⟦B⟧v)^βŠ₯
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
H: ⟦A⟧v βŠ™ (⟦B⟧v βŠ™ ⨀ (map (interp v) Ξ“ ++ map (Ξ» B : cformula, ⟦B⟧v^βŠ₯) Ξ”)) βŠ† β««

⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v βŠ™ ⟦B⟧v)^βŠ₯
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
H: ⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v βŠ™ ⟦B⟧v)^βŠ₯
⟦A⟧v βŠ™ (⟦B⟧v βŠ™ ⨀ (map (interp v) Ξ“ ++ map (Ξ» B0 : cformula, ⟦B0⟧v^βŠ₯) Ξ”)) βŠ† β««
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
H: ⟦A⟧v βŠ™ (⟦B⟧v βŠ™ ⨀ (map (interp v) Ξ“ ++ map (Ξ» B : cformula, ⟦B⟧v^βŠ₯) Ξ”)) βŠ† β««

⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v βŠ™ ⟦B⟧v)^βŠ₯
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
H: ⟦A⟧v βŠ™ (⟦B⟧v βŠ™ ⨀ (map (interp v) Ξ“ ++ map (Ξ» B : cformula, ⟦B⟧v^βŠ₯) Ξ”)) βŠ† β««

⟦A⟧v βŠ™ ⟦B⟧v βŠ™ ⨀ sq v Ξ“ Ξ” βŠ† β««
etransitivity; [apply prod_assoc_r | exact H].
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
H: ⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v βŠ™ ⟦B⟧v)^βŠ₯

⟦A⟧v βŠ™ (⟦B⟧v βŠ™ ⨀ (map (interp v) Ξ“ ++ map (Ξ» B0 : cformula, ⟦B0⟧v^βŠ₯) Ξ”)) βŠ† β««
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
H: ⟦A⟧v βŠ™ ⟦B⟧v βŠ™ ⨀ sq v Ξ“ Ξ” βŠ† β««

⟦A⟧v βŠ™ (⟦B⟧v βŠ™ ⨀ (map (interp v) Ξ“ ++ map (Ξ» B0 : cformula, ⟦B0⟧v^βŠ₯) Ξ”)) βŠ† β««
etransitivity; [apply prod_assoc_l | exact H]. Qed.
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula

valid_in v Ξ“ (A :: B :: Ξ”) ↔ ⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v^βŠ₯ βŠ™ ⟦B⟧v^βŠ₯)^βŠ₯
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula

valid_in v Ξ“ (A :: B :: Ξ”) ↔ ⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v^βŠ₯ βŠ™ ⟦B⟧v^βŠ₯)^βŠ₯
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula

sq v Ξ“ (A :: B :: Ξ”) β‰‘β‚š ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
Hp: sq v Ξ“ (A :: B :: Ξ”) β‰‘β‚š ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”
valid_in v Ξ“ (A :: B :: Ξ”) ↔ ⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v^βŠ₯ βŠ™ ⟦B⟧v^βŠ₯)^βŠ₯
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula

sq v Ξ“ (A :: B :: Ξ”) β‰‘β‚š ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula

map (interp v) Ξ“ ++ map (Ξ» B0 : cformula, ⟦B0⟧v^βŠ₯) (A :: B :: Ξ”) β‰‘β‚š ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: map (interp v) Ξ“ ++ map (Ξ» B0 : cformula, ⟦B0⟧v^βŠ₯) Ξ”
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula

map (interp v) Ξ“ ++ ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: map (Ξ» B0 : cformula, ⟦B0⟧v^βŠ₯) Ξ” β‰‘β‚š ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: map (interp v) Ξ“ ++ map (Ξ» B0 : cformula, ⟦B0⟧v^βŠ₯) Ξ”
solve_Permutation.
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
Hp: sq v Ξ“ (A :: B :: Ξ”) β‰‘β‚š ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”

valid_in v Ξ“ (A :: B :: Ξ”) ↔ ⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v^βŠ₯ βŠ™ ⟦B⟧v^βŠ₯)^βŠ₯
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
Hp: sq v Ξ“ (A :: B :: Ξ”) β‰‘β‚š ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”

⨀ sq v Ξ“ (A :: B :: Ξ”) βŠ† β«« ↔ ⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v^βŠ₯ βŠ™ ⟦B⟧v^βŠ₯)^βŠ₯
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
Hp: sq v Ξ“ (A :: B :: Ξ”) β‰‘β‚š ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”
H: ⨀ sq v Ξ“ (A :: B :: Ξ”) βŠ† β««

⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v^βŠ₯ βŠ™ ⟦B⟧v^βŠ₯)^βŠ₯
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
Hp: sq v Ξ“ (A :: B :: Ξ”) β‰‘β‚š ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”
H: ⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v^βŠ₯ βŠ™ ⟦B⟧v^βŠ₯)^βŠ₯
⨀ sq v Ξ“ (A :: B :: Ξ”) βŠ† β««
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
Hp: sq v Ξ“ (A :: B :: Ξ”) β‰‘β‚š ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”
H: ⨀ sq v Ξ“ (A :: B :: Ξ”) βŠ† β««

⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v^βŠ₯ βŠ™ ⟦B⟧v^βŠ₯)^βŠ₯
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
Hp: sq v Ξ“ (A :: B :: Ξ”) β‰‘β‚š ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”
H: ⨀ sq v Ξ“ (A :: B :: Ξ”) βŠ† β««

⟦A⟧v^βŠ₯ βŠ™ ⟦B⟧v^βŠ₯ βŠ™ ⨀ sq v Ξ“ Ξ” βŠ† β««
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
Hp: sq v Ξ“ (A :: B :: Ξ”) β‰‘β‚š ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”
H: ⨀ sq v Ξ“ (A :: B :: Ξ”) βŠ† β««

⟦A⟧v^βŠ₯ βŠ™ (⟦B⟧v^βŠ₯ βŠ™ ⨀ sq v Ξ“ Ξ”) βŠ† β««
etransitivity; [apply (bigprod_perm _ _ (symmetry Hp)) | exact H].
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
Hp: sq v Ξ“ (A :: B :: Ξ”) β‰‘β‚š ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”
H: ⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v^βŠ₯ βŠ™ ⟦B⟧v^βŠ₯)^βŠ₯

⨀ sq v Ξ“ (A :: B :: Ξ”) βŠ† β««
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
Hp: sq v Ξ“ (A :: B :: Ξ”) β‰‘β‚š ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”
H: ⟦A⟧v^βŠ₯ βŠ™ ⟦B⟧v^βŠ₯ βŠ™ ⨀ sq v Ξ“ Ξ” βŠ† β««

⨀ sq v Ξ“ (A :: B :: Ξ”) βŠ† β««
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
Hp: sq v Ξ“ (A :: B :: Ξ”) β‰‘β‚š ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”
H: ⟦A⟧v^βŠ₯ βŠ™ ⟦B⟧v^βŠ₯ βŠ™ ⨀ sq v Ξ“ Ξ” βŠ† β««

⨀ (⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”) βŠ† β««
P: cphase_space
v: nat β†’ propset P
A, B: cformula
Ξ“, Ξ”: list cformula
Hp: sq v Ξ“ (A :: B :: Ξ”) β‰‘β‚š ⟦A⟧v^βŠ₯ :: ⟦B⟧v^βŠ₯ :: sq v Ξ“ Ξ”
H: ⟦A⟧v^βŠ₯ βŠ™ ⟦B⟧v^βŠ₯ βŠ™ ⨀ sq v Ξ“ Ξ” βŠ† β««

⟦A⟧v^βŠ₯ βŠ™ (⟦B⟧v^βŠ₯ βŠ™ ⨀ sq v Ξ“ Ξ”) βŠ† β««
etransitivity; [apply prod_assoc_l | exact H]. Qed.
P: cphase_space
v: nat β†’ propset P
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula

⨀ sq v (Γ₁ ++ Ξ“β‚‚) (Δ₁ ++ Ξ”β‚‚) βŠ† ⨀ sq v Γ₁ Δ₁ βŠ™ ⨀ sq v Ξ“β‚‚ Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula

⨀ sq v (Γ₁ ++ Ξ“β‚‚) (Δ₁ ++ Ξ”β‚‚) βŠ† ⨀ sq v Γ₁ Δ₁ βŠ™ ⨀ sq v Ξ“β‚‚ Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula

⨀ sq v (Γ₁ ++ Ξ“β‚‚) (Δ₁ ++ Ξ”β‚‚) βŠ† ⨀ (sq v Γ₁ Δ₁ ++ sq v Ξ“β‚‚ Ξ”β‚‚)
P: cphase_space
v: nat β†’ propset P
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula

sq v (Γ₁ ++ Ξ“β‚‚) (Δ₁ ++ Ξ”β‚‚) β‰‘β‚š sq v Γ₁ Δ₁ ++ sq v Ξ“β‚‚ Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula

map (interp v) (Γ₁ ++ Ξ“β‚‚) ++ map (Ξ» B : cformula, ⟦B⟧v^βŠ₯) (Δ₁ ++ Ξ”β‚‚) β‰‘β‚š (map (interp v) Γ₁ ++ map (Ξ» B : cformula, ⟦B⟧v^βŠ₯) Δ₁) ++ map (interp v) Ξ“β‚‚ ++ map (Ξ» B : cformula, ⟦B⟧v^βŠ₯) Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula

(map (interp v) Γ₁ ++ map (interp v) Ξ“β‚‚) ++ map (Ξ» B : cformula, ⟦B⟧v^βŠ₯) Δ₁ ++ map (Ξ» B : cformula, ⟦B⟧v^βŠ₯) Ξ”β‚‚ β‰‘β‚š (map (interp v) Γ₁ ++ map (Ξ» B : cformula, ⟦B⟧v^βŠ₯) Δ₁) ++ map (interp v) Ξ“β‚‚ ++ map (Ξ» B : cformula, ⟦B⟧v^βŠ₯) Ξ”β‚‚
solve_Permutation. Qed.
P: cphase_space
v: nat β†’ propset P
Ξ“, Ξ“', Ξ”, Ξ”': list cformula

Ξ“ β‰‘β‚š Ξ“' β†’ Ξ” β‰‘β‚š Ξ”' β†’ valid_in v Ξ“ Ξ” β†’ valid_in v Ξ“' Ξ”'
P: cphase_space
v: nat β†’ propset P
Ξ“, Ξ“', Ξ”, Ξ”': list cformula

Ξ“ β‰‘β‚š Ξ“' β†’ Ξ” β‰‘β‚š Ξ”' β†’ valid_in v Ξ“ Ξ” β†’ valid_in v Ξ“' Ξ”'
P: cphase_space
v: nat β†’ propset P
Ξ“, Ξ“', Ξ”, Ξ”': list cformula
HΞ“: Ξ“ β‰‘β‚š Ξ“'
HΞ”: Ξ” β‰‘β‚š Ξ”'
H: valid_in v Ξ“ Ξ”

valid_in v Ξ“' Ξ”'
P: cphase_space
v: nat β†’ propset P
Ξ“, Ξ“', Ξ”, Ξ”': list cformula
HΞ“: Ξ“ β‰‘β‚š Ξ“'
HΞ”: Ξ” β‰‘β‚š Ξ”'
H: valid_in v Ξ“ Ξ”

⨀ sq v Ξ“' Ξ”' βŠ† β««
P: cphase_space
v: nat β†’ propset P
Ξ“, Ξ“', Ξ”, Ξ”': list cformula
HΞ“: Ξ“ β‰‘β‚š Ξ“'
HΞ”: Ξ” β‰‘β‚š Ξ”'
H: valid_in v Ξ“ Ξ”

⨀ sq v Ξ“' Ξ”' βŠ† ⨀ sq v Ξ“ Ξ”
P: cphase_space
v: nat β†’ propset P
Ξ“, Ξ“', Ξ”, Ξ”': list cformula
HΞ“: Ξ“ β‰‘β‚š Ξ“'
HΞ”: Ξ” β‰‘β‚š Ξ”'
H: valid_in v Ξ“ Ξ”

sq v Ξ“' Ξ”' β‰‘β‚š sq v Ξ“ Ξ”
P: cphase_space
v: nat β†’ propset P
Ξ“, Ξ“', Ξ”, Ξ”': list cformula
HΞ“: Ξ“ β‰‘β‚š Ξ“'
HΞ”: Ξ” β‰‘β‚š Ξ”'
H: valid_in v Ξ“ Ξ”

map (interp v) Ξ“' ++ map (Ξ» B : cformula, ⟦B⟧v^βŠ₯) Ξ”' β‰‘β‚š map (interp v) Ξ“ ++ map (Ξ» B : cformula, ⟦B⟧v^βŠ₯) Ξ”
by rewrite HΞ“, HΞ”. Qed.
The context of a promotion is J-generated.
  
P: cphase_space
v: nat β†’ propset P
Ξ£, Ξ : list cformula

⨀ sq v (β€ΌΞ£) (⁇Π) βŠ† ((⨀ sq v (β€ΌΞ£) (⁇Π) ∩ cph_J)^βŠ₯)^βŠ₯
P: cphase_space
v: nat β†’ propset P
Ξ£, Ξ : list cformula

⨀ sq v (β€ΌΞ£) (⁇Π) βŠ† ((⨀ sq v (β€ΌΞ£) (⁇Π) ∩ cph_J)^βŠ₯)^βŠ₯
P: cphase_space
v: nat β†’ propset P
Ξ£, Ξ : list cformula

Forall jgen (sq v (β€ΌΞ£) (⁇Π))
P: cphase_space
v: nat β†’ propset P
Ξ£, Ξ : list cformula

Forall jgen (map (interp v) (β€ΌΞ£) ++ map (Ξ» B : cformula, ⟦B⟧v^βŠ₯) (⁇Π))
P: cphase_space
v: nat β†’ propset P
Ξ£, Ξ : list cformula

Forall jgen (map (Ξ» x : cformula, ⟦!x⟧v) Ξ£ ++ map (Ξ» x : cformula, ⟦? x⟧v^βŠ₯) Ξ )
apply Forall_app; split; apply Forall_forall; intros X (B & <- & _)%list_elem_of_In%in_map_iff; simpl; apply jgen_biorth. Qed. End Sequents.

Soundness

Each case unfolds the sequent with valid_l / valid_r and then reasons about orthogonals. The negation rules are almost trivial, which is the point of the classical semantics.
c: bool
Ξ“, Ξ”: list cformula

Ξ“ ⊒[c] Ξ” β†’ Ξ“ ⊨ Ξ”
c: bool
Ξ“, Ξ”: list cformula

Ξ“ ⊒[c] Ξ” β†’ Ξ“ ⊨ Ξ”
c: bool
Ξ“, Ξ”: list cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P

valid_in v Ξ“ Ξ”
c: bool
A: cformula
P: cphase_space
v: nat β†’ propset P

valid_in v [A] [A]
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A: cformula
H: c = true
H0: Γ₁ ⊒[c] A :: Δ₁
H1: A :: Ξ“β‚‚ ⊒[c] Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: valid_in v Γ₁ (A :: Δ₁)
IHcll2: valid_in v (A :: Ξ“β‚‚) Ξ”β‚‚
valid_in v (Γ₁ ++ Ξ“β‚‚) (Δ₁ ++ Ξ”β‚‚)
c: bool
Ξ“, Ξ“', Ξ”, Ξ”': list cformula
H: Ξ“ β‰‘β‚š Ξ“'
H0: Ξ” β‰‘β‚š Ξ”'
H1: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”
valid_in v Ξ“' Ξ”'
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ (A :: Ξ”)
valid_in v ((A^βŠ₯)%cll :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (A :: Ξ“) Ξ”
valid_in v Ξ“ ((A^βŠ₯)%cll :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”
valid_in v (πŸ™ :: Ξ“) Ξ”
c: bool
P: cphase_space
v: nat β†’ propset P
valid_in v [] [πŸ™]
c: bool
P: cphase_space
v: nat β†’ propset P
valid_in v [βŠ₯] []
c: bool
Ξ“, Ξ”: list cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”
valid_in v Ξ“ (βŠ₯ :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (A :: B :: Ξ“) Ξ”
valid_in v (A βŠ— B :: Ξ“) Ξ”
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A, B: cformula
H: Γ₁ ⊒[c] A :: Δ₁
H0: Ξ“β‚‚ ⊒[c] B :: Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: valid_in v Γ₁ (A :: Δ₁)
IHcll2: valid_in v Ξ“β‚‚ (B :: Ξ”β‚‚)
valid_in v (Γ₁ ++ Ξ“β‚‚) (A βŠ— B :: Δ₁ ++ Ξ”β‚‚)
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A, B: cformula
H: A :: Γ₁ ⊒[c] Δ₁
H0: B :: Ξ“β‚‚ ⊒[c] Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: valid_in v (A :: Γ₁) Δ₁
IHcll2: valid_in v (B :: Ξ“β‚‚) Ξ”β‚‚
valid_in v (A β…‹ B :: Γ₁ ++ Ξ“β‚‚) (Δ₁ ++ Ξ”β‚‚)
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] A :: B :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ (A :: B :: Ξ”)
valid_in v Ξ“ (A β…‹ B :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (A :: Ξ“) Ξ”
valid_in v (A & B :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (B :: Ξ“) Ξ”
valid_in v (A & B :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] A :: Ξ”
H0: Ξ“ ⊒[c] B :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll1: valid_in v Ξ“ (A :: Ξ”)
IHcll2: valid_in v Ξ“ (B :: Ξ”)
valid_in v Ξ“ (A & B :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
P: cphase_space
v: nat β†’ propset P
valid_in v Ξ“ (⊀ :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: Ξ“ ⊒[c] Ξ”
H0: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll1: valid_in v (A :: Ξ“) Ξ”
IHcll2: valid_in v (B :: Ξ“) Ξ”
valid_in v (A βŠ• B :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ (A :: Ξ”)
valid_in v Ξ“ (A βŠ• B :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] B :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ (B :: Ξ”)
valid_in v Ξ“ (A βŠ• B :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
P: cphase_space
v: nat β†’ propset P
valid_in v (𝟘 :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (A :: Ξ“) Ξ”
valid_in v (!A :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”
valid_in v (!A :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: !A :: !A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (!A :: !A :: Ξ“) Ξ”
valid_in v (!A :: Ξ“) Ξ”
c: bool
Ξ£, Ξ : list cformula
A: cformula
H: β€ΌΞ£ ⊒[c] A :: ⁇Π
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (β€ΌΞ£) (A :: ⁇Π)
valid_in v (β€ΌΞ£) (!A :: ⁇Π)
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ (A :: Ξ”)
valid_in v Ξ“ (? A :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”
valid_in v Ξ“ (? A :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] ? A :: ? A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ (? A :: ? A :: Ξ”)
valid_in v Ξ“ (? A :: Ξ”)
c: bool
Ξ£, Ξ : list cformula
A: cformula
H: A :: β€ΌΞ£ ⊒[c] ⁇Π
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (A :: β€ΌΞ£) (⁇Π)
valid_in v (? A :: β€ΌΞ£) (⁇Π)
c: bool
A: cformula
P: cphase_space
v: nat β†’ propset P

valid_in v [A] [A]
c: bool
A: cformula
P: cphase_space
v: nat β†’ propset P

⨀ sq v [] [A] βŠ† ⟦A⟧v^βŠ₯
c: bool
A: cformula
P: cphase_space
v: nat β†’ propset P

⨀ (map (interp v) [] ++ map (Ξ» B : cformula, ⟦B⟧v^βŠ₯) [A]) βŠ† ⟦A⟧v^βŠ₯
c: bool
A: cformula
P: cphase_space
v: nat β†’ propset P

⟦A⟧v^βŠ₯ βŠ™ one_set βŠ† ⟦A⟧v^βŠ₯
apply prod_one_r, fact_orth.
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A: cformula
H: c = true
H0: Γ₁ ⊒[c] A :: Δ₁
H1: A :: Ξ“β‚‚ ⊒[c] Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: valid_in v Γ₁ (A :: Δ₁)
IHcll2: valid_in v (A :: Ξ“β‚‚) Ξ”β‚‚

valid_in v (Γ₁ ++ Ξ“β‚‚) (Δ₁ ++ Ξ”β‚‚)
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A: cformula
H: c = true
H0: Γ₁ ⊒[c] A :: Δ₁
H1: A :: Ξ“β‚‚ ⊒[c] Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Γ₁ Δ₁ βŠ† ⟦A⟧v
IHcll2: valid_in v (A :: Ξ“β‚‚) Ξ”β‚‚

valid_in v (Γ₁ ++ Ξ“β‚‚) (Δ₁ ++ Ξ”β‚‚)
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A: cformula
H: c = true
H0: Γ₁ ⊒[c] A :: Δ₁
H1: A :: Ξ“β‚‚ ⊒[c] Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Γ₁ Δ₁ βŠ† ⟦A⟧v
IHcll2: ⨀ sq v Ξ“β‚‚ Ξ”β‚‚ βŠ† ⟦A⟧v^βŠ₯

valid_in v (Γ₁ ++ Ξ“β‚‚) (Δ₁ ++ Ξ”β‚‚)
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A: cformula
H: c = true
H0: Γ₁ ⊒[c] A :: Δ₁
H1: A :: Ξ“β‚‚ ⊒[c] Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Γ₁ Δ₁ βŠ† ⟦A⟧v
IHcll2: ⨀ sq v Ξ“β‚‚ Ξ”β‚‚ βŠ† ⟦A⟧v^βŠ₯

⨀ sq v (Γ₁ ++ Ξ“β‚‚) (Δ₁ ++ Ξ”β‚‚) βŠ† β««
etransitivity; [apply valid_split | by eapply cut_pole].
c: bool
Ξ“, Ξ“', Ξ”, Ξ”': list cformula
H: Ξ“ β‰‘β‚š Ξ“'
H0: Ξ” β‰‘β‚š Ξ”'
H1: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”

valid_in v Ξ“' Ξ”'
by eapply valid_perm.
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ (A :: Ξ”)

valid_in v ((A^βŠ₯)%cll :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ (A :: Ξ”)

⨀ sq v Ξ“ Ξ” βŠ† ⟦A^βŠ₯⟧v^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v

⨀ sq v Ξ“ Ξ” βŠ† ⟦A^βŠ₯⟧v^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v

⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v^βŠ₯)^βŠ₯
etransitivity; [exact IHcll | apply biorth].
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (A :: Ξ“) Ξ”

valid_in v Ξ“ ((A^βŠ₯)%cll :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (A :: Ξ“) Ξ”

⨀ sq v Ξ“ Ξ” βŠ† ⟦A^βŠ₯⟧v
by apply valid_l in IHcll.
c: bool
Ξ“, Ξ”: list cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”

valid_in v (πŸ™ :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”

⨀ sq v Ξ“ Ξ” βŠ† βŸ¦πŸ™βŸ§v^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”

⨀ sq v Ξ“ Ξ” βŠ† ((one_set^βŠ₯)^βŠ₯)^βŠ₯
etransitivity; [by apply pole_orth_one | apply biorth].
c: bool
P: cphase_space
v: nat β†’ propset P

valid_in v [] [πŸ™]
c: bool
P: cphase_space
v: nat β†’ propset P

⨀ sq v [] [] βŠ† βŸ¦πŸ™βŸ§v
c: bool
P: cphase_space
v: nat β†’ propset P

⨀ (map (interp v) [] ++ map (Ξ» B : cformula, ⟦B⟧v^βŠ₯) []) βŠ† βŸ¦πŸ™βŸ§v
c: bool
P: cphase_space
v: nat β†’ propset P

one_set βŠ† (one_set^βŠ₯)^βŠ₯
apply biorth.
c: bool
P: cphase_space
v: nat β†’ propset P

valid_in v [βŠ₯] []
c: bool
P: cphase_space
v: nat β†’ propset P

⨀ sq v [] [] βŠ† ⟦βŠ₯⟧v^βŠ₯
c: bool
P: cphase_space
v: nat β†’ propset P

⨀ (map (interp v) [] ++ map (Ξ» B : cformula, ⟦B⟧v^βŠ₯) []) βŠ† ⟦βŠ₯⟧v^βŠ₯
c: bool
P: cphase_space
v: nat β†’ propset P

one_set βŠ† (one_set^βŠ₯)^βŠ₯
apply biorth.
c: bool
Ξ“, Ξ”: list cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”

valid_in v Ξ“ (βŠ₯ :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”

⨀ sq v Ξ“ Ξ” βŠ† ⟦βŠ₯⟧v
c: bool
Ξ“, Ξ”: list cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”

⨀ sq v Ξ“ Ξ” βŠ† one_set^βŠ₯
by apply pole_orth_one.
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (A :: B :: Ξ“) Ξ”

valid_in v (A βŠ— B :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (A :: B :: Ξ“) Ξ”

⨀ sq v Ξ“ Ξ” βŠ† ⟦A βŠ— B⟧v^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v βŠ™ ⟦B⟧v)^βŠ₯

⨀ sq v Ξ“ Ξ” βŠ† ⟦A βŠ— B⟧v^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v βŠ™ ⟦B⟧v)^βŠ₯

⨀ sq v Ξ“ Ξ” βŠ† (((⟦A⟧v βŠ™ ⟦B⟧v)^βŠ₯)^βŠ₯)^βŠ₯
etransitivity; [exact IHcll | apply biorth].
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A, B: cformula
H: Γ₁ ⊒[c] A :: Δ₁
H0: Ξ“β‚‚ ⊒[c] B :: Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: valid_in v Γ₁ (A :: Δ₁)
IHcll2: valid_in v Ξ“β‚‚ (B :: Ξ”β‚‚)

valid_in v (Γ₁ ++ Ξ“β‚‚) (A βŠ— B :: Δ₁ ++ Ξ”β‚‚)
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A, B: cformula
H: Γ₁ ⊒[c] A :: Δ₁
H0: Ξ“β‚‚ ⊒[c] B :: Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Γ₁ Δ₁ βŠ† ⟦A⟧v
IHcll2: ⨀ sq v Ξ“β‚‚ Ξ”β‚‚ βŠ† ⟦B⟧v

valid_in v (Γ₁ ++ Ξ“β‚‚) (A βŠ— B :: Δ₁ ++ Ξ”β‚‚)
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A, B: cformula
H: Γ₁ ⊒[c] A :: Δ₁
H0: Ξ“β‚‚ ⊒[c] B :: Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Γ₁ Δ₁ βŠ† ⟦A⟧v
IHcll2: ⨀ sq v Ξ“β‚‚ Ξ”β‚‚ βŠ† ⟦B⟧v

⨀ sq v (Γ₁ ++ Ξ“β‚‚) (Δ₁ ++ Ξ”β‚‚) βŠ† ⟦A βŠ— B⟧v
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A, B: cformula
H: Γ₁ ⊒[c] A :: Δ₁
H0: Ξ“β‚‚ ⊒[c] B :: Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Γ₁ Δ₁ βŠ† ⟦A⟧v
IHcll2: ⨀ sq v Ξ“β‚‚ Ξ”β‚‚ βŠ† ⟦B⟧v

⨀ sq v (Γ₁ ++ Ξ“β‚‚) (Δ₁ ++ Ξ”β‚‚) βŠ† ((⟦A⟧v βŠ™ ⟦B⟧v)^βŠ₯)^βŠ₯
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A, B: cformula
H: Γ₁ ⊒[c] A :: Δ₁
H0: Ξ“β‚‚ ⊒[c] B :: Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Γ₁ Δ₁ βŠ† ⟦A⟧v
IHcll2: ⨀ sq v Ξ“β‚‚ Ξ”β‚‚ βŠ† ⟦B⟧v

⨀ sq v Γ₁ Δ₁ βŠ™ ⨀ sq v Ξ“β‚‚ Ξ”β‚‚ βŠ† ((⟦A⟧v βŠ™ ⟦B⟧v)^βŠ₯)^βŠ₯
etransitivity; [by apply prod_mono | apply biorth].
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A, B: cformula
H: A :: Γ₁ ⊒[c] Δ₁
H0: B :: Ξ“β‚‚ ⊒[c] Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: valid_in v (A :: Γ₁) Δ₁
IHcll2: valid_in v (B :: Ξ“β‚‚) Ξ”β‚‚

valid_in v (A β…‹ B :: Γ₁ ++ Ξ“β‚‚) (Δ₁ ++ Ξ”β‚‚)
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A, B: cformula
H: A :: Γ₁ ⊒[c] Δ₁
H0: B :: Ξ“β‚‚ ⊒[c] Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Γ₁ Δ₁ βŠ† ⟦A⟧v^βŠ₯
IHcll2: ⨀ sq v Ξ“β‚‚ Ξ”β‚‚ βŠ† ⟦B⟧v^βŠ₯

valid_in v (A β…‹ B :: Γ₁ ++ Ξ“β‚‚) (Δ₁ ++ Ξ”β‚‚)
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A, B: cformula
H: A :: Γ₁ ⊒[c] Δ₁
H0: B :: Ξ“β‚‚ ⊒[c] Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Γ₁ Δ₁ βŠ† ⟦A⟧v^βŠ₯
IHcll2: ⨀ sq v Ξ“β‚‚ Ξ”β‚‚ βŠ† ⟦B⟧v^βŠ₯

⨀ sq v (Γ₁ ++ Ξ“β‚‚) (Δ₁ ++ Ξ”β‚‚) βŠ† ⟦A β…‹ B⟧v^βŠ₯
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A, B: cformula
H: A :: Γ₁ ⊒[c] Δ₁
H0: B :: Ξ“β‚‚ ⊒[c] Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Γ₁ Δ₁ βŠ† ⟦A⟧v^βŠ₯
IHcll2: ⨀ sq v Ξ“β‚‚ Ξ”β‚‚ βŠ† ⟦B⟧v^βŠ₯

⨀ sq v (Γ₁ ++ Ξ“β‚‚) (Δ₁ ++ Ξ”β‚‚) βŠ† ((⟦A⟧v^βŠ₯ βŠ™ ⟦B⟧v^βŠ₯)^βŠ₯)^βŠ₯
c: bool
Γ₁, Ξ“β‚‚, Δ₁, Ξ”β‚‚: list cformula
A, B: cformula
H: A :: Γ₁ ⊒[c] Δ₁
H0: B :: Ξ“β‚‚ ⊒[c] Ξ”β‚‚
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Γ₁ Δ₁ βŠ† ⟦A⟧v^βŠ₯
IHcll2: ⨀ sq v Ξ“β‚‚ Ξ”β‚‚ βŠ† ⟦B⟧v^βŠ₯

⨀ sq v Γ₁ Δ₁ βŠ™ ⨀ sq v Ξ“β‚‚ Ξ”β‚‚ βŠ† ((⟦A⟧v^βŠ₯ βŠ™ ⟦B⟧v^βŠ₯)^βŠ₯)^βŠ₯
etransitivity; [by apply prod_mono | apply biorth].
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] A :: B :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ (A :: B :: Ξ”)

valid_in v Ξ“ (A β…‹ B :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] A :: B :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ (A :: B :: Ξ”)

⨀ sq v Ξ“ Ξ” βŠ† ⟦A β…‹ B⟧v
by apply valid_rr in IHcll.
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (A :: Ξ“) Ξ”

valid_in v (A & B :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (A :: Ξ“) Ξ”

⨀ sq v Ξ“ Ξ” βŠ† ⟦A & B⟧v^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v^βŠ₯

⨀ sq v Ξ“ Ξ” βŠ† ⟦A & B⟧v^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v^βŠ₯

⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v ∩ ⟦B⟧v)^βŠ₯
etransitivity; [exact IHcll | apply orth_anti; set_solver].
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (B :: Ξ“) Ξ”

valid_in v (A & B :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (B :: Ξ“) Ξ”

⨀ sq v Ξ“ Ξ” βŠ† ⟦A & B⟧v^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v^βŠ₯

⨀ sq v Ξ“ Ξ” βŠ† ⟦A & B⟧v^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v^βŠ₯

⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v ∩ ⟦B⟧v)^βŠ₯
etransitivity; [exact IHcll | apply orth_anti; set_solver].
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] A :: Ξ”
H0: Ξ“ ⊒[c] B :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll1: valid_in v Ξ“ (A :: Ξ”)
IHcll2: valid_in v Ξ“ (B :: Ξ”)

valid_in v Ξ“ (A & B :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] A :: Ξ”
H0: Ξ“ ⊒[c] B :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v
IHcll2: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v

valid_in v Ξ“ (A & B :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] A :: Ξ”
H0: Ξ“ ⊒[c] B :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v
IHcll2: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v

⨀ sq v Ξ“ Ξ” βŠ† ⟦A & B⟧v
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] A :: Ξ”
H0: Ξ“ ⊒[c] B :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v
IHcll2: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v

⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v ∩ ⟦B⟧v
set_solver.
c: bool
Ξ“, Ξ”: list cformula
P: cphase_space
v: nat β†’ propset P

valid_in v Ξ“ (⊀ :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
P: cphase_space
v: nat β†’ propset P

⨀ sq v Ξ“ Ξ” βŠ† ⟦⊀⟧v
c: bool
Ξ“, Ξ”: list cformula
P: cphase_space
v: nat β†’ propset P
z: P

z ∈ ⟦⊀⟧v
apply elem_of_full.
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: Ξ“ ⊒[c] Ξ”
H0: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll1: valid_in v (A :: Ξ“) Ξ”
IHcll2: valid_in v (B :: Ξ“) Ξ”

valid_in v (A βŠ• B :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: Ξ“ ⊒[c] Ξ”
H0: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v^βŠ₯
IHcll2: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v^βŠ₯

valid_in v (A βŠ• B :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: Ξ“ ⊒[c] Ξ”
H0: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v^βŠ₯
IHcll2: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v^βŠ₯

⨀ sq v Ξ“ Ξ” βŠ† ⟦A βŠ• B⟧v^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: Ξ“ ⊒[c] Ξ”
H0: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v^βŠ₯
IHcll2: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v^βŠ₯

⨀ sq v Ξ“ Ξ” βŠ† (((⟦A⟧v βˆͺ ⟦B⟧v)^βŠ₯)^βŠ₯)^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: Ξ“ ⊒[c] Ξ”
H0: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v^βŠ₯
IHcll2: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v^βŠ₯

⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v βˆͺ ⟦B⟧v)^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: Ξ“ ⊒[c] Ξ”
H0: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v^βŠ₯
IHcll2: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v^βŠ₯
z: P
Hz: z ∈ ⨀ sq v Ξ“ Ξ”

z ∈ (⟦A⟧v βˆͺ ⟦B⟧v)^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: A :: Ξ“ ⊒[c] Ξ”
H0: B :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll1: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v^βŠ₯
IHcll2: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v^βŠ₯
z: P
Hz: z ∈ ⨀ sq v Ξ“ Ξ”

z ∈ ⟦A⟧v^βŠ₯ ∧ z ∈ ⟦B⟧v^βŠ₯
auto.
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ (A :: Ξ”)

valid_in v Ξ“ (A βŠ• B :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v

valid_in v Ξ“ (A βŠ• B :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v

⨀ sq v Ξ“ Ξ” βŠ† ⟦A βŠ• B⟧v
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v

⨀ sq v Ξ“ Ξ” βŠ† ((⟦A⟧v βˆͺ ⟦B⟧v)^βŠ₯)^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v

⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v βˆͺ ⟦B⟧v
set_solver.
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] B :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ (B :: Ξ”)

valid_in v Ξ“ (A βŠ• B :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] B :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v

valid_in v Ξ“ (A βŠ• B :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] B :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v

⨀ sq v Ξ“ Ξ” βŠ† ⟦A βŠ• B⟧v
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] B :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v

⨀ sq v Ξ“ Ξ” βŠ† ((⟦A⟧v βˆͺ ⟦B⟧v)^βŠ₯)^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A, B: cformula
H: Ξ“ ⊒[c] B :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦B⟧v

⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v βˆͺ ⟦B⟧v
set_solver.
c: bool
Ξ“, Ξ”: list cformula
P: cphase_space
v: nat β†’ propset P

valid_in v (𝟘 :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
P: cphase_space
v: nat β†’ propset P

⨀ sq v Ξ“ Ξ” βŠ† ⟦𝟘⟧v^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
P: cphase_space
v: nat β†’ propset P

⨀ sq v Ξ“ Ξ” βŠ† ((βˆ…^βŠ₯)^βŠ₯)^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
P: cphase_space
v: nat β†’ propset P

⨀ sq v Ξ“ Ξ” βŠ† βˆ…^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
P: cphase_space
v: nat β†’ propset P
z: P

z ∈ βˆ…^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
P: cphase_space
v: nat β†’ propset P
z: P

βˆ€ x : P, x ∈ βˆ… β†’ x Β· z ∈ β««
set_solver.
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (A :: Ξ“) Ξ”

valid_in v (!A :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (A :: Ξ“) Ξ”

⨀ sq v Ξ“ Ξ” βŠ† ⟦!A⟧v^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v^βŠ₯

⨀ sq v Ξ“ Ξ” βŠ† ⟦!A⟧v^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v^βŠ₯

⨀ sq v Ξ“ Ξ” βŠ† (((⟦A⟧v ∩ cph_J)^βŠ₯)^βŠ₯)^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v^βŠ₯

⟦A⟧v^βŠ₯ βŠ† (((⟦A⟧v ∩ cph_J)^βŠ₯)^βŠ₯)^βŠ₯
etransitivity; [apply (orth_anti (⟦A⟧v ∩ cph_J)); set_solver | apply biorth].
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”

valid_in v (!A :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”

⨀ sq v Ξ“ Ξ” βŠ† ⟦!A⟧v^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”

⨀ sq v Ξ“ Ξ” βŠ† (((⟦A⟧v ∩ cph_J)^βŠ₯)^βŠ₯)^βŠ₯
etransitivity; [by apply weak_orth | apply biorth].
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: !A :: !A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (!A :: !A :: Ξ“) Ξ”

valid_in v (!A :: Ξ“) Ξ”
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: !A :: !A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (!A :: !A :: Ξ“) Ξ”

⨀ sq v Ξ“ Ξ” βŠ† ⟦!A⟧v^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: !A :: !A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† (⟦!A⟧v βŠ™ ⟦!A⟧v)^βŠ₯

⨀ sq v Ξ“ Ξ” βŠ† ⟦!A⟧v^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: !A :: !A :: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† (((⟦A⟧v ∩ cph_J)^βŠ₯)^βŠ₯ βŠ™ ((⟦A⟧v ∩ cph_J)^βŠ₯)^βŠ₯)^βŠ₯

⨀ sq v Ξ“ Ξ” βŠ† (((⟦A⟧v ∩ cph_J)^βŠ₯)^βŠ₯)^βŠ₯
etransitivity; [by apply contr_orth | apply biorth].
c: bool
Ξ£, Ξ : list cformula
A: cformula
H: β€ΌΞ£ ⊒[c] A :: ⁇Π
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (β€ΌΞ£) (A :: ⁇Π)

valid_in v (β€ΌΞ£) (!A :: ⁇Π)
c: bool
Ξ£, Ξ : list cformula
A: cformula
H: β€ΌΞ£ ⊒[c] A :: ⁇Π
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v (β€ΌΞ£) (⁇Π) βŠ† ⟦A⟧v

valid_in v (β€ΌΞ£) (!A :: ⁇Π)
c: bool
Ξ£, Ξ : list cformula
A: cformula
H: β€ΌΞ£ ⊒[c] A :: ⁇Π
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v (β€ΌΞ£) (⁇Π) βŠ† ⟦A⟧v

⨀ sq v (β€ΌΞ£) (⁇Π) βŠ† ⟦!A⟧v
c: bool
Ξ£, Ξ : list cformula
A: cformula
H: β€ΌΞ£ ⊒[c] A :: ⁇Π
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v (β€ΌΞ£) (⁇Π) βŠ† ⟦A⟧v

⨀ sq v (β€ΌΞ£) (⁇Π) βŠ† ((⟦A⟧v ∩ cph_J)^βŠ₯)^βŠ₯
c: bool
Ξ£, Ξ : list cformula
A: cformula
H: β€ΌΞ£ ⊒[c] A :: ⁇Π
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v (β€ΌΞ£) (⁇Π) βŠ† ⟦A⟧v

((⨀ sq v (β€ΌΞ£) (⁇Π) ∩ cph_J)^βŠ₯)^βŠ₯ βŠ† ((⟦A⟧v ∩ cph_J)^βŠ₯)^βŠ₯
c: bool
Ξ£, Ξ : list cformula
A: cformula
H: β€ΌΞ£ ⊒[c] A :: ⁇Π
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v (β€ΌΞ£) (⁇Π) βŠ† ⟦A⟧v

⨀ sq v (β€ΌΞ£) (⁇Π) ∩ cph_J βŠ† ⟦A⟧v ∩ cph_J
set_solver.
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ (A :: Ξ”)

valid_in v Ξ“ (? A :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v

valid_in v Ξ“ (? A :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v

⨀ sq v Ξ“ Ξ” βŠ† ⟦? A⟧v
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v

⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v^βŠ₯ ∩ cph_J)^βŠ₯
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† ⟦A⟧v

⟦A⟧v βŠ† (⟦A⟧v^βŠ₯ ∩ cph_J)^βŠ₯
etransitivity; [apply biorth | apply orth_anti; set_solver].
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”

valid_in v Ξ“ (? A :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”

⨀ sq v Ξ“ Ξ” βŠ† ⟦? A⟧v
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ Ξ”

⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v^βŠ₯ ∩ cph_J)^βŠ₯
by apply weak_orth.
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] ? A :: ? A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ (? A :: ? A :: Ξ”)

valid_in v Ξ“ (? A :: Ξ”)
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] ? A :: ? A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v Ξ“ (? A :: ? A :: Ξ”)

⨀ sq v Ξ“ Ξ” βŠ† ⟦? A⟧v
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] ? A :: ? A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† (⟦? A⟧v^βŠ₯ βŠ™ ⟦? A⟧v^βŠ₯)^βŠ₯

⨀ sq v Ξ“ Ξ” βŠ† ⟦? A⟧v
c: bool
Ξ“, Ξ”: list cformula
A: cformula
H: Ξ“ ⊒[c] ? A :: ? A :: Ξ”
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v Ξ“ Ξ” βŠ† (((⟦A⟧v^βŠ₯ ∩ cph_J)^βŠ₯)^βŠ₯ βŠ™ ((⟦A⟧v^βŠ₯ ∩ cph_J)^βŠ₯)^βŠ₯)^βŠ₯

⨀ sq v Ξ“ Ξ” βŠ† (⟦A⟧v^βŠ₯ ∩ cph_J)^βŠ₯
by apply contr_orth.
c: bool
Ξ£, Ξ : list cformula
A: cformula
H: A :: β€ΌΞ£ ⊒[c] ⁇Π
P: cphase_space
v: nat β†’ propset P
IHcll: valid_in v (A :: β€ΌΞ£) (⁇Π)

valid_in v (? A :: β€ΌΞ£) (⁇Π)
c: bool
Ξ£, Ξ : list cformula
A: cformula
H: A :: β€ΌΞ£ ⊒[c] ⁇Π
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v (β€ΌΞ£) (⁇Π) βŠ† ⟦A⟧v^βŠ₯

valid_in v (? A :: β€ΌΞ£) (⁇Π)
c: bool
Ξ£, Ξ : list cformula
A: cformula
H: A :: β€ΌΞ£ ⊒[c] ⁇Π
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v (β€ΌΞ£) (⁇Π) βŠ† ⟦A⟧v^βŠ₯

⨀ sq v (β€ΌΞ£) (⁇Π) βŠ† ⟦? A⟧v^βŠ₯
c: bool
Ξ£, Ξ : list cformula
A: cformula
H: A :: β€ΌΞ£ ⊒[c] ⁇Π
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v (β€ΌΞ£) (⁇Π) βŠ† ⟦A⟧v^βŠ₯

⨀ sq v (β€ΌΞ£) (⁇Π) βŠ† ((⟦A⟧v^βŠ₯ ∩ cph_J)^βŠ₯)^βŠ₯
c: bool
Ξ£, Ξ : list cformula
A: cformula
H: A :: β€ΌΞ£ ⊒[c] ⁇Π
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v (β€ΌΞ£) (⁇Π) βŠ† ⟦A⟧v^βŠ₯

((⨀ sq v (β€ΌΞ£) (⁇Π) ∩ cph_J)^βŠ₯)^βŠ₯ βŠ† ((⟦A⟧v^βŠ₯ ∩ cph_J)^βŠ₯)^βŠ₯
c: bool
Ξ£, Ξ : list cformula
A: cformula
H: A :: β€ΌΞ£ ⊒[c] ⁇Π
P: cphase_space
v: nat β†’ propset P
IHcll: ⨀ sq v (β€ΌΞ£) (⁇Π) βŠ† ⟦A⟧v^βŠ₯

⨀ sq v (β€ΌΞ£) (⁇Π) ∩ cph_J βŠ† ⟦A⟧v^βŠ₯ ∩ cph_J
set_solver. Qed.

Using the semantics: balance

One family of models covers all the counterexamples. Phases are integers, Β· is +, and J = {0}. The pole is a parameter.
With the pole {0}, an atom denotes {1}, one unit of supply, and its negation denotes {-1}, one unit of demand. A sequent is valid only if the books balance: total supply on the left equals total supply on the right.
pole: propset Z

cphase_space
pole: propset Z

cphase_space
pole: propset Z

βˆ€ x y z : Z, (x + (y + z))%Z ≑ (x + y + z)%Z
pole: propset Z
βˆ€ x y : Z, (x + y)%Z ≑ (y + x)%Z
pole: propset Z
βˆ€ x : Z, (0 + x)%Z ≑ x
pole: propset Z
βˆ€ x y : Z, x ≑ y β†’ x ∈ pole β†’ y ∈ pole
pole: propset Z
βˆ€ x y : Z, x ≑ y β†’ x ∈ {[ z | z = 0%Z ]} β†’ y ∈ {[ z | z = 0%Z ]}
pole: propset Z
0%Z ∈ {[ z | z = 0%Z ]}
pole: propset Z
βˆ€ x y : Z, x ∈ {[ z | z = 0%Z ]} β†’ y ∈ {[ z | z = 0%Z ]} β†’ (x + y)%Z ∈ {[ z | z = 0%Z ]}
pole: propset Z
βˆ€ j y : Z, j ∈ {[ z | z = 0%Z ]} β†’ y ∈ pole β†’ (j + y)%Z ∈ pole
pole: propset Z
βˆ€ j y : Z, j ∈ {[ z | z = 0%Z ]} β†’ (j + j + y)%Z ∈ pole β†’ (j + y)%Z ∈ pole
all: try apply _; intros; unfold equiv in *; set_unfold; repeat match goal with H : _ ∧ _ |- _ => destruct H end; subst; rewrite ?Z.add_0_l, ?Z.add_0_r in *; try done; lia. Defined. Definition one_each {pole} : nat -> propset (int_space pole) := λ _, {[ z | z = 1%Z ]}.
The balance model: the pole is {0}.
Definition balance_space : cphase_space := int_space {[ z | z = 0%Z ]}.
Every variable denotes {1}: one unit of supply.
Definition bval : nat -> propset balance_space := Ξ» _, {[ z | z = 1%Z ]}.
denotes A n: in the balance model, A denotes exactly {n}.
Definition denotes (A : cformula) (n : Z) : Prop :=
  βˆ€ z : balance_space, z ∈ ⟦A⟧bval ↔ z = n.

Section Balance.
  Notation M := balance_space.
  Implicit Types (X Y : propset M) (z : M).

  
X: propset M
n: Z

(βˆ€ z, z ∈ X ↔ z = n) β†’ βˆ€ z, z ∈ X^βŠ₯ ↔ z = (- n)%Z
X: propset M
n: Z

(βˆ€ z, z ∈ X ↔ z = n) β†’ βˆ€ z, z ∈ X^βŠ₯ ↔ z = (- n)%Z
X: propset M
n: Z
HX: βˆ€ z, z ∈ X ↔ z = n
z: M

z ∈ X^βŠ₯ ↔ z = (- n)%Z
X: propset M
n: Z
HX: βˆ€ z, z ∈ X ↔ z = n
z: M

(βˆ€ x : M, x ∈ X β†’ x Β· z ∈ β««) ↔ z = (- n)%Z
X: propset M
n: Z
HX: βˆ€ z, z ∈ X ↔ z = n
z: M

(βˆ€ x : M, x ∈ X β†’ x Β· z ∈ β««) β†’ z = (- n)%Z
X: propset M
n: Z
HX: βˆ€ z, z ∈ X ↔ z = n
z: M
z = (- n)%Z β†’ βˆ€ x : M, x ∈ X β†’ x Β· z ∈ β««
X: propset M
n: Z
HX: βˆ€ z, z ∈ X ↔ z = n
z: M

(βˆ€ x : M, x ∈ X β†’ x Β· z ∈ β««) β†’ z = (- n)%Z
X: propset M
n: Z
HX: βˆ€ z, z ∈ X ↔ z = n
z: M
H: βˆ€ x : M, x ∈ X β†’ x Β· z ∈ β««

z = (- n)%Z
X: propset M
n: Z
HX: βˆ€ z, z ∈ X ↔ z = n
z: M
H: n · z ∈ ⫫

z = (- n)%Z
X: propset M
n: Z
HX: βˆ€ z, z ∈ X ↔ z = n
z: M
H: (n + z)%Z ∈ {[ z | z = 0%Z ]}

z = (- n)%Z
X: propset Z
n, z: Z
HX: βˆ€ x : Z, x ∈ X ↔ x = n
H: (n + z)%Z = 0%Z

z = (- n)%Z
lia.
X: propset M
n: Z
HX: βˆ€ z, z ∈ X ↔ z = n
z: M

z = (- n)%Z β†’ βˆ€ x : M, x ∈ X β†’ x Β· z ∈ β««
X: propset M
n: Z
HX: βˆ€ z, z ∈ X ↔ z = n
x: M
Hx: x = n

x · (- n)%Z ∈ ⫫
X: propset M
n: Z
HX: βˆ€ z, z ∈ X ↔ z = n
x: M
Hx: x = n

(x + - n)%Z ∈ {[ z | z = 0%Z ]}
X: propset Z
n, x: Z
HX: βˆ€ x : Z, x ∈ X ↔ x = n
Hx: x = n

(x + - n)%Z = 0%Z
lia. Qed.
X, Y: propset M
n, m: Z

(βˆ€ z, z ∈ X ↔ z = n) β†’ (βˆ€ z, z ∈ Y ↔ z = m) β†’ βˆ€ z, z ∈ X βŠ™ Y ↔ z = (n + m)%Z
X, Y: propset M
n, m: Z

(βˆ€ z, z ∈ X ↔ z = n) β†’ (βˆ€ z, z ∈ Y ↔ z = m) β†’ βˆ€ z, z ∈ X βŠ™ Y ↔ z = (n + m)%Z
X, Y: propset M
n, m: Z
HX: βˆ€ z, z ∈ X ↔ z = n
HY: βˆ€ z, z ∈ Y ↔ z = m
z: M

z ∈ X βŠ™ Y ↔ z = (n + m)%Z
X, Y: propset M
n, m: Z
HX: βˆ€ z, z ∈ X ↔ z = n
HY: βˆ€ z, z ∈ Y ↔ z = m
z: M

(βˆƒ a b : M, a ∈ X ∧ b ∈ Y ∧ z ≑ a Β· b) ↔ z = (n + m)%Z
X, Y: propset M
n, m: Z
HX: βˆ€ z, z ∈ X ↔ z = n
HY: βˆ€ z, z ∈ Y ↔ z = m
z: M

(βˆƒ a b : M, a ∈ X ∧ b ∈ Y ∧ z ≑ a Β· b) β†’ z = (n + m)%Z
X, Y: propset M
n, m: Z
HX: βˆ€ z, z ∈ X ↔ z = n
HY: βˆ€ z, z ∈ Y ↔ z = m
z: M
z = (n + m)%Z β†’ βˆƒ a b : M, a ∈ X ∧ b ∈ Y ∧ z ≑ a Β· b
X, Y: propset M
n, m: Z
HX: βˆ€ z, z ∈ X ↔ z = n
HY: βˆ€ z, z ∈ Y ↔ z = m
z: M

(βˆƒ a b : M, a ∈ X ∧ b ∈ Y ∧ z ≑ a Β· b) β†’ z = (n + m)%Z
X, Y: propset M
n, m: Z
HX: βˆ€ z, z ∈ X ↔ z = n
HY: βˆ€ z, z ∈ Y ↔ z = m
z: M
Hz: z ≑ n Β· m

z = (n + m)%Z
exact Hz.
X, Y: propset M
n, m: Z
HX: βˆ€ z, z ∈ X ↔ z = n
HY: βˆ€ z, z ∈ Y ↔ z = m
z: M

z = (n + m)%Z β†’ βˆƒ a b : M, a ∈ X ∧ b ∈ Y ∧ z ≑ a Β· b
X, Y: propset M
n, m: Z
HX: βˆ€ z, z ∈ X ↔ z = n
HY: βˆ€ z, z ∈ Y ↔ z = m

βˆƒ a b : M, a ∈ X ∧ b ∈ Y ∧ (n + m)%Z ≑ a Β· b
X, Y: propset M
n, m: Z
HX: βˆ€ z, z ∈ X ↔ z = n
HY: βˆ€ z, z ∈ Y ↔ z = m

n ∈ X ∧ m ∈ Y ∧ (n + m)%Z ≑ n Β· m
X, Y: propset M
n, m: Z
HX: βˆ€ z, z ∈ X ↔ z = n
HY: βˆ€ z, z ∈ Y ↔ z = m

n = n ∧ m = m ∧ (n + m)%Z ≑ n Β· m
done. Qed.
p: nat

denotes $p 1
p: nat

denotes $p 1
p: nat

βˆ€ z, z ∈ bval p ↔ z = 1%Z
p: nat
H: βˆ€ z, z ∈ bval p ↔ z = 1%Z
denotes $p 1
p: nat

βˆ€ z, z ∈ bval p ↔ z = 1%Z
p: nat
z: M

z ∈ bval p ↔ z = 1%Z
p: nat
z: M

z ∈ {[ z0 | z0 = 1%Z ]} ↔ z = 1%Z
by rewrite elem_of_PropSet.
p: nat
H: βˆ€ z, z ∈ bval p ↔ z = 1%Z

denotes $p 1
p: nat
H: βˆ€ z, z ∈ bval p ↔ z = 1%Z
z: M

z ∈ ⟦$p⟧bval ↔ z = 1%Z
p: nat
H: βˆ€ z, z ∈ bval p ↔ z = 1%Z
z: M

z ∈ (bval p^βŠ₯)^βŠ₯ ↔ z = 1%Z
p: nat
H: βˆ€ z, z ∈ bval p ↔ z = 1%Z
z: M

z = (- - (1))%Z ↔ z = 1%Z
lia. Qed.
A: cformula
n: Z

denotes A n β†’ denotes (A^βŠ₯) (- n)
A: cformula
n: Z

denotes A n β†’ denotes (A^βŠ₯) (- n)
A: cformula
n: Z
H: denotes A n
z: M

z ∈ ⟦A^βŠ₯⟧bval ↔ z = (- n)%Z
exact (single_orth _ _ H z). Qed.
A, B: cformula
n, m: Z

denotes A n β†’ denotes B m β†’ denotes (A βŠ— B) (n + m)
A, B: cformula
n, m: Z

denotes A n β†’ denotes B m β†’ denotes (A βŠ— B) (n + m)
A, B: cformula
n, m: Z
HA: denotes A n
HB: denotes B m
z: M

z ∈ ⟦A βŠ— B⟧bval ↔ z = (n + m)%Z
A, B: cformula
n, m: Z
HA: denotes A n
HB: denotes B m
z: M

z ∈ ((⟦A⟧bval βŠ™ ⟦B⟧bval)^βŠ₯)^βŠ₯ ↔ z = (n + m)%Z
A, B: cformula
n, m: Z
HA: denotes A n
HB: denotes B m
z: M

z = (- - (n + m))%Z ↔ z = (n + m)%Z
lia. Qed.
A, B: cformula
n, m: Z

denotes A n β†’ denotes B m β†’ denotes (A β…‹ B) (n + m)
A, B: cformula
n, m: Z

denotes A n β†’ denotes B m β†’ denotes (A β…‹ B) (n + m)
A, B: cformula
n, m: Z
HA: denotes A n
HB: denotes B m
z: M

z ∈ ⟦A β…‹ B⟧bval ↔ z = (n + m)%Z
A, B: cformula
n, m: Z
HA: denotes A n
HB: denotes B m
z: M

z ∈ (⟦A⟧bval^βŠ₯ βŠ™ ⟦B⟧bval^βŠ₯)^βŠ₯ ↔ z = (n + m)%Z
A, B: cformula
n, m: Z
HA: denotes A n
HB: denotes B m
z: M

z = (- (- n + - m))%Z ↔ z = (n + m)%Z
lia. Qed.
A, B: cformula
n: Z

denotes A n β†’ denotes B n β†’ denotes (A & B) n
A, B: cformula
n: Z

denotes A n β†’ denotes B n β†’ denotes (A & B) n
A, B: cformula
n: Z
HA: denotes A n
HB: denotes B n
z: M

z ∈ ⟦A & B⟧bval ↔ z = n
A, B: cformula
n: Z
HA: denotes A n
HB: denotes B n
z: M

z ∈ ⟦A⟧bval ∩ ⟦B⟧bval ↔ z = n
A, B: cformula
n: Z
HA: denotes A n
HB: denotes B n
z: M

z = n ∧ z = n ↔ z = n
naive_solver. Qed.
A list of singletons multiplies to the singleton of the sum.
  
L: list (propset M)
ns: list Z

Forall2 (Ξ» X (n : M), βˆ€ z, z ∈ X ↔ z = n) L ns β†’ (foldr Z.add 0%Z ns : M) ∈ ⨀ L
L: list (propset M)
ns: list Z

Forall2 (Ξ» X (n : M), βˆ€ z, z ∈ X ↔ z = n) L ns β†’ (foldr Z.add 0%Z ns : M) ∈ ⨀ L

0%Z ∈ one_set
X: propset M
n: M
L: list (propset M)
ns: list M
HX: βˆ€ z, z ∈ X ↔ z = n
IH: foldr Z.add 0%Z ns ∈ ⨀ L
(n + foldr Z.add 0 ns)%Z ∈ X βŠ™ ⨀ L

0%Z ∈ one_set
by apply elem_of_one.
X: propset M
n: M
L: list (propset M)
ns: list M
HX: βˆ€ z, z ∈ X ↔ z = n
IH: foldr Z.add 0%Z ns ∈ ⨀ L

(n + foldr Z.add 0 ns)%Z ∈ X βŠ™ ⨀ L
X: propset M
n: M
L: list (propset M)
ns: list M
HX: βˆ€ z, z ∈ X ↔ z = n
IH: foldr Z.add 0%Z ns ∈ ⨀ L

βˆƒ a b : M, a ∈ X ∧ b ∈ ⨀ L ∧ (n + foldr Z.add 0 ns)%Z ≑ a Β· b
X: propset M
n: M
L: list (propset M)
ns: list M
HX: βˆ€ z, z ∈ X ↔ z = n
IH: foldr Z.add 0%Z ns ∈ ⨀ L

n ∈ X ∧ foldr Z.add 0%Z ns ∈ ⨀ L ∧ (n + foldr Z.add 0 ns)%Z ≑ n Β· foldr Z.add 0%Z ns
by rewrite HX. Qed.
k: Z
l: list Z

foldr Z.add k l = (k + foldr Z.add 0 l)%Z
k: Z
l: list Z

foldr Z.add k l = (k + foldr Z.add 0 l)%Z
induction l; simpl; lia. Qed.
l: list Z

foldr Z.add 0%Z (map Z.opp l) = (- foldr Z.add 0 l)%Z
l: list Z

foldr Z.add 0%Z (map Z.opp l) = (- foldr Z.add 0 l)%Z
induction l; simpl; lia. Qed.
The balance theorem: in a provable sequent whose formulas all have weights, the supply on the left equals the supply on the right.
  
Ξ“, Ξ”: list cformula
ns, ms: list Z

Ξ“ ⊒ Ξ” β†’ Forall2 denotes Ξ“ ns β†’ Forall2 denotes Ξ” ms β†’ foldr Z.add 0%Z ns = foldr Z.add 0%Z ms
Ξ“, Ξ”: list cformula
ns, ms: list Z

Ξ“ ⊒ Ξ” β†’ Forall2 denotes Ξ“ ns β†’ Forall2 denotes Ξ” ms β†’ foldr Z.add 0%Z ns = foldr Z.add 0%Z ms
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms

foldr Z.add 0%Z ns = foldr Z.add 0%Z ms
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: valid_in bval Ξ“ Ξ”

foldr Z.add 0%Z ns = foldr Z.add 0%Z ms
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««

foldr Z.add 0%Z ns = foldr Z.add 0%Z ms
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««
Hsum: (foldr Z.add 0%Z (ns ++ map Z.opp ms) : M) ∈ ⨀ sq bval Ξ“ Ξ”

foldr Z.add 0%Z ns = foldr Z.add 0%Z ms
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««
foldr Z.add 0%Z (ns ++ map Z.opp ms) ∈ ⨀ sq bval Ξ“ Ξ”
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««
Hsum: (foldr Z.add 0%Z (ns ++ map Z.opp ms) : M) ∈ ⨀ sq bval Ξ“ Ξ”

foldr Z.add 0%Z ns = foldr Z.add 0%Z ms
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««
Hsum: foldr Z.add 0%Z (ns ++ map Z.opp ms) ∈ ⫫

foldr Z.add 0%Z ns = foldr Z.add 0%Z ms
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««
Hsum: foldr Z.add 0%Z (ns ++ map Z.opp ms) ∈ {[ z | z = 0%Z ]}

foldr Z.add 0%Z ns = foldr Z.add 0%Z ms
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««
Hsum: foldr Z.add 0%Z (ns ++ map Z.opp ms) = 0%Z

foldr Z.add 0%Z ns = foldr Z.add 0%Z ms
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««
Hsum: (- foldr Z.add 0 ms + foldr Z.add 0 ns)%Z = 0%Z

foldr Z.add 0%Z ns = foldr Z.add 0%Z ms
lia.
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««

foldr Z.add 0%Z (ns ++ map Z.opp ms) ∈ ⨀ sq bval Ξ“ Ξ”
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««

Forall2 (Ξ» X (n : M), βˆ€ z, z ∈ X ↔ z = n) (sq bval Ξ“ Ξ”) (ns ++ map Z.opp ms)
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««

Forall2 (Ξ» X (n : M), βˆ€ z, z ∈ X ↔ z = n) (map (interp bval) Ξ“ ++ map (Ξ» B : cformula, ⟦B⟧bval^βŠ₯) Ξ”) (ns ++ map Z.opp ms)
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««

Forall2 (Ξ» X (n : M), βˆ€ z, z ∈ X ↔ z = n) (map (interp bval) Ξ“) ns
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««
Forall2 (Ξ» X (n : M), βˆ€ z, z ∈ X ↔ z = n) (map (Ξ» B : cformula, ⟦B⟧bval^βŠ₯) Ξ”) (map Z.opp ms)
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««

Forall2 (Ξ» X (n : M), βˆ€ z, z ∈ X ↔ z = n) (map (interp bval) Ξ“) ns
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««

Forall2 ((Ξ» X (n : M), βˆ€ z, z ∈ X ↔ z = n) ∘ interp bval) Ξ“ ns
exact HΞ“.
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««

Forall2 (Ξ» X (n : M), βˆ€ z, z ∈ X ↔ z = n) (map (Ξ» B : cformula, ⟦B⟧bval^βŠ₯) Ξ”) (map Z.opp ms)
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««

Forall2 (Ξ» (x1 : cformula) (x2 : Z), βˆ€ z, z ∈ ⟦x1⟧bval^βŠ₯ ↔ z = (- x2)%Z) Ξ” ms
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««

βˆ€ (x : cformula) (y : Z), denotes x y β†’ βˆ€ z, z ∈ ⟦x⟧bval^βŠ₯ ↔ z = (- y)%Z
Ξ“, Ξ”: list cformula
ns, ms: list Z
H: Ξ“ ⊒ Ξ”
HΞ“: Forall2 denotes Ξ“ ns
HΞ”: Forall2 denotes Ξ” ms
S: ⨀ sq bval Ξ“ Ξ” βŠ† β««
B: cformula
m: Z
HB: denotes B m

βˆ€ z, z ∈ ⟦B⟧bval^βŠ₯ ↔ z = (- m)%Z
by apply single_orth. Qed. End Balance.
weigh proves the Forall2 denotes side conditions of balance, computing each weight as it goes. It dispatches on the shape of the formula, so it never asks Rocq to unify two different connectives (which would unfold denotes and interp and take forever).
Ltac weigh :=
  repeat match goal with
  | |- Forall2 _ _ _ => constructor
  | |- denotes ($ _) _ => apply denotes_atom
  | |- denotes (_^βŠ₯) _ => apply denotes_neg
  | |- denotes (_ βŠ— _) _ => apply denotes_tensor
  | |- denotes (_ β…‹ _) _ => apply denotes_par
  | |- denotes (_ & _) _ => apply denotes_with
  end.
refute_by_balance applies balance with weights left to weigh, then checks that the two sums differ.
Ltac refute_by_balance :=
  intros H; eapply balance in H; [| weigh | weigh]; simpl in H; lia.
No contraction: supply 1 β‰  demand 2.

Β¬ ([$0] ⊒ [$0 βŠ— $0])

Β¬ ([$0] ⊒ [$0 βŠ— $0])
refute_by_balance. Qed.
No weakening: supply 2 β‰  demand 1.

¬ ([$0; $1] ⊒ [$0])

¬ ([$0; $1] ⊒ [$0])
refute_by_balance. Qed.
& is not βŠ—: $0 & $1 weighs 1 (both components are offered, only one is used), $0 βŠ— $1 weighs 2.

Β¬ ([$0 & $1] ⊒ [$0 βŠ— $1])

Β¬ ([$0 & $1] ⊒ [$0 βŠ— $1])
refute_by_balance. Qed.
No duplicator: $0 ⊸ $0 βŠ— $0, i.e. $0^βŠ₯ β…‹ ($0 βŠ— $0), has weight -1 + 2 = 1, but the empty left side supplies nothing.

Β¬ ([] ⊒ [$0 ⊸ $0 βŠ— $0])

Β¬ ([] ⊒ [$0 ⊸ $0 βŠ— $0])
refute_by_balance. Qed.
No eraser: $0 βŠ— $1 ⊸ $0 has weight -2 + 1 = -1.

Β¬ ([] ⊒ [$0 βŠ— $1 ⊸ $0])

Β¬ ([] ⊒ [$0 βŠ— $1 ⊸ $0])
refute_by_balance. Qed.
Balance is necessary but not sufficient. [$0 β…‹ $1] ⊒ [$0 βŠ— $1] balances, since both sides weigh 2, yet it is not provable without the extra MIX rule (Γ₁ ⊒ Δ₁ and Ξ“β‚‚ ⊒ Ξ”β‚‚ give Γ₁,Ξ“β‚‚ ⊒ Δ₁,Ξ”β‚‚). The balance model cannot tell the two formulas apart:

denotes ($0 β…‹ $1) (1 + 1) ∧ denotes ($0 βŠ— $1) (1 + 1)

denotes ($0 β…‹ $1) (1 + 1) ∧ denotes ($0 βŠ— $1) (1 + 1)
split; weigh. Qed.

Consistency

The pole βˆ… gives a different model, in which nothing is balanced. The empty sequent ⊒ is the classical "contradiction", and in this model it is invalid: the empty product {0} is not inside βˆ….

¬ ([] ⊒ [])

¬ ([] ⊒ [])
H: [] ⊒ []

False
H: [] ⊒ []

0%Z ∈ βˆ…
H: [] ⊒ []

0%Z ∈ ⨀ sq one_each [] []
by apply elem_of_one. Qed.
As a consequence, neither βŠ₯ nor 𝟘 is provable: cut either one against its left rule to get ⊒.

Β¬ ([] ⊒ [βŠ₯])

Β¬ ([] ⊒ [βŠ₯])
H: [] ⊒ [βŠ₯]

False
apply consistency, (cut _ [] [] [] [] βŠ₯); [done | exact H | apply botL]. Qed.

¬ ([] ⊒ [𝟘])

¬ ([] ⊒ [𝟘])
H: [] ⊒ [𝟘]

False
apply consistency, (cut _ [] [] [] [] 𝟘); [done | exact H | apply zeroL]. Qed.