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

Commit 1f65e42

Browse files
b-mehtakim-em
andcommitted
feat(category_theory/adjunction): reflective adjunction induces partial bijection (#7286)
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
1 parent e5e0ae7 commit 1f65e42

File tree

1 file changed

+64
-20
lines changed

1 file changed

+64
-20
lines changed

src/category_theory/adjunction/reflective.lean

Lines changed: 64 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,16 @@ Note properties of reflective functors relating to limits and colimits are inclu
1616
`category_theory.monad.limits`.
1717
-/
1818

19-
universes v₁ v₂ u₁ u₂
19+
universes v₁ v₂ v₃ u₁ u₂ u₃
2020

2121
noncomputable theory
2222

2323
namespace category_theory
2424

25-
open limits category
25+
open category adjunction limits
2626

27-
variables {C : Type u₁} {D : Type u₂} [category.{v₁} C] [category.{v₂} D]
27+
variables {C : Type u₁} {D : Type u₂} {E : Type u₃}
28+
variables [category.{v₁} C] [category.{v₂} D] [category.{v₃} E]
2829

2930
/--
3031
A functor is *reflective*, or *a reflective inclusion*, if it is fully faithful and right adjoint.
@@ -38,10 +39,10 @@ For a reflective functor `i` (with left adjoint `L`), with unit `η`, we have `
3839
-/
3940
-- TODO: This holds more generally for idempotent adjunctions, not just reflective adjunctions.
4041
lemma unit_obj_eq_map_unit [reflective i] (X : C) :
41-
(adjunction.of_right_adjoint i).unit.app (i.obj ((left_adjoint i).obj X))
42-
= i.map ((left_adjoint i).map ((adjunction.of_right_adjoint i).unit.app X)) :=
42+
(of_right_adjoint i).unit.app (i.obj ((left_adjoint i).obj X))
43+
= i.map ((left_adjoint i).map ((of_right_adjoint i).unit.app X)) :=
4344
begin
44-
rw [←cancel_mono (i.map ((adjunction.of_right_adjoint i).counit.app ((left_adjoint i).obj X))),
45+
rw [←cancel_mono (i.map ((of_right_adjoint i).counit.app ((left_adjoint i).obj X))),
4546
←i.map_comp],
4647
simp,
4748
end
@@ -53,12 +54,12 @@ More generally this applies to objects essentially in the reflective subcategory
5354
`functor.ess_image.unit_iso`.
5455
-/
5556
instance is_iso_unit_obj [reflective i] {B : D} :
56-
is_iso ((adjunction.of_right_adjoint i).unit.app (i.obj B)) :=
57+
is_iso ((of_right_adjoint i).unit.app (i.obj B)) :=
5758
begin
58-
have : (adjunction.of_right_adjoint i).unit.app (i.obj B) =
59-
inv (i.map ((adjunction.of_right_adjoint i).counit.app B)),
59+
have : (of_right_adjoint i).unit.app (i.obj B) =
60+
inv (i.map ((of_right_adjoint i).counit.app B)),
6061
{ rw ← comp_hom_eq_id,
61-
apply (adjunction.of_right_adjoint i).right_triangle_components },
62+
apply (of_right_adjoint i).right_triangle_components },
6263
rw this,
6364
exact is_iso.inv_is_iso,
6465
end
@@ -71,10 +72,10 @@ reflection of `A`, with the isomorphism as `η_A`.
7172
(For any `B` in the reflective subcategory, we automatically have that `ε_B` is an iso.)
7273
-/
7374
lemma functor.ess_image.unit_is_iso [reflective i] {A : C} (h : A ∈ i.ess_image) :
74-
is_iso ((adjunction.of_right_adjoint i).unit.app A) :=
75+
is_iso ((of_right_adjoint i).unit.app A) :=
7576
begin
76-
suffices : (adjunction.of_right_adjoint i).unit.app A =
77-
h.get_iso.inv ≫ (adjunction.of_right_adjoint i).unit.app (i.obj h.witness) ≫
77+
suffices : (of_right_adjoint i).unit.app A =
78+
h.get_iso.inv ≫ (of_right_adjoint i).unit.app (i.obj h.witness) ≫
7879
(left_adjoint i ⋙ i).map h.get_iso.hom,
7980
{ rw this,
8081
apply_instance },
@@ -84,14 +85,14 @@ end
8485

8586
/-- If `η_A` is an isomorphism, then `A` is in the essential image of `i`. -/
8687
lemma mem_ess_image_of_unit_is_iso [is_right_adjoint i] (A : C)
87-
[is_iso ((adjunction.of_right_adjoint i).unit.app A)] : A ∈ i.ess_image :=
88-
⟨(left_adjoint i).obj A, ⟨(as_iso ((adjunction.of_right_adjoint i).unit.app A)).symm⟩⟩
88+
[is_iso ((of_right_adjoint i).unit.app A)] : A ∈ i.ess_image :=
89+
⟨(left_adjoint i).obj A, ⟨(as_iso ((of_right_adjoint i).unit.app A)).symm⟩⟩
8990

9091
/-- If `η_A` is a split monomorphism, then `A` is in the reflective subcategory. -/
9192
lemma mem_ess_image_of_unit_split_mono [reflective i] {A : C}
92-
[split_mono ((adjunction.of_right_adjoint i).unit.app A)] : A ∈ i.ess_image :=
93+
[split_mono ((of_right_adjoint i).unit.app A)] : A ∈ i.ess_image :=
9394
begin
94-
let η : 𝟭 C ⟶ left_adjoint i ⋙ i := (adjunction.of_right_adjoint i).unit,
95+
let η : 𝟭 C ⟶ left_adjoint i ⋙ i := (of_right_adjoint i).unit,
9596
haveI : is_iso (η.app (i.obj ((left_adjoint i).obj A))) := (i.obj_mem_ess_image _).unit_is_iso,
9697
have : epi (η.app A),
9798
{ apply epi_of_epi (retraction (η.app A)) _,
@@ -102,11 +103,54 @@ begin
102103
exact mem_ess_image_of_unit_is_iso A,
103104
end
104105

105-
universes v₃ u₃
106-
variables {E : Type u₃} [category.{v₃} E]
107-
108106
/-- Composition of reflective functors. -/
109107
instance reflective.comp (F : C ⥤ D) (G : D ⥤ E) [Fr : reflective F] [Gr : reflective G] :
110108
reflective (F ⋙ G) := { to_faithful := faithful.comp F G, }
111109

110+
/-- (Implementation) Auxiliary definition for `unit_comp_partial_bijective`. -/
111+
def unit_comp_partial_bijective_aux [reflective i] (A : C) (B : D) :
112+
(A ⟶ i.obj B) ≃ (i.obj ((left_adjoint i).obj A) ⟶ i.obj B) :=
113+
((adjunction.of_right_adjoint i).hom_equiv _ _).symm.trans (equiv_of_fully_faithful i)
114+
115+
/-- The description of the inverse of the bijection `unit_comp_partial_bijective_aux`. -/
116+
lemma unit_comp_partial_bijective_aux_symm_apply [reflective i] {A : C} {B : D}
117+
(f : i.obj ((left_adjoint i).obj A) ⟶ i.obj B) :
118+
(unit_comp_partial_bijective_aux _ _).symm f = (of_right_adjoint i).unit.app A ≫ f :=
119+
by simp [unit_comp_partial_bijective_aux]
120+
121+
/--
122+
If `i` has a reflector `L`, then the function `(i.obj (L.obj A) ⟶ B) → (A ⟶ B)` given by
123+
precomposing with `η.app A` is a bijection provided `B` is in the essential image of `i`.
124+
That is, the function `λ (f : i.obj (L.obj A) ⟶ B), η.app A ≫ f` is bijective, as long as `B` is in
125+
the essential image of `i`.
126+
This definition gives an equivalence: the key property that the inverse can be described
127+
nicely is shown in `unit_comp_partial_bijective_symm_apply`.
128+
129+
This establishes there is a natural bijection `(A ⟶ B) ≃ (i.obj (L.obj A) ⟶ B)`. In other words,
130+
from the point of view of objects in `D`, `A` and `i.obj (L.obj A)` look the same: specifically
131+
that `η.app A` is an isomorphism.
132+
-/
133+
def unit_comp_partial_bijective [reflective i] (A : C) {B : C} (hB : B ∈ i.ess_image) :
134+
(A ⟶ B) ≃ (i.obj ((left_adjoint i).obj A) ⟶ B) :=
135+
calc (A ⟶ B) ≃ (A ⟶ i.obj hB.witness) : iso.hom_congr (iso.refl _) hB.get_iso.symm
136+
... ≃ (i.obj _ ⟶ i.obj hB.witness) : unit_comp_partial_bijective_aux _ _
137+
... ≃ (i.obj ((left_adjoint i).obj A) ⟶ B) : iso.hom_congr (iso.refl _) hB.get_iso
138+
139+
@[simp]
140+
lemma unit_comp_partial_bijective_symm_apply [reflective i] (A : C) {B : C}
141+
(hB : B ∈ i.ess_image) (f) :
142+
(unit_comp_partial_bijective A hB).symm f = (of_right_adjoint i).unit.app A ≫ f :=
143+
by simp [unit_comp_partial_bijective, unit_comp_partial_bijective_aux_symm_apply]
144+
145+
lemma unit_comp_partial_bijective_symm_natural [reflective i] (A : C) {B B' : C} (h : B ⟶ B')
146+
(hB : B ∈ i.ess_image) (hB' : B' ∈ i.ess_image) (f : i.obj ((left_adjoint i).obj A) ⟶ B) :
147+
(unit_comp_partial_bijective A hB').symm (f ≫ h) =
148+
(unit_comp_partial_bijective A hB).symm f ≫ h :=
149+
by simp
150+
151+
lemma unit_comp_partial_bijective_natural [reflective i] (A : C) {B B' : C} (h : B ⟶ B')
152+
(hB : B ∈ i.ess_image) (hB' : B' ∈ i.ess_image) (f : A ⟶ B) :
153+
(unit_comp_partial_bijective A hB') (f ≫ h) = unit_comp_partial_bijective A hB f ≫ h :=
154+
by rw [←equiv.eq_symm_apply, unit_comp_partial_bijective_symm_natural A h, equiv.symm_apply_apply]
155+
112156
end category_theory

0 commit comments

Comments
 (0)