{-# OPTIONS --rewriting #-}

module A201801.SequentCalculusDraft2b where

open import A201801.Prelude
open import A201801.Category
open import A201801.List
open import A201801.ListLemmas
open import A201801.AllList
open import A201801.FullIPLPropositions
open import A201801.FullIPLDerivations hiding (cut)
open import A201801.SequentCalculusDraftSquasha


--------------------------------------------------------------------------------


-- Sequent calculus

infix 3 _⟹_
data _⟹_ : [List] Form → Form → Set
  where
    ⊃R : ∀ {A B Γ} → Γ [,] A ⟹ B
                   → Γ ⟹ A ⊃ B

    ∧R : ∀ {A B Γ} → Γ ⟹ A → Γ ⟹ B
                   → Γ ⟹ A ∧ B

    𝟏R : ∀ {Γ} → Γ ⟹ 𝟏

    ∨R₁ : ∀ {A B Γ} → Γ ⟹ A
                    → Γ ⟹ A ∨ B

    ∨R₂ : ∀ {A B Γ} → Γ ⟹ B
                    → Γ ⟹ A ∨ B

    vzₛ : ∀ {A Γ} → Γ [,] A ⟹ A

    ⊃L : ∀ {A B C Γ} → Γ [,] A ⊃ B ⟹ A → Γ [,] A ⊃ B [,] B ⟹ C
                     → Γ [,] A ⊃ B ⟹ C

    ∧L₁ : ∀ {A B C Γ} → Γ [,] A ∧ B [,] A ⟹ C
                      → Γ [,] A ∧ B ⟹ C

    ∧L₂ : ∀ {A B C Γ} → Γ [,] A ∧ B [,] B ⟹ C
                      → Γ [,] A ∧ B ⟹ C

    𝟎L : ∀ {A Γ} → Γ [,] 𝟎 ⟹ A

    ∨L : ∀ {A B C Γ} → Γ [,] A ∨ B [,] A ⟹ C → Γ [,] A ∨ B [,] B ⟹ C
                     → Γ [,] A ∨ B ⟹ C

infix 3 _⟹_all
_⟹_all : [List] Form → List Form → Set
Γ ⟹ Ξ all = All (Γ ⟹_) Ξ


-- Theorem 3.6 (Soundness of sequent calculus with respect to normal deduction)

thm36 : ∀ {Γ A} → squash Γ ⟹ A
                → squash Γ ⊢ A normal
thm36 {Γ} (⊃R 𝒟)           = lam (thm36 {Γ} 𝒟)
thm36 {Γ} (∧R 𝒟 ℰ)         = pair (thm36 {Γ} 𝒟) (thm36 {Γ} ℰ)
thm36 {Γ} 𝟏R               = unit
thm36 {Γ} (∨R₁ 𝒟)          = inl (thm36 {Γ} 𝒟)
thm36 {Γ} (∨R₂ 𝒟)          = inr (thm36 {Γ} 𝒟)
thm36 {Γ} vzₛ              = vzₙₘ {squash Γ}
thm36 {Γ} (⊃L {B = B} 𝒟 ℰ) = cutₙₘ {Γ} {B} (app (vzₙₜ {squash Γ}) (thm36 {Γ} 𝒟)) (thm36 {Γ} ℰ)
thm36 {Γ} (∧L₁ {B = B} 𝒟)  = cutₙₘ {Γ} {B} (fst {B = B} (vzₙₜ {squash Γ})) (thm36 {Γ} 𝒟)
thm36 {Γ} (∧L₂ {A} 𝒟)      = cutₙₘ {Γ} {A} (snd {A = A} (vzₙₜ {squash Γ})) (thm36 {Γ} 𝒟)
thm36 {Γ} 𝟎L               = abort (vzₙₜ {squash Γ})
thm36 {Γ} (∨L {A} {B} 𝒟 ℰ) = case {A} {B} (vzₙₜ {squash Γ}) (thm36 {Γ} 𝒟) (thm36 {Γ} ℰ)


-- Corollary ??? (Soundness of sequent calculus with respect to natural deduction)

cor36′ : ∀ {Γ A} → squash Γ ⟹ A
                 → Γ ⊢ A true
cor36′ {Γ} 𝒟 = thm31ₙₘ (thm36 {Γ} 𝒟)


-- Lemma 3.7 (Structural properties of sequent calculus)

-- wkₛ : ∀ {B Γ A} → Γ ⟹ A
--                 → Γ [,] B ⟹ A
-- wkₛ 𝒟 = 𝒟
--
-- exₛ : ∀ {Γ A B C} → Γ [,] A [,] B ⟹ C
--                   → Γ [,] B [,] A ⟹ C
-- exₛ 𝒟 = 𝒟
--
-- ctₛ : ∀ {Γ A B} → Γ [,] A [,] A ⟹ B
--                 → Γ [,] A ⟹ B
-- ctₛ 𝒟 = 𝒟

varₛ : ∀ {Γ A} → Γ [∋] A
               → Γ ⟹ A
varₛ {Γ} zero    = vzₛ {Γ = Γ}
varₛ     (suc i) = varₛ i

liftsₛ : ∀ {Γ Ξ A} → Γ ⟹ Ξ all
                   → Γ [,] A ⟹ Ξ , A all
liftsₛ {Γ} ξ = ξ , vzₛ {Γ = Γ}

idsₛ : ∀ {Γ} → squash Γ ⟹ Γ all
idsₛ {∙}     = ∙
idsₛ {Γ , A} = liftsₛ idsₛ


-- Theorem 3.8 (Completeness of sequent calculus with respect to normal/neutral deductions)

mutual
  thm38ₙₘ : ∀ {Γ A} → Γ ⊢ A normal
                    → Γ ⟹ A
  thm38ₙₘ     (lam 𝒟)              = ⊃R (thm38ₙₘ 𝒟)
  thm38ₙₘ     (pair 𝒟 ℰ)           = ∧R (thm38ₙₘ 𝒟) (thm38ₙₘ ℰ)
  thm38ₙₘ     unit                 = 𝟏R
  thm38ₙₘ {Γ} (abort 𝒟)            = thm38ₙₜ 𝒟 (𝟎L {Γ = Γ})
  thm38ₙₘ     (inl 𝒟)              = ∨R₁ (thm38ₙₘ 𝒟)
  thm38ₙₘ     (inr 𝒟)              = ∨R₂ (thm38ₙₘ 𝒟)
  thm38ₙₘ {Γ} (case {A} {B} 𝒟 ℰ ℱ) = thm38ₙₜ 𝒟 (∨L {A} {B} {Γ = Γ} (thm38ₙₘ ℰ) (thm38ₙₘ ℱ))
  thm38ₙₘ {Γ} (ent 𝒟)              = thm38ₙₜ 𝒟 (vzₛ {Γ = Γ})

  thm38ₙₜ : ∀ {Γ A B} → Γ ⊢ A neutral → Γ [,] A ⟹ B
                      → Γ ⟹ B
  thm38ₙₜ     (var i)             ℰ = ℰ
  thm38ₙₜ {Γ} (app {B = B} 𝒟₁ 𝒟₂) ℰ = thm38ₙₜ 𝒟₁ (⊃L {B = B} {Γ = Γ} (thm38ₙₘ 𝒟₂) ℰ)
  thm38ₙₜ {Γ} (fst {A} {B} 𝒟)     ℰ = thm38ₙₜ 𝒟 (∧L₁ {A} {B} {Γ = Γ} ℰ)
  thm38ₙₜ {Γ} (snd {A} {B} 𝒟)     ℰ = thm38ₙₜ 𝒟 (∧L₂ {A} {B} {Γ = Γ} ℰ)


--------------------------------------------------------------------------------


-- Sequent calculus with cut

infix 3 _⟹₊_
data _⟹₊_ : [List] Form → Form → Set
  where
    ⊃R : ∀ {A B Γ} → Γ [,] A ⟹₊ B
                   → Γ ⟹₊ A ⊃ B

    ∧R : ∀ {A B Γ} → Γ ⟹₊ A → Γ ⟹₊ B
                   → Γ ⟹₊ A ∧ B

    𝟏R : ∀ {Γ} → Γ ⟹₊ 𝟏

    ∨R₁ : ∀ {A B Γ} → Γ ⟹₊ A
                    → Γ ⟹₊ A ∨ B

    ∨R₂ : ∀ {A B Γ} → Γ ⟹₊ B
                    → Γ ⟹₊ A ∨ B

    vzₛ₊ : ∀ {A Γ} → Γ [,] A ⟹₊ A

    ⊃L : ∀ {A B C Γ} → Γ [,] A ⊃ B ⟹₊ A → Γ [,] A ⊃ B [,] B ⟹₊ C
                     → Γ [,] A ⊃ B ⟹₊ C

    ∧L₁ : ∀ {A B C Γ} → Γ [,] A ∧ B [,] A ⟹₊ C
                      → Γ [,] A ∧ B ⟹₊ C

    ∧L₂ : ∀ {A B C Γ} → Γ [,] A ∧ B [,] B ⟹₊ C
                      → Γ [,] A ∧ B ⟹₊ C

    𝟎L : ∀ {A Γ} → Γ [,] 𝟎 ⟹₊ A

    ∨L : ∀ {A B C Γ} → Γ [,] A ∨ B [,] A ⟹₊ C → Γ [,] A ∨ B [,] B ⟹₊ C
                     → Γ [,] A ∨ B ⟹₊ C

    cut : ∀ {A B Γ} → Γ ⟹₊ A → Γ [,] A ⟹₊ B
                    → Γ ⟹₊ B

infix 3 _⟹₊_all
_⟹₊_all : [List] Form → List Form → Set
Γ ⟹₊ Ξ all = All (Γ ⟹₊_) Ξ


-- Theorem 3.9 (Soundness of sequent calculus with cut with respect to annotated normal deduction)

thm39 : ∀ {Γ A} → squash Γ ⟹₊ A
                → squash Γ ⊢₊ A normal
thm39 {Γ} (⊃R 𝒟)           = lam (thm39 {Γ} 𝒟)
thm39 {Γ} (∧R 𝒟 ℰ)         = pair (thm39 {Γ} 𝒟) (thm39 {Γ} ℰ)
thm39 {Γ} 𝟏R               = unit
thm39 {Γ} (∨R₁ 𝒟)          = inl (thm39 {Γ} 𝒟)
thm39 {Γ} (∨R₂ 𝒟)          = inr (thm39 {Γ} 𝒟)
thm39 {Γ} vzₛ₊             = vzₙₘ₊ {squash Γ}
thm39 {Γ} (⊃L {B = B} 𝒟 ℰ) = cutₙₘ₊ {Γ} {B} (app (vzₙₜ₊ {squash Γ}) (thm39 {Γ} 𝒟)) (thm39 {Γ} ℰ)
thm39 {Γ} (∧L₁ {B = B} 𝒟)  = cutₙₘ₊ {Γ} {B} (fst {B = B} (vzₙₜ₊ {squash Γ})) (thm39 {Γ} 𝒟)
thm39 {Γ} (∧L₂ {A} 𝒟)      = cutₙₘ₊ {Γ} {A} (snd {A = A} (vzₙₜ₊ {squash Γ})) (thm39 {Γ} 𝒟)
thm39 {Γ} 𝟎L               = abort (vzₙₜ₊ {squash Γ})
thm39 {Γ} (∨L {A} {B} 𝒟 ℰ) = case {A} {B} (vzₙₜ₊ {squash Γ}) (thm39 {Γ} 𝒟) (thm39 {Γ} ℰ)
thm39 {Γ} (cut 𝒟 ℰ)        = cutₙₘ₊ {Γ = Γ} (enm (thm39 {Γ} 𝒟)) (thm39 {Γ} ℰ)


-- Lemma ??? (Structural properties of sequent calculus with cut)

varₛ₊ : ∀ {Γ A} → Γ [∋] A
                → Γ ⟹₊ A
varₛ₊ {Γ} zero    = vzₛ₊ {Γ = Γ}
varₛ₊     (suc i) = varₛ₊ i

liftsₛ₊ : ∀ {Γ Ξ A} → Γ ⟹₊ Ξ all
                    → Γ [,] A ⟹₊ Ξ , A all
liftsₛ₊ {Γ} ξ = ξ , vzₛ₊ {Γ = Γ}

idsₛ₊ : ∀ {Γ} → squash Γ ⟹₊ Γ all
idsₛ₊ {∙}     = ∙
idsₛ₊ {Γ , A} = liftsₛ₊ idsₛ₊


-- Theorem 3.10 (Completeness of sequent calculus with cut with respect to normal/neutral deductions)

mutual
  thm310ₙₘ : ∀ {Γ A} → Γ ⊢₊ A normal
                     → Γ ⟹₊ A
  thm310ₙₘ     (lam 𝒟)              = ⊃R (thm310ₙₘ 𝒟)
  thm310ₙₘ     (pair 𝒟 ℰ)           = ∧R (thm310ₙₘ 𝒟) (thm310ₙₘ ℰ)
  thm310ₙₘ     unit                 = 𝟏R
  thm310ₙₘ {Γ} (abort 𝒟)            = thm310ₙₜ 𝒟 (𝟎L {Γ = Γ})
  thm310ₙₘ     (inl 𝒟)              = ∨R₁ (thm310ₙₘ 𝒟)
  thm310ₙₘ     (inr 𝒟)              = ∨R₂ (thm310ₙₘ 𝒟)
  thm310ₙₘ {Γ} (case {A} {B} 𝒟 ℰ ℱ) = thm310ₙₜ 𝒟 (∨L {A} {B} {Γ = Γ} (thm310ₙₘ ℰ) (thm310ₙₘ ℱ))
  thm310ₙₘ {Γ} (ent 𝒟)              = thm310ₙₜ 𝒟 (vzₛ₊ {Γ = Γ})

  thm310ₙₜ : ∀ {Γ A B} → Γ ⊢₊ A neutral → Γ [,] A ⟹₊ B
                       → Γ ⟹₊ B
  thm310ₙₜ     (var i)             ℰ = ℰ
  thm310ₙₜ {Γ} (app {B = B} 𝒟₁ 𝒟₂) ℰ = thm310ₙₜ 𝒟₁ (⊃L {B = B} {Γ = Γ} (thm310ₙₘ 𝒟₂) ℰ)
  thm310ₙₜ {Γ} (fst {A} {B} 𝒟)     ℰ = thm310ₙₜ 𝒟 (∧L₁ {A} {B} {Γ = Γ} ℰ)
  thm310ₙₜ {Γ} (snd {A} {B} 𝒟)     ℰ = thm310ₙₜ 𝒟 (∧L₂ {A} {B} {Γ = Γ} ℰ)
  thm310ₙₜ {Γ} (enm 𝒟)             ℰ = cut (thm310ₙₘ 𝒟) ℰ


--------------------------------------------------------------------------------


-- TODO: unfinished
-- -- Theorem 3.11 (Admissibility of cut)

-- thm311 : ∀ {Γ A C} → Γ ⟹ A → Γ [,] A ⟹ C
--                    → Γ ⟹ C

-- -- Case: A is not the principal formula of the last inference in ℰ.
-- -- In this case, we appeal to the induction hypothesis on the
-- -- subderivations of ℰ and directly infer the conclusion from the results.
-- thm311 𝒟 (⊃R ℰ)     = ⊃R (thm311 𝒟 ℰ)
-- thm311 𝒟 (∧R ℰ₁ ℰ₂) = ∧R (thm311 𝒟 ℰ₁) (thm311 𝒟 ℰ₂)
-- thm311 𝒟 𝟏R         = 𝟏R
-- thm311 𝒟 (∨R₁ ℰ)    = ∨R₁ (thm311 𝒟 ℰ)
-- thm311 𝒟 (∨R₂ ℰ)    = ∨R₂ (thm311 𝒟 ℰ)

-- -- Case: ℰ is an initial sequent using the cut formula
-- -- Case: ℰ is an initial sequent not using the cut formula
-- -- TODO: ???
-- thm311 𝒟 vzₛ = {!𝒟!}

-- -- Case: 𝒟 is an initial sequent
-- thm311 vzₛ ℰ = ℰ

-- -- Case: A is not the principal formula of the last inference in 𝒟.
-- -- In that case 𝒟 must end in a left rule and we can appeal to the
-- -- induction hypothesis on one of its premises.
-- thm311 {Γ} (⊃L {B = B} 𝒟₁ 𝒟₂) ℰ = ⊃L {B = B} {Γ = Γ} 𝒟₁ (thm311 𝒟₂ ℰ)
-- thm311 {Γ} (∧L₁ {A} {B} 𝒟)    ℰ = ∧L₁ {A} {B} {Γ = Γ} (thm311 𝒟 ℰ)
-- thm311 {Γ} (∧L₂ {A} {B} 𝒟)    ℰ = ∧L₂ {A} {B} {Γ = Γ} (thm311 𝒟 ℰ)
-- thm311 {Γ} 𝟎L                 ℰ = 𝟎L {Γ = Γ}
-- thm311 {Γ} (∨L {A} {B} 𝒟₁ 𝒟₂) ℰ = ∨L {A} {B} {Γ = Γ} (thm311 𝒟₁ ℰ) (thm311 𝒟₂ ℰ)

-- -- Case: A is the principal formula of the final inference in both
-- -- 𝒟 and ℰ.  There are a number of subcases to consider, based on the
-- -- last inference in 𝒟 and ℰ.
-- thm311 {Γ} 𝒟 (⊃L {B = B} ℰ₁ ℰ₂) = ⊃L {B = B} {Γ = Γ} (thm311 𝒟 ℰ₁) (thm311 𝒟 ℰ₂)
-- thm311 {Γ} 𝒟 (∧L₁ {A} {B} ℰ)    = ∧L₁ {A} {B} {Γ = Γ} (thm311 𝒟 ℰ)
-- thm311 {Γ} 𝒟 (∧L₂ {A} {B} ℰ)    = ∧L₂ {A} {B} {Γ = Γ} (thm311 𝒟 ℰ)
-- thm311 {Γ} 𝒟 𝟎L                 = 𝟎L {Γ = Γ}
-- thm311 {Γ} 𝒟 (∨L {A} {B} ℰ₁ ℰ₂) = ∨L {A} {B} {Γ = Γ} (thm311 𝒟 ℰ₁) (thm311 𝒟 ℰ₂)


-- --------------------------------------------------------------------------------


-- -- Theorem 3.12 (Cut elimination)

-- thm312 : ∀ {Γ A} → Γ ⟹₊ A
--                  → Γ ⟹ A
-- thm312     (⊃R 𝒟)           = ⊃R (thm312 𝒟)
-- thm312     (∧R 𝒟 ℰ)         = ∧R (thm312 𝒟) (thm312 ℰ)
-- thm312     𝟏R               = 𝟏R
-- thm312     (∨R₁ 𝒟)          = ∨R₁ (thm312 𝒟)
-- thm312     (∨R₂ 𝒟)          = ∨R₂ (thm312 𝒟)
-- thm312 {Γ} vzₛ₊             = vzₛ {Γ = Γ}
-- thm312 {Γ} (⊃L {B = B} 𝒟 ℰ) = ⊃L {B = B} {Γ = Γ} (thm312 𝒟) (thm312 ℰ)
-- thm312 {Γ} (∧L₁ {A} {B} 𝒟)  = ∧L₁ {A} {B} {Γ = Γ}(thm312 𝒟)
-- thm312 {Γ} (∧L₂ {A} {B} 𝒟)  = ∧L₂ {A} {B} {Γ = Γ}(thm312 𝒟)
-- thm312 {Γ} 𝟎L               = 𝟎L {Γ = Γ}
-- thm312 {Γ} (∨L {A} {B} 𝒟 ℰ) = ∨L {A} {B} {Γ = Γ} (thm312 𝒟) (thm312 ℰ)
-- thm312     (cut 𝒟 ℰ)        = thm311 (thm312 𝒟) (thm312 ℰ)


-- -- Corollary ??? (Completeness of sequent calculus with respect to natural deduction)

-- cor312′ : ∀ {Γ A} → Γ ⊢ A true
--                   → squash Γ ⟹ A
-- cor312′ 𝒟 = thm312 (thm310ₙₘ (thm33ₙₘ 𝒟))


-- -- Theorem 3.13 (Normalisation of natural deduction)

-- thm313 : ∀ {Γ A} → Γ ⊢ A true
--                  → squash Γ ⊢ A normal
-- thm313 {Γ} 𝒟 = thm36 {Γ} (cor312′ 𝒟)


-- -- Corollary 3.14 (Consistency of natural deduction)

-- -- TODO: ???

-- postulate
--   cor314 : ¬ (∙ ⊢ 𝟎 true)
-- -- cor314 𝒟 with cor312′ 𝒟
-- -- cor314 𝒟 | vzₛ      = {!!}
-- -- cor314 𝒟 | ⊃L 𝒟′ ℰ′ = {!!}
-- -- cor314 𝒟 | ∧L₁ 𝒟′   = {!!}
-- -- cor314 𝒟 | ∧L₂ 𝒟′   = {!!}
-- -- cor314 𝒟 | 𝟎L       = {!!}
-- -- cor314 𝒟 | ∨L 𝒟′ ℰ′ = {!!}


-- -- Corollary 3.15 (Disjunction property of natural deduction)

-- -- TODO: Existentials for the existential property! Skulls for the skull throne!

-- -- TODO: ???

-- postulate
--   cor315ₛ : ∀ {A B} → squash ∙ ⟹ A ∨ B
--                     → squash ∙ ⟹ A ⊎ squash ∙ ⟹ B
-- -- cor315ₛ 𝒟 with cor312′ {∙} (cor36′ 𝒟)
-- -- cor315ₛ 𝒟 | ∨R₁ 𝒟′   = inj₁ 𝒟′
-- -- cor315ₛ 𝒟 | ∨R₂ 𝒟′   = inj₂ 𝒟′
-- -- cor315ₛ 𝒟 | vzₛ      = {!!}
-- -- cor315ₛ 𝒟 | ⊃L 𝒟′ ℰ′ = {!!}
-- -- cor315ₛ 𝒟 | ∧L₁ 𝒟′   = {!!}
-- -- cor315ₛ 𝒟 | ∧L₂ 𝒟′   = {!!}
-- -- cor315ₛ 𝒟 | 𝟎L       = {!!}
-- -- cor315ₛ 𝒟 | ∨L 𝒟′ ℰ′ = {!!}

-- cor315 : ∀ {A B} → ∙ ⊢ A ∨ B true
--                  → ∙ ⊢ A true ⊎ ∙ ⊢ B true
-- cor315 𝒟 with cor315ₛ (cor312′ 𝒟)
-- cor315 𝒟 | inj₁ ℰ = inj₁ (cor36′ ℰ)
-- cor315 𝒟 | inj₂ ℰ = inj₂ (cor36′ ℰ)


-- -- Corollary 3.16 (Independence of excluded middle from natural deduction)

-- -- NOTE: Cannot use a schematic metavariable here

-- -- TODO: ???

-- postulate
--   cor316ₛ : ¬ (squash ∙ ⟹ "A" ∨ ~ "A")
-- -- cor316ₛ 𝒟 with cor315ₛ 𝒟
-- -- cor316ₛ 𝒟 | inj₁ vzₛ             = {!!}
-- -- cor316ₛ 𝒟 | inj₁ (⊃L 𝒟′ ℰ′)      = {!!}
-- -- cor316ₛ 𝒟 | inj₁ (∧L₁ 𝒟′)        = {!!}
-- -- cor316ₛ 𝒟 | inj₁ (∧L₂ 𝒟′)        = {!!}
-- -- cor316ₛ 𝒟 | inj₁ 𝟎L              = {!!}
-- -- cor316ₛ 𝒟 | inj₁ (∨L 𝒟′ ℰ′)      = {!!}
-- -- cor316ₛ 𝒟 | inj₂ (⊃R vzₛ)        = {!!}
-- -- cor316ₛ 𝒟 | inj₂ (⊃R (⊃L 𝒟′ ℰ′)) = {!!}
-- -- cor316ₛ 𝒟 | inj₂ (⊃R (∧L₁ 𝒟′))   = {!!}
-- -- cor316ₛ 𝒟 | inj₂ (⊃R (∧L₂ 𝒟′))   = {!!}
-- -- cor316ₛ 𝒟 | inj₂ (⊃R 𝟎L)         = {!!}
-- -- cor316ₛ 𝒟 | inj₂ (⊃R (∨L 𝒟′ ℰ′)) = {!!}
-- -- cor316ₛ 𝒟 | inj₂ vzₛ             = {!!}
-- -- cor316ₛ 𝒟 | inj₂ (⊃L 𝒟′ ℰ′)      = {!!}
-- -- cor316ₛ 𝒟 | inj₂ (∧L₁ 𝒟′)        = {!!}
-- -- cor316ₛ 𝒟 | inj₂ (∧L₂ 𝒟′)        = {!!}
-- -- cor316ₛ 𝒟 | inj₂ 𝟎L              = {!!}
-- -- cor316ₛ 𝒟 | inj₂ (∨L 𝒟′ ℰ′)      = {!!}

-- cor316 : ¬ (∙ ⊢ "A" ∨ ~ "A" true)
-- cor316 𝒟 = cor316ₛ (cor312′ 𝒟)


-- --------------------------------------------------------------------------------