Skip to content

Commit 17ea612

Browse files
committed
Add Section_1_2
1 parent dbcf863 commit 17ea612

2 files changed

Lines changed: 161 additions & 3 deletions

File tree

CategoryTheoryInContextLean/Section_1_1.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ instance Category.Sets (α : Type*) : Category (Set α) where
4949

5050
-- example 1.1.4.i
5151
def Category.MatR (α : Type*) [Ring α] : Category ℕ where
52-
Hom := fun X Y => Matrix (Fin X) (Fin Y) α
52+
Hom := fun n m => Matrix (Fin m) (Fin n) α
5353
id := 1
54-
comp := fun f g => f * g
54+
comp := fun f g => g * f
5555
id_comp := by simp
5656
comp_id := by simp
5757
assoc := by sorry -- not sure why simp doesn't work here
@@ -66,7 +66,7 @@ def Category.Monoid (α : Type*) [Monoid α] : Category Unit where
6666
assoc f g h := mul_assoc f g h
6767

6868
-- example 1.1.4.iii
69-
noncomputable instance Category.Poset (α : Type) [PartialOrder α] : Category α where
69+
noncomputable instance Category.Poset (α : Type*) [PartialOrder α] : Category α where
7070
Hom X Y := PLift (X ≤ Y) -- some universe gymnastics to move between Prop and Type
7171
id X := ⟨le_refl X⟩
7272
comp f g := ⟨le_trans f.down g.down⟩
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
import CategoryTheoryInContextLean.Section_1_1
2+
import Mathlib.Tactic.TFAE
3+
4+
namespace CategoryInContext
5+
6+
variable {α : Type*} [C : Category α]
7+
8+
-- definition 1.2.1
9+
def Category.opp (C : Category α) : Category α where
10+
Hom := fun X Y => C.Hom Y X
11+
id := fun X => Category.id X
12+
comp := fun f g => C.comp g f
13+
id_comp := by simp [Category.comp_id]
14+
comp_id := by simp [Category.id_comp]
15+
assoc := by simp [← Category.assoc]
16+
17+
-- exmaple 1.2.2.i
18+
def Category.MatR' (α : Type*) [Ring α] : Category ℕ where
19+
Hom := fun m n => Matrix (Fin m) (Fin n) α
20+
id := 1
21+
comp := fun f g => f * g
22+
id_comp := by simp
23+
comp_id := by simp
24+
assoc := by sorry -- not sure why simp doesn't work here
25+
26+
theorem Category.MatR_opp_eq_MatR' [Ring α] : (MatR α).opp = MatR' α := by sorry
27+
28+
-- exmaple 1.2.2.ii
29+
noncomputable instance Category.Poset' (α : Type*) [PartialOrder α] : Category α where
30+
Hom X Y := PLift (Y ≤ X) -- some universe gymnastics to move between Prop and Type
31+
id X := ⟨le_refl X⟩
32+
comp f g := ⟨le_trans g.down f.down⟩
33+
id_comp _ := rfl
34+
comp_id _ := rfl
35+
assoc _ _ _ := rfl
36+
37+
theorem Category.Poset_opp_eq_Poset' [PartialOrder α] : (Poset α).opp = Poset' α := by sorry
38+
39+
-- todo add 1.2.2.iii
40+
41+
-- lemma 1.2.3
42+
lemma Category.iso_equiv {X Y : α} (f : Hom X Y) :
43+
[ IsIso f,
44+
∀ c : α, Function.Bijective (fun g : Hom c X => Category.comp g f),
45+
∀ c : α, Function.Bijective (fun g : Hom Y c => Category.comp f g)
46+
].TFAE := by sorry
47+
48+
-- definition 1.2.7
49+
def Category.Mono {X Y : α} (f : Hom X Y) : Prop :=
50+
∀ {W} (h k : Hom W X), Category.comp h f = Category.comp k f → h = k
51+
def Category.Epi {X Y : α} (f : Hom X Y) : Prop :=
52+
∀ {Z} (h k : Hom Y Z), Category.comp f h = Category.comp f k → h = k
53+
54+
lemma Category.mono_op_epi {X Y : α} (f : Hom X Y) :
55+
Category.Mono f ↔ @Category.Epi α (Category.opp C) Y X f := by
56+
sorry
57+
58+
lemma Category.epi_op_mono {X Y : α} (f : Hom X Y) :
59+
Category.Epi f ↔ @Category.Mono α (Category.opp C) Y X f := by
60+
sorry
61+
62+
-- todo: add support for custom notation: X → Y for Hom X Y and X ↣ Y for {f: Hom X Y // Epi f}
63+
-- and X ↠ Y for {f: Hom X Y // Mono f}
64+
65+
theorem Category.Mono_injection {X Y : α} (f : Hom X Y) (hf : Category.Mono f) :
66+
∀ c : α, Function.Injective (fun g : Hom c X => Category.comp g f) := by
67+
intros g1 g2 h
68+
apply hf
69+
70+
theorem Category.Epi_surjection {X Y : α} (f : Hom X Y) (hf : Category.Epi f) :
71+
∀ c : α, Function.Injective (fun g : Hom Y c => Category.comp f g) := by
72+
intros g1 g2 h
73+
apply hf
74+
75+
-- example 1.2.8
76+
example {X Y : Set α} (f : Category.Hom X Y) (hf : Category.Mono f) :
77+
Function.Injective f := by sorry
78+
example {X Y : Set α} (f : Category.Hom X Y) (hf : Category.Epi f) :
79+
Function.Surjective f := by sorry
80+
81+
-- example 1.2.9
82+
def Category.IsSection {X Y : α} (f : Hom Y X) (g : Hom X Y) := comp g f = id X
83+
def Category.IsRetraction {X Y : α} (f : Hom X Y) (g : Hom Y X) := comp f g = id X
84+
def Category.IsRetract (X Y : α) := ∃ (f : Hom X Y), ∃ (g : Hom Y X), comp f g = id X
85+
86+
alias Category.IsRightInverse := Category.IsSection
87+
alias Category.IsLeftInverse := Category.IsRetraction
88+
89+
theorem Category.section_mono {X Y : α} (f : Hom Y X) (g : Hom X Y) (h : Category.IsSection f g) :
90+
Category.Mono f := by sorry
91+
92+
theorem Category.retraction_epi {X Y : α} (f : Hom X Y) (g : Hom Y X)
93+
(h : Category.IsRetraction f g) : Category.Epi f := by sorry
94+
95+
def Category.split_epi {X Y : α} (f : Hom X Y) := ∃ (g : Hom Y X), Category.IsRetraction f g
96+
def Category.split_mono {X Y : α} (f : Hom Y X) := ∃ (g : Hom X Y), Category.IsSection f g
97+
98+
-- example 1.2.10
99+
theorem Category.iso_mono_epi {X Y : α} (f : Hom X Y) (hf : Category.IsIso f) :
100+
Category.Mono f ∧ Category.Epi f := by sorry
101+
102+
example : ∃ α : Type*, ∃ C : Category α, ∃ X Y : α, ∃ f : C.Hom X Y,
103+
Category.Mono f ∧ Category.Epi f ∧ ¬Category.IsIso f := by sorry
104+
105+
-- lemma 1.2.11 / exercise 1.2.iii
106+
lemma Category.comp_mono_of_mono_mono {X Y Z : α} (f : Hom X Y) (g : Hom Y Z)
107+
(hf : Category.Mono f) (hg : Category.Mono g) : Category.Mono (comp f g) := by sorry
108+
lemma Category.mono_of_comp_mono {X Y Z : α} (f : Hom X Y) (g : Hom Y Z)
109+
(hfg : Category.Mono (comp f g)) : Category.Mono f := by sorry
110+
-- use duality tp prove epi versions
111+
lemma Category.comp_epi_of_epi_epi {X Y Z : α} (f : Hom X Y) (g : Hom Y Z)
112+
(hf : Category.Epi f) (hg : Category.Epi g) : Category.Epi (comp f g) := by sorry
113+
lemma Category.epi_of_comp_epi {X Y Z : α} (f : Hom X Y) (g : Hom Y Z)
114+
(hfg : Category.Epi (comp f g)) : Category.Epi g := by sorry
115+
116+
-- exercise 1.2.i
117+
def Category.slice_over' (c : α) : Category (Σ X : α, Hom X c) :=
118+
opp (@Category.slice_under α (opp C) c)
119+
theorem Category.slice_over_equiv_slice_over' (c : α) :
120+
Category.slice_over c = Category.slice_over' c := by sorry
121+
122+
-- exercise 1.2.ii.i
123+
theorem Category.split_epi_iff {X Y : α} (f : Hom X Y) :
124+
Category.split_epi f ↔
125+
∀ c : α, Function.Surjective (fun g : Hom Y c => Category.comp f g) := by sorry
126+
127+
-- exercise 1.2.ii.ii
128+
theorem Category.split_mono_iff {X Y : α} (f : Hom X Y) :
129+
Category.split_mono f ↔
130+
∀ c : α, Function.Surjective (fun g : Hom c X => Category.comp g f) := by sorry
131+
132+
-- final part of exercise 1.2.2
133+
def Category.Subcategory.mono : Subcategory α where
134+
obj := fun X => True
135+
hom := fun f => Category.Mono f
136+
id_mem X := by sorry
137+
comp_mem hX hY hZ hf hg := by sorry
138+
139+
def Category.Subcategory.epi : Subcategory α where
140+
obj := fun X => True
141+
hom := fun f => Category.Epi f
142+
id_mem X := by sorry
143+
comp_mem hX hY hZ hf hg := by sorry
144+
145+
-- todo: exercise 1.2.iv, we are missing the category of fields in 1.1 first
146+
-- todo: exercise 1.2.v, need to define category of rings in 1.1 first
147+
148+
-- exercise 1.2.vi
149+
theorem Category.iso_of_mono_and_split_epi {X Y : α} (f : Hom X Y)
150+
(hm : Category.Mono f) (he : Category.split_epi f) : Category.IsIso f := by sorry
151+
152+
-- prove by duality
153+
theorem Category.iso_of_epi_and_split_mono {X Y : α} (f : Hom X Y)
154+
(he : Category.Epi f) (hm : Category.split_mono f) : Category.IsIso f := by sorry
155+
156+
-- todo: exercise 1.2.vii
157+
158+
end CategoryInContext

0 commit comments

Comments
 (0)