Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 31019c2

Browse files
committed
feat(category_theory/idempotents): an equivalence of categories for homological complexes (#17569)
This PR constructs an equivalence of categories `karoubi_homological_complex_equivalence C c : karoubi (homological_complex C c) ≌ homological_complex (karoubi C) c`. The automation for `karoubi` categories is also made better by the introduction of the simp lemma `karoubi.comp_f`.
1 parent 011aebd commit 31019c2

File tree

10 files changed

+232
-119
lines changed

10 files changed

+232
-119
lines changed

src/algebraic_topology/dold_kan/n_reflects_iso.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ instance : reflects_isomorphisms (N₁ : simplicial_object C ⥤ karoubi (chain_
4646
have h₁ := homological_complex.congr_hom (karoubi.hom_ext.mp (is_iso.hom_inv_id (N₁.map f))),
4747
have h₂ := homological_complex.congr_hom (karoubi.hom_ext.mp (is_iso.inv_hom_id (N₁.map f))),
4848
have h₃ := λ n, karoubi.homological_complex.p_comm_f_assoc (inv (N₁.map f)) (n) (f.app (op [n])),
49-
simp only [N₁_map_f, karoubi.comp, homological_complex.comp_f,
49+
simp only [N₁_map_f, karoubi.comp_f, homological_complex.comp_f,
5050
alternating_face_map_complex.map_f, N₁_obj_p, karoubi.id_eq, assoc] at h₁ h₂ h₃,
5151
/- we have to construct an inverse to f in degree n, by induction on n -/
5252
intro n,

src/algebraic_topology/dold_kan/normalized.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,12 @@ def N₁_iso_normalized_Moore_complex_comp_to_karoubi :
128128
hom_inv_id' := begin
129129
ext X : 3,
130130
simp only [P_infty_to_normalized_Moore_complex_comp_inclusion_of_Moore_complex_map,
131-
nat_trans.comp_app, karoubi.comp, N₁_obj_p, nat_trans.id_app, karoubi.id_eq],
131+
nat_trans.comp_app, karoubi.comp_f, N₁_obj_p, nat_trans.id_app, karoubi.id_eq],
132132
end,
133133
inv_hom_id' := begin
134134
ext X : 3,
135135
simp only [← cancel_mono (inclusion_of_Moore_complex_map X),
136-
nat_trans.comp_app, karoubi.comp, assoc, nat_trans.id_app, karoubi.id_eq,
136+
nat_trans.comp_app, karoubi.comp_f, assoc, nat_trans.id_app, karoubi.id_eq,
137137
P_infty_to_normalized_Moore_complex_comp_inclusion_of_Moore_complex_map,
138138
inclusion_of_Moore_complex_map_comp_P_infty],
139139
dsimp only [functor.comp_obj, to_karoubi],

src/algebraic_topology/dold_kan/p_infty.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,10 @@ begin
197197
/- We use the three equalities h₃₂, h₄₃, h₁₄. -/
198198
rw [← h₃₂, ← h₄₃, h₁₄],
199199
simp only [karoubi_functor_category_embedding.map_app_f, karoubi.decomp_id_p_f,
200-
karoubi.decomp_id_i_f, karoubi.comp],
200+
karoubi.decomp_id_i_f, karoubi.comp_f],
201201
let π : Y₄ ⟶ Y₄ := (to_karoubi _ ⋙ karoubi_functor_category_embedding _ _).map Y.p,
202202
have eq := karoubi.hom_ext.mp (P_infty_f_naturality n π),
203-
simp only [karoubi.comp] at eq,
203+
simp only [karoubi.comp_f] at eq,
204204
dsimp [π] at eq,
205205
rw [← eq, reassoc_of (app_idem Y (op [n]))],
206206
end

src/algebraic_topology/dold_kan/split_simplicial_object.lean

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -224,13 +224,13 @@ def to_karoubi_nondeg_complex_iso_N₁ : (to_karoubi _).obj s.nondeg_complex ≅
224224
comm := by { ext n, dsimp, simp only [comp_id, P_infty_comp_π_summand_id], }, },
225225
hom_inv_id' := begin
226226
ext n,
227-
simpa only [assoc, P_infty_comp_π_summand_id, karoubi.comp, homological_complex.comp_f,
228-
ι_π_summand_eq_id],
227+
simpa only [assoc, P_infty_comp_π_summand_id, karoubi.comp_f,
228+
homological_complex.comp_f, ι_π_summand_eq_id],
229229
end,
230230
inv_hom_id' := begin
231231
ext n,
232-
simp only [karoubi.comp, homological_complex.comp_f,
233-
π_summand_comp_ι_summand_comp_P_infty_eq_P_infty, karoubi.id_eq, N₁_obj_p],
232+
simp only [π_summand_comp_ι_summand_comp_P_infty_eq_P_infty, karoubi.comp_f,
233+
homological_complex.comp_f, N₁_obj_p, karoubi.id_eq],
234234
end, }
235235

