comparison CCChom.agda @ 795:030c5b87ed78

ccc to adjunction done
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 22 Apr 2019 18:00:03 +0900
parents ba575c73ea48
children 82a8c1ab4ef5
comparison
equal deleted inserted replaced
794:ba575c73ea48 795:030c5b87ed78
2 open import Category 2 open import Category
3 module CCChom where 3 module CCChom where
4 4
5 open import HomReasoning 5 open import HomReasoning
6 open import cat-utility 6 open import cat-utility
7 open import Data.Product renaming (_×_ to _∧_) 7 open import Data.Product renaming (_×_ to _/\_ ) hiding ( <_,_> )
8 open import Category.Constructions.Product 8 open import Category.Constructions.Product
9 open import Relation.Binary.PropositionalEquality hiding ( [_] ) 9 open import Relation.Binary.PropositionalEquality hiding ( [_] )
10 10
11 open Functor 11 open Functor
12 12
168 168
169 U_b : {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) → ( ccc : CCC A ) → (b : Obj A) → Functor A A 169 U_b : {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) → ( ccc : CCC A ) → (b : Obj A) → Functor A A
170 FObj (U_b A ccc b) = λ a → (CCC._<=_ ccc a b ) 170 FObj (U_b A ccc b) = λ a → (CCC._<=_ ccc a b )
171 FMap (U_b A ccc b) = λ f → CCC._* ccc ( A [ f o CCC.ε ccc ] ) 171 FMap (U_b A ccc b) = λ f → CCC._* ccc ( A [ f o CCC.ε ccc ] )
172 isFunctor (U_b A ccc b) = isF where 172 isFunctor (U_b A ccc b) = isF where
173 isF : IsFunctor A A ( λ a → (CCC._<=_ ccc a b)) ( λ f → CCC._* ccc ( A [ f o CCC.ε ccc ] ) ) 173 _<=_ = CCC._<=_ ccc
174 _∧_ = CCC._∧_ ccc
175 <_,_> = CCC.<_,_> ccc
176 _* = CCC._* ccc
177 ε = CCC.ε ccc
178 π = CCC.π ccc
179 π' = CCC.π' ccc
180 isc = CCC.isCCC ccc
181 *-cong = IsCCC.*-cong (CCC.isCCC ccc)
182 π-cong = IsCCC.π-cong (CCC.isCCC ccc)
183
184 isF : IsFunctor A A ( λ a → (a <= b)) ( λ f → CCC._* ccc ( A [ f o ε ] ) )
174 IsFunctor.≈-cong isF f≈g = IsCCC.*-cong (CCC.isCCC ccc) ( car f≈g ) where open ≈-Reasoning A 185 IsFunctor.≈-cong isF f≈g = IsCCC.*-cong (CCC.isCCC ccc) ( car f≈g ) where open ≈-Reasoning A
175 -- e4b : {a b c : Obj A} → { k : Hom A c (a <= b ) } → A [ ( A [ ε o < A [ k o π ] , π' > ] ) * ≈ k ] 186 -- e4b : {a b c : Obj A} → { k : Hom A c (a <= b ) } → A [ ( A [ ε o < A [ k o π ] , π' > ] ) * ≈ k ]
176 IsFunctor.identity isF {a} = begin 187 IsFunctor.identity isF {a} = begin
177 (ccc CCC.*) (A [ id1 A a o CCC.ε ccc ]) 188 (id1 A a o ε ) *
178 ≈⟨ IsCCC.*-cong (CCC.isCCC ccc) ( begin 189 ≈⟨ IsCCC.*-cong (CCC.isCCC ccc) ( begin
179 id1 A a o CCC.ε ccc 190 id1 A a o CCC.ε ccc
180 ≈⟨ idL ⟩ 191 ≈⟨ idL ⟩
181 CCC.ε ccc 192 ε
182 ≈↑⟨ idR ⟩ 193 ≈↑⟨ idR ⟩
183 CCC.ε ccc o id1 A (CCC._∧_ ccc ( CCC._<=_ ccc a b ) b ) 194 ε o id1 A ( ( a <= b ) ∧ b )
184 ≈↑⟨ cdr ( IsCCC.π-id (CCC.isCCC ccc)) ⟩ 195 ≈↑⟨ cdr ( IsCCC.π-id isc) ⟩
185 CCC.ε ccc o ( CCC.<_,_> ccc ( CCC.π ccc ) (CCC.π' ccc) ) 196 ε o ( < π , π' > )
186 ≈↑⟨ cdr ( IsCCC.π-cong (CCC.isCCC ccc) idL refl-hom) ⟩ 197 ≈↑⟨ cdr ( π-cong idL refl-hom) ⟩
187 CCC.ε ccc o ( CCC.<_,_> ccc ( id1 A (CCC._<=_ ccc a b) o CCC.π ccc ) (CCC.π' ccc) ) 198 ε o ( < id1 A (a <= b) o π , π' > )
188 ∎ ) ⟩ 199 ∎ ) ⟩
189 (ccc CCC.*) ( CCC.ε ccc o ( CCC.<_,_> ccc ( id1 A (CCC._<=_ ccc a b) o CCC.π ccc ) (CCC.π' ccc) )) 200 ( ε o ( < id1 A ( a <= b) o π , π' > ) ) *
190 ≈⟨ IsCCC.e4b (CCC.isCCC ccc) ⟩ 201 ≈⟨ IsCCC.e4b (CCC.isCCC ccc) ⟩
191 id1 A ((ccc CCC.<= a) b) 202 id1 A (a <= b)
192 ∎ where open ≈-Reasoning A 203 ∎ where open ≈-Reasoning A
193 IsFunctor.distr isF {x} {y} {z} {f} {g} = begin 204 IsFunctor.distr isF {x} {y} {z} {f} {g} = begin
194 (ccc CCC.*) ( ( g o f ) o CCC.ε ccc ) 205 ( ( g o f ) o ε ) *
195 ≈⟨ {!!} ⟩ 206 ≈↑⟨ *-cong assoc ⟩
196 (ccc CCC.*) (( g o CCC.ε ccc ) o CCC.<_,_> ccc ((ccc CCC.*) 207 ( g o (f o ε ) ) *
197 ( f o ( CCC.ε ccc o CCC.<_,_> ccc (CCC.π ccc o CCC.π ccc ) (CCC.π' ccc)))) (CCC.π' ccc)) 208 ≈↑⟨ *-cong ( cdr (IsCCC.e4a isc) ) ⟩
198 ≈⟨ IsCCC.*-cong (CCC.isCCC ccc) ( cdr ( IsCCC.π-cong (CCC.isCCC ccc) ( begin 209 ( g o ( ε o ( < ( ( f o ε ) * ) o π , π' > ) )) *
199 (ccc CCC.*) ( f o ( CCC.ε ccc o CCC.<_,_> ccc (CCC.π ccc o CCC.π ccc ) (CCC.π' ccc))) 210 ≈⟨ *-cong assoc ⟩
200 ≈⟨ IsCCC.*-cong (CCC.isCCC ccc) assoc ⟩ 211 ( ( g o ε ) o ( < ( ( f o ε ) * ) o π , π' > ) ) *
201 (ccc CCC.*) (( f o CCC.ε ccc ) o CCC.<_,_> ccc (CCC.π ccc o CCC.π ccc ) (CCC.π' ccc)) 212 ≈↑⟨ IsCCC.distr-* isc ⟩
202 ≈↑⟨ IsCCC.distr-* (CCC.isCCC ccc) ⟩ 213 ( g o ε ) * o ( f o ε ) *
203 (ccc CCC.*) ( f o CCC.ε ccc ) o CCC.π ccc 214 ∎ where open ≈-Reasoning A
204 ∎ ) refl-hom )) ⟩ 215
205 (ccc CCC.*) (( g o CCC.ε ccc ) o CCC.<_,_> ccc ( (ccc CCC.*) ( f o CCC.ε ccc ) o CCC.π ccc ) (CCC.π' ccc) ) 216 F_b : {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) → ( ccc : CCC A ) → (b : Obj A) → Functor A A
206 ≈↑⟨ IsCCC.distr-* (CCC.isCCC ccc) ⟩ 217 FObj (F_b A ccc b) = λ a → ( CCC._∧_ ccc a b )
207 (ccc CCC.*) ( g o CCC.ε ccc ) o (ccc CCC.*) ( f o CCC.ε ccc ) 218 FMap (F_b A ccc b) = λ f → ( CCC.<_,_> ccc (A [ f o CCC.π ccc ] ) ( CCC.π' ccc) )
208 ∎ where open ≈-Reasoning A 219 isFunctor (F_b A ccc b) = isF where
220 _∧_ = CCC._∧_ ccc
221 <_,_> = CCC.<_,_> ccc
222 π = CCC.π ccc
223 π' = CCC.π' ccc
224 isc = CCC.isCCC ccc
225 π-cong = IsCCC.π-cong (CCC.isCCC ccc)
226
227 isF : IsFunctor A A ( λ a → (a ∧ b)) ( λ f → < ( A [ f o π ] ) , π' > )
228 IsFunctor.≈-cong isF f≈g = π-cong ( car f≈g ) refl-hom where open ≈-Reasoning A
229 IsFunctor.identity isF {a} = trans-hom (π-cong idL refl-hom ) (IsCCC.π-id isc) where open ≈-Reasoning A
230 IsFunctor.distr isF {x} {y} {z} {f} {g} = begin
231 < ( g o f ) o π , π' >
232 ≈↑⟨ π-cong assoc refl-hom ⟩
233 < g o ( f o π ) , π' >
234 ≈↑⟨ π-cong (cdr (IsCCC.e3a isc )) refl-hom ⟩
235 < g o ( π o < ( f o π ) , π' > ) , π' >
236 ≈⟨ π-cong assoc ( sym-hom (IsCCC.e3b isc )) ⟩
237 < ( g o π ) o < ( f o π ) , π' > , π' o < ( f o π ) , π' > >
238 ≈↑⟨ IsCCC.distr-π isc ⟩
239 < ( g o π ) , π' > o < ( f o π ) , π' >
240 ∎ where open ≈-Reasoning A
241
242 CCCtoAdj : {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) ( ccc : CCC A ) → (b : Obj A ) → coUniversalMapping A A (F_b A ccc b)
243 CCCtoAdj A ccc b = record {
244 U = λ a → a <= b
245 ; ε = ε'
246 ; _*' = solution
247 ; iscoUniversalMapping = record {
248 couniversalMapping = couniversalMapping
249 ; couniquness = couniquness
250 }
251 } where
252 _<=_ = CCC._<=_ ccc
253 <_,_> = CCC.<_,_> ccc
254 _* = CCC._* ccc
255 ε = CCC.ε ccc
256 π = CCC.π ccc
257 π' = CCC.π' ccc
258 isc = CCC.isCCC ccc
259 *-cong = IsCCC.*-cong (CCC.isCCC ccc)
260 ε' : (a : Obj A) → Hom A (FObj (F_b A ccc b) (a <= b)) a
261 ε' a = ε
262 solution : { b' : Obj A} {a : Obj A} → Hom A (FObj (F_b A ccc b) a) b' → Hom A a (b' <= b)
263 solution f = f *
264 couniversalMapping : {b = b₁ : Obj A} {a : Obj A}
265 {f : Hom A (FObj (F_b A ccc b) a) b₁} →
266 A [ A [ ε' b₁ o FMap (F_b A ccc b) (solution f) ] ≈ f ]
267 couniversalMapping {c} {a} {f} = IsCCC.e4a isc
268 couniquness : {b = b₁ : Obj A} {a : Obj A}
269 {f : Hom A (FObj (F_b A ccc b) a) b₁} {g : Hom A a (b₁ <= b)} →
270 A [ A [ ε' b₁ o FMap (F_b A ccc b) g ] ≈ f ] → A [ solution f ≈ g ]
271 couniquness {c} {a} {f} {g} eq = begin
272 f *
273 ≈↑⟨ *-cong eq ⟩
274 ( ε o FMap (F_b A ccc b) g ) *
275 ≈⟨⟩
276 ( ε o < ( g o π ) , π' > ) *
277 ≈⟨ IsCCC.e4b isc ⟩
278 g
279 ∎ where open ≈-Reasoning A
280
209 281
210 282
211 283
212 c^b=b<=c : {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) ( ccc : CCC A ) → {a b c : Obj A} → -- Hom A 1 ( c ^ b ) ≅ Hom A b c 284 c^b=b<=c : {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) ( ccc : CCC A ) → {a b c : Obj A} → -- Hom A 1 ( c ^ b ) ≅ Hom A b c
213 IsoS A A (CCC.1 ccc ) (CCC._<=_ ccc c b) b c 285 IsoS A A (CCC.1 ccc ) (CCC._<=_ ccc c b) b c
297 369
298 hom→CCC : {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) ( h : CCChom A ) → CCC A 370 hom→CCC : {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) ( h : CCChom A ) → CCC A
299 hom→CCC A h = record { 371 hom→CCC A h = record {
300 1 = 1 372 1 = 1
301 ; ○ = ○ 373 ; ○ = ○
302 ; _∧_ = _/\_ 374 ; _∧_ = _∧_
303 ; <_,_> = <,> 375 ; <_,_> = <,>
304 ; π = π 376 ; π = π
305 ; π' = π' 377 ; π' = π'
306 ; _<=_ = _<=_ 378 ; _<=_ = _<=_
307 ; _* = _* 379 ; _* = _*
310 } where 382 } where
311 1 : Obj A 383 1 : Obj A
312 1 = one h 384 1 = one h
313 ○ : (a : Obj A ) → Hom A a 1 385 ○ : (a : Obj A ) → Hom A a 1
314 ○ a = ≅← ( ccc-1 (isCCChom h ) {_} {OneObj} {OneObj} ) OneObj 386 ○ a = ≅← ( ccc-1 (isCCChom h ) {_} {OneObj} {OneObj} ) OneObj
315 _/\_ : Obj A → Obj A → Obj A 387 _∧_ : Obj A → Obj A → Obj A
316 _/\_ a b = _*_ h a b 388 _∧_ a b = _*_ h a b
317 <,> : {a b c : Obj A } → Hom A c a → Hom A c b → Hom A c ( a /\ b) 389 <,> : {a b c : Obj A } → Hom A c a → Hom A c b → Hom A c ( a ∧ b)
318 <,> f g = ≅← ( ccc-2 (isCCChom h ) ) ( f , g ) 390 <,> f g = ≅← ( ccc-2 (isCCChom h ) ) ( f , g )
319 π : {a b : Obj A } → Hom A (a /\ b) a 391 π : {a b : Obj A } → Hom A (a ∧ b) a
320 π {a} {b} = proj₁ ( ≅→ ( ccc-2 (isCCChom h ) ) (id1 A (_*_ h a b) )) 392 π {a} {b} = proj₁ ( ≅→ ( ccc-2 (isCCChom h ) ) (id1 A (_*_ h a b) ))
321 π' : {a b : Obj A } → Hom A (a /\ b) b 393 π' : {a b : Obj A } → Hom A (a ∧ b) b
322 π' {a} {b} = proj₂ ( ≅→ ( ccc-2 (isCCChom h ) ) (id1 A (_*_ h a b) )) 394 π' {a} {b} = proj₂ ( ≅→ ( ccc-2 (isCCChom h ) ) (id1 A (_*_ h a b) ))
323 _<=_ : (a b : Obj A ) → Obj A 395 _<=_ : (a b : Obj A ) → Obj A
324 _<=_ = _^_ h 396 _<=_ = _^_ h
325 _* : {a b c : Obj A } → Hom A (a /\ b) c → Hom A a (c <= b) 397 _* : {a b c : Obj A } → Hom A (a ∧ b) c → Hom A a (c <= b)
326 _* = ≅← ( ccc-3 (isCCChom h ) ) 398 _* = ≅← ( ccc-3 (isCCChom h ) )
327 ε : {a b : Obj A } → Hom A ((a <= b ) /\ b) a 399 ε : {a b : Obj A } → Hom A ((a <= b ) ∧ b) a
328 ε {a} {b} = ≅→ ( ccc-3 (isCCChom h ) {_^_ h a b} {b} ) (id1 A ( _^_ h a b )) 400 ε {a} {b} = ≅→ ( ccc-3 (isCCChom h ) {_^_ h a b} {b} ) (id1 A ( _^_ h a b ))
329 isCCC : CCC.IsCCC A 1 ○ _/\_ <,> π π' _<=_ _* ε 401 isCCC : CCC.IsCCC A 1 ○ _∧_ <,> π π' _<=_ _* ε
330 isCCC = record { 402 isCCC = record {
331 e2 = e2 403 e2 = e2
332 ; e3a = e3a 404 ; e3a = e3a
333 ; e3b = e3b 405 ; e3b = e3b
334 ; e3c = e3c 406 ; e3c = e3c
387 ≈⟨ cong-proj₂ ( iso→ (ccc-2 (isCCChom h))) ⟩ 459 ≈⟨ cong-proj₂ ( iso→ (ccc-2 (isCCChom h))) ⟩
388 proj₂ ( f , g ) 460 proj₂ ( f , g )
389 ≈⟨⟩ 461 ≈⟨⟩
390 g 462 g
391 ∎ where open ≈-Reasoning A 463 ∎ where open ≈-Reasoning A
392 e3c : {a b c : Obj A} → { h : Hom A c (a /\ b) } → A [ <,> ( A [ π o h ] ) ( A [ π' o h ] ) ≈ h ] 464 e3c : {a b c : Obj A} → { h : Hom A c (a ∧ b) } → A [ <,> ( A [ π o h ] ) ( A [ π' o h ] ) ≈ h ]
393 e3c {a} {b} {c} {f} = begin 465 e3c {a} {b} {c} {f} = begin
394 <,> ( π o f ) ( π' o f ) 466 <,> ( π o f ) ( π' o f )
395 ≈⟨⟩ 467 ≈⟨⟩
396 ≅← (ccc-2 (isCCChom h)) ( ( proj₁ (≅→ (ccc-2 (isCCChom h)) (id1 A (_*_ h a b) ))) o f 468 ≅← (ccc-2 (isCCChom h)) ( ( proj₁ (≅→ (ccc-2 (isCCChom h)) (id1 A (_*_ h a b) ))) o f
397 , ( proj₂ (≅→ (ccc-2 (isCCChom h)) (id1 A (_*_ h a b)))) o f ) 469 , ( proj₂ (≅→ (ccc-2 (isCCChom h)) (id1 A (_*_ h a b)))) o f )
412 ≈⟨ cong← (ccc-2 (isCCChom h)) ( eq1 , eq2 ) ⟩ 484 ≈⟨ cong← (ccc-2 (isCCChom h)) ( eq1 , eq2 ) ⟩
413 ≅← (ccc-2 (isCCChom h)) (f' , g') 485 ≅← (ccc-2 (isCCChom h)) (f' , g')
414 ≈⟨⟩ 486 ≈⟨⟩
415 <,> f' g' 487 <,> f' g'
416 ∎ where open ≈-Reasoning A 488 ∎ where open ≈-Reasoning A
417 e4a : {a b c : Obj A} → { k : Hom A (c /\ b) a } → A [ A [ ε o ( <,> ( A [ (k *) o π ] ) π') ] ≈ k ] 489 e4a : {a b c : Obj A} → { k : Hom A (c ∧ b) a } → A [ A [ ε o ( <,> ( A [ (k *) o π ] ) π') ] ≈ k ]
418 e4a {a} {b} {c} {k} = begin 490 e4a {a} {b} {c} {k} = begin
419 ε o ( <,> ((k *) o π ) π' ) 491 ε o ( <,> ((k *) o π ) π' )
420 ≈⟨⟩ 492 ≈⟨⟩
421 ≅→ (ccc-3 (isCCChom h)) (id1 A (_^_ h a b)) o (≅← (ccc-2 (isCCChom h)) ((( ≅← (ccc-3 (isCCChom h)) k) o π ) , π')) 493 ≅→ (ccc-3 (isCCChom h)) (id1 A (_^_ h a b)) o (≅← (ccc-2 (isCCChom h)) ((( ≅← (ccc-3 (isCCChom h)) k) o π ) , π'))
422 ≈⟨ nat-3 (isCCChom h) ⟩ 494 ≈⟨ nat-3 (isCCChom h) ⟩
432 ≈⟨ cong← (ccc-3 (isCCChom h)) (nat-3 (isCCChom h)) ⟩ 504 ≈⟨ cong← (ccc-3 (isCCChom h)) (nat-3 (isCCChom h)) ⟩
433 ≅← (ccc-3 (isCCChom h)) (≅→ (ccc-3 (isCCChom h)) k) 505 ≅← (ccc-3 (isCCChom h)) (≅→ (ccc-3 (isCCChom h)) k)
434 ≈⟨ iso← (ccc-3 (isCCChom h)) ⟩ 506 ≈⟨ iso← (ccc-3 (isCCChom h)) ⟩
435 k 507 k
436 ∎ where open ≈-Reasoning A 508 ∎ where open ≈-Reasoning A
437 *-cong : {a b c : Obj A} {f f' : Hom A (a /\ b) c} → A [ f ≈ f' ] → A [ f * ≈ f' * ] 509 *-cong : {a b c : Obj A} {f f' : Hom A (a ∧ b) c} → A [ f ≈ f' ] → A [ f * ≈ f' * ]
438 *-cong eq = cong← ( ccc-3 (isCCChom h )) eq 510 *-cong eq = cong← ( ccc-3 (isCCChom h )) eq
439 511
440 open import Category.Sets 512 open import Category.Sets
441 513
442 postulate extensionality : { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ ) → Relation.Binary.PropositionalEquality.Extensionality c₂ c₂ 514 postulate extensionality : { c₁ c₂ ℓ : Level} ( A : Category c₁ c₂ ℓ ) → Relation.Binary.PropositionalEquality.Extensionality c₂ c₂
446 518
447 sets : {l : Level } → CCC (Sets {l}) 519 sets : {l : Level } → CCC (Sets {l})
448 sets {l} = record { 520 sets {l} = record {
449 1 = One' 521 1 = One'
450 ; ○ = λ _ → λ _ → OneObj' 522 ; ○ = λ _ → λ _ → OneObj'
451 ; _∧_ = _/\_ 523 ; _∧_ = _∧_
452 ; <_,_> = <,> 524 ; <_,_> = <,>
453 ; π = π 525 ; π = π
454 ; π' = π' 526 ; π' = π'
455 ; _<=_ = _<=_ 527 ; _<=_ = _<=_
456 ; _* = _* 528 ; _* = _*
459 } where 531 } where
460 1 : Obj Sets 532 1 : Obj Sets
461 1 = One' 533 1 = One'
462 ○ : (a : Obj Sets ) → Hom Sets a 1 534 ○ : (a : Obj Sets ) → Hom Sets a 1
463 ○ a = λ _ → OneObj' 535 ○ a = λ _ → OneObj'
464 _/\_ : Obj Sets → Obj Sets → Obj Sets 536 _∧_ : Obj Sets → Obj Sets → Obj Sets
465 _/\_ a b = a ∧ b 537 _∧_ a b = a /\ b
466 <,> : {a b c : Obj Sets } → Hom Sets c a → Hom Sets c b → Hom Sets c ( a /\ b) 538 <,> : {a b c : Obj Sets } → Hom Sets c a → Hom Sets c b → Hom Sets c ( a ∧ b)
467 <,> f g = λ x → ( f x , g x ) 539 <,> f g = λ x → ( f x , g x )
468 π : {a b : Obj Sets } → Hom Sets (a /\ b) a 540 π : {a b : Obj Sets } → Hom Sets (a ∧ b) a
469 π {a} {b} = proj₁ 541 π {a} {b} = proj₁
470 π' : {a b : Obj Sets } → Hom Sets (a /\ b) b 542 π' : {a b : Obj Sets } → Hom Sets (a ∧ b) b
471 π' {a} {b} = proj₂ 543 π' {a} {b} = proj₂
472 _<=_ : (a b : Obj Sets ) → Obj Sets 544 _<=_ : (a b : Obj Sets ) → Obj Sets
473 a <= b = b → a 545 a <= b = b → a
474 _* : {a b c : Obj Sets } → Hom Sets (a /\ b) c → Hom Sets a (c <= b) 546 _* : {a b c : Obj Sets } → Hom Sets (a ∧ b) c → Hom Sets a (c <= b)
475 f * = λ x → λ y → f ( x , y ) 547 f * = λ x → λ y → f ( x , y )
476 ε : {a b : Obj Sets } → Hom Sets ((a <= b ) /\ b) a 548 ε : {a b : Obj Sets } → Hom Sets ((a <= b ) ∧ b) a
477 ε {a} {b} = λ x → ( proj₁ x ) ( proj₂ x ) 549 ε {a} {b} = λ x → ( proj₁ x ) ( proj₂ x )
478 isCCC : CCC.IsCCC Sets 1 ○ _/\_ <,> π π' _<=_ _* ε 550 isCCC : CCC.IsCCC Sets 1 ○ _∧_ <,> π π' _<=_ _* ε
479 isCCC = record { 551 isCCC = record {
480 e2 = e2 552 e2 = e2
481 ; e3a = λ {a} {b} {c} {f} {g} → e3a {a} {b} {c} {f} {g} 553 ; e3a = λ {a} {b} {c} {f} {g} → e3a {a} {b} {c} {f} {g}
482 ; e3b = λ {a} {b} {c} {f} {g} → e3b {a} {b} {c} {f} {g} 554 ; e3b = λ {a} {b} {c} {f} {g} → e3b {a} {b} {c} {f} {g}
483 ; e3c = e3c 555 ; e3c = e3c
496 Sets [ ( Sets [ π o ( <,> f g) ] ) ≈ f ] 568 Sets [ ( Sets [ π o ( <,> f g) ] ) ≈ f ]
497 e3a = refl 569 e3a = refl
498 e3b : {a b c : Obj Sets} {f : Hom Sets c a} {g : Hom Sets c b} → 570 e3b : {a b c : Obj Sets} {f : Hom Sets c a} {g : Hom Sets c b} →
499 Sets [ Sets [ π' o ( <,> f g ) ] ≈ g ] 571 Sets [ Sets [ π' o ( <,> f g ) ] ≈ g ]
500 e3b = refl 572 e3b = refl
501 e3c : {a b c : Obj Sets} {h : Hom Sets c (a /\ b)} → 573 e3c : {a b c : Obj Sets} {h : Hom Sets c (a ∧ b)} →
502 Sets [ <,> (Sets [ π o h ]) (Sets [ π' o h ]) ≈ h ] 574 Sets [ <,> (Sets [ π o h ]) (Sets [ π' o h ]) ≈ h ]
503 e3c = refl 575 e3c = refl
504 π-cong : {a b c : Obj Sets} {f f' : Hom Sets c a} {g g' : Hom Sets c b} → 576 π-cong : {a b c : Obj Sets} {f f' : Hom Sets c a} {g g' : Hom Sets c b} →
505 Sets [ f ≈ f' ] → Sets [ g ≈ g' ] → Sets [ <,> f g ≈ <,> f' g' ] 577 Sets [ f ≈ f' ] → Sets [ g ≈ g' ] → Sets [ <,> f g ≈ <,> f' g' ]
506 π-cong refl refl = refl 578 π-cong refl refl = refl
507 e4a : {a b c : Obj Sets} {h : Hom Sets (c /\ b) a} → 579 e4a : {a b c : Obj Sets} {h : Hom Sets (c ∧ b) a} →
508 Sets [ Sets [ ε o <,> (Sets [ h * o π ]) π' ] ≈ h ] 580 Sets [ Sets [ ε o <,> (Sets [ h * o π ]) π' ] ≈ h ]
509 e4a = refl 581 e4a = refl
510 e4b : {a b c : Obj Sets} {k : Hom Sets c (a <= b)} → 582 e4b : {a b c : Obj Sets} {k : Hom Sets c (a <= b)} →
511 Sets [ (Sets [ ε o <,> (Sets [ k o π ]) π' ]) * ≈ k ] 583 Sets [ (Sets [ ε o <,> (Sets [ k o π ]) π' ]) * ≈ k ]
512 e4b = refl 584 e4b = refl
513 *-cong : {a b c : Obj Sets} {f f' : Hom Sets (a /\ b) c} → 585 *-cong : {a b c : Obj Sets} {f f' : Hom Sets (a ∧ b) c} →
514 Sets [ f ≈ f' ] → Sets [ f * ≈ f' * ] 586 Sets [ f ≈ f' ] → Sets [ f * ≈ f' * ]
515 *-cong refl = refl 587 *-cong refl = refl
516 588
517 589