annotate Comma.agda @ 478:dc24ac6ebdb3

Comma category
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 09 Mar 2017 09:03:07 +0900
parents bcf941e20737
children a5034bdf6f38
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
477
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 open import Level
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 open import Category
478
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
3 module Comma {c₁ c₂ ℓ c₁' c₂' ℓ' : Level} {A : Category c₁ c₂ ℓ} {B : Category c₁ c₂ ℓ} {C : Category c₁' c₂' ℓ'} ( F G : Functor A C ) where
477
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import HomReasoning
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import cat-utility
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7
478
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
8 --
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
9 -- F G
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
10 -- A -> C <- B
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
11 --
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
12 -- this a special case A = B
477
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 open Functor
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 record CommaObj : Set ( c₁ ⊔ c₂' ) where
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 field
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 obj : Obj A
478
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
19 hom : Hom C ( FObj F obj ) ( FObj G obj )
477
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 open CommaObj
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 record CommaHom ( a b : CommaObj ) : Set ( c₂ ⊔ ℓ' ) where
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 field
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 arrow : Hom A ( obj a ) ( obj b )
478
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
26 comm : C [ C [ FMap G arrow o hom a ] ≈ C [ hom b o FMap F arrow ] ]
477
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 open CommaHom
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 _⋍_ : { a b : CommaObj } ( f g : CommaHom a b ) → Set ℓ
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 _⋍_ f g = A [ arrow f ≈ arrow g ]
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 _∙_ : {a b c : CommaObj } → CommaHom b c → CommaHom a b → CommaHom a c
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 _∙_ {a} {b} {c} f g = record {
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 arrow = A [ arrow f o arrow g ] ;
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 comm = comm1
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 } where
478
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
38 comm1 : C [ C [ FMap G (A [ arrow f o arrow g ] ) o hom a ] ≈ C [ hom c o FMap F (A [ arrow f o arrow g ]) ] ]
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
39 comm1 = let open ≈-Reasoning C in begin
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
40 FMap G (A [ arrow f o arrow g ] ) o hom a
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
41 ≈⟨ car ( distr G ) ⟩
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
42 ( FMap G (arrow f) o FMap G (arrow g )) o hom a
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
43 ≈↑⟨ assoc ⟩
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
44 FMap G (arrow f) o ( FMap G (arrow g ) o hom a )
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
45 ≈⟨ cdr ( comm g ) ⟩
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
46 FMap G (arrow f) o ( hom b o FMap F (arrow g ) )
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
47 ≈⟨ assoc ⟩
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
48 ( FMap G (arrow f) o hom b) o FMap F (arrow g )
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
49 ≈⟨ car ( comm f ) ⟩
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
50 ( hom c o FMap F (arrow f) ) o FMap F (arrow g )
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
51 ≈↑⟨ assoc ⟩
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
52 hom c o ( FMap F (arrow f) o FMap F (arrow g ) )
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
53 ≈↑⟨ cdr ( distr F) ⟩
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
54 hom c o FMap F (A [ arrow f o arrow g ])
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
55
477
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 CommaId : { a : CommaObj } → CommaHom a a
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 CommaId {a} = record { arrow = id1 A ( obj a ) ;
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 comm = comm2 } where
478
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
60 comm2 : C [ C [ FMap G (id1 A (obj a)) o hom a ] ≈ C [ hom a o FMap F (id1 A (obj a)) ] ]
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
61 comm2 = let open ≈-Reasoning C in begin
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
62 FMap G (id1 A (obj a)) o hom a
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
63 ≈⟨ car ( IsFunctor.identity ( isFunctor G ) ) ⟩
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
64 id1 C (FObj G (obj a)) o hom a
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
65 ≈⟨ idL ⟩
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
66 hom a
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
67 ≈↑⟨ idR ⟩
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
68 hom a o id1 C (FObj F (obj a))
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
69 ≈↑⟨ cdr ( IsFunctor.identity ( isFunctor F ) )⟩
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
70 hom a o FMap F (id1 A (obj a))
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
71
477
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 isCommaCategory : IsCategory CommaObj CommaHom _⋍_ _∙_ CommaId
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 isCommaCategory = record {
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 isEquivalence = let open ≈-Reasoning (A) in record {refl = refl-hom ;
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 sym = sym ;
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 trans = trans-hom }
478
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
78 ; identityL = λ{a b f} → identityL {a} {b} {f}
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
79 ; identityR = λ{a b f} → let open ≈-Reasoning A in idR
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
80 ; o-resp-≈ = IsCategory.o-resp-≈ ( Category.isCategory A )
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
81 ; associative = IsCategory.associative (Category.isCategory A)
477
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 } where
478
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
83 identityL : {a : CommaObj} {b : CommaObj} {f : CommaHom a b} → (CommaId ∙ f) ⋍ f
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
84 identityL {a} {b} {f} = let open ≈-Reasoning A in begin
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
85 arrow (CommaId ∙ f)
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
86 ≈⟨⟩
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
87 arrow (CommaId {b} ) o arrow f
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
88 ≈⟨⟩
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
89 id1 A (obj b) o arrow f
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
90 ≈⟨ idL ⟩
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
91 arrow f
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
92
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
93
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
94 _↓_ : Category (c₂' ⊔ c₁) (ℓ' ⊔ c₂) ℓ
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
95 _↓_ = record { Obj = CommaObj
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
96 ; Hom = CommaHom
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
97 ; _o_ = _∙_
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
98 ; _≈_ = _⋍_
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
99 ; Id = CommaId
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
100 ; isCategory = isCommaCategory
dc24ac6ebdb3 Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 477
diff changeset
101 }
477
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102
bcf941e20737 add Comma category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103