{-# OPTIONS --allow-unsolved-metas #-}

module A201801.SequentCalculusDraft2c 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.SequentCalculusDraft
open import A201801.SequentCalculusDraft2a


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


-- {-# TERMINATING #-}
wub :  {Γ Ξ A}  Γ  Ξ all  Ξ  A
                 Γ  A
wub ξ (⊃R )       = ⊃R (wub (liftsₛ ξ) )
wub ξ (∧R ℰ₁ ℰ₂)   = ∧R (wub ξ ℰ₁) (wub ξ ℰ₂)
wub ξ 𝟏R           = 𝟏R
wub ξ (∨R₁ )      = ∨R₁ (wub ξ )
wub ξ (∨R₂ )      = ∨R₂ (wub ξ )
wub ξ (var j)      = get ξ j

wub   = renₛ bot⊒ 

wub (ξ , ⊃R 𝒟)      = {!!}
wub (ξ , ∧R 𝒟₁ 𝒟₂)  = {!!}

wub (ξ , 𝟏R) (⊃L j ℰ₁ ℰ₂) = {!!}
wub (ξ , 𝟏R) (∧L₁ j )    = {!!}
wub (ξ , 𝟏R) (∧L₂ j )    = {!!}
wub (ξ , 𝟏R) (𝟎L j)       = 𝟎L {!j!}
wub (ξ , 𝟏R) (∨L j ℰ₁ ℰ₂) = {!!}

wub (ξ , ∨R₁ 𝒟)     = {!!}
wub (ξ , ∨R₂ 𝒟)     = {!!}

wub (ξ , var i)  = {!!}

wub (ξ , ⊃L i 𝒟₁ 𝒟₂)  = {!!}
wub (ξ , ∧L₁ i 𝒟)  = {!!}
wub (ξ , ∧L₂ i 𝒟)  = {!!}
wub (ξ , 𝟎L i)  = {!!}
wub (ξ , ∨L i 𝒟₁ 𝒟₂)  = {!!}
-- wub ξ (⊃L j ℰ₁ ℰ₂) = {!!}
-- wub ξ (∧L₁ j ℰ)    = {!!}
-- wub ξ (∧L₂ j ℰ)    = {!!}
-- wub ξ (𝟎L j)       = {!!}
-- wub ξ (∨L j ℰ₁ ℰ₂) = {!!}


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


{-# TERMINATING #-}
wut :  {A C Γ}  (i : Γ  A)  Γ - i  A  Γ  C
                 Γ - i  C

wut i 𝒟 (⊃R )     = ⊃R (wut (suc i) (wkₛ 𝒟) )
wut i 𝒟 (∧R ℰ₁ ℰ₂) = ∧R (wut i 𝒟 ℰ₁) (wut i 𝒟 ℰ₂)
wut i 𝒟 𝟏R         = 𝟏R
wut i 𝒟 (∨R₁ )    = ∨R₁ (wut i 𝒟 )
wut i 𝒟 (∨R₂ )    = ∨R₂ (wut i 𝒟 )

wut i 𝒟 (var  k) with i ≟∋ k
wut i 𝒟 (var .i) | same .i   = 𝒟
wut i 𝒟 (var ._) | diff .i k = var k

wut i (var j)  = renₛ (delred⊒ i j) 

wut i (⊃L j 𝒟₁ 𝒟₂)  = ⊃L j 𝒟₁ (wut (suc i) 𝒟₂ (wkₛ ))
wut i (∧L₁ j 𝒟)     = ∧L₁ j (wut (suc i) 𝒟 (wkₛ ))
wut i (∧L₂ j 𝒟)     = ∧L₂ j (wut (suc i) 𝒟 (wkₛ ))
wut i (𝟎L j)        = 𝟎L j
wut i (∨L j 𝒟₁ 𝒟₂)  = ∨L j (wut (suc i) 𝒟₁ (wkₛ )) (wut (suc i) 𝒟₂ (wkₛ ))

wut i 𝒟 (⊃L  k ℰ₁ ℰ₂) with i ≟∋ k
wut i 𝒟 (⊃L .i ℰ₁ ℰ₂) | same .i   = {!!}
wut i 𝒟 (⊃L ._ ℰ₁ ℰ₂) | diff .i k = ⊃L k (wut i 𝒟 ℰ₁) (wut (suc i) (wkₛ 𝒟) ℰ₂)

wut i 𝒟 (∧L₁  k ) with i ≟∋ k
wut i 𝒟 (∧L₁ .i ) | same .i   = {!!}
wut i 𝒟 (∧L₁ ._ ) | diff .i k = ∧L₁ k (wut (suc i) (wkₛ 𝒟) )

wut i 𝒟 (∧L₂  k ) with i ≟∋ k
wut i 𝒟 (∧L₂ .i ) | same .i = {!!}
wut i 𝒟 (∧L₂ ._ ) | diff .i k = ∧L₂ k (wut (suc i) (wkₛ 𝒟) )

wut     i 𝒟 (𝟎L  k) with i ≟∋ k
wut {A} i 𝒟 (𝟎L .i) | same .i   = {!!}
wut     i 𝒟 (𝟎L ._) | diff .i k = 𝟎L k

wut i 𝒟 (∨L  k ℰ₁ ℰ₂) with i ≟∋ k
wut i 𝒟 (∨L .i ℰ₁ ℰ₂) | same .i   = {!!}
wut i 𝒟 (∨L ._ ℰ₁ ℰ₂) | diff .i k = ∨L k (wut (suc i) (wkₛ 𝒟) ℰ₁) (wut (suc i) (wkₛ 𝒟) ℰ₂)


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