@@ -3,36 +3,47 @@ Copyright (c) 2023 Jujian Zhang. All rights reserved.
3
3
Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Jujian Zhang
5
5
-/
6
- import Mathlib.Algebra.Category.ModuleCat.ChangeOfRings
7
- import Mathlib.Algebra.Category.Grp.EnoughInjectives
8
- import Mathlib.Algebra.Category.Grp.ZModuleEquivalence
9
- import Mathlib.Logic.Equiv.TransferInstance
6
+ import Mathlib.Algebra.Module.Injective
7
+ import Mathlib.CategoryTheory.Preadditive.Injective
8
+ import Mathlib.Algebra.Category.ModuleCat.EpiMono
10
9
11
10
/-!
12
- # Category of $R$-modules has enough injectives
13
-
14
- we lift enough injectives of abelian groups to arbitrary $R$-modules by adjoint functors
15
- `restrictScalars ⊣ coextendScalars`
16
-
17
- ## Implementation notes
18
- This file is not part of `Algebra/Module/Injective.lean` to prevent import loop: enough-injectives
19
- of abelian groups needs `Algebra/Module/Injective.lean` and this file needs enough-injectives of
20
- abelian groups.
11
+ # Injective objects in the category of $R$-modules
21
12
-/
22
13
23
14
open CategoryTheory
24
15
25
- universe v u
26
- variable (R : Type u) [Ring R]
27
-
28
- instance : EnoughInjectives (ModuleCat.{v} ℤ) :=
29
- EnoughInjectives.of_equivalence (forget₂ (ModuleCat ℤ) AddCommGrp)
30
-
31
- lemma ModuleCat.enoughInjectives : EnoughInjectives (ModuleCat.{max v u} R) :=
32
- EnoughInjectives.of_adjunction (ModuleCat.restrictCoextendScalarsAdj.{max v u} (algebraMap ℤ R))
33
-
34
- open ModuleCat in
35
- instance [UnivLE.{u,v}] : EnoughInjectives (ModuleCat.{v} R) :=
36
- letI := (equivShrink.{v} R).symm.ring
37
- letI := enoughInjectives.{v} (Shrink.{v} R)
38
- EnoughInjectives.of_equivalence (restrictScalars (equivShrink R).symm.ringEquiv.toRingHom)
16
+ universe u v
17
+ variable (R : Type u) (M : Type v) [Ring R] [AddCommGroup M] [Module R M]
18
+ namespace Module
19
+
20
+ theorem injective_object_of_injective_module [inj : Injective R M] :
21
+ CategoryTheory.Injective (ModuleCat.of R M) where
22
+ factors g f m :=
23
+ have ⟨l, h⟩ := inj.out f ((ModuleCat.mono_iff_injective f).mp m) g
24
+ ⟨l, LinearMap.ext h⟩
25
+
26
+ theorem injective_module_of_injective_object
27
+ [inj : CategoryTheory.Injective <| ModuleCat.of R M] :
28
+ Module.Injective R M where
29
+ out X Y _ _ _ _ f hf g := by
30
+ have : CategoryTheory.Mono (ModuleCat.asHom f) := (ModuleCat.mono_iff_injective _).mpr hf
31
+ obtain ⟨l, rfl⟩ := inj.factors (ModuleCat.asHom g) (ModuleCat.asHom f)
32
+ exact ⟨l, fun _ ↦ rfl⟩
33
+
34
+ theorem injective_iff_injective_object :
35
+ Module.Injective R M ↔
36
+ CategoryTheory.Injective (ModuleCat.of R M) :=
37
+ ⟨fun _ => injective_object_of_injective_module R M,
38
+ fun _ => injective_module_of_injective_object R M⟩
39
+
40
+ end Module
41
+
42
+
43
+ instance ModuleCat.ulift_injective_of_injective. {v'}
44
+ [Small.{v} R] [AddCommGroup M] [Module R M]
45
+ [CategoryTheory.Injective <| ModuleCat.of R M] :
46
+ CategoryTheory.Injective <| ModuleCat.of R (ULift.{v'} M) :=
47
+ Module.injective_object_of_injective_module
48
+ (inj := Module.ulift_injective_of_injective
49
+ (inj := Module.injective_module_of_injective_object _ _))
0 commit comments