236236
end splitting
@@ -275,9 +275,9 @@ nat_iso.of_components (λ S, S.s.to_karoubi_nondeg_complex_iso_N₁)
275275
(λ S₁ S₂ Φ, begin
276276
ext n,
277277
dsimp,
278-
simp only [to_karoubi_map_f, karoubi.comp, homological_complex.comp_f,
279-
splitting.to_karoubi_nondeg_complex_iso_N₁_hom_f_f, N₁_map_f, nondeg_complex_functor_map_f,
280-
alternating_face_map_complex.map_f, assoc, P_infty_f_idem_assoc],
278+
simp only [karoubi.comp_f, to_karoubi_map_f, homological_complex.comp_f,
279+
nondeg_complex_functor_map_f, splitting.to_karoubi_nondeg_complex_iso_N₁_hom_f_f,
280+
N₁_map_f, alternating_face_map_complex.map_f, assoc, P_infty_f_idem_assoc],
281281
erw ← split.ι_summand_naturality_symm_assoc Φ (splitting.index_set.id (op [n])),
282282
rw P_infty_f_naturality,
283283
end)

src/category_theory/idempotents/biproducts.lean

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,10 @@ def bicone [has_finite_biproducts C] {J : Type} [fintype J]
6363
ι_π := λ j j', begin
6464
split_ifs,
6565
{ subst h,
66-
simp only [biproduct.bicone_ι, biproduct.ι_map, biproduct.bicone_π,
67-
biproduct.ι_π_self_assoc, comp, category.assoc, eq_to_hom_refl, id_eq,
68-
biproduct.map_π, (F j).idem], },
69-
{ simpa only [hom_ext, biproduct.ι_π_ne_assoc _ h, assoc,
70-
biproduct.map_π, biproduct.map_π_assoc, zero_comp, comp], },
66+
simp only [assoc, idem, biproduct.map_π, biproduct.map_π_assoc, eq_to_hom_refl,
67+
id_eq, hom_ext, comp_f, biproduct.ι_π_self_assoc], },
68+
{ simp only [biproduct.ι_π_ne_assoc _ h, assoc, biproduct.map_π,
69+
biproduct.map_π_assoc, hom_ext, comp_f, zero_comp, quiver.hom.add_comm_group_zero_f], },
7170
end, }
7271

