algebra.homology.ModuleMathlib.Algebra.Homology.ModuleCat

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)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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: Scott Morrison
 -/
 import Algebra.Homology.Homotopy
-import Algebra.Category.Module.Abelian
-import Algebra.Category.Module.Subobject
+import Algebra.Category.ModuleCat.Abelian
+import Algebra.Category.ModuleCat.Subobject
 import CategoryTheory.Limits.ConcreteCategory
 
 #align_import algebra.homology.Module from "leanprover-community/mathlib"@"8af7091a43227e179939ba132e54e54e9f3b089a"
Diff
@@ -47,7 +47,7 @@ theorem homology'_ext {L M N K : ModuleCat R} {f : L ⟶ M} {g : M ⟶ N} (w : f
     h = k := by
   refine' cokernel_funext fun n => _
   -- Gosh it would be nice if `equiv_rw` could directly use an isomorphism, or an enriched `≃`.
-  equiv_rw (kernel_subobject_iso g ≪≫ ModuleCat.kernelIsoKer g).toLinearEquiv.toEquiv at n 
+  equiv_rw (kernel_subobject_iso g ≪≫ ModuleCat.kernelIsoKer g).toLinearEquiv.toEquiv at n
   convert w n <;> simp [to_kernel_subobject]
 #align Module.homology_ext ModuleCat.homology'_ext
 -/
