module A201801.IPLStandardDerivationsWithAFriendlyFish where
open import A201801.Prelude
open import A201801.Category
open import A201801.List
open import A201801.ListLemmas
open import A201801.ListConcatenation
open import A201801.AllList
open import A201801.IPLPropositions
data Lost (X : Set) : Set
where
∙ : Lost X
_,_ : X → Lost X → Lost X
infix 4 _∈_
data _∈_ {X} : X → Lost X → Set
where
zero : ∀ {Ξ A} → A ∈ A , Ξ
suc : ∀ {B Ξ A} → A ∈ Ξ
→ A ∈ B , Ξ
infix 3 _⊢_true
data _⊢_true : Lost Form → Form → Set
where
var : ∀ {A Γ} → A ∈ Γ
→ Γ ⊢ A true
lam : ∀ {A B Γ} → A , Γ ⊢ B true
→ Γ ⊢ A ⊃ B true
app : ∀ {A B Γ} → Γ ⊢ A ⊃ B true → Γ ⊢ A true
→ Γ ⊢ B true
_+_ : ∀ {X} → Lost X → Lost X
→ Lost X
Ξ + ∙ = Ξ
Ξ + (A , Ψ) = (A , Ξ) + Ψ
Ren : Lost Form → Lost Form → Set
Ren Γ Γ′ = ∀ {A} → A ∈ Γ → A ∈ Γ′
Sub : Lost Form → Lost Form → Set
Sub Ξ Γ = ∀ {A} → A ∈ Ξ → Γ ⊢ A true
Shub : Lost Form → Lost Form → Set
Shub Ξ Γ = ∀ Ψ → Sub (Ξ + Ψ) (Γ + Ψ)
lift : ∀ {A Γ Ξ} → Shub Ξ Γ → Shub (A , Ξ) (A , Γ)
lift {A} ξ = λ Ψ i → ξ (A , Ψ) i
shub : ∀ {Γ Ξ A} → Shub Ξ Γ → Ξ ⊢ A true
→ Γ ⊢ A true
shub ξ (var i) = ξ ∙ i
shub ξ (lam {A} 𝒟) = lam (shub (lift ξ) 𝒟)
shub ξ (app 𝒟 ℰ) = app (shub ξ 𝒟) (shub ξ ℰ)