comparison src/Polynominal.agda @ 1015:e01a1d29492b

Functional Completeness
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 21 Mar 2021 10:16:57 +0900
parents 4f1db956d3b4
children bbbe97d2a5ea
comparison
equal deleted inserted replaced
1014:4f1db956d3b4 1015:e01a1d29492b
1 open import Category 1 open import Category
2 open import CCC 2 open import CCC
3 open import Level 3 open import Level
4 open import HomReasoning 4 open import HomReasoning
5 open import cat-utility 5 open import cat-utility
6 6
7 module Polynominal { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ ) ( C : CCC A ) where 7 module Polynominal { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ ) ( C : CCC A ) where
8
9 module coKleisli { c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ } { S : Functor A A } (SM : coMonad A S) where
10
11 open coMonad
12
13 open Functor
14 open NTrans
15
16 --
17 -- Hom in Kleisli Category
18 --
19
20 record SHom (a : Obj A) (b : Obj A)
21 : Set c₂ where
22 field
23 SMap : Hom A ( FObj S a ) b
24
25 open SHom
26
27 S-id : (a : Obj A) → SHom a a
28 S-id a = record { SMap = TMap (ε SM) a }
29
30 open import Relation.Binary
31
32 _⋍_ : { a : Obj A } { b : Obj A } (f g : SHom a b ) → Set ℓ
33 _⋍_ {a} {b} f g = A [ SMap f ≈ SMap g ]
34
35 _*_ : { a b c : Obj A } → ( SHom b c) → ( SHom a b) → SHom a c
36 _*_ {a} {b} {c} g f = record { SMap = coJoin SM {a} {b} {c} (SMap g) (SMap f) }
37
38 isSCat : IsCategory ( Obj A ) SHom _⋍_ _*_ (λ {a} → S-id a)
39 isSCat = record { isEquivalence = isEquivalence
40 ; identityL = SidL
41 ; identityR = SidR
42 ; o-resp-≈ = So-resp
43 ; associative = Sassoc
44 }
45 where
46 open ≈-Reasoning A
47 isEquivalence : { a b : Obj A } → IsEquivalence {_} {_} {SHom a b} _⋍_
48 isEquivalence {C} {D} = record { refl = refl-hom ; sym = sym ; trans = trans-hom }
49 SidL : {a b : Obj A} → {f : SHom a b} → (S-id _ * f) ⋍ f
50 SidL {a} {b} {f} = begin
51 SMap (S-id _ * f) ≈⟨⟩
52 (TMap (ε SM) b o (FMap S (SMap f))) o TMap (δ SM) a ≈↑⟨ car (nat (ε SM)) ⟩
53 (SMap f o TMap (ε SM) (FObj S a)) o TMap (δ SM) a ≈↑⟨ assoc ⟩
54 SMap f o TMap (ε SM) (FObj S a) o TMap (δ SM) a ≈⟨ cdr (IsCoMonad.unity1 (isCoMonad SM)) ⟩
55 SMap f o id1 A _ ≈⟨ idR ⟩
56 SMap f ∎
57 SidR : {C D : Obj A} → {f : SHom C D} → (f * S-id _ ) ⋍ f
58 SidR {a} {b} {f} = begin
59 SMap (f * S-id a) ≈⟨⟩
60 (SMap f o FMap S (TMap (ε SM) a)) o TMap (δ SM) a ≈↑⟨ assoc ⟩
61 SMap f o (FMap S (TMap (ε SM) a) o TMap (δ SM) a) ≈⟨ cdr (IsCoMonad.unity2 (isCoMonad SM)) ⟩
62 SMap f o id1 A _ ≈⟨ idR ⟩
63 SMap f ∎
64 So-resp : {a b c : Obj A} → {f g : SHom a b } → {h i : SHom b c } →
65 f ⋍ g → h ⋍ i → (h * f) ⋍ (i * g)
66 So-resp {a} {b} {c} {f} {g} {h} {i} eq-fg eq-hi = resp refl-hom (resp (fcong S eq-fg ) eq-hi )
67 Sassoc : {a b c d : Obj A} → {f : SHom c d } → {g : SHom b c } → {h : SHom a b } →
68 (f * (g * h)) ⋍ ((f * g) * h)
69 Sassoc {a} {b} {c} {d} {f} {g} {h} = begin
70 SMap (f * (g * h)) ≈⟨ car (cdr (distr S)) ⟩
71 (SMap f o ( FMap S (SMap g o FMap S (SMap h)) o FMap S (TMap (δ SM) a) )) o TMap (δ SM) a ≈⟨ car assoc ⟩
72 ((SMap f o FMap S (SMap g o FMap S (SMap h))) o FMap S (TMap (δ SM) a) ) o TMap (δ SM) a ≈↑⟨ assoc ⟩
73 (SMap f o FMap S (SMap g o FMap S (SMap h))) o (FMap S (TMap (δ SM) a) o TMap (δ SM) a ) ≈↑⟨ cdr (IsCoMonad.assoc (isCoMonad SM)) ⟩
74 (SMap f o (FMap S (SMap g o FMap S (SMap h)))) o ( TMap (δ SM) (FObj S a) o TMap (δ SM) a ) ≈⟨ assoc ⟩
75 ((SMap f o (FMap S (SMap g o FMap S (SMap h)))) o TMap (δ SM) (FObj S a) ) o TMap (δ SM) a ≈⟨ car (car (cdr (distr S))) ⟩
76 ((SMap f o (FMap S (SMap g) o FMap S (FMap S (SMap h)))) o TMap (δ SM) (FObj S a) ) o TMap (δ SM) a ≈↑⟨ car assoc ⟩
77 (SMap f o ((FMap S (SMap g) o FMap S (FMap S (SMap h))) o TMap (δ SM) (FObj S a) )) o TMap (δ SM) a ≈↑⟨ assoc ⟩
78 SMap f o (((FMap S (SMap g) o FMap S (FMap S (SMap h))) o TMap (δ SM) (FObj S a) ) o TMap (δ SM) a) ≈↑⟨ cdr (car assoc ) ⟩
79 SMap f o ((FMap S (SMap g) o (FMap S (FMap S (SMap h)) o TMap (δ SM) (FObj S a) )) o TMap (δ SM) a) ≈⟨ cdr (car (cdr (nat (δ SM)))) ⟩
80 SMap f o ((FMap S (SMap g) o ( TMap (δ SM) b o FMap S (SMap h))) o TMap (δ SM) a) ≈⟨ assoc ⟩
81 (SMap f o (FMap S (SMap g) o ( TMap (δ SM) b o FMap S (SMap h)))) o TMap (δ SM) a ≈⟨ car (cdr assoc) ⟩
82 (SMap f o ((FMap S (SMap g) o TMap (δ SM) b ) o FMap S (SMap h))) o TMap (δ SM) a ≈⟨ car assoc ⟩
83 ((SMap f o (FMap S (SMap g) o TMap (δ SM) b )) o FMap S (SMap h)) o TMap (δ SM) a ≈⟨ car (car assoc) ⟩
84 (((SMap f o FMap S (SMap g)) o TMap (δ SM) b ) o FMap S (SMap h)) o TMap (δ SM) a ≈⟨⟩
85 SMap ((f * g) * h) ∎
86
87 SCat : Category c₁ c₂ ℓ
88 SCat = record { Obj = Obj A ; Hom = SHom ; _o_ = _*_ ; _≈_ = _⋍_ ; Id = λ {a} → S-id a ; isCategory = isSCat }
89
90 module coKleisli' { c₁ c₂ ℓ : Level} { A : Category c₁ c₂ ℓ } { S : Functor A A } (SM : coMonad A S) where
91 8
92 open CCC.CCC C 9 open CCC.CCC C
93 open coMonad 10 open coMonad
94 open Functor 11 open Functor
95 open NTrans 12 open NTrans
96 open import Category.Cat 13 open import Category.Cat
97 14
98 open ≈-Reasoning A 15 open ≈-Reasoning A hiding (_∙_)
99 SA : (a : Obj A) → Functor A A 16 SA : (a : Obj A) → Functor A A
100 SA a = record { 17 SA a = record {
101 FObj = λ x → a ∧ x 18 FObj = λ x → a ∧ x
102 ; FMap = λ f → < π , A [ f o π' ] > 19 ; FMap = λ f → < π , A [ f o π' ] >
103 ; isFunctor = record { 20 ; isFunctor = record {
160 < π , < π , id1 A _ > > ≈↑⟨ IsCCC.π-cong isCCC refl-hom idR ⟩ 77 < π , < π , id1 A _ > > ≈↑⟨ IsCCC.π-cong isCCC refl-hom idR ⟩
161 < π , < π , id1 A _ > o id1 A _ > ≈↑⟨ IsCCC.π-cong isCCC refl-hom (cdr (IsCCC.e3b isCCC)) ⟩ 78 < π , < π , id1 A _ > o id1 A _ > ≈↑⟨ IsCCC.π-cong isCCC refl-hom (cdr (IsCCC.e3b isCCC)) ⟩
162 < π , < π , id1 A _ > o ( π' o < π , id1 A _ > ) > ≈↑⟨ IsCCC.π-cong isCCC (IsCCC.e3a isCCC) (sym assoc) ⟩ 79 < π , < π , id1 A _ > o ( π' o < π , id1 A _ > ) > ≈↑⟨ IsCCC.π-cong isCCC (IsCCC.e3a isCCC) (sym assoc) ⟩
163 < π o < π , id1 A _ > , (< π , id1 A _ > o π' ) o < π , id1 A _ > > ≈↑⟨ IsCCC.distr-π isCCC ⟩ 80 < π o < π , id1 A _ > , (< π , id1 A _ > o π' ) o < π , id1 A _ > > ≈↑⟨ IsCCC.distr-π isCCC ⟩
164 FMap (SA a) < π , id1 A (a ∧ x) > o < π , id1 A _ > ∎ 81 FMap (SA a) < π , id1 A (a ∧ x) > o < π , id1 A _ > ∎
165 82 --
166 83 -- coKleisli category of SM should give the fucntional completeness
167 84 --
168 -- open import deductive A C 85
169 86 _∙_ = _[_o_] A
170 _・_ = _[_o_] A 87
171 88 --
172 -- every proof b → c with assumption a has following forms 89 -- Polynominal (p.57) in Introduction to Higher order categorical logic
90 --
91 -- Given object a₀ and a of a caterisian closed category A, how does one adjoin an interminate arraow x : a₀ → a to A?
92 -- A[x] based on the `assumption' x, as was done in Section 2 (data φ). The formulas of A[x] are the objects of A and the
93 -- proofs of A[x] are formed from the arrows of A and the new arrow x : a₀ → a by the appropriate ules of inference.
173 -- 94 --
174 -- Here, A is actualy A[x]. It contains x and all the arrow generated from x. 95 -- Here, A is actualy A[x]. It contains x and all the arrow generated from x.
175 -- If we can put constraints on rule i, then A is strictly smaller than A[x]. 96 -- If we can put constraints on rule i (sub : Hom A b c → Set), then A is strictly smaller than A[x],
97 -- that is, a subscategory of A[x].
98 --
99 -- i : {b c : Obj A} {k : Hom A b c } → sub k → φ x k
100 --
101 -- this makes a few changes, but we don't care.
102 -- from page. 51
176 -- 103 --
177 data φ {a ⊤ : Obj A } ( x : Hom A ⊤ a ) : {b c : Obj A } → Hom A b c → Set ( c₁ ⊔ c₂ ⊔ ℓ) where 104 data φ {a ⊤ : Obj A } ( x : Hom A ⊤ a ) : {b c : Obj A } → Hom A b c → Set ( c₁ ⊔ c₂ ⊔ ℓ) where
178 i : {b c : Obj A} {k : Hom A b c } → φ x k 105 i : {b c : Obj A} {k : Hom A b c } → φ x k
179 ii : φ x {⊤} {a} x 106 ii : φ x {⊤} {a} x
180 iii : {b c' c'' : Obj A } { f : Hom A b c' } { g : Hom A b c'' } (ψ : φ x f ) (χ : φ x g ) → φ x {b} {c' ∧ c''} < f , g > 107 iii : {b c' c'' : Obj A } { f : Hom A b c' } { g : Hom A b c'' } (ψ : φ x f ) (χ : φ x g ) → φ x {b} {c' ∧ c''} < f , g >
181 iv : {b c d : Obj A } { f : Hom A d c } { g : Hom A b d } (ψ : φ x f ) (χ : φ x g ) → φ x ( f ・ g ) 108 iv : {b c d : Obj A } { f : Hom A d c } { g : Hom A b d } (ψ : φ x f ) (χ : φ x g ) → φ x ( f ∙ g )
182 v : {b c' c'' : Obj A } { f : Hom A (b ∧ c') c'' } (ψ : φ x f ) → φ x {b} {c'' <= c'} ( f * ) 109 v : {b c' c'' : Obj A } { f : Hom A (b ∧ c') c'' } (ψ : φ x f ) → φ x {b} {c'' <= c'} ( f * )
183 φ-cong : {b c : Obj A} {k k' : Hom A b c } → A [ k ≈ k' ] → φ x k → φ x k' 110 φ-cong : {b c : Obj A} {k k' : Hom A b c } → A [ k ≈ k' ] → φ x k → φ x k'
184 111
185 α : {a b c : Obj A } → Hom A (( a ∧ b ) ∧ c ) ( a ∧ ( b ∧ c ) ) 112 α : {a b c : Obj A } → Hom A (( a ∧ b ) ∧ c ) ( a ∧ ( b ∧ c ) )
186 α = < π ・ π , < π' ・ π , π' > > 113 α = < π ∙ π , < π' ∙ π , π' > >
187 114
188 -- genetate (a ∧ b) → c proof from proof b → c with assumption a 115 -- genetate (a ∧ b) → c proof from proof b → c with assumption a
116 -- from page. 51
189 117
190 k : {a ⊤ b c : Obj A } → ( x∈a : Hom A ⊤ a ) → {z : Hom A b c } → ( y : φ {a} x∈a z ) → Hom A (a ∧ b) c 118 k : {a ⊤ b c : Obj A } → ( x∈a : Hom A ⊤ a ) → {z : Hom A b c } → ( y : φ {a} x∈a z ) → Hom A (a ∧ b) c
191 k x∈a {k} i = k ・ π' 119 k x∈a {k} i = k ∙ π'
192 k x∈a ii = π 120 k x∈a ii = π
193 k x∈a (iii ψ χ ) = < k x∈a ψ , k x∈a χ > 121 k x∈a (iii ψ χ ) = < k x∈a ψ , k x∈a χ >
194 k x∈a (iv ψ χ ) = k x∈a ψ ・ < π , k x∈a χ > 122 k x∈a (iv ψ χ ) = k x∈a ψ ∙ < π , k x∈a χ >
195 k x∈a (v ψ ) = ( k x∈a ψ ・ α ) * 123 k x∈a (v ψ ) = ( k x∈a ψ ∙ α ) *
196 k x∈a (φ-cong eq ψ) = k x∈a ψ 124 k x∈a (φ-cong eq ψ) = k x∈a ψ
197 125
198 toφ : {a ⊤ b c : Obj A } → ( x∈a : Hom A ⊤ a ) → (z : Hom A b c ) → φ {a} x∈a z 126 toφ : {a ⊤ b c : Obj A } → ( x∈a : Hom A ⊤ a ) → (z : Hom A b c ) → φ {a} x∈a z
199 toφ {a} {⊤} {b} {c} x∈a z = i 127 toφ {a} {⊤} {b} {c} x∈a z = i
200 128
202 field 130 field
203 hom : Hom A b c 131 hom : Hom A b c
204 phi : φ x {b} {c} hom 132 phi : φ x {b} {c} hom
205 133
206 open PHom 134 open PHom
207 -- open import HomReasoning 135
208 -- open import cat-utility 136 -- A is A[x]
209
210 -- date _≅_ : {a b c : Hom A} → { x : Hom A ⊤ a } → (f g : PHom b c ) → Set (c₁ ⊔ c₂ ⊔ ℓ) where
211 -- pcomp : { a b c : Hom A } → A [ A [ hom g o hom f ] ≈ hom h ] → (A [ hom g o hom f ]) ≅ hom h
212
213 -- this is too easy, so what is A[x]?
214 Polynominal : {a ⊤ : Obj A } ( x : Hom A ⊤ a ) → Category c₁ (c₁ ⊔ c₂ ⊔ ℓ) ℓ 137 Polynominal : {a ⊤ : Obj A } ( x : Hom A ⊤ a ) → Category c₁ (c₁ ⊔ c₂ ⊔ ℓ) ℓ
215 Polynominal {a} {⊤} x = record { 138 Polynominal {a} {⊤} x = record {
216 Obj = Obj A; 139 Obj = Obj A;
217 Hom = λ b c → PHom {a} {⊤} {x} b c ; 140 Hom = λ b c → PHom {a} {⊤} {x} b c ;
218 _o_ = λ{a} {b} {c} x y → record { hom = A [ hom x o hom y ] ; phi = iv (phi x) (phi y) } ; 141 _o_ = λ{a} {b} {c} x y → record { hom = hom x ∙ hom y ; phi = iv (phi x) (phi y) } ;
219 _≈_ = λ x y → A [ hom x ≈ hom y ] ; 142 _≈_ = λ x y → A [ hom x ≈ hom y ] ;
220 Id = λ{a} → record { hom = id1 A a ; phi = i } ; 143 Id = λ{a} → record { hom = id1 A a ; phi = i } ;
221 isCategory = record { 144 isCategory = record {
222 isEquivalence = record { sym = sym-hom ; trans = trans-hom ; refl = refl-hom } ; 145 isEquivalence = record { sym = sym-hom ; trans = trans-hom ; refl = refl-hom } ;
223 identityL = λ {a b f} → idL ; 146 identityL = λ {a b f} → idL ;
236 ; distr = refl-hom 159 ; distr = refl-hom
237 ; ≈-cong = λ eq → eq 160 ; ≈-cong = λ eq → eq
238 } 161 }
239 } 162 }
240 163
164 --
165 -- Proposition 6.1
166 --
167 -- For every polynominal ψ(x) : b → c in an indeterminate x : 1 → a over a cartesian or cartesian closed
168 -- category A there is a unique arrow f : a ∧ b → c in A such that f ∙ < x ∙ ○ b , id1 A b > ≈ ψ(x).
169 --
170
241 record Functional-completeness {a : Obj A} ( x : Hom A 1 a ) : Set (c₁ ⊔ c₂ ⊔ ℓ) where 171 record Functional-completeness {a : Obj A} ( x : Hom A 1 a ) : Set (c₁ ⊔ c₂ ⊔ ℓ) where
242 field 172 field
243 fun : {b c : Obj A} → PHom {a} {1} {x} b c → Hom A (a ∧ b) c 173 fun : {b c : Obj A} → PHom {a} {1} {x} b c → Hom A (a ∧ b) c
244 fp : {b c : Obj A} → (p : PHom b c) → A [ A [ fun p o < A [ x o ○ b ] , id1 A b > ] ≈ hom p ] 174 fp : {b c : Obj A} → (p : PHom b c) → A [ fun p ∙ < x ∙ ○ b , id1 A b > ≈ hom p ]
245 uniq : {b c : Obj A} → (p : PHom b c) → (f : Hom A (a ∧ b) c) → A [ A [ f o < A [ x o ○ b ] , id1 A b > ] ≈ hom p ] 175 uniq : {b c : Obj A} → (p : PHom b c) → (f : Hom A (a ∧ b) c) → A [ f ∙ < x ∙ ○ b , id1 A b > ≈ hom p ]
246 → A [ f ≈ fun p ] 176 → A [ f ≈ fun p ]
247 177
178 π-cong = IsCCC.π-cong isCCC
179 e2 = IsCCC.e2 isCCC
180 {-# TERMINATING #-}
248 functional-completeness : {a : Obj A} ( x : Hom A 1 a ) → Functional-completeness x 181 functional-completeness : {a : Obj A} ( x : Hom A 1 a ) → Functional-completeness x
249 functional-completeness {a} x = record { 182 functional-completeness {a} x = record {
250 fun = λ y → k x (phi y) 183 fun = λ y → k x (phi y)
251 ; fp = fc0 184 ; fp = fc0
252 ; uniq = uniq 185 ; uniq = uniq
253 } where 186 } where
254 open φ 187 open φ
255 fc0 : {b c : Obj A} (p : PHom b c) → A [ A [ k x (phi p) o < A [ x o ○ b ] , id1 A b > ] ≈ hom p ] 188 fc0 : {b c : Obj A} (p : PHom b c) → A [ k x (phi p) ∙ < x ∙ ○ b , id1 A b > ≈ hom p ]
256 fc0 {b} {c} p with phi p 189 fc0 {b} {c} p with phi p
257 ... | i {_} {_} {s} = begin 190 ... | i {_} {_} {s} = begin
258 (s o π') o < ( x o ○ b ) , id1 A b > ≈↑⟨ assoc ⟩ 191 (s ∙ π') ∙ < ( x ∙ ○ b ) , id1 A b > ≈↑⟨ assoc ⟩
259 s o (π' o < ( x o ○ b ) , id1 A b >) ≈⟨ cdr (IsCCC.e3b isCCC ) ⟩ 192 s ∙ (π' ∙ < ( x ∙ ○ b ) , id1 A b >) ≈⟨ cdr (IsCCC.e3b isCCC ) ⟩
260 s o id1 A b ≈⟨ idR ⟩ 193 s ∙ id1 A b ≈⟨ idR ⟩
261 s ∎ 194 s ∎
262 ... | ii = begin 195 ... | ii = begin
263 π o < ( x o ○ b ) , id1 A b > ≈⟨ IsCCC.e3a isCCC ⟩ 196 π ∙ < ( x ∙ ○ b ) , id1 A b > ≈⟨ IsCCC.e3a isCCC ⟩
264 x o ○ b ≈↑⟨ cdr (IsCCC.e2 isCCC ) ⟩ 197 x ∙ ○ b ≈↑⟨ cdr (e2 ) ⟩
265 x o id1 A b ≈⟨ idR ⟩ 198 x ∙ id1 A b ≈⟨ idR ⟩
266 x ∎ 199 x ∎
267 ... | iii {_} {_} {_} {f} {g} y z = begin 200 ... | iii {_} {_} {_} {f} {g} y z = begin
268 < k x y , k x z > o < (x o ○ b ) , id1 A b > ≈⟨ IsCCC.distr-π isCCC ⟩ 201 < k x y , k x z > ∙ < (x ∙ ○ b ) , id1 A b > ≈⟨ IsCCC.distr-π isCCC ⟩
269 < k x y o < (x o ○ b ) , id1 A b > , k x z o < (x o ○ b ) , id1 A b > > 202 < k x y ∙ < (x ∙ ○ b ) , id1 A b > , k x z ∙ < (x ∙ ○ b ) , id1 A b > >
270 ≈⟨ IsCCC.π-cong isCCC (fc0 record { hom = f ; phi = y } ) (fc0 record { hom = g ; phi = z } ) ⟩ 203 ≈⟨ π-cong (fc0 record { hom = f ; phi = y } ) (fc0 record { hom = g ; phi = z } ) ⟩
271 < f , g > ≈⟨⟩ 204 < f , g > ≈⟨⟩
272 hom p ∎ 205 hom p ∎
273 ... | iv {_} {_} {d} {f} {g} y z = begin 206 ... | iv {_} {_} {d} {f} {g} y z = begin
274 (k x y o < π , k x z >) o < ( x o ○ b ) , id1 A b > ≈↑⟨ assoc ⟩ 207 (k x y ∙ < π , k x z >) ∙ < ( x ∙ ○ b ) , id1 A b > ≈↑⟨ assoc ⟩
275 k x y o ( < π , k x z > o < ( x o ○ b ) , id1 A b > ) ≈⟨ cdr (IsCCC.distr-π isCCC) ⟩ 208 k x y ∙ ( < π , k x z > ∙ < ( x ∙ ○ b ) , id1 A b > ) ≈⟨ cdr (IsCCC.distr-π isCCC) ⟩
276 k x y o ( < π o < ( x o ○ b ) , id1 A b > , k x z o < ( x o ○ b ) , id1 A b > > ) 209 k x y ∙ ( < π ∙ < ( x ∙ ○ b ) , id1 A b > , k x z ∙ < ( x ∙ ○ b ) , id1 A b > > )
277 ≈⟨ cdr (IsCCC.π-cong isCCC (IsCCC.e3a isCCC) (fc0 record { hom = g ; phi = z} ) ) ⟩ 210 ≈⟨ cdr (π-cong (IsCCC.e3a isCCC) (fc0 record { hom = g ; phi = z} ) ) ⟩
278 k x y o ( < x o ○ b , g > ) ≈↑⟨ cdr (IsCCC.π-cong isCCC (cdr (IsCCC.e2 isCCC)) refl-hom ) ⟩ 211 k x y ∙ ( < x ∙ ○ b , g > ) ≈↑⟨ cdr (π-cong (cdr (e2)) refl-hom ) ⟩
279 k x y o ( < x o ( ○ d o g ) , g > ) ≈⟨ cdr (IsCCC.π-cong isCCC assoc (sym idL)) ⟩ 212 k x y ∙ ( < x ∙ ( ○ d ∙ g ) , g > ) ≈⟨ cdr (π-cong assoc (sym idL)) ⟩
280 k x y o ( < (x o ○ d) o g , id1 A d o g > ) ≈↑⟨ cdr (IsCCC.distr-π isCCC) ⟩ 213 k x y ∙ ( < (x ∙ ○ d) ∙ g , id1 A d ∙ g > ) ≈↑⟨ cdr (IsCCC.distr-π isCCC) ⟩
281 k x y o ( < x o ○ d , id1 A d > o g ) ≈⟨ assoc ⟩ 214 k x y ∙ ( < x ∙ ○ d , id1 A d > ∙ g ) ≈⟨ assoc ⟩
282 (k x y o < x o ○ d , id1 A d > ) o g ≈⟨ car (fc0 record { hom = f ; phi = y }) ⟩ 215 (k x y ∙ < x ∙ ○ d , id1 A d > ) ∙ g ≈⟨ car (fc0 record { hom = f ; phi = y }) ⟩
283 f o g ∎ 216 f ∙ g ∎
284 ... | v {_} {_} {_} {f} y = begin 217 ... | v {_} {_} {_} {f} y = begin
285 ( (k x y o < π o π , < π' o π , π' > >) *) o < x o (○ b) , id1 A b > ≈⟨ IsCCC.distr-* isCCC ⟩ 218 ( (k x y ∙ < π ∙ π , < π' ∙ π , π' > >) *) ∙ < x ∙ (○ b) , id1 A b > ≈⟨ IsCCC.distr-* isCCC ⟩
286 ( (k x y o < π o π , < π' o π , π' > >) o < < x o ○ b , id1 A _ > o π , π' > ) * ≈⟨ IsCCC.*-cong isCCC ( begin 219 ( (k x y ∙ < π ∙ π , < π' ∙ π , π' > >) ∙ < < x ∙ ○ b , id1 A _ > ∙ π , π' > ) * ≈⟨ IsCCC.*-cong isCCC ( begin
287 ( k x y o < π o π , < π' o π , π' > >) o < < x o ○ b , id1 A _ > o π , π' > ≈↑⟨ assoc ⟩ 220 ( k x y ∙ < π ∙ π , < π' ∙ π , π' > >) ∙ < < x ∙ ○ b , id1 A _ > ∙ π , π' > ≈↑⟨ assoc ⟩
288 k x y o ( < π o π , < π' o π , π' > > o < < x o ○ b , id1 A _ > o π , π' > ) ≈⟨ cdr (IsCCC.distr-π isCCC) ⟩ 221 k x y ∙ ( < π ∙ π , < π' ∙ π , π' > > ∙ < < x ∙ ○ b , id1 A _ > ∙ π , π' > ) ≈⟨ cdr (IsCCC.distr-π isCCC) ⟩
289 k x y o < (π o π) o < < x o ○ b , id1 A _ > o π , π' > , < π' o π , π' > o < < x o ○ b , id1 A _ > o π , π' > > 222 k x y ∙ < (π ∙ π) ∙ < < x ∙ ○ b , id1 A _ > ∙ π , π' > , < π' ∙ π , π' > ∙ < < x ∙ ○ b , id1 A _ > ∙ π , π' > >
290 ≈⟨ cdr (IsCCC.π-cong isCCC (sym assoc) (IsCCC.distr-π isCCC )) ⟩ 223 ≈⟨ cdr (π-cong (sym assoc) (IsCCC.distr-π isCCC )) ⟩
291 k x y o < π o (π o < < x o ○ b , id1 A _ > o π , π' > ) , 224 k x y ∙ < π ∙ (π ∙ < < x ∙ ○ b , id1 A _ > ∙ π , π' > ) ,
292 < (π' o π) o < < x o ○ b , id1 A _ > o π , π' > , π' o < < x o ○ b , id1 A _ > o π , π' > > > 225 < (π' ∙ π) ∙ < < x ∙ ○ b , id1 A _ > ∙ π , π' > , π' ∙ < < x ∙ ○ b , id1 A _ > ∙ π , π' > > >
293 ≈⟨ cdr ( IsCCC.π-cong isCCC (cdr (IsCCC.e3a isCCC))( IsCCC.π-cong isCCC (sym assoc) (IsCCC.e3b isCCC) )) ⟩ 226 ≈⟨ cdr ( π-cong (cdr (IsCCC.e3a isCCC))( π-cong (sym assoc) (IsCCC.e3b isCCC) )) ⟩
294 k x y o < π o ( < x o ○ b , id1 A _ > o π ) , < π' o (π o < < x o ○ b , id1 A _ > o π , π' >) , π' > > 227 k x y ∙ < π ∙ ( < x ∙ ○ b , id1 A _ > ∙ π ) , < π' ∙ (π ∙ < < x ∙ ○ b , id1 A _ > ∙ π , π' >) , π' > >
295 ≈⟨ cdr ( IsCCC.π-cong isCCC refl-hom ( IsCCC.π-cong isCCC (cdr (IsCCC.e3a isCCC)) refl-hom )) ⟩ 228 ≈⟨ cdr ( π-cong refl-hom ( π-cong (cdr (IsCCC.e3a isCCC)) refl-hom )) ⟩
296 k x y o < (π o < x o ○ b , id1 A _ > o π ) , < π' o (< x o ○ b , id1 A _ > o π ) , π' > > 229 k x y ∙ < (π ∙ ( < x ∙ ○ b , id1 A _ > ∙ π ) ) , < π' ∙ (< x ∙ ○ b , id1 A _ > ∙ π ) , π' > >
297 ≈⟨ cdr ( IsCCC.π-cong isCCC assoc (IsCCC.π-cong isCCC assoc refl-hom )) ⟩ 230 ≈⟨ cdr ( π-cong assoc (π-cong assoc refl-hom )) ⟩
298 k x y o < (π o < x o ○ b , id1 A _ > ) o π , < (π' o < x o ○ b , id1 A _ > ) o π , π' > > 231 k x y ∙ < (π ∙ < x ∙ ○ b , id1 A _ > ) ∙ π , < (π' ∙ < x ∙ ○ b , id1 A _ > ) ∙ π , π' > >
299 ≈⟨ cdr (IsCCC.π-cong isCCC (car (IsCCC.e3a isCCC)) (IsCCC.π-cong isCCC (car (IsCCC.e3b isCCC)) refl-hom )) ⟩ 232 ≈⟨ cdr (π-cong (car (IsCCC.e3a isCCC)) (π-cong (car (IsCCC.e3b isCCC)) refl-hom )) ⟩
300 k x y o < ( (x o ○ b ) o π ) , < id1 A _ o π , π' > > ≈⟨ cdr (IsCCC.π-cong isCCC (sym assoc) (IsCCC.π-cong isCCC idL refl-hom )) ⟩ 233 k x y ∙ < ( (x ∙ ○ b ) ∙ π ) , < id1 A _ ∙ π , π' > > ≈⟨ cdr (π-cong (sym assoc) (π-cong idL refl-hom )) ⟩
301 k x y o < x o (○ b o π ) , < π , π' > > ≈⟨ cdr (IsCCC.π-cong isCCC (cdr (IsCCC.e2 isCCC)) (IsCCC.π-id isCCC) ) ⟩ 234 k x y ∙ < x ∙ (○ b ∙ π ) , < π , π' > > ≈⟨ cdr (π-cong (cdr (e2)) (IsCCC.π-id isCCC) ) ⟩
302 k x y o < x o ○ _ , id1 A _ > ≈⟨ fc0 record { hom = f ; phi = y} ⟩ 235 k x y ∙ < x ∙ ○ _ , id1 A _ > ≈⟨ fc0 record { hom = f ; phi = y} ⟩
303 f ∎ ) ⟩ 236 f ∎ ) ⟩
304 f * ∎ 237 f * ∎
305 ... | φ-cong {_} {_} {f} {f'} f=f' y = trans-hom (fc0 record { hom = f ; phi = y}) f=f' 238 ... | φ-cong {_} {_} {f} {f'} f=f' y = trans-hom (fc0 record { hom = f ; phi = y}) f=f'
239 --
240 -- f ∙ < x ∙ ○ b , id1 A b > ≈ hom p → f ≈ k x (phi p)
241 --
306 uniq : {b c : Obj A} (p : PHom b c) (f : Hom A (a ∧ b) c) → 242 uniq : {b c : Obj A} (p : PHom b c) (f : Hom A (a ∧ b) c) →
307 A [ A [ f o < A [ x o ○ b ] , id1 A b > ] ≈ hom p ] → A [ f ≈ k x (phi p) ] 243 A [ f ∙ < x ∙ ○ b , id1 A b > ≈ hom p ] → A [ f ≈ k x (phi p) ]
308 uniq {b} {c} p f fx=p with phi p 244 uniq {b} {c} p f fx=p = sym (begin
309 ... | i {_} {_} {s} = begin -- f o < x o ○ b , id1 A b > ≈ s 245 k x (phi p) ≈⟨ fc1 p ⟩
310 f ≈↑⟨ idR ⟩ 246 k x {hom p} i ≈⟨⟩
311 f o id1 A (a ∧ b) ≈⟨ {!!} ⟩ 247 hom p ∙ π' ≈↑⟨ car fx=p ⟩
312 f o (< x o ○ b , id1 A b > o π' ) ≈⟨ assoc ⟩ 248 (f ∙ < x ∙ ○ b , id1 A b > ) ∙ π' ≈↑⟨ assoc ⟩
313 (f o < x o ○ b , id1 A b > ) o π' ≈⟨ car fx=p ⟩ 249 f ∙ (< x ∙ ○ b , id1 A b > ∙ π') ≈⟨ cdr (IsCCC.distr-π isCCC) ⟩
314 s o π' ∎ 250 f ∙ < (x ∙ ○ b) ∙ π' , id1 A b ∙ π' > ≈⟨⟩
315 ... | ii = begin -- fx=p : f o < x o ○ b , id1 A b > ≈ x 251 f ∙ < k x {x ∙ ○ b} i , id1 A b ∙ π' > ≈⟨ cdr (π-cong (sym (fc1 record { hom = x ∙ ○ b ; phi = iv ii i } )) refl-hom) ⟩
316 f ≈⟨ {!!} ⟩ 252 f ∙ < k x (phi record { hom = x ∙ ○ b ; phi = iv ii i }) , id1 A b ∙ π' > ≈⟨ cdr (π-cong refl-hom idL) ⟩
317 π ∎ 253 f ∙ < π ∙ < π , (○ b ∙ π' ) > , π' > ≈⟨ cdr (π-cong (IsCCC.e3a isCCC) refl-hom) ⟩
318 ... | iii {_} {_} {_} {g} {h} y z = begin -- fx=p : f o < x o ○ b , id1 A b > ≈ < g , h > 254 f ∙ < π , π' > ≈⟨ cdr (IsCCC.π-id isCCC) ⟩
319 f ≈⟨ {!!} ⟩ 255 f ∙ id1 A _ ≈⟨ idR ⟩
320 < k x y , k x z > ∎ 256 f ∎ ) where
321 ... | iv t t₁ = {!!} 257 fc1 : {b c : Obj A} (p : PHom b c) → A [ k x (phi p) ≈ k x {hom p} i ] -- it looks like (*) in page 60
322 ... | v t = {!!} 258 fc1 {b} {c} p = uniq record { hom = hom p ; phi = i } ( k x (phi p)) ( begin -- non terminating because of the record, which we may avoid
323 ... | φ-cong x t = {!!} 259 k x (phi p) ∙ < x ∙ ○ b , id1 A b > ≈⟨ fc0 p ⟩
324 260 hom p ∎ )
325 261
326 262
327 -- end 263 -- end