@@ -25,6 +25,8 @@ When `G ⊣ F` is an adjunction with `F : C ⥤ D` fully faithful, then
2525which then identifies to the inverse image by `G` of the class of
2626isomorphisms in `C`.
2727
28+ The dual results are also obtained.
29+
2830## References
2931
3032* https://ncatlab.org/nlab/show/left+Bousfield+localization+of+model+categories
@@ -121,6 +123,91 @@ lemma galoisConnection_isLocal :
121123
122124end
123125
126+ /-! ### Right Bousfield localization -/
127+
128+ section
129+
130+ variable (P : ObjectProperty C)
131+
132+ /-- Given `P : ObjectProperty C`, this is the class of morphisms `g : Y ⟶ Z`
133+ such that for all `X : C` such that `P X`, the postcomposition with `g` induces
134+ a bijection `(X ⟶ Y) ≃ (X ⟶ Z)`. (One of the applications of this notion
135+ is the right Bousfield localization of model categories.) -/
136+ def isColocal : MorphismProperty C := fun _ _ g =>
137+ ∀ X, P X → Function.Bijective (fun (f : X ⟶ _) => f ≫ g)
138+
139+ variable {P} in
140+ /-- The bijection `(X ⟶ Y) ≃ (X ⟶ Z)` induced by `g : Y ⟶ Z` when `P.isColocal g`
141+ and `P X`. -/
142+ @[simps! apply]
143+ noncomputable def isColocal.homEquiv {Y Z : C} {g : Y ⟶ Z} (hg : P.isColocal g) (X : C) (hX : P X) :
144+ (X ⟶ Y) ≃ (X ⟶ Z) :=
145+ Equiv.ofBijective _ (hg X hX)
146+
147+ lemma isoClosure_isColocal : P.isoClosure.isColocal = P.isColocal := by
148+ ext Y Z g
149+ constructor
150+ · intro hg X hX
151+ exact hg _ (P.le_isoClosure _ hX)
152+ · rintro hg X ⟨X', hX', ⟨e⟩⟩
153+ constructor
154+ · intro f₁ f₂ eq
155+ rw [← cancel_epi e.inv]
156+ apply (hg _ hX').1
157+ simp [eq]
158+ · intro f
159+ obtain ⟨a, h⟩ := (hg _ hX').2 (e.inv ≫ f)
160+ exact ⟨e.hom ≫ a, by simp [h]⟩
161+
162+ instance : P.isColocal.IsMultiplicative where
163+ id_mem _ _ _ := by simpa [id_comp] using Function.bijective_id
164+ comp_mem f g hf hg X hX := by
165+ convert Function.Bijective.comp (hg X hX) (hf X hX)
166+ cat_disch
167+
168+ instance : P.isColocal.HasTwoOutOfThreeProperty where
169+ of_postcomp f g hg hfg X hX := by
170+ rw [← Function.Bijective.of_comp_iff' (hg X hX)]
171+ convert hfg X hX
172+ cat_disch
173+ of_precomp f g hf hfg X hX := by
174+ rw [← Function.Bijective.of_comp_iff _ (hf X hX)]
175+ convert hfg X hX
176+ cat_disch
177+
178+ lemma isColocal_of_isIso {X Y : C} (f : X ⟶ Y) [IsIso f] : P.isColocal f := fun Z _ => by
179+ constructor
180+ · intro g₁ g₂ _
181+ simpa only [← cancel_mono f]
182+ · intro g
183+ exact ⟨g ≫ inv f, by simp⟩
184+
185+ lemma isColocal_iff_isIso {X Y : C} (f : X ⟶ Y) (hX : P X) (hY : P Y) :
186+ P.isColocal f ↔ IsIso f := by
187+ constructor
188+ · intro hf
189+ obtain ⟨g, hg⟩ := (hf _ hY).2 (𝟙 Y)
190+ exact ⟨g, (hf _ hX).1 (by cat_disch), hg⟩
191+ · apply isColocal_of_isIso
192+
193+ instance : P.isColocal.RespectsIso where
194+ precomp f (_ : IsIso f) g hg := P.isColocal.comp_mem f g (isColocal_of_isIso _ f) hg
195+ postcomp f (_ : IsIso f) g hg := P.isColocal.comp_mem g f hg (isColocal_of_isIso _ f)
196+
197+ lemma le_isColocal_iff (P : ObjectProperty C) (W : MorphismProperty C) :
198+ W ≤ P.isColocal ↔ P ≤ W.isColocal :=
199+ ⟨fun h _ hZ _ _ _ hf ↦ h _ hf _ hZ,
200+ fun h _ _ _ hf _ hZ ↦ h _ hZ _ hf⟩
201+
202+ lemma galoisConnection_isColocal :
203+ GaloisConnection (OrderDual.toDual ∘ isColocal (C := C))
204+ (MorphismProperty.isColocal ∘ OrderDual.ofDual) :=
205+ le_isColocal_iff
206+
207+ end
208+
209+ /-! ### Bousfield localization and adjunctions -/
210+
124211section
125212
126213variable {F : C ⥤ D} {G : D ⥤ C} (adj : G ⊣ F) [F.Full] [F.Faithful]
@@ -135,17 +222,12 @@ lemma isLocal_adj_unit_app (X : D) : isLocal (· ∈ Set.range F.obj) (adj.unit.
135222
136223lemma isLocal_iff_isIso_map {X Y : D} (f : X ⟶ Y) :
137224 isLocal (· ∈ Set.range F.obj) f ↔ IsIso (G.map f) := by
138- rw [← (isLocal (· ∈ Set.range F.obj)).postcomp_iff _ _ (isLocal_adj_unit_app adj Y)]
139- erw [adj.unit.naturality f]
140- rw [(isLocal (· ∈ Set.range F.obj)).precomp_iff _ _ (isLocal_adj_unit_app adj X),
225+ have := adj.unit.naturality f
226+ dsimp at this
227+ rw [← (isLocal (· ∈ Set.range F.obj)).postcomp_iff _ _ (isLocal_adj_unit_app adj Y),
228+ this, (isLocal (· ∈ Set.range F.obj)).precomp_iff _ _ (isLocal_adj_unit_app adj X),
141229 isLocal_iff_isIso _ _ ⟨_, rfl⟩ ⟨_, rfl⟩]
142- constructor
143- · intro h
144- dsimp at h
145- exact isIso_of_fully_faithful F (G.map f)
146- · intro
147- rw [Functor.comp_map]
148- infer_instance
230+ exact ⟨fun _ ↦ isIso_of_fully_faithful F (G.map f), fun _ ↦ inferInstance⟩
149231
150232lemma isLocal_eq_inverseImage_isomorphisms :
151233 isLocal (· ∈ Set.range F.obj) = (MorphismProperty.isomorphisms _).inverseImage G := by
@@ -159,6 +241,39 @@ lemma isLocalization_isLocal : G.IsLocalization (isLocal (· ∈ Set.range F.obj
159241
160242end
161243
244+ section
245+
246+ variable {F : C ⥤ D} {G : D ⥤ C} (adj : G ⊣ F) [G.Full] [G.Faithful]
247+ include adj
248+
249+ lemma isColocal_adj_counit_app (X : C) : isColocal (· ∈ Set.range G.obj) (adj.counit.app X) := by
250+ rintro _ ⟨Y, rfl⟩
251+ convert ((Functor.FullyFaithful.ofFullyFaithful G).homEquiv.symm.trans
252+ (adj.homEquiv Y X).symm).bijective using 1
253+ dsimp [Adjunction.homEquiv]
254+ cat_disch
255+
256+ lemma isColocal_iff_isIso_map {X Y : C} (f : X ⟶ Y) :
257+ isColocal (· ∈ Set.range G.obj) f ↔ IsIso (F.map f) := by
258+ have := adj.counit.naturality f
259+ dsimp at this
260+ rw [← (isColocal _).precomp_iff _ _ (isColocal_adj_counit_app adj X),
261+ ← this, (isColocal _).postcomp_iff _ _ (isColocal_adj_counit_app adj Y),
262+ isColocal_iff_isIso _ _ ⟨_, rfl⟩ ⟨_, rfl⟩]
263+ exact ⟨fun _ ↦ isIso_of_fully_faithful G (F.map f), fun _ ↦ inferInstance⟩
264+
265+ lemma isColocal_eq_inverseImage_isomorphisms :
266+ isColocal (· ∈ Set.range G.obj) = (MorphismProperty.isomorphisms _).inverseImage F := by
267+ ext P₁ P₂ f
268+ rw [isColocal_iff_isIso_map adj]
269+ rfl
270+
271+ lemma isLocalization_isColocal : F.IsLocalization (isColocal (· ∈ Set.range G.obj)) := by
272+ rw [isColocal_eq_inverseImage_isomorphisms adj]
273+ exact adj.isLocalization'
274+
275+ end
276+
162277end ObjectProperty
163278
164279open Localization
@@ -171,6 +286,14 @@ lemma MorphismProperty.le_isLocal_isLocal (W : MorphismProperty C) :
171286 W ≤ W.isLocal.isLocal := by
172287 rw [ObjectProperty.le_isLocal_iff]
173288
289+ lemma ObjectProperty.le_isColocal_isColocal (P : ObjectProperty C) :
290+ P ≤ P.isColocal.isColocal := by
291+ rw [← le_isColocal_iff]
292+
293+ lemma MorphismProperty.le_isColocal_isColocal (W : MorphismProperty C) :
294+ W ≤ W.isColocal.isColocal := by
295+ rw [ObjectProperty.le_isColocal_iff]
296+
174297@[deprecated (since := "2025-11-20")] alias ObjectProperty.le_isLocal_W :=
175298 ObjectProperty.le_isLocal_isLocal
176299@[deprecated (since := "2025-11-20")] alias MorphismProperty.le_leftBousfieldW_isLocal :=
0 commit comments