{-# OPTIONS --allow-unsolved-metas #-}
module A201602.Try7 where
open import Data.Nat using (β; zero; suc; _+_)
open import Data.Product using (Ξ£; _Γ_; _,_)
data Vec (X : Set) : β β Set where
  β
   : Vec X zero
  _,_ : β{n} β Vec X n β X β Vec X (suc n)
data _β_ {X : Set} : β{n} β X β Vec X n β Set where
  Z  : β{n x} {xs : Vec X n}
     β x β (xs , x)
  S_ : β{n x y} {xs : Vec X n}
     β x β xs
     β x β (xs , y)
infixl 7 _ββ°_ _β_ _βΒ²_
infixr 5 πβ°_ π_ πΒ²_
infixl 3 _β§_
infixr 2 _β_
infixl 1 _β·_
infixr 0 _β’_
mutual
  Cx : β β Set
  Cx = Vec Ty
  data Ty : Set where
    β₯ : Ty
    _β_ : Ty β Ty β Ty
    _β§_ : Ty β Ty β Ty
    _β·_ : β{m} {Ξ : Cx m} (A : Ty) β Ξ β’ A β Ty
  data _β’_ {m : β} (Ξ : Cx m) : Ty β Set where
    πβ°_   : β{A}
          β β
          β Ξ β’ A
    π£β°_   : β{A}
          β A β Ξ
          β Ξ β’ A
    πβ°_   : β{A B}
          β Ξ , A β’ B
          β Ξ β’ A β B
    _ββ°_  : β{A B}
          β Ξ β’ A β B    β Ξ β’ A
          β Ξ β’ B
    π£_   : β{A}
         β (x : A β Ξ)
         β Ξ β’ A β· π£β° x
    π_   : β{A B} β {t : Ξ , A β’ B}
         β Ξ , A β’ B β· t
         β Ξ β’ A β B β· πβ° t
    _β_  : β{A B} β {t : Ξ β’ A β B} {s : Ξ β’ A}
         β Ξ β’ A β B β· t    β Ξ β’ A β· s
         β Ξ β’ B β· t ββ° s
    β_   : β{A} β {u : Ξ β’ A}
         β Ξ β’ A β· u
         β Ξ β’ A
    π£Β²_  : β{A}
         β (x : A β Ξ)
         β Ξ β’ A β· π£β° x β· π£ x
    πΒ²_  : β{A B} β {t : Ξ , A β’ B} β β{tβ}
         β Ξ , A β’ B β· t β· tβ
         β Ξ β’ A β B β· πβ° t β· π tβ
    _βΒ²_ : β{A B} β {t : Ξ β’ A β B} {s : Ξ β’ A} β β{tβ sβ}
         β Ξ β’ A β B β· t β· tβ   β Ξ β’ A β· s β· sβ
         β Ξ β’ B β· t ββ° s β· tβ β sβ
tI : β{A} β β
 β’ A β A
tI = πβ° π£β° Z
tK : β{A B} β β
 β’ A β B β A
tK = πβ° πβ° π£β° S Z
tS : β{A B C} β β
 β’ (A β B β C) β (A β B) β A β C
tS = πβ° πβ° πβ° (π£β° S S Z ββ° π£β° Z) ββ° (π£β° S Z ββ° π£β° Z)
tIΒ² : β{A} β β
 β’ A β A β· πβ° π£β° Z
tIΒ² = π π£ Z
tKΒ² : β{A B} β β
 β’ A β B β A β· πβ° πβ° π£β° S Z
tKΒ² = π π π£ S Z
tSΒ² : β{A B C} β β
 β’ (A β B β C) β (A β B) β A β C β· πβ° πβ° πβ° (π£β° S S Z ββ° π£β° Z) ββ° (π£β° S Z ββ° π£β° Z)
tSΒ² = π π π (π£ S S Z β π£ Z) β (π£ S Z β π£ Z)
e11 : β{A x} β β
 β’ ((A β· πβ° x) β A) β· πβ° β (π£β° Z)
e11 = {!!}