{-# OPTIONS --allow-unsolved-metas #-}
module A201602.Try2 where
open import Data.Fin using (Fin; zero; suc; toβ)
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 4 _β_ _βΒ²_ _βΒ³_
infixr 3 π_ πΒ²_ πΒ³_
infixl 2 _β§_
infixr 1 _β_
infixr 0 _β’_ β©_ _β’_β·_ β©_β·_ _β’_β·_β·_ β©_β·_β·_
data Ty : Set where
β₯ : Ty
_β_ : Ty β Ty β Ty
_β§_ : Ty β Ty β Ty
Cx : β β Set
Cx = Vec Ty
data _β’_ {n : β} (Ξ : Cx n) : Ty β Set where
π£_ : β{A}
β A β Ξ
β Ξ β’ A
π_ : β{A B}
β Ξ , A β’ B
β Ξ β’ A β B
_β_ : β{A B}
β Ξ β’ A β B β Ξ β’ A
β Ξ β’ B
πβ¨_,_β© : β{A B}
β Ξ β’ A β Ξ β’ B
β Ξ β’ A β§ B
πβ_ : β{A B}
β Ξ β’ A β§ B
β Ξ β’ A
πβ_ : β{A B}
β Ξ β’ A β§ B
β Ξ β’ B
β©_ : Ty β Set
β© A = β{n} {Ξ : Cx n} β Ξ β’ A
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)
data _β’_β·_ {n : β} (Ξ : Cx n) : (A : Ty) β Ξ β’ A β Set where
π£Β²_ : β{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 B t s}
β Ξ β’ A β· t β Ξ β’ B β· s
β Ξ β’ A β§ B β· πβ¨ t , s β©
πβΒ²_ : β{A B t}
β Ξ β’ A β§ B β· t
β Ξ β’ A β· πβ t
πβΒ²_ : β{A B t}
β Ξ β’ A β§ B β· t
β Ξ β’ B β· πβ t
!_ : β{A t}
β Ξ β’ A β· t
β Ξ β’ A β· t
β©_β·_ : (A : Ty) β β© A β Set
β© A β· t = β{n} {Ξ : Cx n} β Ξ β’ A β· t
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)
data _β’_β·_β·_ {n : β} (Ξ : Cx n) : (A : Ty) β (t : Ξ β’ A) β Ξ β’ A β· t β Set where
π£Β³_ : β{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 B t tβ s sβ}
β Ξ β’ A β· t β· tβ β Ξ β’ B β· s β· sβ
β Ξ β’ A β§ B β· πβ¨ t , s β© β· πΒ²β¨ tβ , sβ β©
πβΒ³_ : β{A B t tβ}
β Ξ β’ A β§ B β· t β· tβ
β Ξ β’ A β· πβ t β· πβΒ² tβ
πβΒ³_ : β{A B t tβ}
β Ξ β’ A β§ B β· t β· tβ
β Ξ β’ B β· πβ t β· πβΒ² tβ
!_ : β{A t tβ}
β Ξ β’ A β· t β· tβ
β Ξ β’ A β· t β· tβ
β_ : β{A n} {Ξ : Cx n} {u : Ξ β’ A}
β (x : Ξ β’ A β· u)
β Ξ β’ A β· u β· (! x)
β_ = {!!}
β_ : β{A n} {Ξ : Cx n} {u : Ξ β’ A}
β Ξ β’ A β· u
β Ξ β’ A
β_ {u = u} = Ξ» _ β u
β©_β·_β·_ : (A : Ty) β (t : β© A) β β© A β· t β Set
β© A β· t β· tβ = β{n} {Ξ : Cx n} β Ξ β’ A β· t β· tβ
tIΒ³ : β{A} β β© A β A
β· π π£ Z
β· πΒ² π£Β² Z
tIΒ³ = πΒ³ π£Β³ Z
tKΒ³ : β{A B} β β© A β B β A
β· π π π£ S Z
β· πΒ² πΒ² π£Β² S Z
tKΒ³ = πΒ³ πΒ³ π£Β³ S Z
tSΒ³ : β{A B C} β β© (A β B β C) β (A β B) β A β C
β· π π π (π£ S S Z β π£ Z) β (π£ S Z β π£ Z)
β· πΒ² πΒ² πΒ² (π£Β² S S Z βΒ² π£Β² Z) βΒ² (π£Β² S Z βΒ² π£Β² Z)
tSΒ³ = πΒ³ πΒ³ πΒ³ (π£Β³ S S Z βΒ³ π£Β³ Z) βΒ³ (π£Β³ S Z βΒ³ π£Β³ Z)