algebra.category.Module.products
⟷
Mathlib.Algebra.Category.ModuleCat.Products
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-/
import LinearAlgebra.Pi
-import Algebra.Category.Module.Basic
+import Algebra.Category.ModuleCat.Basic
#align_import algebra.category.Module.products from "leanprover-community/mathlib"@"86d1873c01a723aba6788f0b9051ae3d23b4c1c3"
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2022 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-/
-import Mathbin.LinearAlgebra.Pi
-import Mathbin.Algebra.Category.Module.Basic
+import LinearAlgebra.Pi
+import Algebra.Category.Module.Basic
#align_import algebra.category.Module.products from "leanprover-community/mathlib"@"86d1873c01a723aba6788f0b9051ae3d23b4c1c3"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2022 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.category.Module.products
-! leanprover-community/mathlib commit 86d1873c01a723aba6788f0b9051ae3d23b4c1c3
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.LinearAlgebra.Pi
import Mathbin.Algebra.Category.Module.Basic
+#align_import algebra.category.Module.products from "leanprover-community/mathlib"@"86d1873c01a723aba6788f0b9051ae3d23b4c1c3"
+
/-!
# The concrete products in the category of modules are products in the categorical sense.
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -44,7 +44,7 @@ def productConeIsLimit : IsLimit (productCone Z)
where
lift s := (LinearMap.pi fun j => s.π.app ⟨j⟩ : s.pt →ₗ[R] ∀ i : ι, Z i)
fac s j := by cases j; tidy
- uniq s m w := by ext (x i); exact LinearMap.congr_fun (w ⟨i⟩) x
+ uniq s m w := by ext x i; exact LinearMap.congr_fun (w ⟨i⟩) x
#align Module.product_cone_is_limit ModuleCat.productConeIsLimit
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -31,11 +31,14 @@ variable {R : Type u} [Ring R]
variable {ι : Type v} (Z : ι → ModuleCat.{max v w} R)
+#print ModuleCat.productCone /-
/-- The product cone induced by the concrete product. -/
def productCone : Fan Z :=
Fan.mk (ModuleCat.of R (∀ i : ι, Z i)) fun i => (LinearMap.proj i : (∀ i : ι, Z i) →ₗ[R] Z i)
#align Module.product_cone ModuleCat.productCone
+-/
+#print ModuleCat.productConeIsLimit /-
/-- The concrete product cone is limiting. -/
def productConeIsLimit : IsLimit (productCone Z)
where
@@ -43,30 +46,37 @@ def productConeIsLimit : IsLimit (productCone Z)
fac s j := by cases j; tidy
uniq s m w := by ext (x i); exact LinearMap.congr_fun (w ⟨i⟩) x
#align Module.product_cone_is_limit ModuleCat.productConeIsLimit
+-/
-- While we could use this to construct a `has_products (Module R)` instance,
-- we already have `has_limits (Module R)` in `algebra.category.Module.limits`.
variable [HasProduct Z]
+#print ModuleCat.piIsoPi /-
/-- The categorical product of a family of objects in `Module`
agrees with the usual module-theoretical product.
-/
noncomputable def piIsoPi : ∏ Z ≅ ModuleCat.of R (∀ i, Z i) :=
limit.isoLimitCone ⟨_, productConeIsLimit Z⟩
#align Module.pi_iso_pi ModuleCat.piIsoPi
+-/
+#print ModuleCat.piIsoPi_inv_kernel_ι /-
-- We now show this isomorphism commutes with the inclusion of the kernel into the source.
@[simp, elementwise]
theorem piIsoPi_inv_kernel_ι (i : ι) :
(piIsoPi Z).inv ≫ Pi.π Z i = (LinearMap.proj i : (∀ i : ι, Z i) →ₗ[R] Z i) :=
limit.isoLimitCone_inv_π _ _
#align Module.pi_iso_pi_inv_kernel_ι ModuleCat.piIsoPi_inv_kernel_ι
+-/
+#print ModuleCat.piIsoPi_hom_ker_subtype /-
@[simp, elementwise]
theorem piIsoPi_hom_ker_subtype (i : ι) :
(piIsoPi Z).hom ≫ (LinearMap.proj i : (∀ i : ι, Z i) →ₗ[R] Z i) = Pi.π Z i :=
IsLimit.conePointUniqueUpToIso_inv_comp _ (limit.isLimit _) (Discrete.mk i)
#align Module.pi_iso_pi_hom_ker_subtype ModuleCat.piIsoPi_hom_ker_subtype
+-/
end ModuleCat
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -31,23 +31,11 @@ variable {R : Type u} [Ring R]
variable {ι : Type v} (Z : ι → ModuleCat.{max v w} R)
-/- warning: Module.product_cone -> ModuleCat.productCone is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{max v w, u} R _inst_1)), CategoryTheory.Limits.Fan.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z
-but is expected to have type
- forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{v, u} R _inst_1)), CategoryTheory.Limits.Fan.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z
-Case conversion may be inaccurate. Consider using '#align Module.product_cone ModuleCat.productConeₓ'. -/
/-- The product cone induced by the concrete product. -/
def productCone : Fan Z :=
Fan.mk (ModuleCat.of R (∀ i : ι, Z i)) fun i => (LinearMap.proj i : (∀ i : ι, Z i) →ₗ[R] Z i)
#align Module.product_cone ModuleCat.productCone
-/- warning: Module.product_cone_is_limit -> ModuleCat.productConeIsLimit is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{max v w, u} R _inst_1)), CategoryTheory.Limits.IsLimit.{v, max v w, v, max u (succ (max v w))} (CategoryTheory.Discrete.{v} ι) (CategoryTheory.discreteCategory.{v} ι) (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) (CategoryTheory.Discrete.functor.{max v w, v, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) ι Z) (ModuleCat.productCone.{u, v, w} R _inst_1 ι Z)
-but is expected to have type
- forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{v, u} R _inst_1)), CategoryTheory.Limits.IsLimit.{v, v, v, max u (succ v)} (CategoryTheory.Discrete.{v} ι) (CategoryTheory.discreteCategory.{v} ι) (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) (CategoryTheory.Discrete.functor.{v, v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) ι Z) (ModuleCat.productCone.{u, v} R _inst_1 ι Z)
-Case conversion may be inaccurate. Consider using '#align Module.product_cone_is_limit ModuleCat.productConeIsLimitₓ'. -/
/-- The concrete product cone is limiting. -/
def productConeIsLimit : IsLimit (productCone Z)
where
@@ -60,12 +48,6 @@ def productConeIsLimit : IsLimit (productCone Z)
-- we already have `has_limits (Module R)` in `algebra.category.Module.limits`.
variable [HasProduct Z]
-/- warning: Module.pi_iso_pi -> ModuleCat.piIsoPi is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{max v w, u} R _inst_1)) [_inst_2 : CategoryTheory.Limits.HasProduct.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z], CategoryTheory.Iso.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) (CategoryTheory.Limits.piObj.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z _inst_2) (ModuleCat.of.{max v w, u} R _inst_1 (forall (i : ι), coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (Pi.addCommGroup.{v, max v w} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (Pi.module.{v, max v w, u} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{max v w} (coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{max v w, u} R _inst_1 (Z i))))
-but is expected to have type
- forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{v, u} R _inst_1)) [_inst_2 : CategoryTheory.Limits.HasProduct.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z], CategoryTheory.Iso.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) (CategoryTheory.Limits.piObj.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z _inst_2) (ModuleCat.of.{v, u} R _inst_1 (forall (i : ι), ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (Pi.addCommGroup.{v, v} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (Pi.module.{v, v, u} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{v} (ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{v, u} R _inst_1 (Z i))))
-Case conversion may be inaccurate. Consider using '#align Module.pi_iso_pi ModuleCat.piIsoPiₓ'. -/
/-- The categorical product of a family of objects in `Module`
agrees with the usual module-theoretical product.
-/
@@ -73,12 +55,6 @@ noncomputable def piIsoPi : ∏ Z ≅ ModuleCat.of R (∀ i, Z i) :=
limit.isoLimitCone ⟨_, productConeIsLimit Z⟩
#align Module.pi_iso_pi ModuleCat.piIsoPi
-/- warning: Module.pi_iso_pi_inv_kernel_ι -> ModuleCat.piIsoPi_inv_kernel_ι is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{max v w, u} R _inst_1)) [_inst_2 : CategoryTheory.Limits.HasProduct.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z] (i : ι), Eq.{succ (max v w)} (Quiver.Hom.{succ (max v w), max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1))) (ModuleCat.of.{max v w, u} R _inst_1 (forall (i : ι), coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (Pi.addCommGroup.{v, max v w} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (Pi.module.{v, max v w, u} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{max v w} (coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{max v w, u} R _inst_1 (Z i)))) (Z i)) (CategoryTheory.CategoryStruct.comp.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1)) (ModuleCat.of.{max v w, u} R _inst_1 (forall (i : ι), coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (Pi.addCommGroup.{v, max v w} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (Pi.module.{v, max v w, u} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{max v w} (coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{max v w, u} R _inst_1 (Z i)))) (CategoryTheory.Limits.piObj.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z _inst_2) (Z i) (CategoryTheory.Iso.inv.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) (CategoryTheory.Limits.piObj.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z _inst_2) (ModuleCat.of.{max v w, u} R _inst_1 (forall (i : ι), coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (Pi.addCommGroup.{v, max v w} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (Pi.module.{v, max v w, u} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{max v w} (coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{max v w, u} R _inst_1 (Z i)))) (ModuleCat.piIsoPi.{u, v, w} R _inst_1 ι Z _inst_2)) (CategoryTheory.Limits.Pi.π.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z _inst_2 i)) (LinearMap.proj.{u, v, max v w} R ι (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{max v w} (coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{max v w, u} R _inst_1 (Z i)) i)
-but is expected to have type
- forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{v, u} R _inst_1)) [_inst_2 : CategoryTheory.Limits.HasProduct.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z] (i : ι), Eq.{succ v} (Quiver.Hom.{succ v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1))) (ModuleCat.of.{v, u} R _inst_1 (forall (i : ι), ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (Pi.addCommGroup.{v, v} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (Pi.module.{v, v, u} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{v} (ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{v, u} R _inst_1 (Z i)))) (Z i)) (CategoryTheory.CategoryStruct.comp.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1)) (ModuleCat.of.{v, u} R _inst_1 (forall (i : ι), ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (Pi.addCommGroup.{v, v} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (Pi.module.{v, v, u} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{v} (ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{v, u} R _inst_1 (Z i)))) (CategoryTheory.Limits.piObj.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z _inst_2) (Z i) (CategoryTheory.Iso.inv.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) (CategoryTheory.Limits.piObj.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z _inst_2) (ModuleCat.of.{v, u} R _inst_1 (forall (i : ι), ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (Pi.addCommGroup.{v, v} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (Pi.module.{v, v, u} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{v} (ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{v, u} R _inst_1 (Z i)))) (ModuleCat.piIsoPi.{u, v} R _inst_1 ι Z _inst_2)) (CategoryTheory.Limits.Pi.π.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z _inst_2 i)) (LinearMap.proj.{u, v, v} R ι (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{v} (ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{v, u} R _inst_1 (Z i)) i)
-Case conversion may be inaccurate. Consider using '#align Module.pi_iso_pi_inv_kernel_ι ModuleCat.piIsoPi_inv_kernel_ιₓ'. -/
-- We now show this isomorphism commutes with the inclusion of the kernel into the source.
@[simp, elementwise]
theorem piIsoPi_inv_kernel_ι (i : ι) :
@@ -86,12 +62,6 @@ theorem piIsoPi_inv_kernel_ι (i : ι) :
limit.isoLimitCone_inv_π _ _
#align Module.pi_iso_pi_inv_kernel_ι ModuleCat.piIsoPi_inv_kernel_ι
-/- warning: Module.pi_iso_pi_hom_ker_subtype -> ModuleCat.piIsoPi_hom_ker_subtype is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{max v w, u} R _inst_1)) [_inst_2 : CategoryTheory.Limits.HasProduct.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z] (i : ι), Eq.{succ (max v w)} (Quiver.Hom.{succ (max v w), max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1))) (CategoryTheory.Limits.piObj.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z _inst_2) (Z i)) (CategoryTheory.CategoryStruct.comp.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1)) (CategoryTheory.Limits.piObj.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z _inst_2) (ModuleCat.of.{max v w, u} R _inst_1 (forall (i : ι), coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (Pi.addCommGroup.{v, max v w} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (Pi.module.{v, max v w, u} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{max v w} (coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{max v w, u} R _inst_1 (Z i)))) (Z i) (CategoryTheory.Iso.hom.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) (CategoryTheory.Limits.piObj.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z _inst_2) (ModuleCat.of.{max v w, u} R _inst_1 (forall (i : ι), coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (Pi.addCommGroup.{v, max v w} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (Pi.module.{v, max v w, u} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{max v w} (coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{max v w, u} R _inst_1 (Z i)))) (ModuleCat.piIsoPi.{u, v, w} R _inst_1 ι Z _inst_2)) (LinearMap.proj.{u, v, max v w} R ι (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{max v w} (coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{max v w, u} R _inst_1 (Z i)) i)) (CategoryTheory.Limits.Pi.π.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z _inst_2 i)
-but is expected to have type
- forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{v, u} R _inst_1)) [_inst_2 : CategoryTheory.Limits.HasProduct.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z] (i : ι), Eq.{succ v} (Quiver.Hom.{succ v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1))) (CategoryTheory.Limits.piObj.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z _inst_2) (Z i)) (CategoryTheory.CategoryStruct.comp.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1)) (CategoryTheory.Limits.piObj.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z _inst_2) (ModuleCat.of.{v, u} R _inst_1 (forall (i : ι), ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (Pi.addCommGroup.{v, v} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (Pi.module.{v, v, u} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{v} (ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{v, u} R _inst_1 (Z i)))) (Z i) (CategoryTheory.Iso.hom.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) (CategoryTheory.Limits.piObj.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z _inst_2) (ModuleCat.of.{v, u} R _inst_1 (forall (i : ι), ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (Pi.addCommGroup.{v, v} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (Pi.module.{v, v, u} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{v} (ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{v, u} R _inst_1 (Z i)))) (ModuleCat.piIsoPi.{u, v} R _inst_1 ι Z _inst_2)) (LinearMap.proj.{u, v, v} R ι (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{v} (ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{v, u} R _inst_1 (Z i)) i)) (CategoryTheory.Limits.Pi.π.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z _inst_2 i)
-Case conversion may be inaccurate. Consider using '#align Module.pi_iso_pi_hom_ker_subtype ModuleCat.piIsoPi_hom_ker_subtypeₓ'. -/
@[simp, elementwise]
theorem piIsoPi_hom_ker_subtype (i : ι) :
(piIsoPi Z).hom ≫ (LinearMap.proj i : (∀ i : ι, Z i) →ₗ[R] Z i) = Pi.π Z i :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -52,12 +52,8 @@ Case conversion may be inaccurate. Consider using '#align Module.product_cone_is
def productConeIsLimit : IsLimit (productCone Z)
where
lift s := (LinearMap.pi fun j => s.π.app ⟨j⟩ : s.pt →ₗ[R] ∀ i : ι, Z i)
- fac s j := by
- cases j
- tidy
- uniq s m w := by
- ext (x i)
- exact LinearMap.congr_fun (w ⟨i⟩) x
+ fac s j := by cases j; tidy
+ uniq s m w := by ext (x i); exact LinearMap.congr_fun (w ⟨i⟩) x
#align Module.product_cone_is_limit ModuleCat.productConeIsLimit
-- While we could use this to construct a `has_products (Module R)` instance,
mathlib commit https://github.com/leanprover-community/mathlib/commit/52932b3a083d4142e78a15dc928084a22fea9ba0
@@ -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.category.Module.products
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
+! leanprover-community/mathlib commit 86d1873c01a723aba6788f0b9051ae3d23b4c1c3
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -13,6 +13,9 @@ import Mathbin.Algebra.Category.Module.Basic
/-!
# The concrete products in the category of modules are products in the categorical sense.
+
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cd8fafa2fac98e1a67097e8a91ad9901cfde48af
@@ -28,11 +28,23 @@ variable {R : Type u} [Ring R]
variable {ι : Type v} (Z : ι → ModuleCat.{max v w} R)
+/- warning: Module.product_cone -> ModuleCat.productCone is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{max v w, u} R _inst_1)), CategoryTheory.Limits.Fan.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z
+but is expected to have type
+ forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{v, u} R _inst_1)), CategoryTheory.Limits.Fan.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z
+Case conversion may be inaccurate. Consider using '#align Module.product_cone ModuleCat.productConeₓ'. -/
/-- The product cone induced by the concrete product. -/
def productCone : Fan Z :=
Fan.mk (ModuleCat.of R (∀ i : ι, Z i)) fun i => (LinearMap.proj i : (∀ i : ι, Z i) →ₗ[R] Z i)
#align Module.product_cone ModuleCat.productCone
+/- warning: Module.product_cone_is_limit -> ModuleCat.productConeIsLimit is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{max v w, u} R _inst_1)), CategoryTheory.Limits.IsLimit.{v, max v w, v, max u (succ (max v w))} (CategoryTheory.Discrete.{v} ι) (CategoryTheory.discreteCategory.{v} ι) (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) (CategoryTheory.Discrete.functor.{max v w, v, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) ι Z) (ModuleCat.productCone.{u, v, w} R _inst_1 ι Z)
+but is expected to have type
+ forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{v, u} R _inst_1)), CategoryTheory.Limits.IsLimit.{v, v, v, max u (succ v)} (CategoryTheory.Discrete.{v} ι) (CategoryTheory.discreteCategory.{v} ι) (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) (CategoryTheory.Discrete.functor.{v, v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) ι Z) (ModuleCat.productCone.{u, v} R _inst_1 ι Z)
+Case conversion may be inaccurate. Consider using '#align Module.product_cone_is_limit ModuleCat.productConeIsLimitₓ'. -/
/-- The concrete product cone is limiting. -/
def productConeIsLimit : IsLimit (productCone Z)
where
@@ -49,6 +61,12 @@ def productConeIsLimit : IsLimit (productCone Z)
-- we already have `has_limits (Module R)` in `algebra.category.Module.limits`.
variable [HasProduct Z]
+/- warning: Module.pi_iso_pi -> ModuleCat.piIsoPi is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{max v w, u} R _inst_1)) [_inst_2 : CategoryTheory.Limits.HasProduct.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z], CategoryTheory.Iso.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) (CategoryTheory.Limits.piObj.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z _inst_2) (ModuleCat.of.{max v w, u} R _inst_1 (forall (i : ι), coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (Pi.addCommGroup.{v, max v w} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (Pi.module.{v, max v w, u} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{max v w} (coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{max v w, u} R _inst_1 (Z i))))
+but is expected to have type
+ forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{v, u} R _inst_1)) [_inst_2 : CategoryTheory.Limits.HasProduct.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z], CategoryTheory.Iso.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) (CategoryTheory.Limits.piObj.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z _inst_2) (ModuleCat.of.{v, u} R _inst_1 (forall (i : ι), ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (Pi.addCommGroup.{v, v} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (Pi.module.{v, v, u} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{v} (ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{v, u} R _inst_1 (Z i))))
+Case conversion may be inaccurate. Consider using '#align Module.pi_iso_pi ModuleCat.piIsoPiₓ'. -/
/-- The categorical product of a family of objects in `Module`
agrees with the usual module-theoretical product.
-/
@@ -56,6 +74,12 @@ noncomputable def piIsoPi : ∏ Z ≅ ModuleCat.of R (∀ i, Z i) :=
limit.isoLimitCone ⟨_, productConeIsLimit Z⟩
#align Module.pi_iso_pi ModuleCat.piIsoPi
+/- warning: Module.pi_iso_pi_inv_kernel_ι -> ModuleCat.piIsoPi_inv_kernel_ι is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{max v w, u} R _inst_1)) [_inst_2 : CategoryTheory.Limits.HasProduct.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z] (i : ι), Eq.{succ (max v w)} (Quiver.Hom.{succ (max v w), max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1))) (ModuleCat.of.{max v w, u} R _inst_1 (forall (i : ι), coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (Pi.addCommGroup.{v, max v w} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (Pi.module.{v, max v w, u} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{max v w} (coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{max v w, u} R _inst_1 (Z i)))) (Z i)) (CategoryTheory.CategoryStruct.comp.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1)) (ModuleCat.of.{max v w, u} R _inst_1 (forall (i : ι), coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (Pi.addCommGroup.{v, max v w} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (Pi.module.{v, max v w, u} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{max v w} (coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{max v w, u} R _inst_1 (Z i)))) (CategoryTheory.Limits.piObj.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z _inst_2) (Z i) (CategoryTheory.Iso.inv.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) (CategoryTheory.Limits.piObj.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z _inst_2) (ModuleCat.of.{max v w, u} R _inst_1 (forall (i : ι), coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (Pi.addCommGroup.{v, max v w} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (Pi.module.{v, max v w, u} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{max v w} (coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{max v w, u} R _inst_1 (Z i)))) (ModuleCat.piIsoPi.{u, v, w} R _inst_1 ι Z _inst_2)) (CategoryTheory.Limits.Pi.π.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z _inst_2 i)) (LinearMap.proj.{u, v, max v w} R ι (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{max v w} (coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{max v w, u} R _inst_1 (Z i)) i)
+but is expected to have type
+ forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{v, u} R _inst_1)) [_inst_2 : CategoryTheory.Limits.HasProduct.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z] (i : ι), Eq.{succ v} (Quiver.Hom.{succ v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1))) (ModuleCat.of.{v, u} R _inst_1 (forall (i : ι), ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (Pi.addCommGroup.{v, v} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (Pi.module.{v, v, u} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{v} (ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{v, u} R _inst_1 (Z i)))) (Z i)) (CategoryTheory.CategoryStruct.comp.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1)) (ModuleCat.of.{v, u} R _inst_1 (forall (i : ι), ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (Pi.addCommGroup.{v, v} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (Pi.module.{v, v, u} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{v} (ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{v, u} R _inst_1 (Z i)))) (CategoryTheory.Limits.piObj.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z _inst_2) (Z i) (CategoryTheory.Iso.inv.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) (CategoryTheory.Limits.piObj.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z _inst_2) (ModuleCat.of.{v, u} R _inst_1 (forall (i : ι), ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (Pi.addCommGroup.{v, v} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (Pi.module.{v, v, u} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{v} (ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{v, u} R _inst_1 (Z i)))) (ModuleCat.piIsoPi.{u, v} R _inst_1 ι Z _inst_2)) (CategoryTheory.Limits.Pi.π.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z _inst_2 i)) (LinearMap.proj.{u, v, v} R ι (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{v} (ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{v, u} R _inst_1 (Z i)) i)
+Case conversion may be inaccurate. Consider using '#align Module.pi_iso_pi_inv_kernel_ι ModuleCat.piIsoPi_inv_kernel_ιₓ'. -/
-- We now show this isomorphism commutes with the inclusion of the kernel into the source.
@[simp, elementwise]
theorem piIsoPi_inv_kernel_ι (i : ι) :
@@ -63,6 +87,12 @@ theorem piIsoPi_inv_kernel_ι (i : ι) :
limit.isoLimitCone_inv_π _ _
#align Module.pi_iso_pi_inv_kernel_ι ModuleCat.piIsoPi_inv_kernel_ι
+/- warning: Module.pi_iso_pi_hom_ker_subtype -> ModuleCat.piIsoPi_hom_ker_subtype is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{max v w, u} R _inst_1)) [_inst_2 : CategoryTheory.Limits.HasProduct.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z] (i : ι), Eq.{succ (max v w)} (Quiver.Hom.{succ (max v w), max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1))) (CategoryTheory.Limits.piObj.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z _inst_2) (Z i)) (CategoryTheory.CategoryStruct.comp.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1)) (CategoryTheory.Limits.piObj.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z _inst_2) (ModuleCat.of.{max v w, u} R _inst_1 (forall (i : ι), coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (Pi.addCommGroup.{v, max v w} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (Pi.module.{v, max v w, u} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{max v w} (coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{max v w, u} R _inst_1 (Z i)))) (Z i) (CategoryTheory.Iso.hom.{max v w, max u (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) (CategoryTheory.Limits.piObj.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z _inst_2) (ModuleCat.of.{max v w, u} R _inst_1 (forall (i : ι), coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (Pi.addCommGroup.{v, max v w} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (Pi.module.{v, max v w, u} ι (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{max v w} (coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{max v w, u} R _inst_1 (Z i)))) (ModuleCat.piIsoPi.{u, v, w} R _inst_1 ι Z _inst_2)) (LinearMap.proj.{u, v, max v w} R ι (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{max v w} (coeSort.{max (succ u) (succ (succ (max v w))), succ (succ (max v w))} (ModuleCat.{max v w, u} R _inst_1) Type.{max v w} (ModuleCat.hasCoeToSort.{max v w, u} R _inst_1) (Z i)) (ModuleCat.isAddCommGroup.{max v w, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{max v w, u} R _inst_1 (Z i)) i)) (CategoryTheory.Limits.Pi.π.{v, max v w, max u (succ (max v w))} ι (ModuleCat.{max v w, u} R _inst_1) (ModuleCat.moduleCategory.{max v w, u} R _inst_1) Z _inst_2 i)
+but is expected to have type
+ forall {R : Type.{u}} [_inst_1 : Ring.{u} R] {ι : Type.{v}} (Z : ι -> (ModuleCat.{v, u} R _inst_1)) [_inst_2 : CategoryTheory.Limits.HasProduct.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z] (i : ι), Eq.{succ v} (Quiver.Hom.{succ v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1))) (CategoryTheory.Limits.piObj.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z _inst_2) (Z i)) (CategoryTheory.CategoryStruct.comp.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (CategoryTheory.Category.toCategoryStruct.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1)) (CategoryTheory.Limits.piObj.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z _inst_2) (ModuleCat.of.{v, u} R _inst_1 (forall (i : ι), ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (Pi.addCommGroup.{v, v} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (Pi.module.{v, v, u} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{v} (ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{v, u} R _inst_1 (Z i)))) (Z i) (CategoryTheory.Iso.hom.{v, max u (succ v)} (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) (CategoryTheory.Limits.piObj.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z _inst_2) (ModuleCat.of.{v, u} R _inst_1 (forall (i : ι), ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (Pi.addCommGroup.{v, v} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (fun (i : ι) => ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (Pi.module.{v, v, u} ι (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) R (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{v} (ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{v, u} R _inst_1 (Z i)))) (ModuleCat.piIsoPi.{u, v} R _inst_1 ι Z _inst_2)) (LinearMap.proj.{u, v, v} R ι (Ring.toSemiring.{u} R _inst_1) (fun (i : ι) => ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{v} (ModuleCat.carrier.{v, u} R _inst_1 (Z i)) (ModuleCat.isAddCommGroup.{v, u} R _inst_1 (Z i))) (fun (i : ι) => ModuleCat.isModule.{v, u} R _inst_1 (Z i)) i)) (CategoryTheory.Limits.Pi.π.{v, v, max u (succ v)} ι (ModuleCat.{v, u} R _inst_1) (ModuleCat.moduleCategory.{v, u} R _inst_1) Z _inst_2 i)
+Case conversion may be inaccurate. Consider using '#align Module.pi_iso_pi_hom_ker_subtype ModuleCat.piIsoPi_hom_ker_subtypeₓ'. -/
@[simp, elementwise]
theorem piIsoPi_hom_ker_subtype (i : ι) :
(piIsoPi Z).hom ≫ (LinearMap.proj i : (∀ i : ι, Z i) →ₗ[R] Z i) = Pi.π Z i :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -36,7 +36,7 @@ def productCone : Fan Z :=
/-- The concrete product cone is limiting. -/
def productConeIsLimit : IsLimit (productCone Z)
where
- lift s := (LinearMap.pi fun j => s.π.app ⟨j⟩ : s.x →ₗ[R] ∀ i : ι, Z i)
+ lift s := (LinearMap.pi fun j => s.π.app ⟨j⟩ : s.pt →ₗ[R] ∀ i : ι, Z i)
fac s j := by
cases j
tidy
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -37,10 +37,10 @@ def productCone : Fan Z :=
def productConeIsLimit : IsLimit (productCone Z)
where
lift s := (LinearMap.pi fun j => s.π.app ⟨j⟩ : s.x →ₗ[R] ∀ i : ι, Z i)
- fac' s j := by
+ fac s j := by
cases j
tidy
- uniq' s m w := by
+ uniq s m w := by
ext (x i)
exact LinearMap.congr_fun (w ⟨i⟩) x
#align Module.product_cone_is_limit ModuleCat.productConeIsLimit
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
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)
@@ -23,7 +23,6 @@ universe u v w
namespace ModuleCat
variable {R : Type u} [Ring R]
-
variable {ι : Type v} (Z : ι → ModuleCatMax.{v, w} R)
set_option linter.uppercaseLean3 false
This reduces the file from ~2600 lines to ~1600 lines.
Co-authored-by: Vierkantor <vierkantor@vierkantor.com> Co-authored-by: Floris van Doorn <fpvdoorn@gmail.com>
@@ -3,8 +3,9 @@ Copyright (c) 2022 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-/
-import Mathlib.LinearAlgebra.Pi
import Mathlib.Algebra.Category.ModuleCat.Basic
+import Mathlib.LinearAlgebra.Pi
+import Mathlib.Tactic.CategoryTheory.Elementwise
#align_import algebra.category.Module.products from "leanprover-community/mathlib"@"70fd9563a21e7b963887c9360bd29b2393e6225a"
@@ -2,15 +2,12 @@
Copyright (c) 2022 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.category.Module.products
-! 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.LinearAlgebra.Pi
import Mathlib.Algebra.Category.ModuleCat.Basic
+#align_import algebra.category.Module.products from "leanprover-community/mathlib"@"70fd9563a21e7b963887c9360bd29b2393e6225a"
+
/-!
# The concrete products in the category of modules are products in the categorical sense.
-/
@@ -26,7 +26,7 @@ namespace ModuleCat
variable {R : Type u} [Ring R]
-variable {ι : Type v} (Z : ι → ModuleCat.{v} R)
+variable {ι : Type v} (Z : ι → ModuleCatMax.{v, w} R)
set_option linter.uppercaseLean3 false
The unported dependencies are