Intuitionistic.CutElim: completeness and cut elimination for ILL
Γ ⊢ A ──soundness──▶ Γ ⊨ A ──completeness──▶ Γ ⊢cf A
The syntactic phase space
- a phase is a context Γ : list iformula, taken up to permutation;
- · is ++ and ε is [];
- the closure of a set X of contexts is
cl X = { Γ | for every "test" (Δ, C):
if x ++ Δ ⊢cf C for all x ∈ X,
then Γ ++ Δ ⊢cf C }
- the reusable phases are the banged contexts ‼Σ;
- ⊥ denotes the contexts that prove ⊥ without cut.
Okada's lemma
[A] ∈ ⟦A⟧ ⊆ { Γ | Γ ⊢cf A }
Definition syn_cl (X : propset (list iformula)) : propset (list iformula) := {[ Γ | ∀ Δ C, (∀ x, x ∈ X -> x ++ Δ ⊢cf C) -> Γ ++ Δ ⊢cf C ]}.X: propset (list iformula)
Γ: list iformulaΓ ∈ syn_cl X ↔ ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf CX: propset (list iformula)
Γ: list iformulaΓ ∈ syn_cl X ↔ ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf Cby rewrite elem_of_PropSet. Qed.X: propset (list iformula)
Γ: list iformulaΓ ∈ {[ Γ0 | ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ0 ++ Δ ⊢cf C ]} ↔ ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
stdpp's set_unfold can see through syn_cl and, below, down.
X: propset (list iformula)
Γ: list iformulaSetUnfoldElemOf Γ (syn_cl X) (∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C)X: propset (list iformula)
Γ: list iformulaSetUnfoldElemOf Γ (syn_cl X) (∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C)apply elem_of_syn_cl. Qed.X: propset (list iformula)
Γ: list iformulaΓ ∈ syn_cl X ↔ ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
The syntactic phase space
phase_spacephase_space∀ x x0 x1 : list iformula, x ++ x0 ++ x1 ≡ (x ++ x0) ++ x1∀ x x0 : list iformula, x ++ x0 ≡ x0 ++ x∀ x : list iformula, x ≡ x∀ (x : propset (list iformula)) (x0 : list iformula), x0 ∈ x → ∀ (Δ : list iformula) (C : iformula), (∀ x1 : list iformula, x1 ∈ x → x1 ++ Δ ⊢cf C) → x0 ++ Δ ⊢cf C∀ x x0 : propset (list iformula), (∀ x1 : list iformula, x1 ∈ x → ∀ (Δ : list iformula) (C : iformula), (∀ x2 : list iformula, x2 ∈ x0 → x2 ++ Δ ⊢cf C) → x1 ++ Δ ⊢cf C) → ∀ x1 : list iformula, (∀ (Δ : list iformula) (C : iformula), (∀ x2 : list iformula, x2 ∈ x → x2 ++ Δ ⊢cf C) → x1 ++ Δ ⊢cf C) → ∀ (Δ : list iformula) (C : iformula), (∀ x2 : list iformula, x2 ∈ x0 → x2 ++ Δ ⊢cf C) → x1 ++ Δ ⊢cf C∀ (x : propset (list iformula)) (x0 x1 : list iformula), x0 ≡ x1 → (∀ (Δ : list iformula) (C : iformula), (∀ x2 : list iformula, x2 ∈ x → x2 ++ Δ ⊢cf C) → x0 ++ Δ ⊢cf C) → ∀ (Δ : list iformula) (C : iformula), (∀ x2 : list iformula, x2 ∈ x → x2 ++ Δ ⊢cf C) → x1 ++ Δ ⊢cf C∀ (x x0 : propset (list iformula)) (x1 x2 : list iformula), (∀ (Δ : list iformula) (C : iformula), (∀ x3 : list iformula, x3 ∈ x → x3 ++ Δ ⊢cf C) → x1 ++ Δ ⊢cf C) → (∀ (Δ : list iformula) (C : iformula), (∀ x3 : list iformula, x3 ∈ x0 → x3 ++ Δ ⊢cf C) → x2 ++ Δ ⊢cf C) → ∀ (Δ : list iformula) (C : iformula), (∀ x3 : list iformula, x3 ∈ {[ z | ∃ a b : list iformula, a ∈ x ∧ b ∈ x0 ∧ z ≡ a ++ b ]} → x3 ++ Δ ⊢cf C) → (x1 ++ x2) ++ Δ ⊢cf C∀ x x0 : list iformula, x ≡ x0 → (∃ x1 : list iformula, x = ‼x1) → ∃ x1 : list iformula, x0 = ‼x1∃ x : list iformula, [] = ‼x∀ x x0 : list iformula, (∃ x1 : list iformula, x = ‼x1) → (∃ x1 : list iformula, x0 = ‼x1) → ∃ x1 : list iformula, x ++ x0 = ‼x1∀ x : list iformula, (∃ x0 : list iformula, x = ‼x0) → ∀ (Δ : list iformula) (C : iformula), (∀ x0 : list iformula, x0 ∈ {[ z | z ≡ [] ]} → x0 ++ Δ ⊢cf C) → x ++ Δ ⊢cf C∀ x : list iformula, (∃ x0 : list iformula, x = ‼x0) → ∀ (Δ : list iformula) (C : iformula), (∀ x0 : list iformula, x0 ∈ {[ z | z ≡ x ++ x ]} → x0 ++ Δ ⊢cf C) → x ++ Δ ⊢cf C∀ x x0 x1 : list iformula, x ++ x0 ++ x1 ≡ (x ++ x0) ++ x1by rewrite (assoc_L (++)).x, x0, x1: list iformulax ++ x0 ++ x1 ≡ (x ++ x0) ++ x1∀ x x0 : list iformula, x ++ x0 ≡ x0 ++ xapply Permutation_app_comm.x, x0: list iformulax ++ x0 ≡ x0 ++ xdone.∀ x : list iformula, x ≡ x∀ (x : propset (list iformula)) (x0 : list iformula), x0 ∈ x → ∀ (Δ : list iformula) (C : iformula), (∀ x1 : list iformula, x1 ∈ x → x1 ++ Δ ⊢cf C) → x0 ++ Δ ⊢cf Cby apply H.X: propset (list iformula)
Γ: list iformula
HΓ: Γ ∈ X
Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf CΓ ++ Δ ⊢cf C∀ x x0 : propset (list iformula), (∀ x1 : list iformula, x1 ∈ x → ∀ (Δ : list iformula) (C : iformula), (∀ x2 : list iformula, x2 ∈ x0 → x2 ++ Δ ⊢cf C) → x1 ++ Δ ⊢cf C) → ∀ x1 : list iformula, (∀ (Δ : list iformula) (C : iformula), (∀ x2 : list iformula, x2 ∈ x → x2 ++ Δ ⊢cf C) → x1 ++ Δ ⊢cf C) → ∀ (Δ : list iformula) (C : iformula), (∀ x2 : list iformula, x2 ∈ x0 → x2 ++ Δ ⊢cf C) → x1 ++ Δ ⊢cf CX, Y: propset (list iformula)
HXY: ∀ x : list iformula, x ∈ X → ∀ (Δ : list iformula) (C : iformula), (∀ x0 : list iformula, x0 ∈ Y → x0 ++ Δ ⊢cf C) → x ++ Δ ⊢cf C
Γ: list iformula
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ Y → x ++ Δ ⊢cf CΓ ++ Δ ⊢cf CX, Y: propset (list iformula)
HXY: ∀ x : list iformula, x ∈ X → ∀ (Δ : list iformula) (C : iformula), (∀ x0 : list iformula, x0 ∈ Y → x0 ++ Δ ⊢cf C) → x ++ Δ ⊢cf C
Γ: list iformula
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ Y → x ++ Δ ⊢cf C∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf Cby apply HXY.X, Y: propset (list iformula)
HXY: ∀ x : list iformula, x ∈ X → ∀ (Δ : list iformula) (C : iformula), (∀ x0 : list iformula, x0 ∈ Y → x0 ++ Δ ⊢cf C) → x ++ Δ ⊢cf C
Γ: list iformula
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ Y → x ++ Δ ⊢cf C
x: list iformula
Hx: x ∈ Xx ++ Δ ⊢cf C∀ (x : propset (list iformula)) (x0 x1 : list iformula), x0 ≡ x1 → (∀ (Δ : list iformula) (C : iformula), (∀ x2 : list iformula, x2 ∈ x → x2 ++ Δ ⊢cf C) → x0 ++ Δ ⊢cf C) → ∀ (Δ : list iformula) (C : iformula), (∀ x2 : list iformula, x2 ∈ x → x2 ++ Δ ⊢cf C) → x1 ++ Δ ⊢cf CX: propset (list iformula)
Γ, Γ': list iformula
HΓ: Γ ≡ Γ'
H: ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
Δ: list iformula
C: iformula
HX: ∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf CΓ' ++ Δ ⊢cf Cby rewrite HΓ.X: propset (list iformula)
Γ, Γ': list iformula
HΓ: Γ ≡ Γ'
H: ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
Δ: list iformula
C: iformula
HX: ∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf CΓ ++ Δ ≡ₚ Γ' ++ Δ∀ (x x0 : propset (list iformula)) (x1 x2 : list iformula), (∀ (Δ : list iformula) (C : iformula), (∀ x3 : list iformula, x3 ∈ x → x3 ++ Δ ⊢cf C) → x1 ++ Δ ⊢cf C) → (∀ (Δ : list iformula) (C : iformula), (∀ x3 : list iformula, x3 ∈ x0 → x3 ++ Δ ⊢cf C) → x2 ++ Δ ⊢cf C) → ∀ (Δ : list iformula) (C : iformula), (∀ x3 : list iformula, x3 ∈ {[ z | ∃ a b : list iformula, a ∈ x ∧ b ∈ x0 ∧ z ≡ a ++ b ]} → x3 ++ Δ ⊢cf C) → (x1 ++ x2) ++ Δ ⊢cf CX, Y: propset (list iformula)
Γ, Γ': list iformula
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
HΓ': ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ Y → x ++ Δ ⊢cf C) → Γ' ++ Δ ⊢cf C
Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ {[ z | ∃ a b : list iformula, a ∈ X ∧ b ∈ Y ∧ z ≡ a ++ b ]} → x ++ Δ ⊢cf C(Γ ++ Γ') ++ Δ ⊢cf CX, Y: propset (list iformula)
Γ, Γ': list iformula
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
HΓ': ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ Y → x ++ Δ ⊢cf C) → Γ' ++ Δ ⊢cf C
Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ {[ z | ∃ a b : list iformula, a ∈ X ∧ b ∈ Y ∧ z ≡ a ++ b ]} → x ++ Δ ⊢cf CΓ ++ Γ' ++ Δ ⊢cf CX, Y: propset (list iformula)
Γ, Γ': list iformula
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
HΓ': ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ Y → x ++ Δ ⊢cf C) → Γ' ++ Δ ⊢cf C
Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ {[ z | ∃ a b : list iformula, a ∈ X ∧ b ∈ Y ∧ z ≡ a ++ b ]} → x ++ Δ ⊢cf C∀ x : list iformula, x ∈ X → x ++ Γ' ++ Δ ⊢cf CX, Y: propset (list iformula)
Γ, Γ': list iformula
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
HΓ': ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ Y → x ++ Δ ⊢cf C) → Γ' ++ Δ ⊢cf C
Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ {[ z | ∃ a b : list iformula, a ∈ X ∧ b ∈ Y ∧ z ≡ a ++ b ]} → x ++ Δ ⊢cf C
x: list iformula
Hx: x ∈ Xx ++ Γ' ++ Δ ⊢cf CX, Y: propset (list iformula)
Γ, Γ': list iformula
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
HΓ': ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ Y → x ++ Δ ⊢cf C) → Γ' ++ Δ ⊢cf C
Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ {[ z | ∃ a b : list iformula, a ∈ X ∧ b ∈ Y ∧ z ≡ a ++ b ]} → x ++ Δ ⊢cf C
x: list iformula
Hx: x ∈ XΓ' ++ x ++ Δ ⊢cf CX, Y: propset (list iformula)
Γ, Γ': list iformula
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
HΓ': ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ Y → x ++ Δ ⊢cf C) → Γ' ++ Δ ⊢cf C
Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ {[ z | ∃ a b : list iformula, a ∈ X ∧ b ∈ Y ∧ z ≡ a ++ b ]} → x ++ Δ ⊢cf C
x: list iformula
Hx: x ∈ X∀ x0 : list iformula, x0 ∈ Y → x0 ++ x ++ Δ ⊢cf CX, Y: propset (list iformula)
Γ, Γ': list iformula
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
HΓ': ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ Y → x ++ Δ ⊢cf C) → Γ' ++ Δ ⊢cf C
Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ {[ z | ∃ a b : list iformula, a ∈ X ∧ b ∈ Y ∧ z ≡ a ++ b ]} → x ++ Δ ⊢cf C
x: list iformula
Hx: x ∈ X
y: list iformula
Hy: y ∈ Yy ++ x ++ Δ ⊢cf CX, Y: propset (list iformula)
Γ, Γ': list iformula
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
HΓ': ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ Y → x ++ Δ ⊢cf C) → Γ' ++ Δ ⊢cf C
Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ {[ z | ∃ a b : list iformula, a ∈ X ∧ b ∈ Y ∧ z ≡ a ++ b ]} → x ++ Δ ⊢cf C
x: list iformula
Hx: x ∈ X
y: list iformula
Hy: y ∈ Y(x ++ y) ++ Δ ⊢cf Cby exists x, y.X, Y: propset (list iformula)
Γ, Γ': list iformula
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
HΓ': ∀ (Δ : list iformula) (C : iformula), (∀ x : list iformula, x ∈ Y → x ++ Δ ⊢cf C) → Γ' ++ Δ ⊢cf C
Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ {[ z | ∃ a b : list iformula, a ∈ X ∧ b ∈ Y ∧ z ≡ a ++ b ]} → x ++ Δ ⊢cf C
x: list iformula
Hx: x ∈ X
y: list iformula
Hy: y ∈ Yx ++ y ∈ {[ z | ∃ a b : list iformula, a ∈ X ∧ b ∈ Y ∧ z ≡ a ++ b ]}∀ x x0 : list iformula, x ≡ x0 → (∃ x1 : list iformula, x = ‼x1) → ∃ x1 : list iformula, x0 = ‼x1Γ', Σ: list iformula
HΓ: ‼Σ ≡ Γ'∃ x : list iformula, Γ' = ‼xby exists Σ'.Σ, Σ': list iformula
HΓ: ‼Σ ≡ ‼Σ'∃ x : list iformula, ‼Σ' = ‼xby exists [].∃ x : list iformula, [] = ‼x∀ x x0 : list iformula, (∃ x1 : list iformula, x = ‼x1) → (∃ x1 : list iformula, x0 = ‼x1) → ∃ x1 : list iformula, x ++ x0 = ‼x1Σ, Σ': list iformula∃ x : list iformula, ‼Σ ++ ‼Σ' = ‼xby rewrite map_app.Σ, Σ': list iformula‼Σ ++ ‼Σ' = ‼(Σ ++ Σ')∀ x : list iformula, (∃ x0 : list iformula, x = ‼x0) → ∀ (Δ : list iformula) (C : iformula), (∀ x0 : list iformula, x0 ∈ {[ z | z ≡ [] ]} → x0 ++ Δ ⊢cf C) → x ++ Δ ⊢cf CΣ, Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ {[ z | z ≡ [] ]} → x ++ Δ ⊢cf C‼Σ ++ Δ ⊢cf Cby apply elem_of_PropSet.Σ, Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ {[ z | z ≡ [] ]} → x ++ Δ ⊢cf C[] ∈ {[ z | z ≡ [] ]}∀ x : list iformula, (∃ x0 : list iformula, x = ‼x0) → ∀ (Δ : list iformula) (C : iformula), (∀ x0 : list iformula, x0 ∈ {[ z | z ≡ x ++ x ]} → x0 ++ Δ ⊢cf C) → x ++ Δ ⊢cf CΣ, Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ {[ z | z ≡ ‼Σ ++ ‼Σ ]} → x ++ Δ ⊢cf C‼Σ ++ Δ ⊢cf CΣ, Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ {[ z | z ≡ ‼Σ ++ ‼Σ ]} → x ++ Δ ⊢cf C‼Σ ++ ‼Σ ++ Δ ⊢cf CΣ, Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ {[ z | z ≡ ‼Σ ++ ‼Σ ]} → x ++ Δ ⊢cf C(‼Σ ++ ‼Σ) ++ Δ ⊢cf Cby apply elem_of_PropSet. Defined.Σ, Δ: list iformula
C: iformula
H: ∀ x : list iformula, x ∈ {[ z | z ≡ ‼Σ ++ ‼Σ ]} → x ++ Δ ⊢cf C‼Σ ++ ‼Σ ∈ {[ z | z ≡ ‼Σ ++ ‼Σ ]}
Reduce the projections of syntactic, leaving ∈ alone.
Ltac syn_simpl :=
cbn [ph_cl ph_J ph_bot ph_equiv ph_op ph_e syntactic carrier] in *.
Each variable $p denotes the contexts that prove $p without cut.
Definition down (A : iformula) : propset syntactic := {[ Γ | Γ ⊢cf A ]}. Definition syn_val : nat -> propset syntactic := λ p, down ($p).A: iformula
Γ: list iformulaΓ ∈ down A ↔ Γ ⊢cf AA: iformula
Γ: list iformulaΓ ∈ down A ↔ Γ ⊢cf Aby rewrite elem_of_PropSet. Qed.A: iformula
Γ: list iformulaΓ ∈ {[ Γ0 | Γ0 ⊢cf A ]} ↔ Γ ⊢cf AA: iformula
Γ: list iformulaSetUnfoldElemOf Γ (down A) (Γ ⊢cf A)A: iformula
Γ: list iformulaSetUnfoldElemOf Γ (down A) (Γ ⊢cf A)apply elem_of_down. Qed.A: iformula
Γ: list iformulaΓ ∈ down A ↔ Γ ⊢cf A
elem_of_syn_cl, stated over the carrier of syntactic. Then the
lemmas of Phase.v can infer the phase space.
X: propset syntactic
Γ: syntacticΓ ∈ cl X ↔ ∀ (Δ : list iformula) (C : iformula), (∀ x : syntactic, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf Capply elem_of_syn_cl. Qed.X: propset syntactic
Γ: syntacticΓ ∈ cl X ↔ ∀ (Δ : list iformula) (C : iformula), (∀ x : syntactic, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
Facts of the syntactic model
Γ' ++ Δ ⊢cf C
─────────────── (a left rule) Γ' ∈ X
Γ ++ Δ ⊢cf C
─────────────────────────────────────────────── cl_left
Γ ∈ cl X
X: propset syntactic
Γ, Γ': syntacticΓ' ∈ X → (∀ (Δ : list iformula) (C : iformula), Γ' ++ Δ ⊢cf C → Γ ++ Δ ⊢cf C) → Γ ∈ cl XX: propset syntactic
Γ, Γ': syntacticΓ' ∈ X → (∀ (Δ : list iformula) (C : iformula), Γ' ++ Δ ⊢cf C → Γ ++ Δ ⊢cf C) → Γ ∈ cl XX: propset syntactic
Γ, Γ': syntactic
HΓ': Γ' ∈ X
Hrule: ∀ (Δ : list iformula) (C : iformula), Γ' ++ Δ ⊢cf C → Γ ++ Δ ⊢cf CΓ ∈ cl XX: propset syntactic
Γ, Γ': syntactic
HΓ': Γ' ∈ X
Hrule: ∀ (Δ : list iformula) (C : iformula), Γ' ++ Δ ⊢cf C → Γ ++ Δ ⊢cf C∀ (Δ : list iformula) (C : iformula), (∀ x : syntactic, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf Cby apply Hrule, H. Qed.X: propset syntactic
Γ, Γ': syntactic
HΓ': Γ' ∈ X
Hrule: ∀ (Δ : list iformula) (C : iformula), Γ' ++ Δ ⊢cf C → Γ ++ Δ ⊢cf C
Δ: list iformula
C: iformula
H: ∀ x : syntactic, x ∈ X → x ++ Δ ⊢cf CΓ ++ Δ ⊢cf C
The same for a fact F, which is its own closure.
F: propset syntactic
Γ, Γ': syntacticfact F → Γ' ∈ F → (∀ (Δ : list iformula) (C : iformula), Γ' ++ Δ ⊢cf C → Γ ++ Δ ⊢cf C) → Γ ∈ FF: propset syntactic
Γ, Γ': syntacticfact F → Γ' ∈ F → (∀ (Δ : list iformula) (C : iformula), Γ' ++ Δ ⊢cf C → Γ ++ Δ ⊢cf C) → Γ ∈ Fby apply HF, (cl_left _ _ Γ'). Qed.F: propset syntactic
Γ, Γ': syntactic
HF: fact F
HΓ': Γ' ∈ F
Hrule: ∀ (Δ : list iformula) (C : iformula), Γ' ++ Δ ⊢cf C → Γ ++ Δ ⊢cf CΓ ∈ F
Right rules bound a fact from above._ The closure of a set of proofs
of C contains only proofs of C: use the trivial test ([], C).
X: propset syntactic
C: iformulaX ⊆ down C → cl X ⊆ down CX: propset syntactic
C: iformulaX ⊆ down C → cl X ⊆ down CX: propset syntactic
C: iformula
HX: X ⊆ down C
Γ: syntactic
HΓ: Γ ∈ cl XΓ ∈ down CX: propset syntactic
C: iformula
HX: X ⊆ down C
Γ: syntactic
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : syntactic, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf CΓ ∈ down CX: propset syntactic
C: iformula
HX: X ⊆ down C
Γ: syntactic
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : syntactic, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf CΓ ++ [] ⊢cf CX: propset syntactic
C: iformula
HX: X ⊆ down C
Γ: syntactic
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : syntactic, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C∀ x : syntactic, x ∈ X → x ++ [] ⊢cf CX: propset syntactic
C: iformula
HX: X ⊆ down C
Γ: syntactic
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : syntactic, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
x: syntactic
Hx: x ∈ Xx ++ [] ⊢cf Cby apply elem_of_down, HX. Qed.X: propset syntactic
C: iformula
HX: X ⊆ down C
Γ: syntactic
HΓ: ∀ (Δ : list iformula) (C : iformula), (∀ x : syntactic, x ∈ X → x ++ Δ ⊢cf C) → Γ ++ Δ ⊢cf C
x: syntactic
Hx: x ∈ Xx ⊢cf C
Okada's lemma
A: iformula[A] ∈ ⟦A⟧syn_val ∧ ⟦A⟧syn_val ⊆ down AA: iformula[A] ∈ ⟦A⟧syn_val ∧ ⟦A⟧syn_val ⊆ down Ap: nat[$p] ∈ cl (syn_val p) ∧ cl (syn_val p) ⊆ down $p[𝟙] ∈ ph_one ∧ ph_one ⊆ down 𝟙[⊥] ∈ cl ph_bot ∧ cl ph_bot ⊆ down ⊥[⊤] ∈ ph_top ∧ ph_top ⊆ down ⊤[𝟘] ∈ ph_zero ∧ ph_zero ⊆ down 𝟘A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A ⊗ B] ∈ ph_tensor ⟦A⟧syn_val ⟦B⟧syn_val ∧ ph_tensor ⟦A⟧syn_val ⟦B⟧syn_val ⊆ down (A ⊗ B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A ⊸ B] ∈ ph_lolli ⟦A⟧syn_val ⟦B⟧syn_val ∧ ph_lolli ⟦A⟧syn_val ⟦B⟧syn_val ⊆ down (A ⊸ B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A & B] ∈ ⟦A⟧syn_val ∩ ⟦B⟧syn_val ∧ ⟦A⟧syn_val ∩ ⟦B⟧syn_val ⊆ down (A & B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A ⊕ B] ∈ ph_plus ⟦A⟧syn_val ⟦B⟧syn_val ∧ ph_plus ⟦A⟧syn_val ⟦B⟧syn_val ⊆ down (A ⊕ B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down A[!A] ∈ ph_bang ⟦A⟧syn_val ∧ ph_bang ⟦A⟧syn_val ⊆ down (!A)p: nat[$p] ∈ cl (syn_val p) ∧ cl (syn_val p) ⊆ down $papply ph_cl_ext, elem_of_down, ax.p: nat[$p] ∈ cl (syn_val p)[𝟙] ∈ ph_one ∧ ph_one ⊆ down 𝟙[𝟙] ∈ ph_oneph_one ⊆ down 𝟙apply (cl_left _ _ []); [by apply elem_of_one | intros; by apply oneL].[𝟙] ∈ ph_oneph_one ⊆ down 𝟙one_set ⊆ down 𝟙x: syntactic
Hx: x ≡ εx ∈ down 𝟙x: syntactic
Hx: x ≡ εx ⊢cf 𝟙x: list iformula
Hx: x ≡ []x ⊢cf 𝟙apply oneR.[] ⊢cf 𝟙[⊥] ∈ cl ph_bot ∧ cl ph_bot ⊆ down ⊥[⊥] ∈ cl ph_bot[⊥] ∈ ph_botapply ax.[⊥] ⊢cf ⊥[⊤] ∈ ph_top ∧ ph_top ⊆ down ⊤ph_top ⊆ down ⊤apply elem_of_down, topR.x: syntacticx ∈ down ⊤[𝟘] ∈ ph_zero ∧ ph_zero ⊆ down 𝟘[𝟘] ∈ ph_zero∀ (Δ : list iformula) (C : iformula), (∀ x : syntactic, x ∈ ∅ → x ++ Δ ⊢cf C) → [𝟘] ++ Δ ⊢cf Capply zeroL.Δ: list iformula
C: iformula[𝟘] ++ Δ ⊢cf CA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A ⊗ B] ∈ ph_tensor ⟦A⟧syn_val ⟦B⟧syn_val ∧ ph_tensor ⟦A⟧syn_val ⟦B⟧syn_val ⊆ down (A ⊗ B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A ⊗ B] ∈ ph_tensor ⟦A⟧syn_val ⟦B⟧syn_valA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down Bph_tensor ⟦A⟧syn_val ⟦B⟧syn_val ⊆ down (A ⊗ B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A ⊗ B] ∈ ph_tensor ⟦A⟧syn_val ⟦B⟧syn_valA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A; B] ∈ ⟦A⟧syn_val ⊙ ⟦B⟧syn_valby exists [A], [B].A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B∃ a b : syntactic, a ∈ ⟦A⟧syn_val ∧ b ∈ ⟦B⟧syn_val ∧ [A; B] ≡ a · bA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down Bph_tensor ⟦A⟧syn_val ⟦B⟧syn_val ⊆ down (A ⊗ B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B⟦A⟧syn_val ⊙ ⟦B⟧syn_val ⊆ down (A ⊗ B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B
x, a, b: syntactic
Ha: a ∈ down A
Hb: b ∈ down B
Hx: x ≡ a · bx ∈ down (A ⊗ B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B
x, a, b: syntactic
Ha: a ∈ down A
Hb: b ∈ down B
Hx: x ≡ a · bx ⊢cf A ⊗ Bapply tensorR; by apply elem_of_down.A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B
x, a, b: syntactic
Ha: a ∈ down A
Hb: b ∈ down B
Hx: x ≡ a · ba ++ b ⊢cf A ⊗ BA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A ⊸ B] ∈ ph_lolli ⟦A⟧syn_val ⟦B⟧syn_val ∧ ph_lolli ⟦A⟧syn_val ⟦B⟧syn_val ⊆ down (A ⊸ B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A ⊸ B] ∈ ph_lolli ⟦A⟧syn_val ⟦B⟧syn_valA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down Bph_lolli ⟦A⟧syn_val ⟦B⟧syn_val ⊆ down (A ⊸ B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A ⊸ B] ∈ ph_lolli ⟦A⟧syn_val ⟦B⟧syn_valA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B∀ a : syntactic, a ∈ ⟦A⟧syn_val → [A ⊸ B] · a ∈ ⟦B⟧syn_valA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B
a: syntactic
Ha: a ⊢cf A[A ⊸ B] · a ∈ ⟦B⟧syn_valA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B
a: syntactic
Ha: a ⊢cf A∀ (Δ : list iformula) (C : iformula), [B] ++ Δ ⊢cf C → [A ⊸ B] · a ++ Δ ⊢cf Cby apply lolliL.A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B
a: syntactic
Ha: a ⊢cf A
Δ: list iformula
C: iformula
H: [B] ++ Δ ⊢cf C[A ⊸ B] · a ++ Δ ⊢cf CA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down Bph_lolli ⟦A⟧syn_val ⟦B⟧syn_val ⊆ down (A ⊸ B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B
f: syntactic
Hf: f ∈ ph_lolli ⟦A⟧syn_val ⟦B⟧syn_valf ∈ down (A ⊸ B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B
f: syntactic
Hf: ∀ a : syntactic, a ∈ ⟦A⟧syn_val → f · a ∈ ⟦B⟧syn_valf ∈ down (A ⊸ B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B
f: syntactic
Hf: ∀ a : syntactic, a ∈ ⟦A⟧syn_val → f · a ∈ ⟦B⟧syn_valf ⊢cf A ⊸ BA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B
f: syntactic
Hf: ∀ a : syntactic, a ∈ ⟦A⟧syn_val → f · a ∈ ⟦B⟧syn_valA :: f ⊢cf Bby apply elem_of_down, HB2, Hf.A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B
f: syntactic
Hf: ∀ a : syntactic, a ∈ ⟦A⟧syn_val → f · a ∈ ⟦B⟧syn_valf ++ [A] ⊢cf BA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A & B] ∈ ⟦A⟧syn_val ∩ ⟦B⟧syn_val ∧ ⟦A⟧syn_val ∩ ⟦B⟧syn_val ⊆ down (A & B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A & B] ∈ ⟦A⟧syn_val ∩ ⟦B⟧syn_valA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B⟦A⟧syn_val ∩ ⟦B⟧syn_val ⊆ down (A & B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A & B] ∈ ⟦A⟧syn_val ∩ ⟦B⟧syn_valA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A & B] ∈ ⟦A⟧syn_val ∧ [A & B] ∈ ⟦B⟧syn_valA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A & B] ∈ ⟦A⟧syn_valA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A & B] ∈ ⟦B⟧syn_valA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A & B] ∈ ⟦A⟧syn_valintros; by apply withL1.A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B∀ (Δ : list iformula) (C : iformula), [A] ++ Δ ⊢cf C → [A & B] ++ Δ ⊢cf CA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A & B] ∈ ⟦B⟧syn_valintros; by apply withL2.A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B∀ (Δ : list iformula) (C : iformula), [B] ++ Δ ⊢cf C → [A & B] ++ Δ ⊢cf CA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B⟦A⟧syn_val ∩ ⟦B⟧syn_val ⊆ down (A & B)apply elem_of_down, withR; by apply elem_of_down.A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B
x: syntactic
Ha: x ∈ down A
Hb: x ∈ down Bx ∈ down (A & B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A ⊕ B] ∈ ph_plus ⟦A⟧syn_val ⟦B⟧syn_val ∧ ph_plus ⟦A⟧syn_val ⟦B⟧syn_val ⊆ down (A ⊕ B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A ⊕ B] ∈ ph_plus ⟦A⟧syn_val ⟦B⟧syn_valA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down Bph_plus ⟦A⟧syn_val ⟦B⟧syn_val ⊆ down (A ⊕ B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B[A ⊕ B] ∈ ph_plus ⟦A⟧syn_val ⟦B⟧syn_valA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B∀ (Δ : list iformula) (C : iformula), (∀ x : syntactic, x ∈ ⟦A⟧syn_val ∪ ⟦B⟧syn_val → x ++ Δ ⊢cf C) → [A ⊕ B] ++ Δ ⊢cf Capply plusL; [apply (H [A]) | apply (H [B])]; set_solver.A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B
Δ: list iformula
C: iformula
H: ∀ x : syntactic, x ∈ ⟦A⟧syn_val ∪ ⟦B⟧syn_val → x ++ Δ ⊢cf C[A ⊕ B] ++ Δ ⊢cf CA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down Bph_plus ⟦A⟧syn_val ⟦B⟧syn_val ⊆ down (A ⊕ B)intros x [Hx%HA2 | Hx%HB2]%elem_of_union; apply elem_of_down; [apply plusR1 | apply plusR2]; by apply elem_of_down.A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
B: iformula
HA2: ⟦A⟧syn_val ⊆ down A
HB1: [B] ∈ ⟦B⟧syn_val
HB2: ⟦B⟧syn_val ⊆ down B⟦A⟧syn_val ∪ ⟦B⟧syn_val ⊆ down (A ⊕ B)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down A[!A] ∈ ph_bang ⟦A⟧syn_val ∧ ph_bang ⟦A⟧syn_val ⊆ down (!A)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down A[!A] ∈ ph_bang ⟦A⟧syn_valA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down Aph_bang ⟦A⟧syn_val ⊆ down (!A)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down A[!A] ∈ ph_bang ⟦A⟧syn_valA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down A[!A] ∈ ⟦A⟧syn_val ∧ [!A] ∈ JA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down A[!A] ∈ ⟦A⟧syn_valA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down A[!A] ∈ JA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down A[!A] ∈ ⟦A⟧syn_valintros; by apply bangD.A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down A∀ (Δ : list iformula) (C : iformula), [A] ++ Δ ⊢cf C → [!A] ++ Δ ⊢cf CA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down A[!A] ∈ JA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down A[!A] ∈ {[ Γ | ∃ Σ : list iformula, Γ = ‼Σ ]}by exists [A].A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ∀ x : list iformula, x ∈ ⟦A⟧syn_val → x ⊢cf A∃ x : list iformula, [!A] = ‼xA: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down Aph_bang ⟦A⟧syn_val ⊆ down (!A)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down A⟦A⟧syn_val ∩ J ⊆ down (!A)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down A
x: syntactic
Hx: x ∈ down A
HJ: x ∈ Jx ∈ down (!A)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down A
x: list iformula
Hx: x ∈ down A
HJ: x ∈ {[ Γ | ∃ Σ : list iformula, Γ = ‼Σ ]}x ∈ down (!A)A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down A
x: list iformula
Hx: x ∈ down A
HJ: ∃ x0 : list iformula, (λ x1 : list iformula, x = ‼x1) x0x ∈ down (!A)apply elem_of_down, bangR, elem_of_down, Hx. Qed.A: iformula
HA1: [A] ∈ ⟦A⟧syn_val
HA2: ⟦A⟧syn_val ⊆ down A
Σ: list iformula
Hx: ‼Σ ∈ down A‼Σ ∈ down (!A)
In the syntactic model, every context Γ is a bag for itself.
Γ: list iformulaΓ ∈ ⦅Γ⦆syn_valΓ: list iformulaΓ ∈ ⦅Γ⦆syn_val[] ∈ one_setA: iformula
Γ: list iformula
IH: Γ ∈ ⦅Γ⦆syn_valA :: Γ ∈ ⟦A⟧syn_val ⊙ ⦅Γ⦆syn_valby apply elem_of_one.[] ∈ one_setA: iformula
Γ: list iformula
IH: Γ ∈ ⦅Γ⦆syn_valA :: Γ ∈ ⟦A⟧syn_val ⊙ ⦅Γ⦆syn_valA: iformula
Γ: list iformula
IH: Γ ∈ ⦅Γ⦆syn_val∃ a b : syntactic, a ∈ ⟦A⟧syn_val ∧ b ∈ ⦅Γ⦆syn_val ∧ A :: Γ ≡ a · bsplit_and!; [apply okada | done | done]. Qed.A: iformula
Γ: list iformula
IH: Γ ∈ ⦅Γ⦆syn_val[A] ∈ ⟦A⟧syn_val ∧ Γ ∈ ⦅Γ⦆syn_val ∧ A :: Γ ≡ [A] · Γ
Completeness: a valid sequent has a cut-free proof.
Γ: list iformula
A: iformulaΓ ⊨ A → Γ ⊢cf AΓ: list iformula
A: iformulaΓ ⊨ A → Γ ⊢cf Aapply elem_of_down, (proj2 (okada A)), (H syntactic syn_val), ctx_self. Qed.Γ: list iformula
A: iformula
H: Γ ⊨ AΓ ⊢cf A
Cut elimination: every proof can be replaced by a cut-free one.
Γ: list iformula
A: iformulaΓ ⊢ A → Γ ⊢cf AΓ: list iformula
A: iformulaΓ ⊢ A → Γ ⊢cf Aby apply completeness, (soundness true). Qed.Γ: list iformula
A: iformula
H: Γ ⊢ AΓ ⊢cf A
As a consequence, cut is admissible in the cut-free calculus:
adding it as a rule proves nothing new.
Γ, Δ: list iformula
A, C: iformulaΓ ⊢cf A → A :: Δ ⊢cf C → Γ ++ Δ ⊢cf CΓ, Δ: list iformula
A, C: iformulaΓ ⊢cf A → A :: Δ ⊢cf C → Γ ++ Δ ⊢cf Capply cut_elimination, (cut _ _ _ A); [done | |]; by apply cf_to_full. Qed.Γ, Δ: list iformula
A, C: iformula
H1: Γ ⊢cf A
H2: A :: Δ ⊢cf CΓ ++ Δ ⊢cf C
All three notions coincide.
Γ: list iformula
A: iformula(Γ ⊢ A ↔ Γ ⊨ A) ∧ (Γ ⊨ A ↔ Γ ⊢cf A)Γ: list iformula
A: iformula(Γ ⊢ A ↔ Γ ⊨ A) ∧ (Γ ⊨ A ↔ Γ ⊢cf A)Γ: list iformula
A: iformulaΓ ⊢ A → Γ ⊨ AΓ: list iformula
A: iformulaΓ ⊨ A → Γ ⊢ AΓ: list iformula
A: iformulaΓ ⊨ A → Γ ⊢cf AΓ: list iformula
A: iformulaΓ ⊢cf A → Γ ⊨ Aapply soundness.Γ: list iformula
A: iformulaΓ ⊢ A → Γ ⊨ AΓ: list iformula
A: iformulaΓ ⊨ A → Γ ⊢ Aby apply cf_to_full, completeness.Γ: list iformula
A: iformula
H: Γ ⊨ AΓ ⊢ Aapply completeness.Γ: list iformula
A: iformulaΓ ⊨ A → Γ ⊢cf Aapply soundness. Qed.Γ: list iformula
A: iformulaΓ ⊢cf A → Γ ⊨ A