{-# 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 = {!!}