{-# OPTIONS --allow-unsolved-metas #-}
module A201602.Try8 where
infixl 3 _∘_ _∘²_ _∘³_
infixl 2 𝜆_ 𝜆²_ 𝜆³_
infixr 1 _⊃_
infixr 0 _⊢_ ⊩_
infixr 0 _⊢_∷_ ⊩_∷_
infixr 0 _⊢_∷_∷_ ⊩_∷_∷_
infixr 0 _⊢_∷_∷_∷_
mutual
data Cx : Set where
∅ : Cx
_,_ : Cx → Ty → Cx
data Ty : Set where
⊥ : Ty
_⊃_ : Ty → Ty → Ty
[_∶_] : (A : Ty) → ∅ ⊢ A → Ty
τ_∷_∷_ : (A : Ty) (t : ∅ ⊢ A) → ∅ ⊢ A ∷ t → Ty
τ_∷_∷_∷_ : (A : Ty) (t : ∅ ⊢ A) (t₂ : ∅ ⊢ A ∷ t) → ∅ ⊢ A ∷ t ∷ t₂ → Ty
data _∈_ : Ty → Cx → Set where
Z : ∀{A Γ} → A ∈ (Γ , A)
S_ : ∀{A B Γ} → A ∈ Γ → A ∈ (Γ , B)
data _⊢_ (Γ : Cx) : Ty → Set where
wk_ : ∀{A} → ∅ ⊢ A
→ Γ ⊢ A
wk′_ : ∀{A t} → ∅ ⊢ A ∷ t
→ Γ ⊢ [ A ∶ t ]
wk″_ : ∀{A t t₂} → ∅ ⊢ A ∷ t ∷ t₂
→ Γ ⊢ (τ A ∷ t ∷ t₂)
𝑣_ : ∀{A} → A ∈ Γ
→ Γ ⊢ A
𝜆_ : ∀{A B} → Γ , A ⊢ B
→ Γ ⊢ A ⊃ B
_∘_ : ∀{A B} → Γ ⊢ A ⊃ B → Γ ⊢ A
→ Γ ⊢ B
!_ : ∀{A} → (u : ∅ ⊢ A)
→ Γ ⊢ [ A ∶ u ]
⇓_ : ∀{A u} → Γ ⊢ A ∷ u
→ Γ ⊢ A
data _⊢_∷_ (Γ : Cx) : (A : Ty) → Γ ⊢ A → Set where
wk_ : ∀{A t} → ∅ ⊢ A ∷ t
→ Γ ⊢ A ∷ wk t
wk′_ : ∀{A t t₂} → ∅ ⊢ A ∷ t ∷ t₂
→ Γ ⊢ [ A ∶ t ] ∷ wk′ t₂
wk″_ : ∀{A t t₂ t₃} → ∅ ⊢ A ∷ t ∷ t₂ ∷ t₃
→ Γ ⊢ (τ A ∷ t ∷ t₂) ∷ wk″ t₃
𝑣_ : ∀{A x} → [ A ∶ x ] ∈ Γ
→ Γ ⊢ A ∷ wk x
𝑣²_ : ∀{A} → (x : A ∈ Γ)
→ Γ ⊢ A ∷ 𝑣 x
𝜆²_ : ∀{A B t} → Γ , A ⊢ B ∷ t
→ Γ ⊢ A ⊃ B ∷ 𝜆 t
_∘²_ : ∀{A B t s} → Γ ⊢ A ⊃ B ∷ t → Γ ⊢ A ∷ s
→ Γ ⊢ B ∷ t ∘ s
!_ : ∀{A} → (u : Γ ⊢ A)
→ Γ ⊢ A ∷ u
⇑_ : ∀{A u} → Γ ⊢ [ A ∶ u ]
→ Γ ⊢ [ A ∶ u ] ∷ ! u
⇓²_ : ∀{A u t} → Γ ⊢ A ∷ u ∷ t
→ Γ ⊢ A ∷ ⇓ t
data _⊢_∷_∷_ (Γ : Cx) : (A : Ty) (t : Γ ⊢ A) → Γ ⊢ A ∷ t → Set where
wk_ : ∀{A t t₂} → ∅ ⊢ A ∷ t ∷ t₂
→ Γ ⊢ A ∷ wk t ∷ wk t₂
wk′_ : ∀{A t t₂ t₃} → ∅ ⊢ A ∷ t ∷ t₂ ∷ t₃
→ Γ ⊢ [ A ∶ t ] ∷ wk′ t₂ ∷ wk′ t₃
𝑣_ : ∀{A x x₂} → (τ A ∷ x ∷ x₂) ∈ Γ
→ Γ ⊢ A ∷ wk x ∷ wk x₂
𝑣³_ : ∀{A} → (x : A ∈ Γ)
→ Γ ⊢ A ∷ 𝑣 x ∷ 𝑣² x
𝜆³_ : ∀{A B t t₂} → Γ , A ⊢ B ∷ t ∷ t₂
→ Γ ⊢ A ⊃ B ∷ 𝜆 t ∷ 𝜆² t₂
_∘³_ : ∀{A B t t₂ s s₂} → Γ ⊢ A ⊃ B ∷ t ∷ t₂ → Γ ⊢ A ∷ s ∷ s₂
→ Γ ⊢ B ∷ t ∘ s ∷ t₂ ∘² s₂
⇑_ : ∀{A u} → Γ ⊢ A ∷ u
→ Γ ⊢ A ∷ u ∷ ! u
⇓³_ : ∀{A u t t₂} → Γ ⊢ A ∷ u ∷ t ∷ t₂
→ Γ ⊢ A ∷ ⇓ t ∷ ⇓² t₂
data _⊢_∷_∷_∷_ (Γ : Cx) : (A : Ty) (t : Γ ⊢ A) (t₂ : Γ ⊢ A ∷ t) → Γ ⊢ A ∷ t ∷ t₂ → Set where
⇑²_ : ∀{A u t} → Γ ⊢ A ∷ u ∷ t
→ Γ ⊢ A ∷ u ∷ ! u ∷ ⇑ t
⊩_ : Ty → Set
⊩ A = {Γ : Cx} → Γ ⊢ A
⊩_∷_ : (A : Ty) → ∅ ⊢ A → Set
⊩ A ∷ t = {Γ : Cx} → Γ ⊢ A ∷ wk t
⊩_∷_∷_ : (A : Ty) (t : ∅ ⊢ A) → ∅ ⊢ A ∷ t → Set
⊩ A ∷ t ∷ t₂ = {Γ : Cx} → Γ ⊢ A ∷ wk t ∷ wk t₂
eI : ∀{Γ A} → Γ ⊢ A ⊃ A
eI = 𝜆 𝑣 Z
eI² : ∀{Γ A} → Γ ⊢ A ⊃ A ∷ 𝜆 𝑣 Z
eI² = 𝜆² 𝑣² Z
eI²′ : ∀{Γ A} → Γ ⊢ A ⊃ A ∷ 𝜆 𝑣 Z
eI²′ = ! (𝜆 𝑣 Z)
eI³ : ∀{Γ A} → Γ ⊢ A ⊃ A ∷ 𝜆 𝑣 Z ∷ 𝜆² 𝑣² Z
eI³ = 𝜆³ 𝑣³ Z
eI³′ : ∀{Γ A} → Γ ⊢ A ⊃ A ∷ 𝜆 𝑣 Z ∷ ! (𝜆 𝑣 Z)
eI³′ = ⇑ (! (𝜆 𝑣 Z))
e11 : ∀{Γ A x} → Γ ⊢ [ A ∶ 𝑣 x ] ⊃ A ∷ 𝜆 ⇓ 𝑣 Z
e11 = ! (𝜆 ⇓ 𝑣 Z)
e12 : ∀{Γ A x} → Γ ⊢ [ A ∶ 𝑣 x ] ⊃ (τ A ∷ 𝑣 x ∷ ! 𝑣 x) ∷ 𝜆 {!⇑ ?!}
e12 = {!!}