Back to index
Chapter 1. Type Theory - Exercises
module Chapter1.Exercises where
open import Chapter1.Book public
_β_ : {X : π° πΎ} {Y : π° πΏ} {Z : Y β π° π}
β ((y : Y) β Z y)
β (f : X β Y)
β (x : X) β Z (f x)
g β f = Ξ» x β g (f x)
infixl 70 _β_
prjβrec-Ξ£ : {A : π° πΎ} {B : A β π° πΏ} {C : π° π}
β ((x : A) (y : B x) β C)
β Ξ£ B β C
prjβrec-Ξ£ g p = g (prβ p) (prβ p)
_ : {A : π° πΎ} {B : A β π° πΏ} {C : π° π}
β (g : (x : A) (y : B x) β C)
β (p : Ξ£ B) β (rec-Ξ£ g p β‘ prjβrec-Ξ£ g p)
_ = Ξ» g p β refl _
private
_β»ΒΉ : {A : π° πΎ} β {x y : A} β x β‘ y β y β‘ x
(refl x)β»ΒΉ = refl x
infix 40 _β»ΒΉ
_β_ : {A : π° πΎ} {x y z : A} β x β‘ y β y β‘ z β x β‘ z
(refl x) β (refl x) = (refl x)
infixl 30 _β_
begin_ : {A : π° πΎ} {x y : A} β x β‘ y β x β‘ y
begin_ xβ‘y = xβ‘y
infix 1 begin_
_β‘β¨β©_ : {A : π° πΎ} (x {y} : A) β x β‘ y β x β‘ y
_ β‘β¨β© xβ‘y = xβ‘y
step-β‘ : {A : π° πΎ} (x {y z} : A) β y β‘ z β x β‘ y β x β‘ z
step-β‘ _ yβ‘z xβ‘y = xβ‘y β yβ‘z
syntax step-β‘ x yβ‘z xβ‘y = x β‘β¨ xβ‘y β© yβ‘z
step-β‘Λ : {A : π° πΎ} (x {y z} : A) β y β‘ z β y β‘ x β x β‘ z
step-β‘Λ _ yβ‘z yβ‘x = (yβ‘x)β»ΒΉ β yβ‘z
syntax step-β‘Λ x yβ‘z yβ‘x = x β‘Λβ¨ yβ‘x β© yβ‘z
infixr 2 _β‘β¨β©_ step-β‘ step-β‘Λ
_β : {A : π° πΎ} (x : A) β x β‘ x
_β x = refl x
infix 3 _β
ap : {A : π° πΎ} {B : π° πΏ} (f : A β B) {x x' : A} β x β‘ x' β f x β‘ f x'
ap f {x} {x'} (refl x) = refl (f x)
tr : {A : π° πΎ} (P : A β π° πΏ) {x y : A}
β x β‘ y β P x β P y
tr P (refl x) = id
uniq-Ξ£' : {A : π° πΎ} {P : A β π° πΏ} (z : Ξ£ P)
β z β‘ (prβ z , prβ z)
uniq-Ξ£' (x , y) = refl _
ind-Ξ£' : {A : π° πΎ} {B : A β π° πΏ} {C : Ξ£ B β π° π}
β ((x : A) (y : B x) β C (x , y))
β ((x , y) : Ξ£ B) β C (x , y)
ind-Ξ£' {C = C} g p =
tr C ((uniq-Ξ£' p)β»ΒΉ) (g (prβ p) (prβ p))
iterβrec-β :
(iter : (C : π° πΎ) β C β (C β C) β β β C)
β (C : π° πΎ)
β C β (β β C β C)
β β β C
iterβrec-β iter C cβ c'β n =
prβ (iter (C Γ β) (cβ , 0) (Ξ» (c , m) β (c'β m c , succ m)) n)
iterβrec-β-comp-0 :
(iter : (C : π° πΎ) β C β (C β C) β β β C)
β (iter-comp-0 : (C : π° πΎ) (cβ : C) (cβ : C β C) β iter C cβ cβ 0 β‘ cβ)
β (iter-comp-succ : (C : π° πΎ) (cβ : C) (cβ : C β C) (n : β)
β iter C cβ cβ (succ n) β‘ cβ (iter C cβ cβ n))
β (C : π° πΎ) (cβ : C) (cβ : β β C β C)
β iterβrec-β iter C cβ cβ 0 β‘ cβ
iterβrec-β-comp-0 iter iter-comp-0 iter-comp-succ C cβ c'β =
ap prβ (iter-comp-0 (C Γ β) (cβ , 0) (Ξ» (c , m) β (c'β m c , succ m)))
iterβrec-β-comp-succ-helper :
(iter : (C : π° πΎ) β C β (C β C) β β β C)
β (iter-comp-0 : (C : π° πΎ) (cβ : C) (cβ : C β C) β iter C cβ cβ 0 β‘ cβ)
β (iter-comp-succ : (C : π° πΎ) (cβ : C) (cβ : C β C) (n : β)
β iter C cβ cβ (succ n) β‘ cβ (iter C cβ cβ n))
β (C : π° πΎ) (cβ : C) (c'β : β β C β C) (n : β)
β prβ (iter (C Γ β) (cβ , 0) (Ξ» (c , m) β (c'β m c , succ m)) n) β‘ n
iterβrec-β-comp-succ-helper iter iter-comp-0 iter-comp-succ C cβ c'β zero =
ap prβ (iter-comp-0 (C Γ β) (cβ , 0) (Ξ» (c , m) β (c'β m c , succ m)))
iterβrec-β-comp-succ-helper iter iter-comp-0 iter-comp-succ C cβ c'β (succ n) =
begin
prβ (iter (C Γ β) (cβ , 0) (Ξ» (c , m) β (c'β m c , succ m)) (succ n)) β‘β¨ i β©
prβ ((Ξ» (c , m) β (c'β m c , succ m)) (itern)) β‘β¨ ii β©
prβ ((Ξ» (c , m) β (c'β m c , succ m)) (prβ itern , prβ itern)) β‘β¨β©
succ (prβ itern) β‘β¨ iii β©
succ n β
where
i = ap prβ
(iter-comp-succ (C Γ β) (cβ , 0) (Ξ» (c , m) β (c'β m c , succ m)) n)
itern = iter (C Γ β) (cβ , 0) (Ξ» (c , m) β (c'β m c , succ m)) n
ii = ap (Ξ» - β prβ ((Ξ» (c , m) β (c'β m c , succ m)) -))
(uniq-Ξ£' (iter (C Γ β) (cβ , 0) (Ξ» (c , m) β (c'β m c , succ m)) n))
iii = ap succ
(iterβrec-β-comp-succ-helper iter iter-comp-0 iter-comp-succ C cβ c'β n)
iterβrec-β-comp-succ :
(iter : (C : π° πΎ) β C β (C β C) β β β C)
β (iter-comp-0 : (C : π° πΎ) (cβ : C) (cβ : C β C) β iter C cβ cβ 0 β‘ cβ)
β (iter-comp-succ : (C : π° πΎ) (cβ : C) (cβ : C β C) (n : β)
β iter C cβ cβ (succ n) β‘ cβ (iter C cβ cβ n))
β (C : π° πΎ) (cβ : C) (c'β : β β C β C) (n : β)
β iterβrec-β iter C cβ c'β (succ n) β‘ c'β n (iterβrec-β iter C cβ c'β n)
iterβrec-β-comp-succ iter iter-comp-0 iter-comp-succ C cβ c'β zero = begin
iterβrec-β iter C cβ c'β 1 β‘β¨ i β©
prβ ((Ξ» (c , m) β (c'β m c , succ m))
(iter (C Γ β) (cβ , 0) (Ξ» (c , m) β (c'β m c , succ m)) 0)) β‘β¨ ii β©
prβ ((Ξ» (c , m) β (c'β m c , succ m)) (cβ , 0)) β‘β¨β©
c'β 0 cβ β‘Λβ¨ iii β©
c'β zero (iterβrec-β iter C cβ c'β zero) β
where
i = ap prβ
(iter-comp-succ (C Γ β) (cβ , 0) (Ξ» (c , m) β (c'β m c , succ m)) 0)
ii = ap (Ξ» - β prβ ((Ξ» (c , m) β (c'β m c , succ m)) -))
(iter-comp-0 (C Γ β) (cβ , 0) (Ξ» (c , m) β (c'β m c , succ m)))
iii = ap (c'β 0)
(iterβrec-β-comp-0 iter iter-comp-0 iter-comp-succ C cβ c'β)
iterβrec-β-comp-succ iter iter-comp-0 iter-comp-succ C cβ c'β (succ n) = begin
iterβrec-β iter C cβ c'β (succ (succ n)) β‘β¨ i β©
prβ ((Ξ» (c , m) β (c'β m c , succ m)) iter-sn) β‘β¨ ii β©
prβ ((Ξ» (c , m) β (c'β m c , succ m)) (prβ iter-sn , prβ iter-sn)) β‘β¨β©
c'β (prβ iter-sn) (prβ iter-sn) β‘β¨ iii β©
c'β (succ n) (iterβrec-β iter C cβ c'β (succ n)) β
where
iter-sn = iter (C Γ β) (cβ , 0) (Ξ» (c , m) β (c'β m c , succ m)) (succ n)
i = ap prβ
(iter-comp-succ (C Γ β) (cβ , 0) (Ξ» (c , m) β (c'β m c , succ m)) (succ n))
ii = ap (Ξ» - β prβ ((Ξ» (c , m) β (c'β m c , succ m)) -)) (uniq-Ξ£' iter-sn)
iii = ap (Ξ» - β c'β - (prβ iter-sn))
(iterβrec-β-comp-succ-helper
iter iter-comp-0 iter-comp-succ C cβ c'β (succ n))