annotate src/ToposEx.agda @ 1089:77e40cea8264

i : {b c : Obj A} (f : Hom A b c ) → ¬ ( f ≅ x ) → φ x f is bad
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 17 May 2021 00:42:08 +0900
parents 60b24b3dc0c6
children 45de2b31bf02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1038
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1037
diff changeset
1 {-# OPTIONS --allow-unsolved-metas #-}
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 open import CCC
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 open import Level
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 open import Category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import cat-utility
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import HomReasoning
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
7 module ToposEx {c₁ c₂ ℓ : Level} (A : Category c₁ c₂ ℓ) (c : CCC A) (t : Topos A c ) (n : ToposNat A (CCC.1 c)) where
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
974
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
9 open Topos
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
10 open Equalizer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
11 open ≈-Reasoning A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
12 open CCC.CCC c
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
13
1038
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1037
diff changeset
14 --
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 -- ○ b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 -- b -----------→ 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 -- | |
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 -- m | | ⊤
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 -- ↓ char m ↓
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 -- a -----------→ Ω
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 -- h
964
0128a662eb02 Topos as pull back
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 963
diff changeset
22 --
0128a662eb02 Topos as pull back
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 963
diff changeset
23 -- Ker t h : Equalizer A h (A [ ⊤ o (○ a) ])
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
977
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
25 mh=⊤ : {a d : Obj A} (h : Hom A a (Ω t)) (p1 : Hom A d a) (p2 : Hom A d 1) (eq : A [ A [ h o p1 ] ≈ A [ ⊤ t o p2 ] ] )
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
26 → A [ A [ h o p1 ] ≈ A [ A [ ⊤ t o ○ a ] o p1 ] ]
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
27 mh=⊤ {a} {d} h p1 p2 eq = begin
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
28 h o p1 ≈⟨ eq ⟩
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
29 ⊤ t o p2 ≈⟨ cdr (IsCCC.e2 isCCC) ⟩
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
30 ⊤ t o (○ d) ≈↑⟨ cdr (IsCCC.e2 isCCC) ⟩
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
31 ⊤ t o ( ○ a o p1 ) ≈⟨ assoc ⟩
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
32 (⊤ t o ○ a ) o p1 ∎
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
33
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
34 ----
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
35 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
36 -- pull back from h
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
37 --
974
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
38 topos-pullback : {a : Obj A} → (h : Hom A a (Ω t)) → Pullback A h (⊤ t)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
39 topos-pullback {a} h = record {
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 ab = equalizer-c (Ker t h) -- b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 ; π1 = equalizer (Ker t h) -- m
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 ; π2 = ○ ( equalizer-c (Ker t h) ) -- ○ b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 ; isPullback = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 commute = comm
977
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
45 ; pullback = λ {d} {p1} {p2} eq → IsEqualizer.k (isEqualizer (Ker t h)) p1 (mh=⊤ h p1 p2 eq )
964
0128a662eb02 Topos as pull back
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 963
diff changeset
46 ; π1p=π1 = IsEqualizer.ek=h (isEqualizer (Ker t h))
0128a662eb02 Topos as pull back
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 963
diff changeset
47 ; π2p=π2 = λ {d} {p1'} {p2'} {eq} → lemma2 eq
0128a662eb02 Topos as pull back
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 963
diff changeset
48 ; uniqueness = uniq
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 }
974
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
50 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
51 e2 = IsCCC.e2 isCCC
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 comm : A [ A [ h o equalizer (Ker t h) ] ≈ A [ ⊤ t o ○ (equalizer-c (Ker t h)) ] ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 comm = begin
964
0128a662eb02 Topos as pull back
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 963
diff changeset
54 h o equalizer (Ker t h) ≈⟨ IsEqualizer.fe=ge (isEqualizer (Ker t h)) ⟩
0128a662eb02 Topos as pull back
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 963
diff changeset
55 (⊤ t o ○ a ) o equalizer (Ker t h) ≈↑⟨ assoc ⟩
974
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
56 ⊤ t o (○ a o equalizer (Ker t h)) ≈⟨ cdr e2 ⟩
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 ⊤ t o ○ (equalizer-c (Ker t h)) ∎
964
0128a662eb02 Topos as pull back
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 963
diff changeset
58 lemma2 : {d : Obj A} {p1' : Hom A d a} {p2' : Hom A d 1} (eq : A [ A [ h o p1' ] ≈ A [ ⊤ t o p2' ] ] )
977
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
59 → A [ A [ ○ (equalizer-c (Ker t h)) o IsEqualizer.k (isEqualizer (Ker t h)) p1'(mh=⊤ h p1' p2' eq) ] ≈ p2' ]
964
0128a662eb02 Topos as pull back
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 963
diff changeset
60 lemma2 {d} {p1'} {p2'} eq = begin
977
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
61 ○ (equalizer-c (Ker t h)) o IsEqualizer.k (isEqualizer (Ker t h)) p1'(mh=⊤ h p1' p2' eq) ≈⟨ e2 ⟩
964
0128a662eb02 Topos as pull back
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 963
diff changeset
62 ○ d ≈↑⟨ e2 ⟩
0128a662eb02 Topos as pull back
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 963
diff changeset
63 p2' ∎
976
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
64 uniq : {d : Obj A} (p' : Hom A d (equalizer-c (Ker t h))) (π1' : Hom A d a) (π2' : Hom A d 1) (eq : A [ A [ h o π1' ] ≈ A [ ⊤ t o π2' ] ])
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
65 (π1p=π1' : A [ A [ equalizer (Ker t h) o p' ] ≈ π1' ]) (π2p=π2' : A [ A [ ○ (equalizer-c (Ker t h)) o p' ] ≈ π2' ])
977
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
66 → A [ IsEqualizer.k (isEqualizer (Ker t h)) π1' (mh=⊤ h π1' π2' eq) ≈ p' ]
976
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
67 uniq {d} (p') p1' p2' eq pe1 pe2 = begin
977
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
68 IsEqualizer.k (isEqualizer (Ker t h)) p1' (mh=⊤ h p1' p2' eq) ≈⟨ IsEqualizer.uniqueness (isEqualizer (Ker t h)) pe1 ⟩
964
0128a662eb02 Topos as pull back
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 963
diff changeset
69 p' ∎
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
71 ----
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
72 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
73 -- pull back from m
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
74 --
974
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
75 topos-m-pullback : {a b : Obj A} → (m : Hom A b a) → (mono : Mono A m ) → Pullback A (char t m mono ) (⊤ t)
976
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
76 topos-m-pullback {a} {b} m mono = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
77 ab = b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
78 ; π1 = m
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
79 ; π2 = ○ b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
80 ; isPullback = record {
1017
90224a662c4e two equalizers in Topos
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1016
diff changeset
81 commute = IsTopos.char-m=⊤ (Topos.isTopos t) m mono
1018
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1017
diff changeset
82 ; pullback = λ {d} {p1} {p2} eq → k p1 p2 eq
977
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
83 ; π1p=π1 = λ {d} {p1'} {p2'} {eq} → lemma3 p1' p2' eq
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
84 ; π2p=π2 = λ {d} {p1'} {p2'} {eq} → trans-hom (IsCCC.e2 isCCC) (sym (IsCCC.e2 isCCC))
979
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
85 ; uniqueness = uniq
976
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
86 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
87 } where
1018
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1017
diff changeset
88 k : {d : Obj A} (p1 : Hom A d a) → (p2 : Hom A d 1) → A [ A [ char t m mono o p1 ] ≈ A [ ⊤ t o p2 ] ] → Hom A d b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1017
diff changeset
89 k p1 p2 eq = IsEqualizer.k (IsTopos.ker-m (isTopos t) m mono) p1 (mh=⊤ (char t m mono) p1 p2 eq )
977
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
90 lemma3 : {d : Obj A} (p1 : Hom A d a) → (p2 : Hom A d 1)
1018
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1017
diff changeset
91 → (eq : A [ A [ char t m mono o p1 ] ≈ A [ ⊤ t o p2 ] ] ) → m o (k p1 p2 eq ) ≈ p1
977
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
92 lemma3 {d} p1 p2 eq = begin
1018
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1017
diff changeset
93 m o k p1 p2 eq ≈⟨ IsEqualizer.ek=h (IsTopos.ker-m (isTopos t) m mono) ⟩
977
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
94 p1 ∎
978
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 977
diff changeset
95 uniq : {d : Obj A} (p' : Hom A d b) (π1' : Hom A d a) (π2' : Hom A d 1)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 977
diff changeset
96 (eq : A [ A [ char t m mono o π1' ] ≈ A [ ⊤ t o π2' ] ]) →
1018
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1017
diff changeset
97 A [ A [ m o p' ] ≈ π1' ] → A [ A [ ○ b o p' ] ≈ π2' ] → k π1' π2' eq ≈ p'
978
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 977
diff changeset
98 uniq {d} p p1 p2 eq pe1 pe2 = begin
1018
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1017
diff changeset
99 k p1 p2 eq ≈⟨ IsEqualizer.uniqueness (IsTopos.ker-m (isTopos t) m mono) pe1 ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1017
diff changeset
100 p ∎
965
396bf884f5e7 bi-cartesian
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 964
diff changeset
101
971
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
102 δmono : {b : Obj A } → Mono A < id1 A b , id1 A b >
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
103 δmono = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
104 isMono = m1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
105 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
106 m1 : {d b : Obj A} (f g : Hom A d b) → A [ A [ < id1 A b , id1 A b > o f ] ≈ A [ < id1 A b , id1 A b > o g ] ] → A [ f ≈ g ]
972
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
107 m1 {d} {b} f g eq = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
108 f ≈↑⟨ idL ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
109 id1 A _ o f ≈↑⟨ car (IsCCC.e3a isCCC) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
110 (π o < id1 A b , id1 A b >) o f ≈↑⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
111 π o (< id1 A b , id1 A b > o f) ≈⟨ cdr eq ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
112 π o (< id1 A b , id1 A b > o g) ≈⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
113 (π o < id1 A b , id1 A b >) o g ≈⟨ car (IsCCC.e3a isCCC) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
114 id1 A _ o g ≈⟨ idL ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
115 g ∎
965
396bf884f5e7 bi-cartesian
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 964
diff changeset
116
984
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
117 --
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
118 --
1035
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1034
diff changeset
119 -- Hom equality and Ω (p.94 cl(Δ a) in Takeuchi )
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
120 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
121 --
984
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
122 -- a -----------→ +
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
123 -- f||g ○ a |
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
124 -- ↓↓ |
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
125 -- b -----------→ 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
126 -- | ○ b |
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
127 -- <1,1> | | ⊤
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
128 -- ↓ ↓
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
129 -- b ∧ b ---------→ Ω
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
130 -- char <1,1>
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
131
971
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
132 prop32→ : {a b : Obj A}→ (f g : Hom A a b )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
133 → A [ f ≈ g ] → A [ A [ char t < id1 A b , id1 A b > δmono o < f , g > ] ≈ A [ ⊤ t o ○ a ] ]
972
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
134 prop32→ {a} {b} f g f=g = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
135 char t < id1 A b , id1 A b > δmono o < f , g > ≈⟨ cdr ( IsCCC.π-cong isCCC refl-hom (sym f=g)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
136 char t < id1 A b , id1 A b > δmono o < f , f > ≈↑⟨ cdr ( IsCCC.π-cong isCCC idL idL ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
137 char t < id1 A b , id1 A b > δmono o < id1 A _ o f , id1 A _ o f > ≈↑⟨ cdr ( IsCCC.distr-π isCCC ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
138 char t < id1 A b , id1 A b > δmono o (< id1 A _ , id1 A _ > o f) ≈⟨ assoc ⟩
1017
90224a662c4e two equalizers in Topos
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1016
diff changeset
139 (char t < id1 A b , id1 A b > δmono o < id1 A b , id1 A b > ) o f ≈⟨ car (IsTopos.char-m=⊤ (Topos.isTopos t) _ δmono ) ⟩
972
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
140 (⊤ t o ○ b) o f ≈↑⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
141 ⊤ t o (○ b o f) ≈⟨ cdr (IsCCC.e2 isCCC) ⟩
975
f8fba4f1dcfa char-m=⊤
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 974
diff changeset
142 ⊤ t o ○ a ∎
971
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
143
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
144 prop23→ : {a b : Obj A}→ (f g : Hom A a b )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
145 → A [ A [ char t < id1 A b , id1 A b > δmono o < f , g > ] ≈ A [ ⊤ t o ○ a ] ] → A [ f ≈ g ]
979
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
146 prop23→ {a} {b} f g eq = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
147 f ≈⟨ IsCCC.π≈ isCCC p2 ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
148 k ≈↑⟨ IsCCC.π'≈ isCCC p2 ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
149 g ∎
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
150 where
976
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
151 δb : Hom A ( b ∧ b ) (Ω t)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
152 δb = char t < id1 A b , id1 A b > δmono
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
153 ip : Pullback A δb (⊤ t)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
154 ip = topos-m-pullback < id1 A b , id1 A b > δmono
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
155 k : Hom A a b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
156 k = IsPullback.pullback (Pullback.isPullback ip ) eq
979
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
157 p2 : < f , g > ≈ < k , k >
976
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
158 p2 = begin
979
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
159 < f , g > ≈↑⟨ IsPullback.π1p=π1 (Pullback.isPullback ip) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
160 < id1 A b , id1 A b > o k ≈⟨ IsCCC.distr-π isCCC ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
161 < id1 A b o k , id1 A b o k > ≈⟨ IsCCC.π-cong isCCC idL idL ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
162 < k , k > ∎
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
163 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
164 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
165 -- Initial Natural number diagram
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
166 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
167 --
971
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
168
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
169 open NatD
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
170 open ToposNat n
971
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
171
984
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
172 -- 0 suc
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
173 -- 1 -----------→ N ---------→ N
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
174 -- | | |
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
175 -- | <f,g> | <f,g>|
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
176 -- | ↓ ↓
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
177 -- 1 ---------→ N x A -----→ N x A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
178 -- <0,z> <suc o π , h >
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
179
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
180 N : Obj A
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
181 N = Nat iNat
1034
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1018
diff changeset
182 -- if h : Hom A (N ∧ a) a is π', A is a constant
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
183
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
184 record prop33 {a : Obj A} (f : Hom A 1 a ) ( h : Hom A (N ∧ a) a ) : Set ( suc c₁ ⊔ suc c₂ ⊔ suc ℓ ) where
971
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
185 field
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
186 g : Hom A N a
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
187 g0=f : A [ A [ g o nzero iNat ] ≈ f ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
188 gs=h : A [ A [ g o nsuc iNat ] ≈ A [ h o < id1 A _ , g > ] ]
982
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 981
diff changeset
189 xnat : NatD A 1
979
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
190
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
191 p33 : {a : Obj A} (z : Hom A 1 a ) ( h : Hom A (N ∧ a) a ) → prop33 z h
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
192 p33 {a} z h = record {
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
193 g = g
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
194 ; g0=f = iii
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
195 ; gs=h = v
982
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 981
diff changeset
196 ; xnat = xnat
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
197 } where
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
198 xnat : NatD A 1
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
199 xnat = record { Nat = N ∧ a ; nzero = < nzero iNat , z > ; nsuc = < nsuc iNat o π , h > }
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
200 fg : Hom A N (N ∧ a )
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
201 fg = initialNat xnat -- < f , g >
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
202 f : Hom A N N
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
203 f = π o fg
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
204 g : Hom A N a
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
205 g = π' o fg
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
206 i : f o nzero iNat ≈ nzero iNat
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
207 i = begin
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
208 f o nzero iNat ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
209 (π o fg) o nzero iNat ≈↑⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
210 π o (fg o nzero iNat ) ≈⟨ cdr (IsToposNat.izero isToposN xnat ) ⟩
982
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 981
diff changeset
211 π o nzero xnat ≈⟨ IsCCC.e3a isCCC ⟩
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
212 nzero iNat ∎
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
213 ii : f o nsuc iNat ≈ nsuc iNat o f
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
214 ii = begin
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
215 f o nsuc iNat ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
216 (π o fg ) o nsuc iNat ≈↑⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
217 π o ( fg o nsuc iNat ) ≈⟨ cdr (IsToposNat.isuc isToposN xnat ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
218 π o (nsuc xnat o initialNat xnat) ≈⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
219 (π o < nsuc iNat o π , h > ) o initialNat xnat ≈⟨ car (IsCCC.e3a isCCC) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
220 ( nsuc iNat o π ) o initialNat xnat ≈↑⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
221 nsuc iNat o ( π o initialNat xnat ) ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
222 nsuc iNat o f ∎
982
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 981
diff changeset
223 ig : f ≈ id1 A N
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 981
diff changeset
224 ig = begin
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
225 f ≈⟨ nat-unique iNat i ii ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
226 initialNat iNat ≈↑⟨ nat-unique iNat idL (trans-hom idL (sym idR) ) ⟩
982
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 981
diff changeset
227 id1 A _ ∎
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
228 iii : g o nzero iNat ≈ z
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
229 iii = begin
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
230 g o nzero iNat ≈⟨⟩ (π' o initialNat xnat ) o nzero iNat ≈↑⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
231 π' o ( initialNat xnat o nzero iNat) ≈⟨ cdr (IsToposNat.izero isToposN xnat) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
232 π' o < nzero iNat , z > ≈⟨ IsCCC.e3b isCCC ⟩
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
233 z ∎
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
234 iv : g o nsuc iNat ≈ h o < f , g >
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
235 iv = begin
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
236 g o nsuc iNat ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
237 (π' o initialNat xnat) o nsuc iNat ≈↑⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
238 π' o (initialNat xnat o nsuc iNat ) ≈⟨ cdr (IsToposNat.isuc isToposN xnat) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
239 π' o (nsuc xnat o initialNat xnat ) ≈⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
240 (π' o nsuc xnat ) o initialNat xnat ≈⟨ car (IsCCC.e3b isCCC) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
241 h o initialNat xnat ≈↑⟨ cdr (IsCCC.e3c isCCC) ⟩
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
242 h o < π o fg , π' o fg > ≈⟨⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
243 h o < f , g > ∎
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
244 v : A [ A [ g o nsuc iNat ] ≈ A [ h o < id1 A N , g > ] ]
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
245 v = begin
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
246 g o nsuc iNat ≈⟨ iv ⟩
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
247 h o < f , g > ≈⟨ cdr ( IsCCC.π-cong isCCC ig refl-hom) ⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
248 h o < id1 A N , g > ∎
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
249
984
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
250 -- .
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
251 -- / | \
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
252 -- / | \
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
253 -- / ↓ \
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
254 -- N --→ N ←-- a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 983
diff changeset
255 --
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
256 cor33 : coProduct A 1 (Nat iNat ) -- N ≅ N + 1
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
257 cor33 = record {
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
258 coproduct = N
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
259 ; κ1 = nzero iNat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
260 ; κ2 = nsuc iNat
971
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
261 ; isProduct = record {
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
262 _+_ = λ {a} f g → prop33.g (p f ( g o π )) -- Hom A (N n ∧ a) a
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
263 ; κ1f+g=f = λ {a} {f} {g} → prop33.g0=f (p f (g o π ) )
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
264 ; κ2f+g=g = λ {a} {f} {g} → k2 {a} {f} {g}
982
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 981
diff changeset
265 ; uniqueness = uniq
983
7ca3c84d4808 N ≅ N + 1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 982
diff changeset
266 ; +-cong = pcong
971
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
267 }
972
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
268 } where
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
269 p : {a : Obj A} (f : Hom A 1 a) ( h : Hom A (N ∧ a) a ) → prop33 f h
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
270 p f h = p33 f h
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
271 k2 : {a : Obj A} {f : Hom A 1 a} {g : Hom A (Nat iNat) a }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
272 → A [ A [ prop33.g (p f (g o π)) o nsuc iNat ] ≈ g ]
972
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
273 k2 {a} {f} {g} = begin
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
274 (prop33.g (p f (g o π)) o nsuc iNat) ≈⟨ prop33.gs=h (p f (g o π )) ⟩
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
275 ( g o π ) o < id1 A N , prop33.g (p f (g o π)) > ≈⟨ sym assoc ⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
276 g o ( π o < id1 A N , prop33.g (p f (g o π)) >) ≈⟨ cdr (IsCCC.e3a isCCC ) ⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
277 g o id1 A N ≈⟨ idR ⟩
972
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
278 g ∎
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
279 pp : {c : Obj A} {h : Hom A (Nat iNat) c} → prop33 ( h o nzero iNat ) ( (h o nsuc iNat) o π)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
280 pp {c} {h} = p ( h o nzero iNat ) ( (h o nsuc iNat) o π)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
281 uniq : {c : Obj A} {h : Hom A (Nat iNat) c} →
982
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 981
diff changeset
282 prop33.g pp ≈ h
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 981
diff changeset
283 uniq {c} {h} = begin
983
7ca3c84d4808 N ≅ N + 1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 982
diff changeset
284 prop33.g pp ≈⟨⟩
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
285 π' o initialNat (prop33.xnat pp) ≈↑⟨ cdr (nat-unique (prop33.xnat pp) (
983
7ca3c84d4808 N ≅ N + 1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 982
diff changeset
286 begin
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
287 < id1 A _ , h > o nzero iNat ≈⟨ IsCCC.distr-π isCCC ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
288 < id1 A _ o nzero iNat , h o nzero iNat > ≈⟨ IsCCC.π-cong isCCC idL refl-hom ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
289 < nzero iNat , h o nzero iNat > ≈⟨⟩
983
7ca3c84d4808 N ≅ N + 1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 982
diff changeset
290 nzero (prop33.xnat pp) ∎ )
7ca3c84d4808 N ≅ N + 1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 982
diff changeset
291 (begin
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
292 < id1 A _ , h > o nsuc iNat ≈⟨ IsCCC.distr-π isCCC ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
293 < id1 A _ o nsuc iNat , h o nsuc iNat > ≈⟨ IsCCC.π-cong isCCC idL refl-hom ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
294 < nsuc iNat , h o nsuc iNat > ≈↑⟨ IsCCC.π-cong isCCC idR idR ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
295 < nsuc iNat o id1 A _ , (h o nsuc iNat ) o id1 A _ > ≈↑⟨ IsCCC.π-cong isCCC (cdr (IsCCC.e3a isCCC)) (cdr (IsCCC.e3a isCCC)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
296 < nsuc iNat o ( π o < id1 A _ , h > ) , (h o nsuc iNat ) o ( π o < id1 A _ , h > ) > ≈⟨ IsCCC.π-cong isCCC assoc assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
297 < (nsuc iNat o π ) o < id1 A _ , h > , ((h o nsuc iNat ) o π ) o < id1 A _ , h > > ≈↑⟨ IsCCC.distr-π isCCC ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
298 < nsuc iNat o π , (h o nsuc iNat ) o π > o < id1 A _ , h > ≈⟨⟩
983
7ca3c84d4808 N ≅ N + 1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 982
diff changeset
299 nsuc (prop33.xnat pp) o < id1 A _ , h > ∎ )) ⟩
7ca3c84d4808 N ≅ N + 1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 982
diff changeset
300 π' o < id1 A _ , h > ≈⟨ IsCCC.e3b isCCC ⟩
982
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 981
diff changeset
301 h ∎
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
302 pcong : {a : Obj A } {f f' : Hom A 1 a } {g g' : Hom A (Nat iNat) a } → (f=f' : f ≈ f' ) → ( g=g' : g ≈ g' )
983
7ca3c84d4808 N ≅ N + 1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 982
diff changeset
303 → prop33.g (p f (g o π)) ≈ prop33.g (p f' (g' o π))
7ca3c84d4808 N ≅ N + 1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 982
diff changeset
304 pcong {a} {f} {f'} {g} {g'} f=f' g=g' = begin
7ca3c84d4808 N ≅ N + 1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 982
diff changeset
305 prop33.g (p f (g o π)) ≈⟨⟩
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
306 π' o (initialNat (prop33.xnat (p f (g o π)))) ≈↑⟨ cdr (nat-unique (prop33.xnat (p f (g o π))) lem1 lem2 ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
307 π' o (initialNat (prop33.xnat (p f' (g' o π)))) ≈⟨⟩
983
7ca3c84d4808 N ≅ N + 1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 982
diff changeset
308 prop33.g (p f' (g' o π)) ∎ where
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
309 lem1 : A [ A [ initialNat (prop33.xnat (p f' ((A Category.o g') π))) o nzero iNat ] ≈ nzero (prop33.xnat (p f ((A Category.o g) π))) ]
983
7ca3c84d4808 N ≅ N + 1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 982
diff changeset
310 lem1 = begin
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
311 initialNat (prop33.xnat (p f' (g' o π))) o nzero iNat ≈⟨ IsToposNat.izero isToposN _ ⟩
983
7ca3c84d4808 N ≅ N + 1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 982
diff changeset
312 nzero (prop33.xnat (p f' (g' o π))) ≈⟨⟩
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
313 < nzero iNat , f' > ≈⟨ IsCCC.π-cong isCCC refl-hom (sym f=f') ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
314 < nzero iNat , f > ≈⟨⟩
983
7ca3c84d4808 N ≅ N + 1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 982
diff changeset
315 nzero (prop33.xnat (p f (g o π))) ∎
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
316 lem2 : A [ A [ initialNat (prop33.xnat (p f' (g' o π))) o nsuc iNat ] ≈ A [ nsuc (prop33.xnat (p f (g o π))) o initialNat (prop33.xnat (p f' (g' o π))) ] ]
983
7ca3c84d4808 N ≅ N + 1 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 982
diff changeset
317 lem2 = begin
986
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
318 initialNat (prop33.xnat (p f' (g' o π))) o nsuc iNat ≈⟨ IsToposNat.isuc isToposN _ ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
319 nsuc (prop33.xnat (p f' (g' o π))) o initialNat (prop33.xnat (p f' (g' o π))) ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
320 < (nsuc iNat) o π , g' o π > o initialNat (prop33.xnat (p f' (g' o π))) ≈⟨ car ( IsCCC.π-cong isCCC refl-hom (car (sym g=g')) ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
321 < (nsuc iNat) o π , g o π > o initialNat (prop33.xnat (p f' (g' o π))) ≈⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 984
diff changeset
322 nsuc (prop33.xnat (p f (g o π))) o initialNat (prop33.xnat (p f' (g' o π))) ∎
1035
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1034
diff changeset
323
1036
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1035
diff changeset
324 open Functor
1037
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
325 open import Category.Sets hiding (_o_)
1036
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1035
diff changeset
326 open import Relation.Binary.PropositionalEquality hiding ( [_] ; sym)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1035
diff changeset
327
1037
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
328 record Singleton (a : Obj A) : Set (c₁ ⊔ c₂ ⊔ ℓ) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
329 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
330 singleton : Hom A (a ∧ a) ( CCC._<=_ c (Ω t) (a ∧ a) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
331 scommute : A [ A [ CCC.ε c o < singleton , id1 A _ > ] ≈ char t < id1 A _ , id1 A _ > δmono ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
333 tequalizer : {a b : Obj A} → (f g : Hom A a b ) → Equalizer A f g
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
334 tequalizer {a} {b} f g = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
335 equalizer-c = equalizer-c ker
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
336 ; equalizer = equalizer ker
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
337 ; isEqualizer = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
338 fe=ge = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
339 ; k = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
340 ; ek=h = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
341 ; uniqueness = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
342 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
343 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
344 ker : Equalizer A ( A [ char t < id1 A _ , id1 A b > δmono o < f , g > ] ) (A [ ⊤ t o (CCC.○ c a) ])
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
345 ker = Ker t ( A [ char t < id1 A _ , id1 A b > δmono o < f , g > ] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
346
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
347 singleton→mono : {a : Obj A} (s : Singleton a ) → Mono A (Singleton.singleton s)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
348 singleton→mono {a} s = record { isMono = λ {b} f g eq → {!!} }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
349
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
350 record Partialmap (a b : Obj A) : Set (c₁ ⊔ c₂ ⊔ ℓ) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
351 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
352 p : Obj A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
353 d : Hom A p a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
354 f : Hom A p b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
355 dm : Mono A d
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
356
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
357 record PartialmapClassifier (b : Obj A) : Set (c₁ ⊔ c₂ ⊔ ℓ) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
358 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
359 b1 : Obj A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
360 η : Hom A b b1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
361 pm : Partialmap b1 b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
362 pmc : {a : Obj A} ( d f : Hom A a b) → Mono A d → Hom A a b1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
363 pb : {a : Obj A} ( d f : Hom A a b) → (dm : Mono A d ) → Pullback A (pmc d f dm) η
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
364 uniq : {a : Obj A} ( d f : Hom A a b) → (dm : Mono A d ) → (p : Hom A a b1) → Pullback A p η → A [ pmc d f dm ≈ p ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
365
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
366 partialmapClassifier : (b : Obj A) → PartialmapClassifier b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
367 partialmapClassifier = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
368
1046
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1038
diff changeset
369 record SubObject (a : Obj A) : Set (c₁ ⊔ c₂ ⊔ ℓ) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1038
diff changeset
370 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1038
diff changeset
371 sb : Obj A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1038
diff changeset
372 sm : Hom A sb a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1038
diff changeset
373 smono : Mono A sm
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1038
diff changeset
374
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1038
diff changeset
375 record SubObjectClassifier (b : Obj A) : Set (c₁ ⊔ c₂ ⊔ ℓ) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1038
diff changeset
376 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1038
diff changeset
377 sm : SubObject b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1038
diff changeset
378 smc : {a : Obj A} ( d f : Hom A a b) → Mono A d → Hom A a b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1038
diff changeset
379 pb : {a : Obj A} ( d f : Hom A a b) → (dm : Mono A d ) → Pullback A (smc d f dm) (id1 A _)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1038
diff changeset
380 uniq : {a : Obj A} ( d f : Hom A a b) → (dm : Mono A d ) → (p : Hom A a b) → Pullback A p (id1 A _) → A [ smc d f dm ≈ p ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1038
diff changeset
381
1037
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
382 postulate
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
383 I : Set c₁
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
384 small : Small A I
1036
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1035
diff changeset
385
1037
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
386 open import yoneda A I small
1036
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1035
diff changeset
387
1037
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
388 cs : CCC SetsAop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
389 cs = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
390
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
391 toposS : Topos SetsAop cs
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1036
diff changeset
392 toposS = {!!}
1036
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1035
diff changeset
393