algebra.category.Module.abelian
⟷
Mathlib.Algebra.Category.ModuleCat.Abelian
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -4,8 +4,8 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Markus Himmel
-/
import LinearAlgebra.Isomorphisms
-import Algebra.Category.Module.Kernels
-import Algebra.Category.Module.Limits
+import Algebra.Category.ModuleCat.Kernels
+import Algebra.Category.ModuleCat.Limits
import CategoryTheory.Abelian.Exact
#align_import algebra.category.Module.abelian from "leanprover-community/mathlib"@"0b7c740e25651db0ba63648fbae9f9d6f941e31b"
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,10 +3,10 @@ Copyright (c) 2020 Markus Himmel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Markus Himmel
-/
-import Mathbin.LinearAlgebra.Isomorphisms
-import Mathbin.Algebra.Category.Module.Kernels
-import Mathbin.Algebra.Category.Module.Limits
-import Mathbin.CategoryTheory.Abelian.Exact
+import LinearAlgebra.Isomorphisms
+import Algebra.Category.Module.Kernels
+import Algebra.Category.Module.Limits
+import CategoryTheory.Abelian.Exact
#align_import algebra.category.Module.abelian from "leanprover-community/mathlib"@"0b7c740e25651db0ba63648fbae9f9d6f941e31b"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,17 +2,14 @@
Copyright (c) 2020 Markus Himmel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Markus Himmel
-
-! This file was ported from Lean 3 source module algebra.category.Module.abelian
-! leanprover-community/mathlib commit 0b7c740e25651db0ba63648fbae9f9d6f941e31b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.LinearAlgebra.Isomorphisms
import Mathbin.Algebra.Category.Module.Kernels
import Mathbin.Algebra.Category.Module.Limits
import Mathbin.CategoryTheory.Abelian.Exact
+#align_import algebra.category.Module.abelian from "leanprover-community/mathlib"@"0b7c740e25651db0ba63648fbae9f9d6f941e31b"
+
/-!
# The category of left R-modules is abelian.
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -35,6 +35,7 @@ namespace ModuleCat
variable {R : Type u} [Ring R] {M N : ModuleCat.{v} R} (f : M ⟶ N)
+#print ModuleCat.normalMono /-
/-- In the category of modules, every monomorphism is normal. -/
def normalMono (hf : Mono f) : NormalMono f
where
@@ -57,7 +58,9 @@ def normalMono (hf : Mono f) : NormalMono f
(LinearMap.quotKerEquivRange f ≪≫ₗ LinearEquiv.ofEq _ _ (Submodule.ker_mkQ _).symm))) <|
by ext; rfl
#align Module.normal_mono ModuleCat.normalMono
+-/
+#print ModuleCat.normalEpi /-
/-- In the category of modules, every epimorphism is normal. -/
def normalEpi (hf : Epi f) : NormalEpi f
where
@@ -80,7 +83,9 @@ def normalEpi (hf : Epi f) : NormalEpi f
LinearEquiv.ofTop _ (range_eq_top_of_epi _))) <|
by ext; rfl
#align Module.normal_epi ModuleCat.normalEpi
+-/
+#print ModuleCat.abelian /-
/-- The category of R-modules is abelian. -/
instance abelian : Abelian (ModuleCat R)
where
@@ -90,6 +95,7 @@ instance abelian : Abelian (ModuleCat R)
normalMonoOfMono X Y := normalMono
normalEpiOfEpi X Y := normalEpi
#align Module.abelian ModuleCat.abelian
+-/
section ReflectsLimits
@@ -129,6 +135,7 @@ open LinearMap
attribute [local instance] preadditive.has_equalizers_of_has_kernels
+#print ModuleCat.exact_iff /-
theorem exact_iff : Exact f g ↔ f.range = g.ker :=
by
rw [abelian.exact_iff' f g (kernel_is_limit _) (cokernel_is_colimit _)]
@@ -136,6 +143,7 @@ theorem exact_iff : Exact f g ↔ f.range = g.ker :=
⟨fun h => le_antisymm (range_le_ker_iff.2 h.1) (ker_le_range_iff.2 h.2), fun h =>
⟨range_le_ker_iff.1 <| le_of_eq h, ker_le_range_iff.1 <| le_of_eq h.symm⟩⟩
#align Module.exact_iff ModuleCat.exact_iff
+-/
end ModuleCat
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -35,12 +35,6 @@ namespace ModuleCat
variable {R : Type u} [Ring R] {M N : ModuleCat.{v} R} (f : M ⟶ N)
-/- warning: Module.normal_mono -> ModuleCat.normalMono is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u2}} [_inst_1 : Ring.{u2} R] {M : ModuleCat.{u1, u2} R _inst_1} {N : ModuleCat.{u1, u2} R _inst_1} (f : Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) M N), (CategoryTheory.Mono.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) M N f) -> (CategoryTheory.NormalMono.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) M N (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.CategoryTheory.preadditive.{u1, u2} R _inst_1)) f)
-but is expected to have type
- forall {R : Type.{u2}} [_inst_1 : Ring.{u2} R] {M : ModuleCat.{u1, u2} R _inst_1} {N : ModuleCat.{u1, u2} R _inst_1} (f : Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) M N), (CategoryTheory.Mono.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) M N f) -> (CategoryTheory.NormalMono.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) M N (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.instPreadditiveModuleCatModuleCategory.{u1, u2} R _inst_1)) f)
-Case conversion may be inaccurate. Consider using '#align Module.normal_mono ModuleCat.normalMonoₓ'. -/
/-- In the category of modules, every monomorphism is normal. -/
def normalMono (hf : Mono f) : NormalMono f
where
@@ -64,12 +58,6 @@ def normalMono (hf : Mono f) : NormalMono f
by ext; rfl
#align Module.normal_mono ModuleCat.normalMono
-/- warning: Module.normal_epi -> ModuleCat.normalEpi is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u2}} [_inst_1 : Ring.{u2} R] {M : ModuleCat.{u1, u2} R _inst_1} {N : ModuleCat.{u1, u2} R _inst_1} (f : Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) M N), (CategoryTheory.Epi.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) M N f) -> (CategoryTheory.NormalEpi.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) M N (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.CategoryTheory.preadditive.{u1, u2} R _inst_1)) f)
-but is expected to have type
- forall {R : Type.{u2}} [_inst_1 : Ring.{u2} R] {M : ModuleCat.{u1, u2} R _inst_1} {N : ModuleCat.{u1, u2} R _inst_1} (f : Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) M N), (CategoryTheory.Epi.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) M N f) -> (CategoryTheory.NormalEpi.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) M N (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.instPreadditiveModuleCatModuleCategory.{u1, u2} R _inst_1)) f)
-Case conversion may be inaccurate. Consider using '#align Module.normal_epi ModuleCat.normalEpiₓ'. -/
/-- In the category of modules, every epimorphism is normal. -/
def normalEpi (hf : Epi f) : NormalEpi f
where
@@ -93,12 +81,6 @@ def normalEpi (hf : Epi f) : NormalEpi f
by ext; rfl
#align Module.normal_epi ModuleCat.normalEpi
-/- warning: Module.abelian -> ModuleCat.abelian is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R], CategoryTheory.Abelian.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R _inst_1) (ModuleCat.moduleCategory.{u2, u1} R _inst_1)
-but is expected to have type
- forall {R : Type.{u2}} [_inst_1 : Ring.{u2} R], CategoryTheory.Abelian.{u1, max (succ u1) u2} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1)
-Case conversion may be inaccurate. Consider using '#align Module.abelian ModuleCat.abelianₓ'. -/
/-- The category of R-modules is abelian. -/
instance abelian : Abelian (ModuleCat R)
where
@@ -147,9 +129,6 @@ open LinearMap
attribute [local instance] preadditive.has_equalizers_of_has_kernels
-/- warning: Module.exact_iff -> ModuleCat.exact_iff is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Module.exact_iff ModuleCat.exact_iffₓ'. -/
theorem exact_iff : Exact f g ↔ f.range = g.ker :=
by
rw [abelian.exact_iff' f g (kernel_is_limit _) (cokernel_is_colimit _)]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -61,9 +61,7 @@ def normalMono (hf : Mono f) : NormalMono f
(LinearEquiv.toModuleIso'
((Submodule.quotEquivOfEqBot _ (ker_eq_bot_of_mono _)).symm ≪≫ₗ
(LinearMap.quotKerEquivRange f ≪≫ₗ LinearEquiv.ofEq _ _ (Submodule.ker_mkQ _).symm))) <|
- by
- ext
- rfl
+ by ext; rfl
#align Module.normal_mono ModuleCat.normalMono
/- warning: Module.normal_epi -> ModuleCat.normalEpi is a dubious translation:
@@ -92,9 +90,7 @@ def normalEpi (hf : Epi f) : NormalEpi f
(Submodule.quotEquivOfEq _ _ (Submodule.range_subtype _) ≪≫ₗ
LinearMap.quotKerEquivRange f ≪≫ₗ
LinearEquiv.ofTop _ (range_eq_top_of_epi _))) <|
- by
- ext
- rfl
+ by ext; rfl
#align Module.normal_epi ModuleCat.normalEpi
/- warning: Module.abelian -> ModuleCat.abelian is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Markus Himmel
! This file was ported from Lean 3 source module algebra.category.Module.abelian
-! leanprover-community/mathlib commit 09f981f72d43749f1fa072deade828d9c1e185bb
+! leanprover-community/mathlib commit 0b7c740e25651db0ba63648fbae9f9d6f941e31b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -16,6 +16,9 @@ import Mathbin.CategoryTheory.Abelian.Exact
/-!
# The category of left R-modules is abelian.
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
Additionally, two linear maps are exact in the categorical sense iff `range f = ker g`.
-/
@@ -149,10 +152,7 @@ open LinearMap
attribute [local instance] preadditive.has_equalizers_of_has_kernels
/- warning: Module.exact_iff -> ModuleCat.exact_iff is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u2}} [_inst_1 : Ring.{u2} R] {M : ModuleCat.{u1, u2} R _inst_1} {N : ModuleCat.{u1, u2} R _inst_1} (f : Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) M N) {O : ModuleCat.{u1, u2} R _inst_1} (g : Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) N O), Iff (CategoryTheory.Exact.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.abelian.{u2, u1} R _inst_1))) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.CategoryTheory.preadditive.{u1, u2} R _inst_1)) (CategoryTheory.Abelian.hasKernels.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.abelian.{u2, u1} R _inst_1)) M N O f g) (Eq.{succ u1} (Submodule.{u2, u1} R (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) N) (Ring.toSemiring.{u2} R _inst_1) (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) N) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 N)) (ModuleCat.isModule.{u1, u2} R _inst_1 N)) (LinearMap.range.{u2, u2, u1, u1, u1} R R (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) M) (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) N) (Ring.toSemiring.{u2} R _inst_1) (Ring.toSemiring.{u2} R _inst_1) (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) M) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 M)) (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) N) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 N)) (ModuleCat.isModule.{u1, u2} R _inst_1 M) (ModuleCat.isModule.{u1, u2} R _inst_1 N) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R _inst_1))) (Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) M N) (ModuleCat.linearMapClass.{u2, u1} R _inst_1 M N) (RingHomSurjective.ids.{u2} R (Ring.toSemiring.{u2} R _inst_1)) f) (LinearMap.ker.{u2, u2, u1, u1, u1} R R (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) N) (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) O) (Ring.toSemiring.{u2} R _inst_1) (Ring.toSemiring.{u2} R _inst_1) (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) N) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 N)) (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) O) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 O)) (ModuleCat.isModule.{u1, u2} R _inst_1 N) (ModuleCat.isModule.{u1, u2} R _inst_1 O) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R _inst_1))) (Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) N O) (ModuleCat.linearMapClass.{u2, u1} R _inst_1 N O) g))
-but is expected to have type
- forall {R : Type.{u2}} [_inst_1 : Ring.{u2} R] {M : ModuleCat.{u1, u2} R _inst_1} {N : ModuleCat.{u1, u2} R _inst_1} (f : Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) M N) {O : ModuleCat.{u1, u2} R _inst_1} (g : Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) N O), Iff (CategoryTheory.Exact.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.abelian.{u1, u2} R _inst_1))) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.instPreadditiveModuleCatModuleCategory.{u1, u2} R _inst_1)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.instPreadditiveModuleCatModuleCategory.{u1, u2} R _inst_1)) (CategoryTheory.Preadditive.hasEqualizers_of_hasKernels.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (CategoryTheory.Abelian.toPreadditive.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.abelian.{u1, u2} R _inst_1)) (CategoryTheory.Abelian.has_kernels.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.abelian.{u1, u2} R _inst_1)))) M N O f g) (Eq.{succ u1} (Submodule.{u2, u1} R (ModuleCat.carrier.{u1, u2} R _inst_1 N) (Ring.toSemiring.{u2} R _inst_1) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u2} R _inst_1 N) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 N)) (ModuleCat.isModule.{u1, u2} R _inst_1 N)) (LinearMap.range.{u2, u2, u1, u1, u1} R R (ModuleCat.carrier.{u1, u2} R _inst_1 M) (ModuleCat.carrier.{u1, u2} R _inst_1 N) (Ring.toSemiring.{u2} R _inst_1) (Ring.toSemiring.{u2} R _inst_1) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u2} R _inst_1 M) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 M)) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u2} R _inst_1 N) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 N)) (ModuleCat.isModule.{u1, u2} R _inst_1 M) (ModuleCat.isModule.{u1, u2} R _inst_1 N) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R _inst_1))) (Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) M N) (ModuleCat.instLinearMapClassHomModuleCatToQuiverToCategoryStructModuleCategoryCarrierToSemiringToAddCommMonoidIsAddCommGroupIsModule.{u2, u1} R _inst_1 M N) (RingHomSurjective.ids.{u2} R (Ring.toSemiring.{u2} R _inst_1)) f) (LinearMap.ker.{u2, u2, u1, u1, u1} R R (ModuleCat.carrier.{u1, u2} R _inst_1 N) (ModuleCat.carrier.{u1, u2} R _inst_1 O) (Ring.toSemiring.{u2} R _inst_1) (Ring.toSemiring.{u2} R _inst_1) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u2} R _inst_1 N) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 N)) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u2} R _inst_1 O) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 O)) (ModuleCat.isModule.{u1, u2} R _inst_1 N) (ModuleCat.isModule.{u1, u2} R _inst_1 O) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R _inst_1))) (Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) N O) (ModuleCat.instLinearMapClassHomModuleCatToQuiverToCategoryStructModuleCategoryCarrierToSemiringToAddCommMonoidIsAddCommGroupIsModule.{u2, u1} R _inst_1 N O) g))
+<too large>
Case conversion may be inaccurate. Consider using '#align Module.exact_iff ModuleCat.exact_iffₓ'. -/
theorem exact_iff : Exact f g ↔ f.range = g.ker :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/ef95945cd48c932c9e034872bd25c3c220d9c946
@@ -32,6 +32,12 @@ namespace ModuleCat
variable {R : Type u} [Ring R] {M N : ModuleCat.{v} R} (f : M ⟶ N)
+/- warning: Module.normal_mono -> ModuleCat.normalMono is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u2}} [_inst_1 : Ring.{u2} R] {M : ModuleCat.{u1, u2} R _inst_1} {N : ModuleCat.{u1, u2} R _inst_1} (f : Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) M N), (CategoryTheory.Mono.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) M N f) -> (CategoryTheory.NormalMono.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) M N (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.CategoryTheory.preadditive.{u1, u2} R _inst_1)) f)
+but is expected to have type
+ forall {R : Type.{u2}} [_inst_1 : Ring.{u2} R] {M : ModuleCat.{u1, u2} R _inst_1} {N : ModuleCat.{u1, u2} R _inst_1} (f : Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) M N), (CategoryTheory.Mono.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) M N f) -> (CategoryTheory.NormalMono.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) M N (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.instPreadditiveModuleCatModuleCategory.{u1, u2} R _inst_1)) f)
+Case conversion may be inaccurate. Consider using '#align Module.normal_mono ModuleCat.normalMonoₓ'. -/
/-- In the category of modules, every monomorphism is normal. -/
def normalMono (hf : Mono f) : NormalMono f
where
@@ -57,6 +63,12 @@ def normalMono (hf : Mono f) : NormalMono f
rfl
#align Module.normal_mono ModuleCat.normalMono
+/- warning: Module.normal_epi -> ModuleCat.normalEpi is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u2}} [_inst_1 : Ring.{u2} R] {M : ModuleCat.{u1, u2} R _inst_1} {N : ModuleCat.{u1, u2} R _inst_1} (f : Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) M N), (CategoryTheory.Epi.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) M N f) -> (CategoryTheory.NormalEpi.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) M N (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.CategoryTheory.preadditive.{u1, u2} R _inst_1)) f)
+but is expected to have type
+ forall {R : Type.{u2}} [_inst_1 : Ring.{u2} R] {M : ModuleCat.{u1, u2} R _inst_1} {N : ModuleCat.{u1, u2} R _inst_1} (f : Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) M N), (CategoryTheory.Epi.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) M N f) -> (CategoryTheory.NormalEpi.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) M N (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.instPreadditiveModuleCatModuleCategory.{u1, u2} R _inst_1)) f)
+Case conversion may be inaccurate. Consider using '#align Module.normal_epi ModuleCat.normalEpiₓ'. -/
/-- In the category of modules, every epimorphism is normal. -/
def normalEpi (hf : Epi f) : NormalEpi f
where
@@ -82,6 +94,12 @@ def normalEpi (hf : Epi f) : NormalEpi f
rfl
#align Module.normal_epi ModuleCat.normalEpi
+/- warning: Module.abelian -> ModuleCat.abelian is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R], CategoryTheory.Abelian.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R _inst_1) (ModuleCat.moduleCategory.{u2, u1} R _inst_1)
+but is expected to have type
+ forall {R : Type.{u2}} [_inst_1 : Ring.{u2} R], CategoryTheory.Abelian.{u1, max (succ u1) u2} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1)
+Case conversion may be inaccurate. Consider using '#align Module.abelian ModuleCat.abelianₓ'. -/
/-- The category of R-modules is abelian. -/
instance abelian : Abelian (ModuleCat R)
where
@@ -94,25 +112,33 @@ instance abelian : Abelian (ModuleCat R)
section ReflectsLimits
+#print ModuleCat.forgetReflectsLimitsOfSize /-
/- We need to put this in this weird spot because we need to know that the category of modules
is balanced. -/
instance forgetReflectsLimitsOfSize :
ReflectsLimitsOfSize.{v, v} (forget (ModuleCat.{max v w} R)) :=
reflectsLimitsOfReflectsIsomorphisms
#align Module.forget_reflects_limits_of_size ModuleCat.forgetReflectsLimitsOfSize
+-/
+#print ModuleCat.forget₂ReflectsLimitsOfSize /-
instance forget₂ReflectsLimitsOfSize :
ReflectsLimitsOfSize.{v, v} (forget₂ (ModuleCat.{max v w} R) AddCommGroupCat.{max v w}) :=
reflectsLimitsOfReflectsIsomorphisms
#align Module.forget₂_reflects_limits_of_size ModuleCat.forget₂ReflectsLimitsOfSize
+-/
+#print ModuleCat.forgetReflectsLimits /-
instance forgetReflectsLimits : ReflectsLimits (forget (ModuleCat.{v} R)) :=
ModuleCat.forgetReflectsLimitsOfSize.{v, v}
#align Module.forget_reflects_limits ModuleCat.forgetReflectsLimits
+-/
+#print ModuleCat.forget₂ReflectsLimits /-
instance forget₂ReflectsLimits : ReflectsLimits (forget₂ (ModuleCat.{v} R) AddCommGroupCat.{v}) :=
ModuleCat.forget₂ReflectsLimitsOfSize.{v, v}
#align Module.forget₂_reflects_limits ModuleCat.forget₂ReflectsLimits
+-/
end ReflectsLimits
@@ -122,6 +148,12 @@ open LinearMap
attribute [local instance] preadditive.has_equalizers_of_has_kernels
+/- warning: Module.exact_iff -> ModuleCat.exact_iff is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u2}} [_inst_1 : Ring.{u2} R] {M : ModuleCat.{u1, u2} R _inst_1} {N : ModuleCat.{u1, u2} R _inst_1} (f : Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) M N) {O : ModuleCat.{u1, u2} R _inst_1} (g : Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) N O), Iff (CategoryTheory.Exact.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (CategoryTheory.Abelian.CategoryTheory.Limits.hasStrongEpiMonoFactorisations.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.abelian.{u2, u1} R _inst_1))) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.CategoryTheory.preadditive.{u1, u2} R _inst_1)) (CategoryTheory.Abelian.hasKernels.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.abelian.{u2, u1} R _inst_1)) M N O f g) (Eq.{succ u1} (Submodule.{u2, u1} R (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) N) (Ring.toSemiring.{u2} R _inst_1) (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) N) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 N)) (ModuleCat.isModule.{u1, u2} R _inst_1 N)) (LinearMap.range.{u2, u2, u1, u1, u1} R R (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) M) (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) N) (Ring.toSemiring.{u2} R _inst_1) (Ring.toSemiring.{u2} R _inst_1) (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) M) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 M)) (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) N) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 N)) (ModuleCat.isModule.{u1, u2} R _inst_1 M) (ModuleCat.isModule.{u1, u2} R _inst_1 N) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R _inst_1))) (Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) M N) (ModuleCat.linearMapClass.{u2, u1} R _inst_1 M N) (RingHomSurjective.ids.{u2} R (Ring.toSemiring.{u2} R _inst_1)) f) (LinearMap.ker.{u2, u2, u1, u1, u1} R R (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) N) (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) O) (Ring.toSemiring.{u2} R _inst_1) (Ring.toSemiring.{u2} R _inst_1) (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) N) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 N)) (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{max (succ u2) (succ (succ u1)), succ (succ u1)} (ModuleCat.{u1, u2} R _inst_1) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u2} R _inst_1) O) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 O)) (ModuleCat.isModule.{u1, u2} R _inst_1 N) (ModuleCat.isModule.{u1, u2} R _inst_1 O) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R _inst_1))) (Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) N O) (ModuleCat.linearMapClass.{u2, u1} R _inst_1 N O) g))
+but is expected to have type
+ forall {R : Type.{u2}} [_inst_1 : Ring.{u2} R] {M : ModuleCat.{u1, u2} R _inst_1} {N : ModuleCat.{u1, u2} R _inst_1} (f : Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) M N) {O : ModuleCat.{u1, u2} R _inst_1} (g : Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) N O), Iff (CategoryTheory.Exact.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (CategoryTheory.Limits.hasImages_of_hasStrongEpiMonoFactorisations.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (CategoryTheory.Abelian.instHasStrongEpiMonoFactorisations.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.abelian.{u1, u2} R _inst_1))) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.instPreadditiveModuleCatModuleCategory.{u1, u2} R _inst_1)) (CategoryTheory.Limits.hasKernels_of_hasEqualizers.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.instPreadditiveModuleCatModuleCategory.{u1, u2} R _inst_1)) (CategoryTheory.Preadditive.hasEqualizers_of_hasKernels.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (CategoryTheory.Abelian.toPreadditive.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.abelian.{u1, u2} R _inst_1)) (CategoryTheory.Abelian.has_kernels.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1) (ModuleCat.abelian.{u1, u2} R _inst_1)))) M N O f g) (Eq.{succ u1} (Submodule.{u2, u1} R (ModuleCat.carrier.{u1, u2} R _inst_1 N) (Ring.toSemiring.{u2} R _inst_1) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u2} R _inst_1 N) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 N)) (ModuleCat.isModule.{u1, u2} R _inst_1 N)) (LinearMap.range.{u2, u2, u1, u1, u1} R R (ModuleCat.carrier.{u1, u2} R _inst_1 M) (ModuleCat.carrier.{u1, u2} R _inst_1 N) (Ring.toSemiring.{u2} R _inst_1) (Ring.toSemiring.{u2} R _inst_1) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u2} R _inst_1 M) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 M)) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u2} R _inst_1 N) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 N)) (ModuleCat.isModule.{u1, u2} R _inst_1 M) (ModuleCat.isModule.{u1, u2} R _inst_1 N) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R _inst_1))) (Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) M N) (ModuleCat.instLinearMapClassHomModuleCatToQuiverToCategoryStructModuleCategoryCarrierToSemiringToAddCommMonoidIsAddCommGroupIsModule.{u2, u1} R _inst_1 M N) (RingHomSurjective.ids.{u2} R (Ring.toSemiring.{u2} R _inst_1)) f) (LinearMap.ker.{u2, u2, u1, u1, u1} R R (ModuleCat.carrier.{u1, u2} R _inst_1 N) (ModuleCat.carrier.{u1, u2} R _inst_1 O) (Ring.toSemiring.{u2} R _inst_1) (Ring.toSemiring.{u2} R _inst_1) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u2} R _inst_1 N) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 N)) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u2} R _inst_1 O) (ModuleCat.isAddCommGroup.{u1, u2} R _inst_1 O)) (ModuleCat.isModule.{u1, u2} R _inst_1 N) (ModuleCat.isModule.{u1, u2} R _inst_1 O) (RingHom.id.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R _inst_1))) (Quiver.Hom.{succ u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 (succ u1)} (ModuleCat.{u1, u2} R _inst_1) (ModuleCat.moduleCategory.{u1, u2} R _inst_1))) N O) (ModuleCat.instLinearMapClassHomModuleCatToQuiverToCategoryStructModuleCategoryCarrierToSemiringToAddCommMonoidIsAddCommGroupIsModule.{u2, u1} R _inst_1 N O) g))
+Case conversion may be inaccurate. Consider using '#align Module.exact_iff ModuleCat.exact_iffₓ'. -/
theorem exact_iff : Exact f g ↔ f.range = g.ker :=
by
rw [abelian.exact_iff' f g (kernel_is_limit _) (cokernel_is_colimit _)]
mathlib commit https://github.com/leanprover-community/mathlib/commit/21e3562c5e12d846c7def5eff8cdbc520d7d4936
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Markus Himmel
! This file was ported from Lean 3 source module algebra.category.Module.abelian
-! leanprover-community/mathlib commit ac3ae212f394f508df43e37aa093722fa9b65d31
+! leanprover-community/mathlib commit 09f981f72d43749f1fa072deade828d9c1e185bb
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -83,13 +83,14 @@ def normalEpi (hf : Epi f) : NormalEpi f
#align Module.normal_epi ModuleCat.normalEpi
/-- The category of R-modules is abelian. -/
-instance : Abelian (ModuleCat R)
+instance abelian : Abelian (ModuleCat R)
where
HasFiniteProducts := ⟨fun n => Limits.hasLimitsOfShapeOfHasLimits⟩
HasKernels := Limits.hasKernels_of_hasEqualizers (ModuleCat R)
HasCokernels := hasCokernels_moduleCat
normalMonoOfMono X Y := normalMono
normalEpiOfEpi X Y := normalEpi
+#align Module.abelian ModuleCat.abelian
section ReflectsLimits
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -85,7 +85,7 @@ def normalEpi (hf : Epi f) : NormalEpi f
/-- The category of R-modules is abelian. -/
instance : Abelian (ModuleCat R)
where
- HasFiniteProducts := ⟨fun n => Limits.hasLimitsOfShape_of_has_limits⟩
+ HasFiniteProducts := ⟨fun n => Limits.hasLimitsOfShapeOfHasLimits⟩
HasKernels := Limits.hasKernels_of_hasEqualizers (ModuleCat R)
HasCokernels := hasCokernels_moduleCat
normalMonoOfMono X Y := normalMono
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -85,7 +85,7 @@ def normalEpi (hf : Epi f) : NormalEpi f
/-- The category of R-modules is abelian. -/
instance : Abelian (ModuleCat R)
where
- HasFiniteProducts := ⟨fun n => Limits.hasLimitsOfShapeOfHasLimits⟩
+ HasFiniteProducts := ⟨fun n => Limits.hasLimitsOfShape_of_has_limits⟩
HasKernels := Limits.hasKernels_of_hasEqualizers (ModuleCat R)
HasCokernels := hasCokernels_moduleCat
normalMonoOfMono X Y := normalMono
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
TypeMax
constructions by UnivLE
assumptions (#11420)
Replaces TypeMax
limit constructions in MonCat
, GroupCat
, Ring
, AlgebraCat
and ModuleCat
by the UnivLE
analogs. Also generalizes some universe assumptions.
@@ -85,7 +85,8 @@ set_option linter.uppercaseLean3 false in
section ReflectsLimits
-- Porting note: added to make the following definitions work
-instance : HasLimitsOfSize.{v,v} (ModuleCatMax.{v, w} R) := ModuleCat.hasLimitsOfSize
+instance : HasLimitsOfSize.{v,v} (ModuleCatMax.{v, w} R) :=
+ ModuleCat.hasLimitsOfSize.{v, max v w, _, v}
/- We need to put this in this weird spot because we need to know that the category of modules
is balanced. -/
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -84,7 +84,7 @@ set_option linter.uppercaseLean3 false in
section ReflectsLimits
--- porting note: added to make the following definitions work
+-- Porting note: added to make the following definitions work
instance : HasLimitsOfSize.{v,v} (ModuleCatMax.{v, w} R) := ModuleCat.hasLimitsOfSize
/- We need to put this in this weird spot because we need to know that the category of modules
@@ -2,17 +2,14 @@
Copyright (c) 2020 Markus Himmel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Markus Himmel
-
-! This file was ported from Lean 3 source module algebra.category.Module.abelian
-! leanprover-community/mathlib commit 09f981f72d43749f1fa072deade828d9c1e185bb
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.LinearAlgebra.Isomorphisms
import Mathlib.Algebra.Category.ModuleCat.Kernels
import Mathlib.Algebra.Category.ModuleCat.Limits
import Mathlib.CategoryTheory.Abelian.Exact
+#align_import algebra.category.Module.abelian from "leanprover-community/mathlib"@"09f981f72d43749f1fa072deade828d9c1e185bb"
+
/-!
# The category of left R-modules is abelian.
This is the second half of the changes originally in #5699, removing all occurrences of ;
after a space and implementing a linter rule to enforce it.
In most cases this 2-character substring has a space after it, so the following command was run first:
find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;
The remaining cases were few enough in number that they were done manually.
@@ -51,7 +51,7 @@ def normalMono (hf : Mono f) : NormalMono f where
(LinearEquiv.toModuleIso'
((Submodule.quotEquivOfEqBot _ (ker_eq_bot_of_mono _)).symm ≪≫ₗ
(LinearMap.quotKerEquivRange f ≪≫ₗ
- LinearEquiv.ofEq _ _ (Submodule.ker_mkQ _).symm))) <| by ext ; rfl
+ LinearEquiv.ofEq _ _ (Submodule.ker_mkQ _).symm))) <| by ext; rfl
set_option linter.uppercaseLean3 false in
#align Module.normal_mono ModuleCat.normalMono
@@ -73,7 +73,7 @@ def normalEpi (hf : Epi f) : NormalEpi f where
(LinearEquiv.toModuleIso'
(Submodule.quotEquivOfEq _ _ (Submodule.range_subtype _) ≪≫ₗ
LinearMap.quotKerEquivRange f ≪≫ₗ
- LinearEquiv.ofTop _ (range_eq_top_of_epi _))) <| by ext ; rfl
+ LinearEquiv.ofTop _ (range_eq_top_of_epi _))) <| by ext; rfl
set_option linter.uppercaseLean3 false in
#align Module.normal_epi ModuleCat.normalEpi
@@ -88,18 +88,18 @@ set_option linter.uppercaseLean3 false in
section ReflectsLimits
-- porting note: added to make the following definitions work
-instance : HasLimitsOfSize.{v,v} (ModuleCatMax.{u, v, w} R) := ModuleCat.hasLimitsOfSize
+instance : HasLimitsOfSize.{v,v} (ModuleCatMax.{v, w} R) := ModuleCat.hasLimitsOfSize
/- We need to put this in this weird spot because we need to know that the category of modules
is balanced. -/
instance forgetReflectsLimitsOfSize :
- ReflectsLimitsOfSize.{v, v} (forget (ModuleCatMax.{u, v, w} R)) :=
+ ReflectsLimitsOfSize.{v, v} (forget (ModuleCatMax.{v, w} R)) :=
reflectsLimitsOfReflectsIsomorphisms
set_option linter.uppercaseLean3 false in
#align Module.forget_reflects_limits_of_size ModuleCat.forgetReflectsLimitsOfSize
instance forget₂ReflectsLimitsOfSize :
- ReflectsLimitsOfSize.{v, v} (forget₂ (ModuleCatMax.{u, v, w} R) AddCommGroupCat.{max v w}) :=
+ ReflectsLimitsOfSize.{v, v} (forget₂ (ModuleCatMax.{v, w} R) AddCommGroupCat.{max v w}) :=
reflectsLimitsOfReflectsIsomorphisms
set_option linter.uppercaseLean3 false in
#align Module.forget₂_reflects_limits_of_size ModuleCat.forget₂ReflectsLimitsOfSize
Co-authored-by: Chris Hughes <chrishughes24@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: int-y1 <jason_yuen2007@hotmail.com> Co-authored-by: Kevin Buzzard <k.buzzard@imperial.ac.uk>
The unported dependencies are