algebra.category.Module.abelianMathlib.Algebra.Category.ModuleCat.Abelian

This file has been ported!

Changes since the initial port

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.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -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"
Diff
@@ -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"
 
Diff
@@ -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.
 
Diff
@@ -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
 
Diff
@@ -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 _)]
Diff
@@ -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:
Diff
@@ -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
Diff
@@ -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 _)]
Diff
@@ -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
 
Diff
@@ -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
Diff
@@ -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

Changes in mathlib4

mathlib3
mathlib4
refactor(Algebra/Category): replace 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.

Diff
@@ -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. -/
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -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
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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.
 
chore: remove occurrences of semicolon after space (#5713)

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.

Diff
@@ -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
 
feat: port Algebra.Category.Module.Colimits (#4282)

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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
feat: port Algebra.Category.Module.Abelian (#4299)

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>

Dependencies 8 + 642

643 files ported (98.8%)
250068 lines ported (98.8%)
Show graph

The unported dependencies are