Diff
@@ -34,12 +34,12 @@ variable {ι : Type _} {c : ComplexShape ι} {C D : HomologicalComplex (ModuleCa
 
 namespace ModuleCat
 
-#print ModuleCat.homology_ext /-
+#print ModuleCat.homology'_ext /-
 /-- To prove that two maps out of a homology group are equal,
 it suffices to check they are equal on the images of cycles.
 -/
-theorem homology_ext {L M N K : ModuleCat R} {f : L ⟶ M} {g : M ⟶ N} (w : f ≫ g = 0)
-    {h k : homology f g w ⟶ K}
+theorem homology'_ext {L M N K : ModuleCat R} {f : L ⟶ M} {g : M ⟶ N} (w : f ≫ g = 0)
+    {h k : homology' f g w ⟶ K}
     (w :
       ∀ x : LinearMap.ker g,
         h (cokernel.π (imageToKernel _ _ w) (toKernelSubobject x)) =
@@ -49,61 +49,62 @@ theorem homology_ext {L M N K : ModuleCat R} {f : L ⟶ M} {g : M ⟶ N} (w : f
   -- Gosh it would be nice if `equiv_rw` could directly use an isomorphism, or an enriched `≃`.
   equiv_rw (kernel_subobject_iso g ≪≫ ModuleCat.kernelIsoKer g).toLinearEquiv.toEquiv at n 
   convert w n <;> simp [to_kernel_subobject]
-#align Module.homology_ext ModuleCat.homology_ext
+#align Module.homology_ext ModuleCat.homology'_ext
 -/
 
-#print ModuleCat.toCycles /-
+#print ModuleCat.toCycles' /-
 /-- Bundle an element `C.X i` such that `C.d_from i x = 0` as a term of `C.cycles i`. -/
-abbrev toCycles {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι}
-    (x : LinearMap.ker (C.dFrom i)) : C.cycles i :=
+abbrev toCycles' {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι}
+    (x : LinearMap.ker (C.dFrom i)) : C.cycles' i :=
   toKernelSubobject x
-#align Module.to_cycles ModuleCat.toCycles
+#align Module.to_cycles ModuleCat.toCycles'
 -/
 
-#print ModuleCat.cycles_ext /-
+#print ModuleCat.cycles'_ext /-
 @[ext]
-theorem cycles_ext {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι} {x y : C.cycles i}
-    (w : (C.cycles i).arrow x = (C.cycles i).arrow y) : x = y :=
+theorem cycles'_ext {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι} {x y : C.cycles' i}
+    (w : (C.cycles' i).arrow x = (C.cycles' i).arrow y) : x = y :=
   by
   apply_fun (C.cycles i).arrow using (ModuleCat.mono_iff_injective _).mp (cycles C i).arrow_mono
   exact w
-#align Module.cycles_ext ModuleCat.cycles_ext
+#align Module.cycles_ext ModuleCat.cycles'_ext
 -/
 
 attribute [local instance] concrete_category.has_coe_to_sort
 
-#print ModuleCat.cyclesMap_toCycles /-
+#print ModuleCat.cycles'Map_toCycles' /-
 @[simp]
-theorem cyclesMap_toCycles (f : C ⟶ D) {i : ι} (x : LinearMap.ker (C.dFrom i)) :
-    (cyclesMap f i) (toCycles x) = toCycles ⟨f.f i x.1, by simp [x.2]⟩ := by ext; simp
-#align Module.cycles_map_to_cycles ModuleCat.cyclesMap_toCycles
+theorem cycles'Map_toCycles' (f : C ⟶ D) {i : ι} (x : LinearMap.ker (C.dFrom i)) :
+    (cycles'Map f i) (toCycles' x) = toCycles' ⟨f.f i x.1, by simp [x.2]⟩ := by ext; simp
+#align Module.cycles_map_to_cycles ModuleCat.cycles'Map_toCycles'
 -/
 
-#print ModuleCat.toHomology /-
+#print ModuleCat.toHomology' /-
 /-- Build a term of `C.homology i` from an element `C.X i` such that `C.d_from i x = 0`. -/
-abbrev toHomology {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι}
-    (x : LinearMap.ker (C.dFrom i)) : C.homology i :=
-  homology.π (C.dTo i) (C.dFrom i) _ (toCycles x)
-#align Module.to_homology ModuleCat.toHomology
+abbrev toHomology' {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι}
+    (x : LinearMap.ker (C.dFrom i)) : C.homology' i :=
+  homology'.π (C.dTo i) (C.dFrom i) _ (toCycles' x)
+#align Module.to_homology ModuleCat.toHomology'
 -/
 
-#print ModuleCat.homology_ext' /-
+#print ModuleCat.homology'_ext' /-
 @[ext]
-theorem homology_ext' {M : ModuleCat R} (i : ι) {h k : C.homology i ⟶ M}
-    (w : ∀ x : LinearMap.ker (C.dFrom i), h (toHomology x) = k (toHomology x)) : h = k :=
-  homology_ext _ w
-#align Module.homology_ext' ModuleCat.homology_ext'
+theorem homology'_ext' {M : ModuleCat R} (i : ι) {h k : C.homology' i ⟶ M}
+    (w : ∀ x : LinearMap.ker (C.dFrom i), h (toHomology' x) = k (toHomology' x)) : h = k :=
+  homology'_ext _ w
+#align Module.homology_ext' ModuleCat.homology'_ext'
 -/
 
 /-- We give an alternative proof of `homology_map_eq_of_homotopy`,
 specialized to the setting of `V = Module R`,
 to demonstrate the use of extensionality lemmas for homology in `Module R`. -/
 example (f g : C ⟶ D) (h : Homotopy f g) (i : ι) :
-    (homologyFunctor (ModuleCat.{u} R) c i).map f = (homologyFunctor (ModuleCat.{u} R) c i).map g :=
+    (homology'Functor (ModuleCat.{u} R) c i).map f =
+      (homology'Functor (ModuleCat.{u} R) c i).map g :=
   by
   -- To check that two morphisms out of a homology group agree, it suffices to check on cycles:
   ext
-  simp only [homologyFunctor_map, homology.π_map_apply]
+  simp only [homology'Functor_map, homology'.π_map_apply]
   -- To check that two elements are equal mod boundaries, it suffices to exhibit a boundary:
   ext1
   swap; exact (toPrev i h.hom) x.1
Diff
@@ -3,10 +3,10 @@ Copyright (c) 2021 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 -/
-import Mathbin.Algebra.Homology.Homotopy
-import Mathbin.Algebra.Category.Module.Abelian
-import Mathbin.Algebra.Category.Module.Subobject
-import Mathbin.CategoryTheory.Limits.ConcreteCategory
+import Algebra.Homology.Homotopy
+import Algebra.Category.Module.Abelian
+import Algebra.Category.Module.Subobject
+import CategoryTheory.Limits.ConcreteCategory
 
 #align_import algebra.homology.Module from "leanprover-community/mathlib"@"8af7091a43227e179939ba132e54e54e9f3b089a"
 
Diff
@@ -2,17 +2,14 @@
 Copyright (c) 2021 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
-
-! This file was ported from Lean 3 source module algebra.homology.Module
-! leanprover-community/mathlib commit 8af7091a43227e179939ba132e54e54e9f3b089a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Algebra.Homology.Homotopy
 import Mathbin.Algebra.Category.Module.Abelian
 import Mathbin.Algebra.Category.Module.Subobject
 import Mathbin.CategoryTheory.Limits.ConcreteCategory
 
+#align_import algebra.homology.Module from "leanprover-community/mathlib"@"8af7091a43227e179939ba132e54e54e9f3b089a"
+
 /-!
 # Complexes of modules
 
Diff
@@ -37,6 +37,7 @@ variable {ι : Type _} {c : ComplexShape ι} {C D : HomologicalComplex (ModuleCa
 
 namespace ModuleCat
 
+#print ModuleCat.homology_ext /-
 /-- To prove that two maps out of a homology group are equal,
 it suffices to check they are equal on the images of cycles.
 -/
@@ -52,13 +53,17 @@ theorem homology_ext {L M N K : ModuleCat R} {f : L ⟶ M} {g : M ⟶ N} (w : f
   equiv_rw (kernel_subobject_iso g ≪≫ ModuleCat.kernelIsoKer g).toLinearEquiv.toEquiv at n 
   convert w n <;> simp [to_kernel_subobject]
 #align Module.homology_ext ModuleCat.homology_ext
+-/
 
+#print ModuleCat.toCycles /-
 /-- Bundle an element `C.X i` such that `C.d_from i x = 0` as a term of `C.cycles i`. -/
 abbrev toCycles {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι}
     (x : LinearMap.ker (C.dFrom i)) : C.cycles i :=
   toKernelSubobject x
 #align Module.to_cycles ModuleCat.toCycles
+-/
 
+#print ModuleCat.cycles_ext /-
 @[ext]
 theorem cycles_ext {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι} {x y : C.cycles i}
     (w : (C.cycles i).arrow x = (C.cycles i).arrow y) : x = y :=
@@ -66,25 +71,32 @@ theorem cycles_ext {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι} {x y :
   apply_fun (C.cycles i).arrow using (ModuleCat.mono_iff_injective _).mp (cycles C i).arrow_mono
   exact w
 #align Module.cycles_ext ModuleCat.cycles_ext
+-/
 
 attribute [local instance] concrete_category.has_coe_to_sort
 
+#print ModuleCat.cyclesMap_toCycles /-
 @[simp]
 theorem cyclesMap_toCycles (f : C ⟶ D) {i : ι} (x : LinearMap.ker (C.dFrom i)) :
     (cyclesMap f i) (toCycles x) = toCycles ⟨f.f i x.1, by simp [x.2]⟩ := by ext; simp
 #align Module.cycles_map_to_cycles ModuleCat.cyclesMap_toCycles
+-/
 
+#print ModuleCat.toHomology /-
 /-- Build a term of `C.homology i` from an element `C.X i` such that `C.d_from i x = 0`. -/
 abbrev toHomology {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι}
     (x : LinearMap.ker (C.dFrom i)) : C.homology i :=
   homology.π (C.dTo i) (C.dFrom i) _ (toCycles x)
 #align Module.to_homology ModuleCat.toHomology
+-/
 
+#print ModuleCat.homology_ext' /-
 @[ext]
 theorem homology_ext' {M : ModuleCat R} (i : ι) {h k : C.homology i ⟶ M}
     (w : ∀ x : LinearMap.ker (C.dFrom i), h (toHomology x) = k (toHomology x)) : h = k :=
   homology_ext _ w
 #align Module.homology_ext' ModuleCat.homology_ext'
+-/
 
 /-- We give an alternative proof of `homology_map_eq_of_homotopy`,
 specialized to the setting of `V = Module R`,
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 
 ! This file was ported from Lean 3 source module algebra.homology.Module
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
+! leanprover-community/mathlib commit 8af7091a43227e179939ba132e54e54e9f3b089a
 ! 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.Limits.ConcreteCategory
 /-!
 # Complexes of modules
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 We provide some additional API to work with homological complexes in `Module R`.
 -/
 
Diff
@@ -46,7 +46,7 @@ theorem homology_ext {L M N K : ModuleCat R} {f : L ⟶ M} {g : M ⟶ N} (w : f
     h = k := by
   refine' cokernel_funext fun n => _
   -- Gosh it would be nice if `equiv_rw` could directly use an isomorphism, or an enriched `≃`.
-  equiv_rw(kernel_subobject_iso g ≪≫ ModuleCat.kernelIsoKer g).toLinearEquiv.toEquiv  at n 
+  equiv_rw (kernel_subobject_iso g ≪≫ ModuleCat.kernelIsoKer g).toLinearEquiv.toEquiv at n 
   convert w n <;> simp [to_kernel_subobject]
 #align Module.homology_ext ModuleCat.homology_ext
 
Diff
@@ -46,7 +46,7 @@ theorem homology_ext {L M N K : ModuleCat R} {f : L ⟶ M} {g : M ⟶ N} (w : f
     h = k := by
   refine' cokernel_funext fun n => _
   -- Gosh it would be nice if `equiv_rw` could directly use an isomorphism, or an enriched `≃`.
-  equiv_rw(kernel_subobject_iso g ≪≫ ModuleCat.kernelIsoKer g).toLinearEquiv.toEquiv  at n
+  equiv_rw(kernel_subobject_iso g ≪≫ ModuleCat.kernelIsoKer g).toLinearEquiv.toEquiv  at n 
   convert w n <;> simp [to_kernel_subobject]
 #align Module.homology_ext ModuleCat.homology_ext
 
Diff
@@ -22,7 +22,7 @@ We provide some additional API to work with homological complexes in `Module R`.
 
 universe v u
 
-open Classical
+open scoped Classical
 
 noncomputable section
 
Diff
@@ -68,10 +68,7 @@ attribute [local instance] concrete_category.has_coe_to_sort
 
 @[simp]
 theorem cyclesMap_toCycles (f : C ⟶ D) {i : ι} (x : LinearMap.ker (C.dFrom i)) :
-    (cyclesMap f i) (toCycles x) = toCycles ⟨f.f i x.1, by simp [x.2]⟩ :=
-  by
-  ext
-  simp
+    (cyclesMap f i) (toCycles x) = toCycles ⟨f.f i x.1, by simp [x.2]⟩ := by ext; simp
 #align Module.cycles_map_to_cycles ModuleCat.cyclesMap_toCycles
 
 /-- Build a term of `C.homology i` from an element `C.X i` such that `C.d_from i x = 0`. -/

Changes in mathlib4

mathlib3
mathlib4
feat(Algebra/Category/ModuleCat): the category of presheaves of modules has limits (#12264)

Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com> Co-authored-by: Christian Merten <christian@merten.dev>

Diff
@@ -34,7 +34,7 @@ namespace ModuleCat
 /-- To prove that two maps out of a homology group are equal,
 it suffices to check they are equal on the images of cycles.
 -/
-theorem homology'_ext {L M N K : ModuleCat R} {f : L ⟶ M} {g : M ⟶ N} (w : f ≫ g = 0)
+theorem homology'_ext {L M N K : ModuleCat.{u} R} {f : L ⟶ M} {g : M ⟶ N} (w : f ≫ g = 0)
     {h k : homology' f g w ⟶ K}
     (w :
       ∀ x : LinearMap.ker g,
@@ -89,8 +89,8 @@ set_option linter.uppercaseLean3 false in
 
 @[ext]
 theorem homology'_ext' {M : ModuleCat R} (i : ι) {h k : C.homology' i ⟶ M}
-    (w : ∀ x : LinearMap.ker (C.dFrom i), h (toHomology' x) = k (toHomology' x)) : h = k :=
-  homology'_ext _ w
+    (w : ∀ x : LinearMap.ker (C.dFrom i), h (toHomology' x) = k (toHomology' x)) : h = k := by
+  apply homology'_ext _ w
 set_option linter.uppercaseLean3 false in
 #align Module.homology_ext' ModuleCat.homology'_ext'
 
doc(Algebra,AlgebraicGeometry): remove mathlib3 names in doc comments (#11955)

Mostly automatic, with a few manual corrections.

Diff
@@ -96,7 +96,7 @@ set_option linter.uppercaseLean3 false in
 
 -- Porting note: `erw` had to be used instead of `simp`
 -- see https://github.com/leanprover-community/mathlib4/issues/5026
-/-- We give an alternative proof of `homology_map_eq_of_homotopy`,
+/-- We give an alternative proof of `homology'_map_eq_of_homotopy`,
 specialized to the setting of `V = Module R`,
 to demonstrate the use of extensionality lemmas for homology in `Module R`. -/
 example (f g : C ⟶ D) (h : Homotopy f g) (i : ι) :
chore(*): remove empty lines between variable statements (#11418)

Empty lines were removed by executing the following Python script twice

import os
import re


# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
  for filename in files:
    if filename.endswith('.lean'):
      file_path = os.path.join(dir_path, filename)

      # Open the file and read its contents
      with open(file_path, 'r') as file:
        content = file.read()

      # Use a regular expression to replace sequences of "variable" lines separated by empty lines
      # with sequences without empty lines
      modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)

      # Write the modified content back to the file
      with open(file_path, 'w') as file:
        file.write(modified_content)
Diff
@@ -27,7 +27,6 @@ noncomputable section
 open CategoryTheory Limits HomologicalComplex
 
 variable {R : Type v} [Ring R]
-
 variable {ι : Type*} {c : ComplexShape ι} {C D : HomologicalComplex (ModuleCat.{u} R) c}
 
 namespace ModuleCat
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
@@ -43,7 +43,7 @@ theorem homology'_ext {L M N K : ModuleCat R} {f : L ⟶ M} {g : M ⟶ N} (w : f
           k (cokernel.π (imageToKernel _ _ w) (toKernelSubobject x))) :
     h = k := by
   refine' Concrete.cokernel_funext fun n => _
-  -- porting note: as `equiv_rw` was not ported, it was replaced by `Equiv.surjective`
+  -- Porting note: as `equiv_rw` was not ported, it was replaced by `Equiv.surjective`
   -- Gosh it would be nice if `equiv_rw` could directly use an isomorphism, or an enriched `≃`.
   obtain ⟨n, rfl⟩ := (kernelSubobjectIso g ≪≫
     ModuleCat.kernelIsoKer g).toLinearEquiv.toEquiv.symm.surjective n
@@ -67,7 +67,7 @@ theorem cycles'_ext {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι}
 set_option linter.uppercaseLean3 false in
 #align Module.cycles_ext ModuleCat.cycles'_ext
 
--- porting note: both proofs by `rw` were proofs by `simp` which no longer worked
+-- Porting note: both proofs by `rw` were proofs by `simp` which no longer worked
 -- see https://github.com/leanprover-community/mathlib4/issues/5026
 @[simp]
 theorem cycles'Map_toCycles' (f : C ⟶ D) {i : ι} (x : LinearMap.ker (C.dFrom i)) :
@@ -95,7 +95,7 @@ theorem homology'_ext' {M : ModuleCat R} (i : ι) {h k : C.homology' i ⟶ M}
 set_option linter.uppercaseLean3 false in
 #align Module.homology_ext' ModuleCat.homology'_ext'
 
--- porting note: `erw` had to be used instead of `simp`
+-- Porting note: `erw` had to be used instead of `simp`
 -- see https://github.com/leanprover-community/mathlib4/issues/5026
 /-- We give an alternative proof of `homology_map_eq_of_homotopy`,
 specialized to the setting of `V = Module R`,
feat(CategoryTheory): description of products and pullbacks in concrete categories (#8507)

Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>

Diff
@@ -6,7 +6,7 @@ Authors: Scott Morrison
 import Mathlib.Algebra.Homology.Homotopy
 import Mathlib.Algebra.Category.ModuleCat.Abelian
 import Mathlib.Algebra.Category.ModuleCat.Subobject
-import Mathlib.CategoryTheory.Limits.ConcreteCategory
+import Mathlib.CategoryTheory.Limits.Shapes.ConcreteCategory
 
 #align_import algebra.homology.Module from "leanprover-community/mathlib"@"70fd9563a21e7b963887c9360bd29b2393e6225a"
 
@@ -42,7 +42,7 @@ theorem homology'_ext {L M N K : ModuleCat R} {f : L ⟶ M} {g : M ⟶ N} (w : f
         h (cokernel.π (imageToKernel _ _ w) (toKernelSubobject x)) =
           k (cokernel.π (imageToKernel _ _ w) (toKernelSubobject x))) :
     h = k := by
-  refine' cokernel_funext fun n => _
+  refine' Concrete.cokernel_funext fun n => _
   -- porting note: as `equiv_rw` was not ported, it was replaced by `Equiv.surjective`
   -- Gosh it would be nice if `equiv_rw` could directly use an isomorphism, or an enriched `≃`.
   obtain ⟨n, rfl⟩ := (kernelSubobjectIso g ≪≫
perf(FunLike.Basic): beta reduce CoeFun.coe (#7905)

This eliminates (fun a ↦ β) α in the type when applying a FunLike.

Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -120,9 +120,8 @@ example (f g : C ⟶ D) (h : Homotopy f g) (i : ι) :
   erw [LinearMap.add_apply]
   rw [LinearMap.add_apply, prevD_eq_toPrev_dTo, dNext_eq_dFrom_fromNext]
   -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
-  erw [comp_apply, comp_apply, comp_apply]
+  erw [comp_apply, comp_apply]
   erw [x.2, map_zero]
-  dsimp
   abel
 
 end ModuleCat
refactor: introduce the new homology API for homological complex and rename the old one (#7954)

This PR renames definitions of the current homology API (adding a ' to homology, cycles, QuasiIso) so as to create space for the development of the new homology API of homological complexes: this PR also contains the new definition of HomologicalComplex.homology which involves the homology theory of short complexes.

Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>

Diff
@@ -35,8 +35,8 @@ namespace ModuleCat
 /-- To prove that two maps out of a homology group are equal,
 it suffices to check they are equal on the images of cycles.
 -/
-theorem homology_ext {L M N K : ModuleCat R} {f : L ⟶ M} {g : M ⟶ N} (w : f ≫ g = 0)
-    {h k : homology f g w ⟶ K}
+theorem homology'_ext {L M N K : ModuleCat R} {f : L ⟶ M} {g : M ⟶ N} (w : f ≫ g = 0)
+    {h k : homology' f g w ⟶ K}
     (w :
       ∀ x : LinearMap.ker g,
         h (cokernel.π (imageToKernel _ _ w) (toKernelSubobject x)) =
@@ -49,51 +49,51 @@ theorem homology_ext {L M N K : ModuleCat R} {f : L ⟶ M} {g : M ⟶ N} (w : f
     ModuleCat.kernelIsoKer g).toLinearEquiv.toEquiv.symm.surjective n
   exact w n
 set_option linter.uppercaseLean3 false in
-#align Module.homology_ext ModuleCat.homology_ext
+#align Module.homology_ext ModuleCat.homology'_ext
 
 /-- Bundle an element `C.X i` such that `C.dFrom i x = 0` as a term of `C.cycles i`. -/
-abbrev toCycles {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι}
-    (x : LinearMap.ker (C.dFrom i)) : (C.cycles i : Type u) :=
+abbrev toCycles' {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι}
+    (x : LinearMap.ker (C.dFrom i)) : (C.cycles' i : Type u) :=
   toKernelSubobject x
 set_option linter.uppercaseLean3 false in
-#align Module.to_cycles ModuleCat.toCycles
+#align Module.to_cycles ModuleCat.toCycles'
 
 @[ext]
-theorem cycles_ext {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι}
-    {x y : (C.cycles i : Type u)}
-    (w : (C.cycles i).arrow x = (C.cycles i).arrow y) : x = y := by
-  apply_fun (C.cycles i).arrow using (ModuleCat.mono_iff_injective _).mp (cycles C i).arrow_mono
+theorem cycles'_ext {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι}
+    {x y : (C.cycles' i : Type u)}
+    (w : (C.cycles' i).arrow x = (C.cycles' i).arrow y) : x = y := by
+  apply_fun (C.cycles' i).arrow using (ModuleCat.mono_iff_injective _).mp (cycles' C i).arrow_mono
   exact w
 set_option linter.uppercaseLean3 false in
-#align Module.cycles_ext ModuleCat.cycles_ext
+#align Module.cycles_ext ModuleCat.cycles'_ext
 
 -- porting note: both proofs by `rw` were proofs by `simp` which no longer worked
 -- see https://github.com/leanprover-community/mathlib4/issues/5026
 @[simp]
-theorem cyclesMap_toCycles (f : C ⟶ D) {i : ι} (x : LinearMap.ker (C.dFrom i)) :
-    (cyclesMap f i) (toCycles x) = toCycles ⟨f.f i x.1, by
+theorem cycles'Map_toCycles' (f : C ⟶ D) {i : ι} (x : LinearMap.ker (C.dFrom i)) :
+    (cycles'Map f i) (toCycles' x) = toCycles' ⟨f.f i x.1, by
       -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
       rw [LinearMap.mem_ker]; erw [Hom.comm_from_apply, x.2, map_zero]⟩ := by
   ext
   -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
-  erw [cyclesMap_arrow_apply, toKernelSubobject_arrow, toKernelSubobject_arrow]
+  erw [cycles'Map_arrow_apply, toKernelSubobject_arrow, toKernelSubobject_arrow]
   rfl
 set_option linter.uppercaseLean3 false in
-#align Module.cycles_map_to_cycles ModuleCat.cyclesMap_toCycles
+#align Module.cycles_map_to_cycles ModuleCat.cycles'Map_toCycles'
 
 /-- Build a term of `C.homology i` from an element `C.X i` such that `C.d_from i x = 0`. -/
-abbrev toHomology {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι}
-    (x : LinearMap.ker (C.dFrom i)) : C.homology i :=
-  homology.π (C.dTo i) (C.dFrom i) _ (toCycles x)
+abbrev toHomology' {C : HomologicalComplex (ModuleCat.{u} R) c} {i : ι}
+    (x : LinearMap.ker (C.dFrom i)) : C.homology' i :=
+  homology'.π (C.dTo i) (C.dFrom i) _ (toCycles' x)
 set_option linter.uppercaseLean3 false in
-#align Module.to_homology ModuleCat.toHomology
+#align Module.to_homology ModuleCat.toHomology'
 
 @[ext]
-theorem homology_ext' {M : ModuleCat R} (i : ι) {h k : C.homology i ⟶ M}
-    (w : ∀ x : LinearMap.ker (C.dFrom i), h (toHomology x) = k (toHomology x)) : h = k :=
-  homology_ext _ w
+theorem homology'_ext' {M : ModuleCat R} (i : ι) {h k : C.homology' i ⟶ M}
+    (w : ∀ x : LinearMap.ker (C.dFrom i), h (toHomology' x) = k (toHomology' x)) : h = k :=
+  homology'_ext _ w
 set_option linter.uppercaseLean3 false in
-#align Module.homology_ext' ModuleCat.homology_ext'
+#align Module.homology_ext' ModuleCat.homology'_ext'
 
 -- porting note: `erw` had to be used instead of `simp`
 -- see https://github.com/leanprover-community/mathlib4/issues/5026
@@ -101,13 +101,13 @@ set_option linter.uppercaseLean3 false in
 specialized to the setting of `V = Module R`,
 to demonstrate the use of extensionality lemmas for homology in `Module R`. -/
 example (f g : C ⟶ D) (h : Homotopy f g) (i : ι) :
-    (homologyFunctor (ModuleCat.{u} R) c i).map f =
-      (homologyFunctor (ModuleCat.{u} R) c i).map g := by
+    (homology'Functor (ModuleCat.{u} R) c i).map f =
+      (homology'Functor (ModuleCat.{u} R) c i).map g := by
   -- To check that two morphisms out of a homology group agree, it suffices to check on cycles:
-  apply homology_ext
+  apply homology'_ext
   intro x
-  simp only [homologyFunctor_map]
-  erw [homology.π_map_apply, homology.π_map_apply]
+  simp only [homology'Functor_map]
+  erw [homology'.π_map_apply, homology'.π_map_apply]
   -- To check that two elements are equal mod boundaries, it suffices to exhibit a boundary:
   refine' cokernel_π_imageSubobject_ext _ _ ((toPrev i h.hom) x.1) _
   -- Moreover, to check that two cycles are equal, it suffices to check their underlying elements:
Revert "chore: revert #7703 (#7710)"

This reverts commit f3695eb2.

Diff
@@ -72,9 +72,12 @@ set_option linter.uppercaseLean3 false in
 @[simp]
 theorem cyclesMap_toCycles (f : C ⟶ D) {i : ι} (x : LinearMap.ker (C.dFrom i)) :
     (cyclesMap f i) (toCycles x) = toCycles ⟨f.f i x.1, by
-      rw [LinearMap.mem_ker, Hom.comm_from_apply, x.2, map_zero]⟩ := by
+      -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+      rw [LinearMap.mem_ker]; erw [Hom.comm_from_apply, x.2, map_zero]⟩ := by
   ext
-  rw [cyclesMap_arrow_apply, toKernelSubobject_arrow, toKernelSubobject_arrow]
+  -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+  erw [cyclesMap_arrow_apply, toKernelSubobject_arrow, toKernelSubobject_arrow]
+  rfl
 set_option linter.uppercaseLean3 false in
 #align Module.cycles_map_to_cycles ModuleCat.cyclesMap_toCycles
 
@@ -112,9 +115,13 @@ example (f g : C ⟶ D) (h : Homotopy f g) (i : ι) :
   erw [map_add, CategoryTheory.Limits.kernelSubobjectMap_arrow_apply,
     CategoryTheory.Limits.kernelSubobjectMap_arrow_apply,
     ModuleCat.toKernelSubobject_arrow, imageToKernel_arrow_apply, imageSubobject_arrow_comp_apply]
-  rw [Hom.sqFrom_left, Hom.sqFrom_left, h.comm i, LinearMap.add_apply,
-    LinearMap.add_apply, prevD_eq_toPrev_dTo, dNext_eq_dFrom_fromNext, comp_apply, comp_apply,
-    x.2, map_zero]
+  rw [Hom.sqFrom_left, Hom.sqFrom_left, h.comm i]
+  -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+  erw [LinearMap.add_apply]
+  rw [LinearMap.add_apply, prevD_eq_toPrev_dTo, dNext_eq_dFrom_fromNext]
+  -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+  erw [comp_apply, comp_apply, comp_apply]
+  erw [x.2, map_zero]
   dsimp
   abel
 
chore: revert #7703 (#7710)

This reverts commit 26eb2b0a.

Diff
@@ -72,12 +72,9 @@ set_option linter.uppercaseLean3 false in
 @[simp]
 theorem cyclesMap_toCycles (f : C ⟶ D) {i : ι} (x : LinearMap.ker (C.dFrom i)) :
     (cyclesMap f i) (toCycles x) = toCycles ⟨f.f i x.1, by
-      -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
-      rw [LinearMap.mem_ker]; erw [Hom.comm_from_apply, x.2, map_zero]⟩ := by
+      rw [LinearMap.mem_ker, Hom.comm_from_apply, x.2, map_zero]⟩ := by
   ext
-  -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
-  erw [cyclesMap_arrow_apply, toKernelSubobject_arrow, toKernelSubobject_arrow]
-  rfl
+  rw [cyclesMap_arrow_apply, toKernelSubobject_arrow, toKernelSubobject_arrow]
 set_option linter.uppercaseLean3 false in
 #align Module.cycles_map_to_cycles ModuleCat.cyclesMap_toCycles
 
@@ -115,13 +112,9 @@ example (f g : C ⟶ D) (h : Homotopy f g) (i : ι) :
   erw [map_add, CategoryTheory.Limits.kernelSubobjectMap_arrow_apply,
     CategoryTheory.Limits.kernelSubobjectMap_arrow_apply,
     ModuleCat.toKernelSubobject_arrow, imageToKernel_arrow_apply, imageSubobject_arrow_comp_apply]
-  rw [Hom.sqFrom_left, Hom.sqFrom_left, h.comm i]
-  -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
-  erw [LinearMap.add_apply]
-  rw [LinearMap.add_apply, prevD_eq_toPrev_dTo, dNext_eq_dFrom_fromNext]
-  -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
-  erw [comp_apply, comp_apply, comp_apply]
-  erw [x.2, map_zero]
+  rw [Hom.sqFrom_left, Hom.sqFrom_left, h.comm i, LinearMap.add_apply,
+    LinearMap.add_apply, prevD_eq_toPrev_dTo, dNext_eq_dFrom_fromNext, comp_apply, comp_apply,
+    x.2, map_zero]
   dsimp
   abel
 
chore: bump toolchain to v4.2.0-rc2 (#7703)

This includes all the changes from #7606.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -72,9 +72,12 @@ set_option linter.uppercaseLean3 false in
 @[simp]
 theorem cyclesMap_toCycles (f : C ⟶ D) {i : ι} (x : LinearMap.ker (C.dFrom i)) :
     (cyclesMap f i) (toCycles x) = toCycles ⟨f.f i x.1, by
-      rw [LinearMap.mem_ker, Hom.comm_from_apply, x.2, map_zero]⟩ := by
+      -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+      rw [LinearMap.mem_ker]; erw [Hom.comm_from_apply, x.2, map_zero]⟩ := by
   ext
-  rw [cyclesMap_arrow_apply, toKernelSubobject_arrow, toKernelSubobject_arrow]
+  -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+  erw [cyclesMap_arrow_apply, toKernelSubobject_arrow, toKernelSubobject_arrow]
+  rfl
 set_option linter.uppercaseLean3 false in
 #align Module.cycles_map_to_cycles ModuleCat.cyclesMap_toCycles
 
@@ -112,9 +115,13 @@ example (f g : C ⟶ D) (h : Homotopy f g) (i : ι) :
   erw [map_add, CategoryTheory.Limits.kernelSubobjectMap_arrow_apply,
     CategoryTheory.Limits.kernelSubobjectMap_arrow_apply,
     ModuleCat.toKernelSubobject_arrow, imageToKernel_arrow_apply, imageSubobject_arrow_comp_apply]
-  rw [Hom.sqFrom_left, Hom.sqFrom_left, h.comm i, LinearMap.add_apply,
-    LinearMap.add_apply, prevD_eq_toPrev_dTo, dNext_eq_dFrom_fromNext, comp_apply, comp_apply,
-    x.2, map_zero]
+  rw [Hom.sqFrom_left, Hom.sqFrom_left, h.comm i]
+  -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+  erw [LinearMap.add_apply]
+  rw [LinearMap.add_apply, prevD_eq_toPrev_dTo, dNext_eq_dFrom_fromNext]
+  -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+  erw [comp_apply, comp_apply, comp_apply]
+  erw [x.2, map_zero]
   dsimp
   abel
 
chore: update/remove heart beat bumps (#6860)

We clean up heart beat bumps after #6474.

Diff
@@ -92,7 +92,6 @@ theorem homology_ext' {M : ModuleCat R} (i : ι) {h k : C.homology i ⟶ M}
 set_option linter.uppercaseLean3 false in
 #align Module.homology_ext' ModuleCat.homology_ext'
 
-set_option maxHeartbeats 400000 in
 -- porting note: `erw` had to be used instead of `simp`
 -- see https://github.com/leanprover-community/mathlib4/issues/5026
 /-- We give an alternative proof of `homology_map_eq_of_homotopy`,
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -28,7 +28,7 @@ open CategoryTheory Limits HomologicalComplex
 
 variable {R : Type v} [Ring R]
 
-variable {ι : Type _} {c : ComplexShape ι} {C D : HomologicalComplex (ModuleCat.{u} R) c}
+variable {ι : Type*} {c : ComplexShape ι} {C D : HomologicalComplex (ModuleCat.{u} R) c}
 
 namespace ModuleCat
 
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) 2021 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
-
-! This file was ported from Lean 3 source module algebra.homology.Module
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Algebra.Homology.Homotopy
 import Mathlib.Algebra.Category.ModuleCat.Abelian
 import Mathlib.Algebra.Category.ModuleCat.Subobject
 import Mathlib.CategoryTheory.Limits.ConcreteCategory
 
+#align_import algebra.homology.Module from "leanprover-community/mathlib"@"70fd9563a21e7b963887c9360bd29b2393e6225a"
+
 /-!
 # Complexes of modules
 
feat: CompletelyDistribLattice (#5238)

Adds new CompletelyDistribLattice/CompleteAtomicBooleanAlgebra classes for complete lattices / complete atomic Boolean algebras that are also completely distributive, and removes the misleading claim that CompleteDistribLattice/CompleteBooleanAlgebra are completely distributive.

  • Product/pi/order dual instances for completely distributive lattices, etc.
  • Every complete linear order is a completely distributive lattice.
  • Every atomic complete Boolean algebra is a complete atomic Boolean algebra.
  • Every complete atomic Boolean algebra is indeed (co)atom(ist)ic.
  • Atom(ist)ic orders are closed under pis.
  • All existing types with CompleteDistribLattice instances are upgraded to CompletelyDistribLattice.
  • All existing types with CompleteBooleanAlgebra instances are upgraded to CompleteAtomicBooleanAlgebra.

See related discussion on Zulip.

Diff
@@ -95,6 +95,7 @@ theorem homology_ext' {M : ModuleCat R} (i : ι) {h k : C.homology i ⟶ M}
 set_option linter.uppercaseLean3 false in
 #align Module.homology_ext' ModuleCat.homology_ext'
 
+set_option maxHeartbeats 400000 in
 -- porting note: `erw` had to be used instead of `simp`
 -- see https://github.com/leanprover-community/mathlib4/issues/5026
 /-- We give an alternative proof of `homology_map_eq_of_homotopy`,
feat: port Algebra.Category.FGModule.basic (#4878)

Sets new records for set_option maxHeartbeats. :-( I spent too long struggling with this one; if anyone would like to take another look please do.

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -117,7 +117,8 @@ example (f g : C ⟶ D) (h : Homotopy f g) (i : ι) :
     ModuleCat.toKernelSubobject_arrow, imageToKernel_arrow_apply, imageSubobject_arrow_comp_apply]
   rw [Hom.sqFrom_left, Hom.sqFrom_left, h.comm i, LinearMap.add_apply,
     LinearMap.add_apply, prevD_eq_toPrev_dTo, dNext_eq_dFrom_fromNext, comp_apply, comp_apply,
-    x.2, map_zero, zero_add]
+    x.2, map_zero]
+  dsimp
   abel
 
 end ModuleCat
feat: port Algebra.Homology.Module (#5000)

Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>

Dependencies 8 + 662

663 files ported (98.8%)
257192 lines ported (98.8%)
Show graph

The unported dependencies are