7372
end biproducts
@@ -83,15 +82,15 @@ lemma karoubi_has_finite_biproducts [has_finite_biproducts C] :
8382
rw [sum_hom, comp_sum, finset.sum_eq_single j], rotate,
8483
{ intros j' h1 h2,
8584
simp only [biproduct.ι_map, biproducts.bicone_ι_f, biproducts.bicone_π_f,
86-
assoc, comp, biproduct.map_π],
85+
assoc, comp_f, biproduct.map_π],
8786
slice_lhs 1 2 { rw biproduct.ι_π, },
8887
split_ifs,
8988
{ exfalso, exact h2 h.symm, },
9089
{ simp only [zero_comp], } },
9190
{ intro h,
9291
exfalso,
9392
simpa only [finset.mem_univ, not_true] using h, },
94-
{ simp only [biproducts.bicone_π_f, comp,
93+
{ simp only [biproducts.bicone_π_f, comp_f,
9594
biproduct.ι_map, assoc, biproducts.bicone_ι_f, biproduct.map_π],
9695
slice_lhs 1 2 { rw biproduct.ι_π, },
9796
split_ifs, swap, { exfalso, exact h rfl, },
@@ -119,12 +118,12 @@ has_binary_biproduct_of_total
119118
inr := P.complement.decomp_id_i,
120119
inl_fst' := P.decomp_id.symm,
121120
inl_snd' := begin
122-
simp only [decomp_id_i_f, decomp_id_p_f, complement_p, comp_sub, comp,
121+
simp only [decomp_id_i_f, decomp_id_p_f, complement_p, comp_sub, comp_f,
123122
hom_ext, quiver.hom.add_comm_group_zero_f, P.idem],
124123
erw [comp_id, sub_self],
125124
end,
126125
inr_fst' := begin
127-
simp only [decomp_id_i_f, complement_p, decomp_id_p_f, sub_comp, comp,
126+
simp only [decomp_id_i_f, complement_p, decomp_id_p_f, sub_comp, comp_f,
128127
hom_ext, quiver.hom.add_comm_group_zero_f, P.idem],
129128
erw [id_comp, sub_self],
130129
end,
@@ -144,14 +143,14 @@ def decomposition (P : karoubi C) : P ⊞ P.complement ≅ (to_karoubi _).obj P.
144143
← decomp_id, id_comp, add_right_eq_self],
145144
convert zero_comp,
146145
ext,
147-
simp only [decomp_id_i_f, decomp_id_p_f, complement_p, comp_sub, comp,
146+
simp only [decomp_id_i_f, decomp_id_p_f, complement_p, comp_sub, comp_f,
148147
quiver.hom.add_comm_group_zero_f, P.idem],
149148
erw [comp_id, sub_self], },
150149
{ simp only [← assoc, biprod.inr_desc, biprod.lift_eq, comp_add,
151150
← decomp_id, comp_id, id_comp, add_left_eq_self],
152151
convert zero_comp,
153152
ext,
154-
simp only [decomp_id_i_f, decomp_id_p_f, complement_p, sub_comp, comp,
153+
simp only [decomp_id_i_f, decomp_id_p_f, complement_p, sub_comp, comp_f,
155154
quiver.hom.add_comm_group_zero_f, P.idem],
156155
erw [id_comp, sub_self], }
157156
end,

src/category_theory/idempotents/functor_categories.lean

Lines changed: 25 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,24 @@ namespace category_theory
2727

2828
namespace idempotents
2929

30-
variables (J C : Type*) [category J] [category C]
30+
variables {J C : Type*} [category J] [category C] (P Q : karoubi (J ⥤ C)) (f : P ⟶ Q) (X : J)
31+
32+
@[simp, reassoc]
33+
lemma app_idem :
34+
P.p.app X ≫ P.p.app X = P.p.app X := congr_app P.idem X
35+
36+
variables {P Q}
37+
38+
@[simp, reassoc]
39+
lemma app_p_comp : P.p.app X ≫ f.f.app X = f.f.app X := congr_app (p_comp f) X
40+
41+
@[simp, reassoc]
42+
lemma app_comp_p : f.f.app X ≫ Q.p.app X = f.f.app X := congr_app (comp_p f) X
43+
44+
@[reassoc]
45+
lemma app_p_comm : P.p.app X ≫ f.f.app X = f.f.app X ≫ Q.p.app X := congr_app (p_comm f) X
46+
47+
variables (J C)
3148

3249
instance functor_category_is_idempotent_complete [is_idempotent_complete C] :
3350
is_idempotent_complete (J ⥤ C) :=
@@ -81,32 +98,12 @@ def obj (P : karoubi (J ⥤ C)) : J ⥤ karoubi C :=
8198
have h := congr_app P.idem j,
8299
rw [nat_trans.comp_app] at h,
83100
slice_rhs 1 3 { erw [h, h], },
84-
end },
85-
map_id' := λ j, by { ext, simp only [functor.map_id, comp_id, id_eq], },
86-
map_comp' := λ j j' j'' φ φ', begin
87-
ext,
88-
have h := congr_app P.idem j,
89-
rw [nat_trans.comp_app] at h,
90-
simp only [assoc, nat_trans.naturality_assoc, functor.map_comp, comp],
91-
slice_rhs 1 2 { rw h, },
92-
rw [assoc],
93-
end }
101+
end }, }
94102

95103
/-- Tautological action on maps of the functor `karoubi (J ⥤ C) ⥤ (J ⥤ karoubi C)`. -/
96104
@[simps]
97105
def map {P Q : karoubi (J ⥤ C)} (f : P ⟶ Q) : obj P ⟶ obj Q :=
98-
{ app := λ j, ⟨f.f.app j, congr_app f.comm j⟩,
99-
naturality' := λ j j' φ, begin
100-
ext,
101-
simp only [comp],
102-
have h := congr_app (comp_p f) j,
103-
have h' := congr_app (p_comp f) j',
104-
dsimp at h h' ⊢,
105-
slice_rhs 1 2 { erw h, },
106-
rw ← P.p.naturality,
107-
slice_lhs 2 3 { erw h', },
108-
rw f.f.naturality,
109-
end }
106+
{ app := λ j, ⟨f.f.app j, congr_app f.comm j⟩, }
110107

111108
end karoubi_functor_category_embedding
112109

@@ -117,20 +114,18 @@ variables (J C)
117114
def karoubi_functor_category_embedding :
118115
karoubi (J ⥤ C) ⥤ (J ⥤ karoubi C) :=
119116
{ obj := karoubi_functor_category_embedding.obj,
120-
map := λ P Q, karoubi_functor_category_embedding.map,
121-
map_id' := λ P, rfl,
122-
map_comp' := λ P Q R f g, rfl, }
117+
map := λ P Q, karoubi_functor_category_embedding.map, }
123118

124119
instance : full (karoubi_functor_category_embedding J C) :=
125120
{ preimage := λ P Q f,
126121
{ f :=
127122
{ app := λ j, (f.app j).f,
128123
naturality' := λ j j' φ, begin
129-
slice_rhs 1 1 { rw ← karoubi.comp_p, },
124+
rw ← karoubi.comp_p_assoc,
130125
have h := hom_ext.mp (f.naturality φ),
131-
simp only [comp] at h,
132-
dsimp [karoubi_functor_category_embedding] at h,
133-
erw [assoc, ← h, ← P.p.naturality φ, assoc, p_comp (f.app j')],
126+
simp only [comp_f] at h,
127+
dsimp [karoubi_functor_category_embedding] at h,
128+
erw [← h, assoc, ← P.p.naturality_assoc φ, p_comp (f.app j')],
134129
end },
135130
comm := by { ext j, exact (f.app j).comm, } },
136131
witness' := λ P Q f, by { ext j, refl, }, }
@@ -161,24 +156,6 @@ begin
161156
refl, }, }
162157
end
163158

164-
variables {J C} (P Q : karoubi (J ⥤ C)) (f : P ⟶ Q) (X : J)
165-
166-
167-
@[simp, reassoc]
168-
lemma app_idem (X : J) :
169-
P.p.app X ≫ P.p.app X = P.p.app X := congr_app P.idem X
170-
171-
variables {P Q}
172-
173-
@[simp, reassoc]
174-
lemma app_p_comp : P.p.app X ≫ f.f.app X = f.f.app X := congr_app (p_comp f) X
175-
176-
@[simp, reassoc]
177-
lemma app_comp_p : f.f.app X ≫ Q.p.app X = f.f.app X := congr_app (comp_p f) X
178-
179-
@[reassoc]
180-
lemma app_p_comm : P.p.app X ≫ f.f.app X = f.f.app X ≫ Q.p.app X := congr_app (p_comm f) X
181-
182159
end idempotents
183160

184161
end category_theory

src/category_theory/idempotents/functor_extension.lean

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def map {F G : C ⥤ karoubi D} (φ : F ⟶ G) : obj F ⟶ obj G :=
6060
comm := begin
6161
have h := φ.naturality P.p,
6262
have h' := F.congr_map P.idem,
63-
simp only [hom_ext, karoubi.comp, F.map_comp] at h h',
63+
simp only [hom_ext, karoubi.comp_f, F.map_comp] at h h',
6464
simp only [obj_obj_p, assoc, ← h],
6565
slice_rhs 1 3 { rw [h', h'], },
6666
end, },
@@ -70,7 +70,7 @@ def map {F G : C ⥤ karoubi D} (φ : F ⟶ G) : obj F ⟶ obj G :=
7070
have h := φ.naturality f.f,
7171
have h' := F.congr_map (comp_p f),
7272
have h'' := F.congr_map (p_comp f),
73-
simp only [hom_ext, functor.map_comp, comp] at ⊢ h h' h'',
73+
simp only [hom_ext, functor.map_comp, comp_f] at ⊢ h h' h'',
7474
slice_rhs 2 3 { rw ← h, },
7575
slice_lhs 1 2 { rw h', },
7676
slice_rhs 1 2 { rw h'', },
@@ -88,10 +88,10 @@ def functor_extension₁ : (C ⥤ karoubi D) ⥤ (karoubi C ⥤ karoubi D) :=
8888
map_id' := λ F, by { ext P, exact comp_p (F.map P.p), },
8989
map_comp' := λ F G H φ φ', begin
9090
ext P,
91-
simp only [comp, functor_extension₁.map_app_f, nat_trans.comp_app, assoc],
91+
simp only [comp_f, functor_extension₁.map_app_f, nat_trans.comp_app, assoc],
9292
have h := φ.naturality P.p,
9393
have h' := F.congr_map P.idem,
94-
simp only [hom_ext, comp, F.map_comp] at h h',
94+
simp only [hom_ext, comp_f, F.map_comp] at h h',
9595
slice_rhs 2 3 { rw ← h, },
9696
slice_rhs 1 2 { rw h', },
9797
simp only [assoc],
@@ -113,13 +113,13 @@ begin
113113
ext,
114114
dsimp,
115115
simp only [comp_id, eq_to_hom_f, eq_to_hom_refl, comp_p, functor_extension₁.obj_obj_p,
116-
to_karoubi_obj_p, comp],
116+
to_karoubi_obj_p, comp_f],
117117
dsimp,
118118
simp only [functor.map_id, id_eq, p_comp], }, },
119119
{ intros F G φ,
120120
ext X,
121121
dsimp,
122-
simp only [eq_to_hom_app, F.map_id, karoubi.comp, eq_to_hom_f, id_eq, p_comp,
122+
simp only [eq_to_hom_app, F.map_id, comp_f, eq_to_hom_f, id_eq, p_comp,
123123
eq_to_hom_refl, comp_id, comp_p, functor_extension₁.obj_obj_p,
124124
to_karoubi_obj_p, F.map_id X], },
125125
end

0 commit comments

Comments
 (0)