annotate src/ToposEx.agda @ 981:0e417c508096

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 03 Mar 2021 04:51:55 +0900
parents 8ab4307d9337
children 888e6613b99a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 open import CCC
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 open import Level
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 open import Category
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 open import cat-utility
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import HomReasoning
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
6 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
7
974
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
8 open Topos
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
9 open Equalizer
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
10 open ≈-Reasoning A
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
11 open CCC.CCC c
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
12
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 -- ○ b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 -- b -----------→ 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 -- | |
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 -- m | | ⊤
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 -- ↓ char m ↓
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 -- a -----------→ Ω
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 -- h
964
0128a662eb02 Topos as pull back
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 963
diff changeset
21 --
0128a662eb02 Topos as pull back
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 963
diff changeset
22 -- Ker t h : Equalizer A h (A [ ⊤ o (○ a) ])
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
977
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
24 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
25 → 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
26 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
27 h o p1 ≈⟨ eq ⟩
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
28 ⊤ t o p2 ≈⟨ cdr (IsCCC.e2 isCCC) ⟩
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
29 ⊤ t o (○ d) ≈↑⟨ cdr (IsCCC.e2 isCCC) ⟩
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
30 ⊤ t o ( ○ a o p1 ) ≈⟨ assoc ⟩
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
31 (⊤ t o ○ a ) o p1 ∎
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
32
974
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
33 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
34 topos-pullback {a} h = record {
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 ab = equalizer-c (Ker t h) -- b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 ; π1 = equalizer (Ker t h) -- m
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 ; π2 = ○ ( equalizer-c (Ker t h) ) -- ○ b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 ; isPullback = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 commute = comm
977
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
40 ; 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
41 ; π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
42 ; π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
43 ; uniqueness = uniq
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 }
974
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
45 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
46 e2 = IsCCC.e2 isCCC
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 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
48 comm = begin
964
0128a662eb02 Topos as pull back
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 963
diff changeset
49 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
50 (⊤ t o ○ a ) o equalizer (Ker t h) ≈↑⟨ assoc ⟩
974
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
51 ⊤ t o (○ a o equalizer (Ker t h)) ≈⟨ cdr e2 ⟩
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 ⊤ 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
53 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
54 → 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
55 lemma2 {d} {p1'} {p2'} eq = begin
977
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
56 ○ (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
57 ○ d ≈↑⟨ e2 ⟩
0128a662eb02 Topos as pull back
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 963
diff changeset
58 p2' ∎
976
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
59 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
60 (π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
61 → 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
62 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
63 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
64 p' ∎
963
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65
974
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 973
diff changeset
66 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
67 topos-m-pullback {a} {b} m mono = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
68 ab = b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
69 ; π1 = m
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
70 ; π2 = ○ b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
71 ; isPullback = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
72 commute = char-m=⊤ t m mono
978
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 977
diff changeset
73 ; pullback = λ {d} {p1} {p2} eq → f← o k p1 p2 eq
977
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
74 ; π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
75 ; π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
76 ; uniqueness = uniq
976
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
77 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
78 } where
977
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
79 f← = Iso.≅← (IsoL.iso-L (IsTopos.ker-char (isTopos t) m mono ))
978
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 977
diff changeset
80 f→ = Iso.≅→ (IsoL.iso-L (IsTopos.ker-char (isTopos t) m mono ))
977
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
81 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 (equalizer-c (Ker t (char t m mono)))
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
82 k p1 p2 eq = IsEqualizer.k (isEqualizer (Ker t (char t m mono))) p1 (mh=⊤ (char t m mono) p1 p2 eq )
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
83 lemma3 : {d : Obj A} (p1 : Hom A d a) → (p2 : Hom A d 1)
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
84 → (eq : A [ A [ char t m mono o p1 ] ≈ A [ ⊤ t o p2 ] ] ) → m o (f← o k p1 p2 eq ) ≈ p1
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
85 lemma3 {d} p1 p2 eq = begin
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
86 m o (f← o k p1 p2 eq ) ≈⟨ assoc ⟩
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
87 (m o f← ) o k p1 p2 eq ≈⟨ car (IsoL.iso≈L (IsTopos.ker-char (isTopos t) m mono )) ⟩
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
88 equalizer (Ker t (char t m mono)) o k p1 p2 eq ≈⟨ IsEqualizer.ek=h (isEqualizer (Ker t (char t m mono))) ⟩
8ffdc897f29b fix Topos equalizer iso
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 976
diff changeset
89 p1 ∎
978
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 977
diff changeset
90 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
91 (eq : A [ A [ char t m mono o π1' ] ≈ A [ ⊤ t o π2' ] ]) →
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 977
diff changeset
92 A [ A [ m o p' ] ≈ π1' ] → A [ A [ ○ b o p' ] ≈ π2' ] → f← o k π1' π2' eq ≈ p'
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 977
diff changeset
93 uniq {d} p p1 p2 eq pe1 pe2 = begin
979
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
94 f← o k p1 p2 eq ≈⟨ cdr ( IsEqualizer.uniqueness (isEqualizer (Ker t (char t m mono))) lemma4) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
95 f← o (f→ o p ) ≈⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
96 (f← o f→ ) o p ≈⟨ car (Iso.iso→ (IsoL.iso-L (IsTopos.ker-char (isTopos t) m mono ))) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
97 id1 A _ o p ≈⟨ idL ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
98 p ∎ where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
99 lemma4 : A [ A [ equalizer (Ker t (char t m mono)) o (f→ o p) ] ≈ p1 ]
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
100 lemma4 = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
101 equalizer (Ker t (char t m mono)) o (f→ o p) ≈⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
102 (equalizer (Ker t (char t m mono)) o f→ ) o p ≈⟨ car (IsoL.L≈iso (IsTopos.ker-char (isTopos t) m mono )) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
103 m o p ≈⟨ pe1 ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
104 p1 ∎ where
978
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 977
diff changeset
105
965
396bf884f5e7 bi-cartesian
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 964
diff changeset
106
971
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
107 δmono : {b : Obj A } → Mono A < id1 A b , id1 A b >
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
108 δmono = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
109 isMono = m1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
110 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
111 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
112 m1 {d} {b} f g eq = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
113 f ≈↑⟨ idL ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
114 id1 A _ o f ≈↑⟨ car (IsCCC.e3a isCCC) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
115 (π o < id1 A b , id1 A b >) o f ≈↑⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
116 π o (< id1 A b , id1 A b > o f) ≈⟨ cdr eq ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
117 π o (< id1 A b , id1 A b > o g) ≈⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
118 (π 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
119 id1 A _ o g ≈⟨ idL ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
120 g ∎
965
396bf884f5e7 bi-cartesian
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 964
diff changeset
121
971
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
122 prop32→ : {a b : Obj A}→ (f g : Hom A a b )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
123 → 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
124 prop32→ {a} {b} f g f=g = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
125 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
126 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
127 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
128 char t < id1 A b , id1 A b > δmono o (< id1 A _ , id1 A _ > o f) ≈⟨ assoc ⟩
975
f8fba4f1dcfa char-m=⊤
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 974
diff changeset
129 (char t < id1 A b , id1 A b > δmono o < id1 A b , id1 A b > ) o f ≈⟨ car (char-m=⊤ t < id1 A b , id1 A b > δmono ) ⟩
972
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
130 (⊤ t o ○ b) o f ≈↑⟨ assoc ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
131 ⊤ 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
132 ⊤ t o ○ a ∎
971
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
133
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
134 prop23→ : {a b : Obj A}→ (f g : Hom A a b )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
135 → 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
136 prop23→ {a} {b} f g eq = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
137 f ≈⟨ IsCCC.π≈ isCCC p2 ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
138 k ≈↑⟨ IsCCC.π'≈ isCCC p2 ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
139 g ∎
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
140 where
976
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
141 δb : Hom A ( b ∧ b ) (Ω t)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
142 δb = char t < id1 A b , id1 A b > δmono
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
143 ip : Pullback A δb (⊤ t)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
144 ip = topos-m-pullback < id1 A b , id1 A b > δmono
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
145 k : Hom A a b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
146 k = IsPullback.pullback (Pullback.isPullback ip ) eq
979
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
147 p2 : < f , g > ≈ < k , k >
976
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 975
diff changeset
148 p2 = begin
979
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
149 < f , g > ≈↑⟨ IsPullback.π1p=π1 (Pullback.isPullback ip) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
150 < id1 A b , id1 A b > o k ≈⟨ IsCCC.distr-π isCCC ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
151 < 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
152 < k , k > ∎
971
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
153
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
154 open NatD
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
155 open ToposNat n
971
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
156
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
157 N : Obj A
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
158 N = Nat TNat
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
159
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
160 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
161 field
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
162 g : Hom A N a
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
163 g0=f : A [ A [ g o nzero TNat ] ≈ f ]
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
164 gs=h : A [ A [ g o nsuc TNat ] ≈ A [ h o < id1 A _ , g > ] ]
979
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 978
diff changeset
165
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
166 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
167 p33 {a} z h = record {
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
168 g = g
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
169 ; g0=f = iii
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
170 ; gs=h = v
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
171 } where
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
172 xnat : NatD A 1
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
173 xnat = record { Nat = N ∧ a ; nzero = < nzero TNat , z > ; nsuc = < nsuc TNat o π , h > }
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
174 fg : Hom A N (N ∧ a )
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
175 fg = gNat xnat
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
176 f : Hom A N N
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
177 f = π o fg
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
178 g : Hom A N a
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
179 g = π' o fg
981
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 980
diff changeset
180 ig : f ≈ id1 A N
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 980
diff changeset
181 ig = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 980
diff changeset
182 f ≈⟨ nat-unique TNat {!!} {!!} ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 980
diff changeset
183 gNat TNat ≈↑⟨ nat-unique TNat idL (trans-hom idL (sym idR) ) ⟩
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
184 id1 A _ ∎
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
185 i : f o nzero TNat ≈ nzero TNat
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
186 i = begin
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
187 f o nzero TNat ≈⟨ car ig ⟩ id1 A _ o nzero TNat ≈⟨ idL ⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
188 nzero TNat ∎
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
189 ii : f o nsuc TNat ≈ nsuc TNat o f
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
190 ii = begin
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
191 f o nsuc TNat ≈⟨ car ig ⟩ id1 A _ o nsuc TNat ≈⟨ idL ⟩ nsuc TNat ≈↑⟨ idR ⟩ nsuc TNat o id1 A _ ≈↑⟨ cdr ig ⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
192 nsuc TNat o f ∎
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
193 iii : g o nzero TNat ≈ z
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
194 iii = begin
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
195 g o nzero TNat ≈⟨⟩ (π' o gNat xnat ) o nzero TNat ≈↑⟨ assoc ⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
196 π' o ( gNat xnat o nzero TNat) ≈⟨ cdr (IsToposNat.izero isToposN xnat) ⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
197 π' o < nzero TNat , z > ≈⟨ IsCCC.e3b isCCC ⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
198 z ∎
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
199 iv : g o nsuc TNat ≈ h o < f , g >
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
200 iv = begin
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
201 g o nsuc TNat ≈⟨⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
202 (π' o gNat xnat) o nsuc TNat ≈↑⟨ assoc ⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
203 π' o (gNat xnat o nsuc TNat ) ≈⟨ cdr (IsToposNat.isuc isToposN xnat) ⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
204 π' o (nsuc xnat o gNat xnat ) ≈⟨ assoc ⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
205 (π' o nsuc xnat ) o gNat xnat ≈⟨ car (IsCCC.e3b isCCC) ⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
206 h o gNat xnat ≈↑⟨ cdr (IsCCC.e3c isCCC) ⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
207 h o < π o fg , π' o fg > ≈⟨⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
208 h o < f , g > ∎
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
209 v : A [ A [ g o nsuc TNat ] ≈ A [ h o < id1 A N , g > ] ]
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
210 v = begin
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
211 g o nsuc TNat ≈⟨ iv ⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
212 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
213 h o < id1 A N , g > ∎
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
214
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
215
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
216 cor33 : coProduct A 1 (Nat TNat ) -- N ≅ N + 1
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
217 cor33 = record {
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
218 coproduct = N
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
219 ; κ1 = nzero TNat
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
220 ; κ2 = nsuc TNat
971
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
221 ; isProduct = record {
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
222 _+_ = λ {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
223 ; κ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
224 ; κ2f+g=g = λ {a} {f} {g} → k2 {a} {f} {g}
971
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
225 ; uniqueness = {!!}
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
226 ; +-cong = λ f=f' g=g' → {!!} -- prop33.g-cong p f=f' (resp refl-hom g=g' )
971
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 965
diff changeset
227 }
972
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
228 } where
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
229 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
230 p f h = p33 f h
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
231 k2 : {a : Obj A} {f : Hom A 1 a} {g : Hom A (Nat TNat) a }
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
232 → A [ A [ prop33.g (p f (g o π)) o nsuc TNat ] ≈ g ]
972
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
233 k2 {a} {f} {g} = begin
980
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
234 (prop33.g (p f (g o π)) o nsuc TNat) ≈⟨ prop33.gs=h (p f (g o π )) ⟩
8ab4307d9337 ... Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 979
diff changeset
235 ( 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
236 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
237 g o id1 A N ≈⟨ idR ⟩
972
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
238 g ∎
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
239
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
240
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 971
diff changeset
241