ring_theory.filtrationMathlib.RingTheory.Filtration

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
@@ -7,7 +7,7 @@ import RingTheory.Ideal.LocalRing
 import RingTheory.Noetherian
 import RingTheory.ReesAlgebra
 import RingTheory.Finiteness
-import Data.Polynomial.Module.Basic
+import Algebra.Polynomial.Module.Basic
 import Order.Hom.Lattice
 
 #align_import ring_theory.filtration from "leanprover-community/mathlib"@"2ebc1d6c2fed9f54c95bbc3998eaa5570527129a"
Diff
@@ -7,7 +7,7 @@ import RingTheory.Ideal.LocalRing
 import RingTheory.Noetherian
 import RingTheory.ReesAlgebra
 import RingTheory.Finiteness
-import Data.Polynomial.Module
+import Data.Polynomial.Module.Basic
 import Order.Hom.Lattice
 
 #align_import ring_theory.filtration from "leanprover-community/mathlib"@"2ebc1d6c2fed9f54c95bbc3998eaa5570527129a"
@@ -71,7 +71,7 @@ theorem pow_smul_le (i j : ℕ) : I ^ i • F.n j ≤ F.n (i + j) :=
   by
   induction i
   · simp
-  · rw [pow_succ, mul_smul, Nat.succ_eq_add_one, add_assoc, add_comm 1, ← add_assoc]
+  · rw [pow_succ', mul_smul, Nat.succ_eq_add_one, add_assoc, add_comm 1, ← add_assoc]
     exact (Submodule.smul_mono_right i_ih).trans (F.smul_le _)
 #align ideal.filtration.pow_smul_le Ideal.Filtration.pow_smul_le
 -/
@@ -266,7 +266,7 @@ theorem stable_iff_exists_pow_smul_eq_of_ge :
     F.Stable ↔ ∃ n₀, ∀ n ≥ n₀, F.n n = I ^ (n - n₀) • F.n n₀ :=
   by
   refine' ⟨stable.exists_pow_smul_eq_of_ge, fun h => ⟨h.some, fun n hn => _⟩⟩
-  rw [h.some_spec n hn, h.some_spec (n + 1) (by linarith), smul_smul, ← pow_succ,
+  rw [h.some_spec n hn, h.some_spec (n + 1) (by linarith), smul_smul, ← pow_succ',
     tsub_add_eq_add_tsub hn]
 #align ideal.filtration.stable_iff_exists_pow_smul_eq_of_ge Ideal.Filtration.stable_iff_exists_pow_smul_eq_of_ge
 -/
Diff
@@ -313,7 +313,7 @@ protected def submodule : Submodule (reesAlgebra I) (PolynomialModule R M)
     rw [Subalgebra.smul_def, PolynomialModule.smul_apply]
     apply Submodule.sum_mem
     rintro ⟨j, k⟩ e
-    rw [Finset.Nat.mem_antidiagonal] at e 
+    rw [Finset.Nat.mem_antidiagonal] at e
     subst e
     exact F.pow_smul_le j k (Submodule.smul_mem_smul (r.2 j) (hf k))
 #align ideal.filtration.submodule Ideal.Filtration.submodule
@@ -385,8 +385,8 @@ theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
     intro x hx
     obtain ⟨l, hl⟩ := (Finsupp.mem_span_iff_total _ _ _).mp (H _ ⟨x, hx, rfl⟩)
     replace hl := congr_arg (fun f : ℕ →₀ M => f (n + 1)) hl
-    dsimp only at hl 
-    erw [Finsupp.single_eq_same] at hl 
+    dsimp only at hl
+    erw [Finsupp.single_eq_same] at hl
     rw [← hl, Finsupp.total_apply, Finsupp.sum_apply]
     apply Submodule.sum_mem _ _
     rintro ⟨_, _, ⟨n', rfl⟩, _, ⟨hn', rfl⟩, m, hm, rfl⟩ -
@@ -394,7 +394,7 @@ theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
     rw [Subalgebra.smul_def, smul_single_apply, if_pos (show n' ≤ n + 1 by linarith)]
     have e : n' ≤ n := by linarith
     have := F.pow_smul_le_pow_smul (n - n') n' 1
-    rw [tsub_add_cancel_of_le e, pow_one, add_comm _ 1, ← add_tsub_assoc_of_le e, add_comm] at this 
+    rw [tsub_add_cancel_of_le e, pow_one, add_comm _ 1, ← add_tsub_assoc_of_le e, add_comm] at this
     exact this (Submodule.smul_mem_smul ((l _).2 <| n + 1 - n') hm)
   · let F' := Submodule.span (reesAlgebra I) (⋃ i ≤ n₀, single R i '' (F.N i : Set M))
     intro hF i
@@ -404,7 +404,7 @@ theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
     · exact this _ (zero_le _)
     by_cases hj' : j.succ ≤ n₀
     · exact this _ hj'
-    simp only [not_le, Nat.lt_succ_iff] at hj' 
+    simp only [not_le, Nat.lt_succ_iff] at hj'
     rw [Nat.succ_eq_add_one, ← hF _ hj']
     rintro _ ⟨m, hm, rfl⟩
     apply Submodule.smul_induction_on hm
@@ -468,7 +468,7 @@ theorem Stable.of_le [IsNoetherianRing R] [h : Module.Finite R M] (hF : F.Stable
   rw [← submodule_fg_iff_stable] at hF ⊢
   any_goals intro i; exact IsNoetherian.noetherian _
   have := isNoetherian_of_fg_of_noetherian _ hF
-  rw [isNoetherian_submodule] at this 
+  rw [isNoetherian_submodule] at this
   exact this _ (OrderHomClass.mono (submodule_inf_hom M I) hf)
 #align ideal.filtration.stable.of_le Ideal.Filtration.Stable.of_le
 -/
@@ -513,7 +513,7 @@ theorem Ideal.mem_iInf_smul_pow_eq_bot_iff [IsNoetherianRing R] [hM : Module.Fin
     · intro H; exact ⟨⟨r, hr₁⟩, hr₂ _ H⟩
     obtain ⟨k, hk⟩ := (I.stable_filtration_stable ⊤).inter_right (I.trivial_filtration N)
     have := hk k (le_refl _)
-    rw [hN, hN] at this 
+    rw [hN, hN] at this
     exact le_of_eq this.symm
   · rintro ⟨r, eq⟩
     rw [Submodule.mem_iInf]
@@ -559,7 +559,7 @@ theorem Ideal.iInf_pow_eq_bot_of_isDomain [IsNoetherianRing R] [IsDomain R] (h :
   intro x hx
   by_contra hx'
   have := Ideal.mem_iInf_smul_pow_eq_bot_iff I x
-  simp_rw [smul_eq_mul, ← Ideal.one_eq_top, mul_one] at this 
+  simp_rw [smul_eq_mul, ← Ideal.one_eq_top, mul_one] at this
   obtain ⟨r, hr⟩ := this.mp hx
   have := mul_right_cancel₀ hx' (hr.trans (one_mul x).symm)
   exact I.eq_top_iff_one.not.mp h (this ▸ r.prop)
Diff
@@ -420,7 +420,41 @@ theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
 #print Ideal.Filtration.submodule_fg_iff_stable /-
 /-- If the components of a filtration are finitely generated, then the filtration is stable iff
 its associated submodule of is finitely generated.  -/
-theorem submodule_fg_iff_stable (hF' : ∀ i, (F.n i).FG) : F.Submodule.FG ↔ F.Stable := by classical
+theorem submodule_fg_iff_stable (hF' : ∀ i, (F.n i).FG) : F.Submodule.FG ↔ F.Stable := by
+  classical
+  delta Ideal.Filtration.Stable
+  simp_rw [← F.submodule_eq_span_le_iff_stable_ge]
+  constructor
+  · rintro H
+    apply
+      H.stablizes_of_supr_eq
+        ⟨fun n₀ => Submodule.span _ (⋃ (i : ℕ) (H : i ≤ n₀), single R i '' ↑(F.N i)), _⟩
+    · dsimp
+      rw [← Submodule.span_iUnion, ← submodule_span_single]
+      congr 1
+      ext
+      simp only [Set.mem_iUnion, Set.mem_image, SetLike.mem_coe, exists_prop]
+      constructor
+      · rintro ⟨-, i, -, e⟩; exact ⟨i, e⟩
+      · rintro ⟨i, e⟩; exact ⟨i, i, le_refl i, e⟩
+    · intro n m e
+      rw [Submodule.span_le, Set.iUnion₂_subset_iff]
+      intro i hi
+      refine'
+        (Set.Subset.trans _ (Set.subset_iUnion₂ i (hi.trans e : _))).trans Submodule.subset_span
+      rfl
+  · rintro ⟨n, hn⟩
+    rw [hn]
+    simp_rw [Submodule.span_iUnion₂, ← Finset.mem_range_succ_iff, iSup_subtype']
+    apply Submodule.fg_iSup
+    rintro ⟨i, hi⟩
+    obtain ⟨s, hs⟩ := hF' i
+    have :
+      Submodule.span (reesAlgebra I) (s.image (lsingle R i) : Set (PolynomialModule R M)) =
+        Submodule.span _ (single R i '' (F.N i : Set M)) :=
+      by rw [Finset.coe_image, ← Submodule.span_span_of_tower R, ← Submodule.map_span, hs]; rfl
+    rw [Subtype.coe_mk, ← this]
+    exact ⟨_, rfl⟩
 #align ideal.filtration.submodule_fg_iff_stable Ideal.Filtration.submodule_fg_iff_stable
 -/
 
Diff
@@ -420,41 +420,7 @@ theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
 #print Ideal.Filtration.submodule_fg_iff_stable /-
 /-- If the components of a filtration are finitely generated, then the filtration is stable iff
 its associated submodule of is finitely generated.  -/
-theorem submodule_fg_iff_stable (hF' : ∀ i, (F.n i).FG) : F.Submodule.FG ↔ F.Stable := by
-  classical
-  delta Ideal.Filtration.Stable
-  simp_rw [← F.submodule_eq_span_le_iff_stable_ge]
-  constructor
-  · rintro H
-    apply
-      H.stablizes_of_supr_eq
-        ⟨fun n₀ => Submodule.span _ (⋃ (i : ℕ) (H : i ≤ n₀), single R i '' ↑(F.N i)), _⟩
-    · dsimp
-      rw [← Submodule.span_iUnion, ← submodule_span_single]
-      congr 1
-      ext
-      simp only [Set.mem_iUnion, Set.mem_image, SetLike.mem_coe, exists_prop]
-      constructor
-      · rintro ⟨-, i, -, e⟩; exact ⟨i, e⟩
-      · rintro ⟨i, e⟩; exact ⟨i, i, le_refl i, e⟩
-    · intro n m e
-      rw [Submodule.span_le, Set.iUnion₂_subset_iff]
-      intro i hi
-      refine'
-        (Set.Subset.trans _ (Set.subset_iUnion₂ i (hi.trans e : _))).trans Submodule.subset_span
-      rfl
-  · rintro ⟨n, hn⟩
-    rw [hn]
-    simp_rw [Submodule.span_iUnion₂, ← Finset.mem_range_succ_iff, iSup_subtype']
-    apply Submodule.fg_iSup
-    rintro ⟨i, hi⟩
-    obtain ⟨s, hs⟩ := hF' i
-    have :
-      Submodule.span (reesAlgebra I) (s.image (lsingle R i) : Set (PolynomialModule R M)) =
-        Submodule.span _ (single R i '' (F.N i : Set M)) :=
-      by rw [Finset.coe_image, ← Submodule.span_span_of_tower R, ← Submodule.map_span, hs]; rfl
-    rw [Subtype.coe_mk, ← this]
-    exact ⟨_, rfl⟩
+theorem submodule_fg_iff_stable (hF' : ∀ i, (F.n i).FG) : F.Submodule.FG ↔ F.Stable := by classical
 #align ideal.filtration.submodule_fg_iff_stable Ideal.Filtration.submodule_fg_iff_stable
 -/
 
Diff
@@ -3,12 +3,12 @@ Copyright (c) 2022 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
 -/
-import Mathbin.RingTheory.Ideal.LocalRing
-import Mathbin.RingTheory.Noetherian
-import Mathbin.RingTheory.ReesAlgebra
-import Mathbin.RingTheory.Finiteness
-import Mathbin.Data.Polynomial.Module
-import Mathbin.Order.Hom.Lattice
+import RingTheory.Ideal.LocalRing
+import RingTheory.Noetherian
+import RingTheory.ReesAlgebra
+import RingTheory.Finiteness
+import Data.Polynomial.Module
+import Order.Hom.Lattice
 
 #align_import ring_theory.filtration from "leanprover-community/mathlib"@"2ebc1d6c2fed9f54c95bbc3998eaa5570527129a"
 
Diff
@@ -464,7 +464,7 @@ variable {F}
 theorem Stable.of_le [IsNoetherianRing R] [h : Module.Finite R M] (hF : F.Stable)
     {F' : I.Filtration M} (hf : F' ≤ F) : F'.Stable :=
   by
-  haveI := isNoetherian_of_fg_of_noetherian' h.1
+  haveI := isNoetherian_of_isNoetherianRing_of_finite h.1
   rw [← submodule_fg_iff_stable] at hF ⊢
   any_goals intro i; exact IsNoetherian.noetherian _
   have := isNoetherian_of_fg_of_noetherian _ hF
@@ -507,7 +507,7 @@ theorem Ideal.mem_iInf_smul_pow_eq_bot_iff [IsNoetherianRing R] [hM : Module.Fin
   have hN : ∀ k, (I.stable_filtration ⊤ ⊓ I.trivial_filtration N).n k = N := by intro k;
     exact inf_eq_right.mpr ((iInf_le _ k).trans <| le_of_eq <| by simp)
   constructor
-  · haveI := isNoetherian_of_fg_of_noetherian' hM.out
+  · haveI := isNoetherian_of_isNoetherianRing_of_finite hM.out
     obtain ⟨r, hr₁, hr₂⟩ :=
       Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul I N (IsNoetherian.noetherian N) _
     · intro H; exact ⟨⟨r, hr₁⟩, hr₂ _ H⟩
Diff
@@ -2,11 +2,6 @@
 Copyright (c) 2022 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
-
-! This file was ported from Lean 3 source module ring_theory.filtration
-! leanprover-community/mathlib commit 2ebc1d6c2fed9f54c95bbc3998eaa5570527129a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.RingTheory.Ideal.LocalRing
 import Mathbin.RingTheory.Noetherian
@@ -15,6 +10,8 @@ import Mathbin.RingTheory.Finiteness
 import Mathbin.Data.Polynomial.Module
 import Mathbin.Order.Hom.Lattice
 
+#align_import ring_theory.filtration from "leanprover-community/mathlib"@"2ebc1d6c2fed9f54c95bbc3998eaa5570527129a"
+
 /-!
 
 # `I`-filtrations of modules
Diff
@@ -150,20 +150,26 @@ instance : Top (I.Filtration M) :=
 instance : Bot (I.Filtration M) :=
   ⟨I.trivialFiltration ⊥⟩
 
+#print Ideal.Filtration.sup_N /-
 @[simp]
 theorem sup_N : (F ⊔ F').n = F.n ⊔ F'.n :=
   rfl
 #align ideal.filtration.sup_N Ideal.Filtration.sup_N
+-/
 
+#print Ideal.Filtration.sSup_N /-
 @[simp]
 theorem sSup_N (S : Set (I.Filtration M)) : (sSup S).n = sSup (Ideal.Filtration.n '' S) :=
   rfl
 #align ideal.filtration.Sup_N Ideal.Filtration.sSup_N
+-/
 
+#print Ideal.Filtration.inf_N /-
 @[simp]
 theorem inf_N : (F ⊓ F').n = F.n ⊓ F'.n :=
   rfl
 #align ideal.filtration.inf_N Ideal.Filtration.inf_N
+-/
 
 #print Ideal.Filtration.sInf_N /-
 @[simp]
@@ -172,25 +178,33 @@ theorem sInf_N (S : Set (I.Filtration M)) : (sInf S).n = sInf (Ideal.Filtration.
 #align ideal.filtration.Inf_N Ideal.Filtration.sInf_N
 -/
 
+#print Ideal.Filtration.top_N /-
 @[simp]
 theorem top_N : (⊤ : I.Filtration M).n = ⊤ :=
   rfl
 #align ideal.filtration.top_N Ideal.Filtration.top_N
+-/
 
+#print Ideal.Filtration.bot_N /-
 @[simp]
 theorem bot_N : (⊥ : I.Filtration M).n = ⊥ :=
   rfl
 #align ideal.filtration.bot_N Ideal.Filtration.bot_N
+-/
 
+#print Ideal.Filtration.iSup_N /-
 @[simp]
 theorem iSup_N {ι : Sort _} (f : ι → I.Filtration M) : (iSup f).n = ⨆ i, (f i).n :=
   congr_arg sSup (Set.range_comp _ _).symm
 #align ideal.filtration.supr_N Ideal.Filtration.iSup_N
+-/
 
+#print Ideal.Filtration.iInf_N /-
 @[simp]
 theorem iInf_N {ι : Sort _} (f : ι → I.Filtration M) : (iInf f).n = ⨅ i, (f i).n :=
   congr_arg sInf (Set.range_comp _ _).symm
 #align ideal.filtration.infi_N Ideal.Filtration.iInf_N
+-/
 
 instance : CompleteLattice (I.Filtration M) :=
   Function.Injective.completeLattice Ideal.Filtration.n Ideal.Filtration.ext sup_N inf_N
@@ -226,8 +240,6 @@ theorem Ideal.stableFiltration_stable (I : Ideal R) (N : Submodule R M) :
 
 variable {F F'} (h : F.Stable)
 
-include h
-
 #print Ideal.Filtration.Stable.exists_pow_smul_eq /-
 theorem Stable.exists_pow_smul_eq : ∃ n₀, ∀ k, F.n (n₀ + k) = I ^ k • F.n n₀ :=
   by
@@ -252,8 +264,6 @@ theorem Stable.exists_pow_smul_eq_of_ge : ∃ n₀, ∀ n ≥ n₀, F.n n = I ^
 #align ideal.filtration.stable.exists_pow_smul_eq_of_ge Ideal.Filtration.Stable.exists_pow_smul_eq_of_ge
 -/
 
-omit h
-
 #print Ideal.Filtration.stable_iff_exists_pow_smul_eq_of_ge /-
 theorem stable_iff_exists_pow_smul_eq_of_ge :
     F.Stable ↔ ∃ n₀, ∀ n ≥ n₀, F.n n = I ^ (n - n₀) • F.n n₀ :=
@@ -295,6 +305,7 @@ open PolynomialModule
 
 variable (F F')
 
+#print Ideal.Filtration.submodule /-
 /-- The `R[IX]`-submodule of `M[X]` associated with an `I`-filtration. -/
 protected def submodule : Submodule (reesAlgebra I) (PolynomialModule R M)
     where
@@ -309,26 +320,34 @@ protected def submodule : Submodule (reesAlgebra I) (PolynomialModule R M)
     subst e
     exact F.pow_smul_le j k (Submodule.smul_mem_smul (r.2 j) (hf k))
 #align ideal.filtration.submodule Ideal.Filtration.submodule
+-/
 
+#print Ideal.Filtration.mem_submodule /-
 @[simp]
 theorem mem_submodule (f : PolynomialModule R M) : f ∈ F.Submodule ↔ ∀ i, f i ∈ F.n i :=
   Iff.rfl
 #align ideal.filtration.mem_submodule Ideal.Filtration.mem_submodule
+-/
 
+#print Ideal.Filtration.inf_submodule /-
 theorem inf_submodule : (F ⊓ F').Submodule = F.Submodule ⊓ F'.Submodule := by ext; exact forall_and
 #align ideal.filtration.inf_submodule Ideal.Filtration.inf_submodule
+-/
 
 variable (I M)
 
+#print Ideal.Filtration.submoduleInfHom /-
 /-- `ideal.filtration.submodule` as an `inf_hom` -/
 def submoduleInfHom : InfHom (I.Filtration M) (Submodule (reesAlgebra I) (PolynomialModule R M))
     where
   toFun := Ideal.Filtration.submodule
   map_inf' := inf_submodule
 #align ideal.filtration.submodule_inf_hom Ideal.Filtration.submoduleInfHom
+-/
 
 variable {I M}
 
+#print Ideal.Filtration.submodule_closure_single /-
 theorem submodule_closure_single :
     AddSubmonoid.closure (⋃ i, single R i '' (F.n i : Set M)) = F.Submodule.toAddSubmonoid :=
   by
@@ -345,14 +364,18 @@ theorem submodule_closure_single :
     rintro c -
     exact AddSubmonoid.subset_closure (Set.subset_iUnion _ c <| Set.mem_image_of_mem _ (hf c))
 #align ideal.filtration.submodule_closure_single Ideal.Filtration.submodule_closure_single
+-/
 
+#print Ideal.Filtration.submodule_span_single /-
 theorem submodule_span_single :
     Submodule.span (reesAlgebra I) (⋃ i, single R i '' (F.n i : Set M)) = F.Submodule :=
   by
   rw [← Submodule.span_closure, submodule_closure_single]
   simp
 #align ideal.filtration.submodule_span_single Ideal.Filtration.submodule_span_single
+-/
 
+#print Ideal.Filtration.submodule_eq_span_le_iff_stable_ge /-
 theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
     F.Submodule = Submodule.span _ (⋃ i ≤ n₀, single R i '' (F.n i : Set M)) ↔
       ∀ n ≥ n₀, I • F.n n = F.n (n + 1) :=
@@ -395,7 +418,9 @@ theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
           (hj <| Set.mem_image_of_mem _ hm')
     · intro x y hx hy; rw [map_add]; exact F'.add_mem hx hy
 #align ideal.filtration.submodule_eq_span_le_iff_stable_ge Ideal.Filtration.submodule_eq_span_le_iff_stable_ge
+-/
 
+#print Ideal.Filtration.submodule_fg_iff_stable /-
 /-- If the components of a filtration are finitely generated, then the filtration is stable iff
 its associated submodule of is finitely generated.  -/
 theorem submodule_fg_iff_stable (hF' : ∀ i, (F.n i).FG) : F.Submodule.FG ↔ F.Stable := by
@@ -434,9 +459,11 @@ theorem submodule_fg_iff_stable (hF' : ∀ i, (F.n i).FG) : F.Submodule.FG ↔ F
     rw [Subtype.coe_mk, ← this]
     exact ⟨_, rfl⟩
 #align ideal.filtration.submodule_fg_iff_stable Ideal.Filtration.submodule_fg_iff_stable
+-/
 
 variable {F}
 
+#print Ideal.Filtration.Stable.of_le /-
 theorem Stable.of_le [IsNoetherianRing R] [h : Module.Finite R M] (hF : F.Stable)
     {F' : I.Filtration M} (hf : F' ≤ F) : F'.Stable :=
   by
@@ -447,6 +474,7 @@ theorem Stable.of_le [IsNoetherianRing R] [h : Module.Finite R M] (hF : F.Stable
   rw [isNoetherian_submodule] at this 
   exact this _ (OrderHomClass.mono (submodule_inf_hom M I) hf)
 #align ideal.filtration.stable.of_le Ideal.Filtration.Stable.of_le
+-/
 
 #print Ideal.Filtration.Stable.inter_right /-
 theorem Stable.inter_right [IsNoetherianRing R] [h : Module.Finite R M] (hF : F.Stable) :
@@ -474,6 +502,7 @@ theorem Ideal.exists_pow_inf_eq_pow_smul [IsNoetherianRing R] [h : Module.Finite
 #align ideal.exists_pow_inf_eq_pow_smul Ideal.exists_pow_inf_eq_pow_smul
 -/
 
+#print Ideal.mem_iInf_smul_pow_eq_bot_iff /-
 theorem Ideal.mem_iInf_smul_pow_eq_bot_iff [IsNoetherianRing R] [hM : Module.Finite R M] (x : M) :
     x ∈ (⨅ i : ℕ, I ^ i • ⊤ : Submodule R M) ↔ ∃ r : I, (r : R) • x = x :=
   by
@@ -497,7 +526,9 @@ theorem Ideal.mem_iInf_smul_pow_eq_bot_iff [IsNoetherianRing R] [hM : Module.Fin
     · rw [Nat.succ_eq_one_add, pow_add, ← smul_smul, pow_one, ← Eq]
       exact Submodule.smul_mem_smul r.prop hi
 #align ideal.mem_infi_smul_pow_eq_bot_iff Ideal.mem_iInf_smul_pow_eq_bot_iff
+-/
 
+#print Ideal.iInf_pow_smul_eq_bot_of_localRing /-
 theorem Ideal.iInf_pow_smul_eq_bot_of_localRing [IsNoetherianRing R] [LocalRing R]
     [Module.Finite R M] (h : I ≠ ⊤) : (⨅ i : ℕ, I ^ i • ⊤ : Submodule R M) = ⊥ :=
   by
@@ -509,7 +540,9 @@ theorem Ideal.iInf_pow_smul_eq_bot_of_localRing [IsNoetherianRing R] [LocalRing
   swap; · infer_instance
   simp [sub_smul, hr]
 #align ideal.infi_pow_smul_eq_bot_of_local_ring Ideal.iInf_pow_smul_eq_bot_of_localRing
+-/
 
+#print Ideal.iInf_pow_eq_bot_of_localRing /-
 /-- **Krull's intersection theorem** for noetherian local rings. -/
 theorem Ideal.iInf_pow_eq_bot_of_localRing [IsNoetherianRing R] [LocalRing R] (h : I ≠ ⊤) :
     (⨅ i : ℕ, I ^ i) = ⊥ :=
@@ -519,7 +552,9 @@ theorem Ideal.iInf_pow_eq_bot_of_localRing [IsNoetherianRing R] [LocalRing R] (h
   rw [smul_eq_mul, ← Ideal.one_eq_top, mul_one]
   infer_instance
 #align ideal.infi_pow_eq_bot_of_local_ring Ideal.iInf_pow_eq_bot_of_localRing
+-/
 
+#print Ideal.iInf_pow_eq_bot_of_isDomain /-
 /-- **Krull's intersection theorem** for noetherian domains. -/
 theorem Ideal.iInf_pow_eq_bot_of_isDomain [IsNoetherianRing R] [IsDomain R] (h : I ≠ ⊤) :
     (⨅ i : ℕ, I ^ i) = ⊥ := by
@@ -532,4 +567,5 @@ theorem Ideal.iInf_pow_eq_bot_of_isDomain [IsNoetherianRing R] [IsDomain R] (h :
   have := mul_right_cancel₀ hx' (hr.trans (one_mul x).symm)
   exact I.eq_top_iff_one.not.mp h (this ▸ r.prop)
 #align ideal.infi_pow_eq_bot_of_is_domain Ideal.iInf_pow_eq_bot_of_isDomain
+-/
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
 
 ! This file was ported from Lean 3 source module ring_theory.filtration
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
+! leanprover-community/mathlib commit 2ebc1d6c2fed9f54c95bbc3998eaa5570527129a
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -19,6 +19,9 @@ import Mathbin.Order.Hom.Lattice
 
 # `I`-filtrations of modules
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 This file contains the definitions and basic results around (stable) `I`-filtrations of modules.
 
 ## Main results
@@ -295,7 +298,7 @@ variable (F F')
 /-- The `R[IX]`-submodule of `M[X]` associated with an `I`-filtration. -/
 protected def submodule : Submodule (reesAlgebra I) (PolynomialModule R M)
     where
-  carrier := { f | ∀ i, f i ∈ F.n i }
+  carrier := {f | ∀ i, f i ∈ F.n i}
   add_mem' f g hf hg i := Submodule.add_mem _ (hf i) (hg i)
   zero_mem' i := Submodule.zero_mem _
   smul_mem' r f hf i := by
@@ -397,39 +400,39 @@ theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
 its associated submodule of is finitely generated.  -/
 theorem submodule_fg_iff_stable (hF' : ∀ i, (F.n i).FG) : F.Submodule.FG ↔ F.Stable := by
   classical
-    delta Ideal.Filtration.Stable
-    simp_rw [← F.submodule_eq_span_le_iff_stable_ge]
-    constructor
-    · rintro H
-      apply
-        H.stablizes_of_supr_eq
-          ⟨fun n₀ => Submodule.span _ (⋃ (i : ℕ) (H : i ≤ n₀), single R i '' ↑(F.N i)), _⟩
-      · dsimp
-        rw [← Submodule.span_iUnion, ← submodule_span_single]
-        congr 1
-        ext
-        simp only [Set.mem_iUnion, Set.mem_image, SetLike.mem_coe, exists_prop]
-        constructor
-        · rintro ⟨-, i, -, e⟩; exact ⟨i, e⟩
-        · rintro ⟨i, e⟩; exact ⟨i, i, le_refl i, e⟩
-      · intro n m e
-        rw [Submodule.span_le, Set.iUnion₂_subset_iff]
-        intro i hi
-        refine'
-          (Set.Subset.trans _ (Set.subset_iUnion₂ i (hi.trans e : _))).trans Submodule.subset_span
-        rfl
-    · rintro ⟨n, hn⟩
-      rw [hn]
-      simp_rw [Submodule.span_iUnion₂, ← Finset.mem_range_succ_iff, iSup_subtype']
-      apply Submodule.fg_iSup
-      rintro ⟨i, hi⟩
-      obtain ⟨s, hs⟩ := hF' i
-      have :
-        Submodule.span (reesAlgebra I) (s.image (lsingle R i) : Set (PolynomialModule R M)) =
-          Submodule.span _ (single R i '' (F.N i : Set M)) :=
-        by rw [Finset.coe_image, ← Submodule.span_span_of_tower R, ← Submodule.map_span, hs]; rfl
-      rw [Subtype.coe_mk, ← this]
-      exact ⟨_, rfl⟩
+  delta Ideal.Filtration.Stable
+  simp_rw [← F.submodule_eq_span_le_iff_stable_ge]
+  constructor
+  · rintro H
+    apply
+      H.stablizes_of_supr_eq
+        ⟨fun n₀ => Submodule.span _ (⋃ (i : ℕ) (H : i ≤ n₀), single R i '' ↑(F.N i)), _⟩
+    · dsimp
+      rw [← Submodule.span_iUnion, ← submodule_span_single]
+      congr 1
+      ext
+      simp only [Set.mem_iUnion, Set.mem_image, SetLike.mem_coe, exists_prop]
+      constructor
+      · rintro ⟨-, i, -, e⟩; exact ⟨i, e⟩
+      · rintro ⟨i, e⟩; exact ⟨i, i, le_refl i, e⟩
+    · intro n m e
+      rw [Submodule.span_le, Set.iUnion₂_subset_iff]
+      intro i hi
+      refine'
+        (Set.Subset.trans _ (Set.subset_iUnion₂ i (hi.trans e : _))).trans Submodule.subset_span
+      rfl
+  · rintro ⟨n, hn⟩
+    rw [hn]
+    simp_rw [Submodule.span_iUnion₂, ← Finset.mem_range_succ_iff, iSup_subtype']
+    apply Submodule.fg_iSup
+    rintro ⟨i, hi⟩
+    obtain ⟨s, hs⟩ := hF' i
+    have :
+      Submodule.span (reesAlgebra I) (s.image (lsingle R i) : Set (PolynomialModule R M)) =
+        Submodule.span _ (single R i '' (F.N i : Set M)) :=
+      by rw [Finset.coe_image, ← Submodule.span_span_of_tower R, ← Submodule.map_span, hs]; rfl
+    rw [Subtype.coe_mk, ← this]
+    exact ⟨_, rfl⟩
 #align ideal.filtration.submodule_fg_iff_stable Ideal.Filtration.submodule_fg_iff_stable
 
 variable {F}
Diff
@@ -302,7 +302,7 @@ protected def submodule : Submodule (reesAlgebra I) (PolynomialModule R M)
     rw [Subalgebra.smul_def, PolynomialModule.smul_apply]
     apply Submodule.sum_mem
     rintro ⟨j, k⟩ e
-    rw [Finset.Nat.mem_antidiagonal] at e
+    rw [Finset.Nat.mem_antidiagonal] at e 
     subst e
     exact F.pow_smul_le j k (Submodule.smul_mem_smul (r.2 j) (hf k))
 #align ideal.filtration.submodule Ideal.Filtration.submodule
@@ -362,8 +362,8 @@ theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
     intro x hx
     obtain ⟨l, hl⟩ := (Finsupp.mem_span_iff_total _ _ _).mp (H _ ⟨x, hx, rfl⟩)
     replace hl := congr_arg (fun f : ℕ →₀ M => f (n + 1)) hl
-    dsimp only at hl
-    erw [Finsupp.single_eq_same] at hl
+    dsimp only at hl 
+    erw [Finsupp.single_eq_same] at hl 
     rw [← hl, Finsupp.total_apply, Finsupp.sum_apply]
     apply Submodule.sum_mem _ _
     rintro ⟨_, _, ⟨n', rfl⟩, _, ⟨hn', rfl⟩, m, hm, rfl⟩ -
@@ -371,7 +371,7 @@ theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
     rw [Subalgebra.smul_def, smul_single_apply, if_pos (show n' ≤ n + 1 by linarith)]
     have e : n' ≤ n := by linarith
     have := F.pow_smul_le_pow_smul (n - n') n' 1
-    rw [tsub_add_cancel_of_le e, pow_one, add_comm _ 1, ← add_tsub_assoc_of_le e, add_comm] at this
+    rw [tsub_add_cancel_of_le e, pow_one, add_comm _ 1, ← add_tsub_assoc_of_le e, add_comm] at this 
     exact this (Submodule.smul_mem_smul ((l _).2 <| n + 1 - n') hm)
   · let F' := Submodule.span (reesAlgebra I) (⋃ i ≤ n₀, single R i '' (F.N i : Set M))
     intro hF i
@@ -381,7 +381,7 @@ theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
     · exact this _ (zero_le _)
     by_cases hj' : j.succ ≤ n₀
     · exact this _ hj'
-    simp only [not_le, Nat.lt_succ_iff] at hj'
+    simp only [not_le, Nat.lt_succ_iff] at hj' 
     rw [Nat.succ_eq_add_one, ← hF _ hj']
     rintro _ ⟨m, hm, rfl⟩
     apply Submodule.smul_induction_on hm
@@ -438,10 +438,10 @@ theorem Stable.of_le [IsNoetherianRing R] [h : Module.Finite R M] (hF : F.Stable
     {F' : I.Filtration M} (hf : F' ≤ F) : F'.Stable :=
   by
   haveI := isNoetherian_of_fg_of_noetherian' h.1
-  rw [← submodule_fg_iff_stable] at hF⊢
+  rw [← submodule_fg_iff_stable] at hF ⊢
   any_goals intro i; exact IsNoetherian.noetherian _
   have := isNoetherian_of_fg_of_noetherian _ hF
-  rw [isNoetherian_submodule] at this
+  rw [isNoetherian_submodule] at this 
   exact this _ (OrderHomClass.mono (submodule_inf_hom M I) hf)
 #align ideal.filtration.stable.of_le Ideal.Filtration.Stable.of_le
 
@@ -484,7 +484,7 @@ theorem Ideal.mem_iInf_smul_pow_eq_bot_iff [IsNoetherianRing R] [hM : Module.Fin
     · intro H; exact ⟨⟨r, hr₁⟩, hr₂ _ H⟩
     obtain ⟨k, hk⟩ := (I.stable_filtration_stable ⊤).inter_right (I.trivial_filtration N)
     have := hk k (le_refl _)
-    rw [hN, hN] at this
+    rw [hN, hN] at this 
     exact le_of_eq this.symm
   · rintro ⟨r, eq⟩
     rw [Submodule.mem_iInf]
@@ -524,7 +524,7 @@ theorem Ideal.iInf_pow_eq_bot_of_isDomain [IsNoetherianRing R] [IsDomain R] (h :
   intro x hx
   by_contra hx'
   have := Ideal.mem_iInf_smul_pow_eq_bot_iff I x
-  simp_rw [smul_eq_mul, ← Ideal.one_eq_top, mul_one] at this
+  simp_rw [smul_eq_mul, ← Ideal.one_eq_top, mul_one] at this 
   obtain ⟨r, hr⟩ := this.mp hx
   have := mul_right_cancel₀ hx' (hr.trans (one_mul x).symm)
   exact I.eq_top_iff_one.not.mp h (this ▸ r.prop)
Diff
@@ -51,6 +51,7 @@ open Polynomial
 
 open scoped Polynomial BigOperators
 
+#print Ideal.Filtration /-
 /-- An `I`-filtration on the module `M` is a sequence of decreasing submodules `N i` such that
 `I • (N i) ≤ N (i + 1)`. Note that we do not require the filtration to start from `⊤`. -/
 @[ext]
@@ -59,11 +60,13 @@ structure Ideal.Filtration (M : Type u) [AddCommGroup M] [Module R M] where
   mono : ∀ i, N (i + 1) ≤ N i
   smul_le : ∀ i, I • N i ≤ N (i + 1)
 #align ideal.filtration Ideal.Filtration
+-/
 
 variable (F F' : I.Filtration M) {I}
 
 namespace Ideal.Filtration
 
+#print Ideal.Filtration.pow_smul_le /-
 theorem pow_smul_le (i j : ℕ) : I ^ i • F.n j ≤ F.n (i + j) :=
   by
   induction i
@@ -71,15 +74,21 @@ theorem pow_smul_le (i j : ℕ) : I ^ i • F.n j ≤ F.n (i + j) :=
   · rw [pow_succ, mul_smul, Nat.succ_eq_add_one, add_assoc, add_comm 1, ← add_assoc]
     exact (Submodule.smul_mono_right i_ih).trans (F.smul_le _)
 #align ideal.filtration.pow_smul_le Ideal.Filtration.pow_smul_le
+-/
 
+#print Ideal.Filtration.pow_smul_le_pow_smul /-
 theorem pow_smul_le_pow_smul (i j k : ℕ) : I ^ (i + k) • F.n j ≤ I ^ k • F.n (i + j) := by
   rw [add_comm, pow_add, mul_smul]; exact Submodule.smul_mono_right (F.pow_smul_le i j)
 #align ideal.filtration.pow_smul_le_pow_smul Ideal.Filtration.pow_smul_le_pow_smul
+-/
 
+#print Ideal.Filtration.antitone /-
 protected theorem antitone : Antitone F.n :=
   antitone_nat_of_succ_le F.mono
 #align ideal.filtration.antitone Ideal.Filtration.antitone
+-/
 
+#print Ideal.trivialFiltration /-
 /-- The trivial `I`-filtration of `N`. -/
 @[simps]
 def Ideal.trivialFiltration (I : Ideal R) (N : Submodule R M) : I.Filtration M
@@ -88,6 +97,7 @@ def Ideal.trivialFiltration (I : Ideal R) (N : Submodule R M) : I.Filtration M
   mono i := le_of_eq rfl
   smul_le i := Submodule.smul_le_right
 #align ideal.trivial_filtration Ideal.trivialFiltration
+-/
 
 /-- The `sup` of two `I.filtration`s is an `I.filtration`. -/
 instance : Sup (I.Filtration M) :=
@@ -138,57 +148,62 @@ instance : Bot (I.Filtration M) :=
   ⟨I.trivialFiltration ⊥⟩
 
 @[simp]
-theorem sup_n : (F ⊔ F').n = F.n ⊔ F'.n :=
+theorem sup_N : (F ⊔ F').n = F.n ⊔ F'.n :=
   rfl
-#align ideal.filtration.sup_N Ideal.Filtration.sup_n
+#align ideal.filtration.sup_N Ideal.Filtration.sup_N
 
 @[simp]
-theorem sSup_n (S : Set (I.Filtration M)) : (sSup S).n = sSup (Ideal.Filtration.n '' S) :=
+theorem sSup_N (S : Set (I.Filtration M)) : (sSup S).n = sSup (Ideal.Filtration.n '' S) :=
   rfl
-#align ideal.filtration.Sup_N Ideal.Filtration.sSup_n
+#align ideal.filtration.Sup_N Ideal.Filtration.sSup_N
 
 @[simp]
-theorem inf_n : (F ⊓ F').n = F.n ⊓ F'.n :=
+theorem inf_N : (F ⊓ F').n = F.n ⊓ F'.n :=
   rfl
-#align ideal.filtration.inf_N Ideal.Filtration.inf_n
+#align ideal.filtration.inf_N Ideal.Filtration.inf_N
 
+#print Ideal.Filtration.sInf_N /-
 @[simp]
-theorem sInf_n (S : Set (I.Filtration M)) : (sInf S).n = sInf (Ideal.Filtration.n '' S) :=
+theorem sInf_N (S : Set (I.Filtration M)) : (sInf S).n = sInf (Ideal.Filtration.n '' S) :=
   rfl
-#align ideal.filtration.Inf_N Ideal.Filtration.sInf_n
+#align ideal.filtration.Inf_N Ideal.Filtration.sInf_N
+-/
 
 @[simp]
-theorem top_n : (⊤ : I.Filtration M).n = ⊤ :=
+theorem top_N : (⊤ : I.Filtration M).n = ⊤ :=
   rfl
-#align ideal.filtration.top_N Ideal.Filtration.top_n
+#align ideal.filtration.top_N Ideal.Filtration.top_N
 
 @[simp]
-theorem bot_n : (⊥ : I.Filtration M).n = ⊥ :=
+theorem bot_N : (⊥ : I.Filtration M).n = ⊥ :=
   rfl
-#align ideal.filtration.bot_N Ideal.Filtration.bot_n
+#align ideal.filtration.bot_N Ideal.Filtration.bot_N
 
 @[simp]
-theorem iSup_n {ι : Sort _} (f : ι → I.Filtration M) : (iSup f).n = ⨆ i, (f i).n :=
+theorem iSup_N {ι : Sort _} (f : ι → I.Filtration M) : (iSup f).n = ⨆ i, (f i).n :=
   congr_arg sSup (Set.range_comp _ _).symm
-#align ideal.filtration.supr_N Ideal.Filtration.iSup_n
+#align ideal.filtration.supr_N Ideal.Filtration.iSup_N
 
 @[simp]
-theorem iInf_n {ι : Sort _} (f : ι → I.Filtration M) : (iInf f).n = ⨅ i, (f i).n :=
+theorem iInf_N {ι : Sort _} (f : ι → I.Filtration M) : (iInf f).n = ⨅ i, (f i).n :=
   congr_arg sInf (Set.range_comp _ _).symm
-#align ideal.filtration.infi_N Ideal.Filtration.iInf_n
+#align ideal.filtration.infi_N Ideal.Filtration.iInf_N
 
 instance : CompleteLattice (I.Filtration M) :=
-  Function.Injective.completeLattice Ideal.Filtration.n Ideal.Filtration.ext sup_n inf_n
-    (fun _ => sSup_image) (fun _ => sInf_image) top_n bot_n
+  Function.Injective.completeLattice Ideal.Filtration.n Ideal.Filtration.ext sup_N inf_N
+    (fun _ => sSup_image) (fun _ => sInf_image) top_N bot_N
 
 instance : Inhabited (I.Filtration M) :=
   ⟨⊥⟩
 
+#print Ideal.Filtration.Stable /-
 /-- An `I` filtration is stable if `I • F.N n = F.N (n+1)` for large enough `n`. -/
 def Stable : Prop :=
   ∃ n₀, ∀ n ≥ n₀, I • F.n n = F.n (n + 1)
 #align ideal.filtration.stable Ideal.Filtration.Stable
+-/
 
+#print Ideal.stableFiltration /-
 /-- The trivial stable `I`-filtration of `N`. -/
 @[simps]
 def Ideal.stableFiltration (I : Ideal R) (N : Submodule R M) : I.Filtration M
@@ -197,16 +212,20 @@ def Ideal.stableFiltration (I : Ideal R) (N : Submodule R M) : I.Filtration M
   mono i := by rw [add_comm, pow_add, mul_smul]; exact Submodule.smul_le_right
   smul_le i := by rw [add_comm, pow_add, mul_smul, pow_one]; exact le_refl _
 #align ideal.stable_filtration Ideal.stableFiltration
+-/
 
+#print Ideal.stableFiltration_stable /-
 theorem Ideal.stableFiltration_stable (I : Ideal R) (N : Submodule R M) :
     (I.stableFiltration N).Stable := by use 0; intro n _; dsimp;
   rw [add_comm, pow_add, mul_smul, pow_one]
 #align ideal.stable_filtration_stable Ideal.stableFiltration_stable
+-/
 
 variable {F F'} (h : F.Stable)
 
 include h
 
+#print Ideal.Filtration.Stable.exists_pow_smul_eq /-
 theorem Stable.exists_pow_smul_eq : ∃ n₀, ∀ k, F.n (n₀ + k) = I ^ k • F.n n₀ :=
   by
   obtain ⟨n₀, hn⟩ := h
@@ -217,7 +236,9 @@ theorem Stable.exists_pow_smul_eq : ∃ n₀, ∀ k, F.n (n₀ + k) = I ^ k •
   · rw [Nat.succ_eq_add_one, ← add_assoc, ← hn, k_ih, add_comm, pow_add, mul_smul, pow_one]
     linarith
 #align ideal.filtration.stable.exists_pow_smul_eq Ideal.Filtration.Stable.exists_pow_smul_eq
+-/
 
+#print Ideal.Filtration.Stable.exists_pow_smul_eq_of_ge /-
 theorem Stable.exists_pow_smul_eq_of_ge : ∃ n₀, ∀ n ≥ n₀, F.n n = I ^ (n - n₀) • F.n n₀ :=
   by
   obtain ⟨n₀, hn₀⟩ := h.exists_pow_smul_eq
@@ -226,9 +247,11 @@ theorem Stable.exists_pow_smul_eq_of_ge : ∃ n₀, ∀ n ≥ n₀, F.n n = I ^
   convert hn₀ (n - n₀)
   rw [add_comm, tsub_add_cancel_of_le hn]
 #align ideal.filtration.stable.exists_pow_smul_eq_of_ge Ideal.Filtration.Stable.exists_pow_smul_eq_of_ge
+-/
 
 omit h
 
+#print Ideal.Filtration.stable_iff_exists_pow_smul_eq_of_ge /-
 theorem stable_iff_exists_pow_smul_eq_of_ge :
     F.Stable ↔ ∃ n₀, ∀ n ≥ n₀, F.n n = I ^ (n - n₀) • F.n n₀ :=
   by
@@ -236,7 +259,9 @@ theorem stable_iff_exists_pow_smul_eq_of_ge :
   rw [h.some_spec n hn, h.some_spec (n + 1) (by linarith), smul_smul, ← pow_succ,
     tsub_add_eq_add_tsub hn]
 #align ideal.filtration.stable_iff_exists_pow_smul_eq_of_ge Ideal.Filtration.stable_iff_exists_pow_smul_eq_of_ge
+-/
 
+#print Ideal.Filtration.Stable.exists_forall_le /-
 theorem Stable.exists_forall_le (h : F.Stable) (e : F.n 0 ≤ F'.n 0) :
     ∃ n₀, ∀ n, F.n (n + n₀) ≤ F'.n n :=
   by
@@ -249,7 +274,9 @@ theorem Stable.exists_forall_le (h : F.Stable) (e : F.n 0 ≤ F'.n 0) :
     exact (Submodule.smul_mono_right hn).trans (F'.smul_le _)
     simp
 #align ideal.filtration.stable.exists_forall_le Ideal.Filtration.Stable.exists_forall_le
+-/
 
+#print Ideal.Filtration.Stable.bounded_difference /-
 theorem Stable.bounded_difference (h : F.Stable) (h' : F'.Stable) (e : F.n 0 = F'.n 0) :
     ∃ n₀, ∀ n, F.n (n + n₀) ≤ F'.n n ∧ F'.n (n + n₀) ≤ F.n n :=
   by
@@ -259,6 +286,7 @@ theorem Stable.bounded_difference (h : F.Stable) (h' : F'.Stable) (e : F.n 0 = F
   intro n
   refine' ⟨(F.antitone _).trans (h₁ n), (F'.antitone _).trans (h₂ n)⟩ <;> simp
 #align ideal.filtration.stable.bounded_difference Ideal.Filtration.Stable.bounded_difference
+-/
 
 open PolynomialModule
 
@@ -367,7 +395,7 @@ theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
 
 /-- If the components of a filtration are finitely generated, then the filtration is stable iff
 its associated submodule of is finitely generated.  -/
-theorem submodule_fG_iff_stable (hF' : ∀ i, (F.n i).FG) : F.Submodule.FG ↔ F.Stable := by
+theorem submodule_fg_iff_stable (hF' : ∀ i, (F.n i).FG) : F.Submodule.FG ↔ F.Stable := by
   classical
     delta Ideal.Filtration.Stable
     simp_rw [← F.submodule_eq_span_le_iff_stable_ge]
@@ -402,7 +430,7 @@ theorem submodule_fG_iff_stable (hF' : ∀ i, (F.n i).FG) : F.Submodule.FG ↔ F
         by rw [Finset.coe_image, ← Submodule.span_span_of_tower R, ← Submodule.map_span, hs]; rfl
       rw [Subtype.coe_mk, ← this]
       exact ⟨_, rfl⟩
-#align ideal.filtration.submodule_fg_iff_stable Ideal.Filtration.submodule_fG_iff_stable
+#align ideal.filtration.submodule_fg_iff_stable Ideal.Filtration.submodule_fg_iff_stable
 
 variable {F}
 
@@ -417,25 +445,31 @@ theorem Stable.of_le [IsNoetherianRing R] [h : Module.Finite R M] (hF : F.Stable
   exact this _ (OrderHomClass.mono (submodule_inf_hom M I) hf)
 #align ideal.filtration.stable.of_le Ideal.Filtration.Stable.of_le
 
+#print Ideal.Filtration.Stable.inter_right /-
 theorem Stable.inter_right [IsNoetherianRing R] [h : Module.Finite R M] (hF : F.Stable) :
     (F ⊓ F').Stable :=
   hF.of_le inf_le_left
 #align ideal.filtration.stable.inter_right Ideal.Filtration.Stable.inter_right
+-/
 
+#print Ideal.Filtration.Stable.inter_left /-
 theorem Stable.inter_left [IsNoetherianRing R] [h : Module.Finite R M] (hF : F.Stable) :
     (F' ⊓ F).Stable :=
   hF.of_le inf_le_right
 #align ideal.filtration.stable.inter_left Ideal.Filtration.Stable.inter_left
+-/
 
 end Ideal.Filtration
 
 variable (I)
 
+#print Ideal.exists_pow_inf_eq_pow_smul /-
 /-- **Artin-Rees lemma** -/
 theorem Ideal.exists_pow_inf_eq_pow_smul [IsNoetherianRing R] [h : Module.Finite R M]
     (N : Submodule R M) : ∃ k : ℕ, ∀ n ≥ k, I ^ n • ⊤ ⊓ N = I ^ (n - k) • (I ^ k • ⊤ ⊓ N) :=
   ((I.stableFiltration_stable ⊤).inter_right (I.trivialFiltration N)).exists_pow_smul_eq_of_ge
 #align ideal.exists_pow_inf_eq_pow_smul Ideal.exists_pow_inf_eq_pow_smul
+-/
 
 theorem Ideal.mem_iInf_smul_pow_eq_bot_iff [IsNoetherianRing R] [hM : Module.Finite R M] (x : M) :
     x ∈ (⨅ i : ℕ, I ^ i • ⊤ : Submodule R M) ↔ ∃ r : I, (r : R) • x = x :=
Diff
@@ -49,7 +49,7 @@ variable {R M : Type u} [CommRing R] [AddCommGroup M] [Module R M] (I : Ideal R)
 
 open Polynomial
 
-open Polynomial BigOperators
+open scoped Polynomial BigOperators
 
 /-- An `I`-filtration on the module `M` is a sequence of decreasing submodules `N i` such that
 `I • (N i) ≤ N (i + 1)`. Note that we do not require the filtration to start from `⊤`. -/
Diff
@@ -72,10 +72,8 @@ theorem pow_smul_le (i j : ℕ) : I ^ i • F.n j ≤ F.n (i + j) :=
     exact (Submodule.smul_mono_right i_ih).trans (F.smul_le _)
 #align ideal.filtration.pow_smul_le Ideal.Filtration.pow_smul_le
 
-theorem pow_smul_le_pow_smul (i j k : ℕ) : I ^ (i + k) • F.n j ≤ I ^ k • F.n (i + j) :=
-  by
-  rw [add_comm, pow_add, mul_smul]
-  exact Submodule.smul_mono_right (F.pow_smul_le i j)
+theorem pow_smul_le_pow_smul (i j k : ℕ) : I ^ (i + k) • F.n j ≤ I ^ k • F.n (i + j) := by
+  rw [add_comm, pow_add, mul_smul]; exact Submodule.smul_mono_right (F.pow_smul_le i j)
 #align ideal.filtration.pow_smul_le_pow_smul Ideal.Filtration.pow_smul_le_pow_smul
 
 protected theorem antitone : Antitone F.n :=
@@ -196,19 +194,12 @@ def Stable : Prop :=
 def Ideal.stableFiltration (I : Ideal R) (N : Submodule R M) : I.Filtration M
     where
   n i := I ^ i • N
-  mono i := by
-    rw [add_comm, pow_add, mul_smul]
-    exact Submodule.smul_le_right
-  smul_le i := by
-    rw [add_comm, pow_add, mul_smul, pow_one]
-    exact le_refl _
+  mono i := by rw [add_comm, pow_add, mul_smul]; exact Submodule.smul_le_right
+  smul_le i := by rw [add_comm, pow_add, mul_smul, pow_one]; exact le_refl _
 #align ideal.stable_filtration Ideal.stableFiltration
 
 theorem Ideal.stableFiltration_stable (I : Ideal R) (N : Submodule R M) :
-    (I.stableFiltration N).Stable := by
-  use 0
-  intro n _
-  dsimp
+    (I.stableFiltration N).Stable := by use 0; intro n _; dsimp;
   rw [add_comm, pow_add, mul_smul, pow_one]
 #align ideal.stable_filtration_stable Ideal.stableFiltration_stable
 
@@ -253,8 +244,7 @@ theorem Stable.exists_forall_le (h : F.Stable) (e : F.n 0 ≤ F'.n 0) :
   use n₀
   intro n
   induction' n with n hn
-  · refine' (F.antitone _).trans e
-    simp
+  · refine' (F.antitone _).trans e; simp
   · rw [Nat.succ_eq_one_add, add_assoc, add_comm, add_comm 1 n, ← hF]
     exact (Submodule.smul_mono_right hn).trans (F'.smul_le _)
     simp
@@ -294,10 +284,7 @@ theorem mem_submodule (f : PolynomialModule R M) : f ∈ F.Submodule ↔ ∀ i,
   Iff.rfl
 #align ideal.filtration.mem_submodule Ideal.Filtration.mem_submodule
 
-theorem inf_submodule : (F ⊓ F').Submodule = F.Submodule ⊓ F'.Submodule :=
-  by
-  ext
-  exact forall_and
+theorem inf_submodule : (F ⊓ F').Submodule = F.Submodule ⊓ F'.Submodule := by ext; exact forall_and
 #align ideal.filtration.inf_submodule Ideal.Filtration.inf_submodule
 
 variable (I M)
@@ -375,9 +362,7 @@ theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
       exact
         F'.smul_mem ⟨_, rees_algebra.monomial_mem.mpr (by rwa [pow_one])⟩
           (hj <| Set.mem_image_of_mem _ hm')
-    · intro x y hx hy
-      rw [map_add]
-      exact F'.add_mem hx hy
+    · intro x y hx hy; rw [map_add]; exact F'.add_mem hx hy
 #align ideal.filtration.submodule_eq_span_le_iff_stable_ge Ideal.Filtration.submodule_eq_span_le_iff_stable_ge
 
 /-- If the components of a filtration are finitely generated, then the filtration is stable iff
@@ -397,10 +382,8 @@ theorem submodule_fG_iff_stable (hF' : ∀ i, (F.n i).FG) : F.Submodule.FG ↔ F
         ext
         simp only [Set.mem_iUnion, Set.mem_image, SetLike.mem_coe, exists_prop]
         constructor
-        · rintro ⟨-, i, -, e⟩
-          exact ⟨i, e⟩
-        · rintro ⟨i, e⟩
-          exact ⟨i, i, le_refl i, e⟩
+        · rintro ⟨-, i, -, e⟩; exact ⟨i, e⟩
+        · rintro ⟨i, e⟩; exact ⟨i, i, le_refl i, e⟩
       · intro n m e
         rw [Submodule.span_le, Set.iUnion₂_subset_iff]
         intro i hi
@@ -416,9 +399,7 @@ theorem submodule_fG_iff_stable (hF' : ∀ i, (F.n i).FG) : F.Submodule.FG ↔ F
       have :
         Submodule.span (reesAlgebra I) (s.image (lsingle R i) : Set (PolynomialModule R M)) =
           Submodule.span _ (single R i '' (F.N i : Set M)) :=
-        by
-        rw [Finset.coe_image, ← Submodule.span_span_of_tower R, ← Submodule.map_span, hs]
-        rfl
+        by rw [Finset.coe_image, ← Submodule.span_span_of_tower R, ← Submodule.map_span, hs]; rfl
       rw [Subtype.coe_mk, ← this]
       exact ⟨_, rfl⟩
 #align ideal.filtration.submodule_fg_iff_stable Ideal.Filtration.submodule_fG_iff_stable
@@ -460,16 +441,13 @@ theorem Ideal.mem_iInf_smul_pow_eq_bot_iff [IsNoetherianRing R] [hM : Module.Fin
     x ∈ (⨅ i : ℕ, I ^ i • ⊤ : Submodule R M) ↔ ∃ r : I, (r : R) • x = x :=
   by
   let N := (⨅ i : ℕ, I ^ i • ⊤ : Submodule R M)
-  have hN : ∀ k, (I.stable_filtration ⊤ ⊓ I.trivial_filtration N).n k = N :=
-    by
-    intro k
+  have hN : ∀ k, (I.stable_filtration ⊤ ⊓ I.trivial_filtration N).n k = N := by intro k;
     exact inf_eq_right.mpr ((iInf_le _ k).trans <| le_of_eq <| by simp)
   constructor
   · haveI := isNoetherian_of_fg_of_noetherian' hM.out
     obtain ⟨r, hr₁, hr₂⟩ :=
       Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul I N (IsNoetherian.noetherian N) _
-    · intro H
-      exact ⟨⟨r, hr₁⟩, hr₂ _ H⟩
+    · intro H; exact ⟨⟨r, hr₁⟩, hr₂ _ H⟩
     obtain ⟨k, hk⟩ := (I.stable_filtration_stable ⊤).inter_right (I.trivial_filtration N)
     have := hk k (le_refl _)
     rw [hN, hN] at this
Diff
@@ -382,7 +382,7 @@ theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
 
 /-- If the components of a filtration are finitely generated, then the filtration is stable iff
 its associated submodule of is finitely generated.  -/
-theorem submodule_fg_iff_stable (hF' : ∀ i, (F.n i).Fg) : F.Submodule.Fg ↔ F.Stable := by
+theorem submodule_fG_iff_stable (hF' : ∀ i, (F.n i).FG) : F.Submodule.FG ↔ F.Stable := by
   classical
     delta Ideal.Filtration.Stable
     simp_rw [← F.submodule_eq_span_le_iff_stable_ge]
@@ -421,7 +421,7 @@ theorem submodule_fg_iff_stable (hF' : ∀ i, (F.n i).Fg) : F.Submodule.Fg ↔ F
         rfl
       rw [Subtype.coe_mk, ← this]
       exact ⟨_, rfl⟩
-#align ideal.filtration.submodule_fg_iff_stable Ideal.Filtration.submodule_fg_iff_stable
+#align ideal.filtration.submodule_fg_iff_stable Ideal.Filtration.submodule_fG_iff_stable
 
 variable {F}
 
Diff
@@ -100,15 +100,15 @@ instance : Sup (I.Filtration M) :=
 /-- The `Sup` of a family of `I.filtration`s is an `I.filtration`. -/
 instance : SupSet (I.Filtration M) :=
   ⟨fun S =>
-    { n := supₛ (Ideal.Filtration.n '' S)
+    { n := sSup (Ideal.Filtration.n '' S)
       mono := fun i => by
-        apply supₛ_le_supₛ_of_forall_exists_le _
+        apply sSup_le_sSup_of_forall_exists_le _
         rintro _ ⟨⟨_, F, hF, rfl⟩, rfl⟩
         exact ⟨_, ⟨⟨_, F, hF, rfl⟩, rfl⟩, F.mono i⟩
       smul_le := fun i =>
         by
-        rw [supₛ_eq_supᵢ', supᵢ_apply, Submodule.smul_supᵢ, supᵢ_apply]
-        apply supᵢ_mono _
+        rw [sSup_eq_iSup', iSup_apply, Submodule.smul_iSup, iSup_apply]
+        apply iSup_mono _
         rintro ⟨_, F, hF, rfl⟩
         exact F.smul_le i }⟩
 
@@ -121,15 +121,15 @@ instance : Inf (I.Filtration M) :=
 /-- The `Inf` of a family of `I.filtration`s is an `I.filtration`. -/
 instance : InfSet (I.Filtration M) :=
   ⟨fun S =>
-    { n := infₛ (Ideal.Filtration.n '' S)
+    { n := sInf (Ideal.Filtration.n '' S)
       mono := fun i => by
-        apply infₛ_le_infₛ_of_forall_exists_le _
+        apply sInf_le_sInf_of_forall_exists_le _
         rintro _ ⟨⟨_, F, hF, rfl⟩, rfl⟩
         exact ⟨_, ⟨⟨_, F, hF, rfl⟩, rfl⟩, F.mono i⟩
       smul_le := fun i => by
-        rw [infₛ_eq_infᵢ', infᵢ_apply, infᵢ_apply]
+        rw [sInf_eq_iInf', iInf_apply, iInf_apply]
         refine' submodule.smul_infi_le.trans _
-        apply infᵢ_mono _
+        apply iInf_mono _
         rintro ⟨_, F, hF, rfl⟩
         exact F.smul_le i }⟩
 
@@ -145,9 +145,9 @@ theorem sup_n : (F ⊔ F').n = F.n ⊔ F'.n :=
 #align ideal.filtration.sup_N Ideal.Filtration.sup_n
 
 @[simp]
-theorem supₛ_n (S : Set (I.Filtration M)) : (supₛ S).n = supₛ (Ideal.Filtration.n '' S) :=
+theorem sSup_n (S : Set (I.Filtration M)) : (sSup S).n = sSup (Ideal.Filtration.n '' S) :=
   rfl
-#align ideal.filtration.Sup_N Ideal.Filtration.supₛ_n
+#align ideal.filtration.Sup_N Ideal.Filtration.sSup_n
 
 @[simp]
 theorem inf_n : (F ⊓ F').n = F.n ⊓ F'.n :=
@@ -155,9 +155,9 @@ theorem inf_n : (F ⊓ F').n = F.n ⊓ F'.n :=
 #align ideal.filtration.inf_N Ideal.Filtration.inf_n
 
 @[simp]
-theorem infₛ_n (S : Set (I.Filtration M)) : (infₛ S).n = infₛ (Ideal.Filtration.n '' S) :=
+theorem sInf_n (S : Set (I.Filtration M)) : (sInf S).n = sInf (Ideal.Filtration.n '' S) :=
   rfl
-#align ideal.filtration.Inf_N Ideal.Filtration.infₛ_n
+#align ideal.filtration.Inf_N Ideal.Filtration.sInf_n
 
 @[simp]
 theorem top_n : (⊤ : I.Filtration M).n = ⊤ :=
@@ -170,18 +170,18 @@ theorem bot_n : (⊥ : I.Filtration M).n = ⊥ :=
 #align ideal.filtration.bot_N Ideal.Filtration.bot_n
 
 @[simp]
-theorem supᵢ_n {ι : Sort _} (f : ι → I.Filtration M) : (supᵢ f).n = ⨆ i, (f i).n :=
-  congr_arg supₛ (Set.range_comp _ _).symm
-#align ideal.filtration.supr_N Ideal.Filtration.supᵢ_n
+theorem iSup_n {ι : Sort _} (f : ι → I.Filtration M) : (iSup f).n = ⨆ i, (f i).n :=
+  congr_arg sSup (Set.range_comp _ _).symm
+#align ideal.filtration.supr_N Ideal.Filtration.iSup_n
 
 @[simp]
-theorem infᵢ_n {ι : Sort _} (f : ι → I.Filtration M) : (infᵢ f).n = ⨅ i, (f i).n :=
-  congr_arg infₛ (Set.range_comp _ _).symm
-#align ideal.filtration.infi_N Ideal.Filtration.infᵢ_n
+theorem iInf_n {ι : Sort _} (f : ι → I.Filtration M) : (iInf f).n = ⨅ i, (f i).n :=
+  congr_arg sInf (Set.range_comp _ _).symm
+#align ideal.filtration.infi_N Ideal.Filtration.iInf_n
 
 instance : CompleteLattice (I.Filtration M) :=
   Function.Injective.completeLattice Ideal.Filtration.n Ideal.Filtration.ext sup_n inf_n
-    (fun _ => supₛ_image) (fun _ => infₛ_image) top_n bot_n
+    (fun _ => sSup_image) (fun _ => sInf_image) top_n bot_n
 
 instance : Inhabited (I.Filtration M) :=
   ⟨⊥⟩
@@ -315,7 +315,7 @@ theorem submodule_closure_single :
     AddSubmonoid.closure (⋃ i, single R i '' (F.n i : Set M)) = F.Submodule.toAddSubmonoid :=
   by
   apply le_antisymm
-  · rw [AddSubmonoid.closure_le, Set.unionᵢ_subset_iff]
+  · rw [AddSubmonoid.closure_le, Set.iUnion_subset_iff]
     rintro i _ ⟨m, hm, rfl⟩ j
     rw [single_apply]
     split_ifs
@@ -325,7 +325,7 @@ theorem submodule_closure_single :
     rw [← f.sum_single]
     apply AddSubmonoid.sum_mem _ _
     rintro c -
-    exact AddSubmonoid.subset_closure (Set.subset_unionᵢ _ c <| Set.mem_image_of_mem _ (hf c))
+    exact AddSubmonoid.subset_closure (Set.subset_iUnion _ c <| Set.mem_image_of_mem _ (hf c))
 #align ideal.filtration.submodule_closure_single Ideal.Filtration.submodule_closure_single
 
 theorem submodule_span_single :
@@ -339,8 +339,8 @@ theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
     F.Submodule = Submodule.span _ (⋃ i ≤ n₀, single R i '' (F.n i : Set M)) ↔
       ∀ n ≥ n₀, I • F.n n = F.n (n + 1) :=
   by
-  rw [← submodule_span_single, ← LE.le.le_iff_eq, Submodule.span_le, Set.unionᵢ_subset_iff]
-  swap; · exact Submodule.span_mono (Set.unionᵢ₂_subset_unionᵢ _ _)
+  rw [← submodule_span_single, ← LE.le.le_iff_eq, Submodule.span_le, Set.iUnion_subset_iff]
+  swap; · exact Submodule.span_mono (Set.iUnion₂_subset_iUnion _ _)
   constructor
   · intro H n hn
     refine' (F.smul_le n).antisymm _
@@ -361,7 +361,7 @@ theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
   · let F' := Submodule.span (reesAlgebra I) (⋃ i ≤ n₀, single R i '' (F.N i : Set M))
     intro hF i
     have : ∀ i ≤ n₀, single R i '' (F.N i : Set M) ⊆ F' := fun i hi =>
-      Set.Subset.trans (Set.subset_unionᵢ₂ i hi) Submodule.subset_span
+      Set.Subset.trans (Set.subset_iUnion₂ i hi) Submodule.subset_span
     induction' i with j hj
     · exact this _ (zero_le _)
     by_cases hj' : j.succ ≤ n₀
@@ -392,25 +392,25 @@ theorem submodule_fg_iff_stable (hF' : ∀ i, (F.n i).Fg) : F.Submodule.Fg ↔ F
         H.stablizes_of_supr_eq
           ⟨fun n₀ => Submodule.span _ (⋃ (i : ℕ) (H : i ≤ n₀), single R i '' ↑(F.N i)), _⟩
       · dsimp
-        rw [← Submodule.span_unionᵢ, ← submodule_span_single]
+        rw [← Submodule.span_iUnion, ← submodule_span_single]
         congr 1
         ext
-        simp only [Set.mem_unionᵢ, Set.mem_image, SetLike.mem_coe, exists_prop]
+        simp only [Set.mem_iUnion, Set.mem_image, SetLike.mem_coe, exists_prop]
         constructor
         · rintro ⟨-, i, -, e⟩
           exact ⟨i, e⟩
         · rintro ⟨i, e⟩
           exact ⟨i, i, le_refl i, e⟩
       · intro n m e
-        rw [Submodule.span_le, Set.unionᵢ₂_subset_iff]
+        rw [Submodule.span_le, Set.iUnion₂_subset_iff]
         intro i hi
         refine'
-          (Set.Subset.trans _ (Set.subset_unionᵢ₂ i (hi.trans e : _))).trans Submodule.subset_span
+          (Set.Subset.trans _ (Set.subset_iUnion₂ i (hi.trans e : _))).trans Submodule.subset_span
         rfl
     · rintro ⟨n, hn⟩
       rw [hn]
-      simp_rw [Submodule.span_unionᵢ₂, ← Finset.mem_range_succ_iff, supᵢ_subtype']
-      apply Submodule.fg_supᵢ
+      simp_rw [Submodule.span_iUnion₂, ← Finset.mem_range_succ_iff, iSup_subtype']
+      apply Submodule.fg_iSup
       rintro ⟨i, hi⟩
       obtain ⟨s, hs⟩ := hF' i
       have :
@@ -456,14 +456,14 @@ theorem Ideal.exists_pow_inf_eq_pow_smul [IsNoetherianRing R] [h : Module.Finite
   ((I.stableFiltration_stable ⊤).inter_right (I.trivialFiltration N)).exists_pow_smul_eq_of_ge
 #align ideal.exists_pow_inf_eq_pow_smul Ideal.exists_pow_inf_eq_pow_smul
 
-theorem Ideal.mem_infᵢ_smul_pow_eq_bot_iff [IsNoetherianRing R] [hM : Module.Finite R M] (x : M) :
+theorem Ideal.mem_iInf_smul_pow_eq_bot_iff [IsNoetherianRing R] [hM : Module.Finite R M] (x : M) :
     x ∈ (⨅ i : ℕ, I ^ i • ⊤ : Submodule R M) ↔ ∃ r : I, (r : R) • x = x :=
   by
   let N := (⨅ i : ℕ, I ^ i • ⊤ : Submodule R M)
   have hN : ∀ k, (I.stable_filtration ⊤ ⊓ I.trivial_filtration N).n k = N :=
     by
     intro k
-    exact inf_eq_right.mpr ((infᵢ_le _ k).trans <| le_of_eq <| by simp)
+    exact inf_eq_right.mpr ((iInf_le _ k).trans <| le_of_eq <| by simp)
   constructor
   · haveI := isNoetherian_of_fg_of_noetherian' hM.out
     obtain ⟨r, hr₁, hr₂⟩ :=
@@ -475,15 +475,15 @@ theorem Ideal.mem_infᵢ_smul_pow_eq_bot_iff [IsNoetherianRing R] [hM : Module.F
     rw [hN, hN] at this
     exact le_of_eq this.symm
   · rintro ⟨r, eq⟩
-    rw [Submodule.mem_infᵢ]
+    rw [Submodule.mem_iInf]
     intro i
     induction' i with i hi
     · simp
     · rw [Nat.succ_eq_one_add, pow_add, ← smul_smul, pow_one, ← Eq]
       exact Submodule.smul_mem_smul r.prop hi
-#align ideal.mem_infi_smul_pow_eq_bot_iff Ideal.mem_infᵢ_smul_pow_eq_bot_iff
+#align ideal.mem_infi_smul_pow_eq_bot_iff Ideal.mem_iInf_smul_pow_eq_bot_iff
 
-theorem Ideal.infᵢ_pow_smul_eq_bot_of_localRing [IsNoetherianRing R] [LocalRing R]
+theorem Ideal.iInf_pow_smul_eq_bot_of_localRing [IsNoetherianRing R] [LocalRing R]
     [Module.Finite R M] (h : I ≠ ⊤) : (⨅ i : ℕ, I ^ i • ⊤ : Submodule R M) = ⊥ :=
   by
   rw [eq_bot_iff]
@@ -493,28 +493,28 @@ theorem Ideal.infᵢ_pow_smul_eq_bot_of_localRing [IsNoetherianRing R] [LocalRin
   apply this.smul_left_cancel.mp
   swap; · infer_instance
   simp [sub_smul, hr]
-#align ideal.infi_pow_smul_eq_bot_of_local_ring Ideal.infᵢ_pow_smul_eq_bot_of_localRing
+#align ideal.infi_pow_smul_eq_bot_of_local_ring Ideal.iInf_pow_smul_eq_bot_of_localRing
 
 /-- **Krull's intersection theorem** for noetherian local rings. -/
-theorem Ideal.infᵢ_pow_eq_bot_of_localRing [IsNoetherianRing R] [LocalRing R] (h : I ≠ ⊤) :
+theorem Ideal.iInf_pow_eq_bot_of_localRing [IsNoetherianRing R] [LocalRing R] (h : I ≠ ⊤) :
     (⨅ i : ℕ, I ^ i) = ⊥ :=
   by
   convert I.infi_pow_smul_eq_bot_of_local_ring h
   ext i
   rw [smul_eq_mul, ← Ideal.one_eq_top, mul_one]
   infer_instance
-#align ideal.infi_pow_eq_bot_of_local_ring Ideal.infᵢ_pow_eq_bot_of_localRing
+#align ideal.infi_pow_eq_bot_of_local_ring Ideal.iInf_pow_eq_bot_of_localRing
 
 /-- **Krull's intersection theorem** for noetherian domains. -/
-theorem Ideal.infᵢ_pow_eq_bot_of_isDomain [IsNoetherianRing R] [IsDomain R] (h : I ≠ ⊤) :
+theorem Ideal.iInf_pow_eq_bot_of_isDomain [IsNoetherianRing R] [IsDomain R] (h : I ≠ ⊤) :
     (⨅ i : ℕ, I ^ i) = ⊥ := by
   rw [eq_bot_iff]
   intro x hx
   by_contra hx'
-  have := Ideal.mem_infᵢ_smul_pow_eq_bot_iff I x
+  have := Ideal.mem_iInf_smul_pow_eq_bot_iff I x
   simp_rw [smul_eq_mul, ← Ideal.one_eq_top, mul_one] at this
   obtain ⟨r, hr⟩ := this.mp hx
   have := mul_right_cancel₀ hx' (hr.trans (one_mul x).symm)
   exact I.eq_top_iff_one.not.mp h (this ▸ r.prop)
-#align ideal.infi_pow_eq_bot_of_is_domain Ideal.infᵢ_pow_eq_bot_of_isDomain
+#align ideal.infi_pow_eq_bot_of_is_domain Ideal.iInf_pow_eq_bot_of_isDomain
 
Diff
@@ -92,7 +92,7 @@ def Ideal.trivialFiltration (I : Ideal R) (N : Submodule R M) : I.Filtration M
 #align ideal.trivial_filtration Ideal.trivialFiltration
 
 /-- The `sup` of two `I.filtration`s is an `I.filtration`. -/
-instance : HasSup (I.Filtration M) :=
+instance : Sup (I.Filtration M) :=
   ⟨fun F F' =>
     ⟨F.n ⊔ F'.n, fun i => sup_le_sup (F.mono i) (F'.mono i), fun i =>
       (le_of_eq (Submodule.smul_sup _ _ _)).trans <| sup_le_sup (F.smul_le i) (F'.smul_le i)⟩⟩
@@ -113,7 +113,7 @@ instance : SupSet (I.Filtration M) :=
         exact F.smul_le i }⟩
 
 /-- The `inf` of two `I.filtration`s is an `I.filtration`. -/
-instance : HasInf (I.Filtration M) :=
+instance : Inf (I.Filtration M) :=
   ⟨fun F F' =>
     ⟨F.n ⊓ F'.n, fun i => inf_le_inf (F.mono i) (F'.mono i), fun i =>
       (Submodule.smul_inf_le _ _ _).trans <| inf_le_inf (F.smul_le i) (F'.smul_le i)⟩⟩

Changes in mathlib4

mathlib3
mathlib4
chore(RingTheory/Filtration): Fix typo in docstring (#12318)
Diff
@@ -22,8 +22,9 @@ This file contains the definitions and basic results around (stable) `I`-filtrat
 
 ## Main results
 
-- `Ideal.Filtration`: An `I`-filtration on the module `M` is a sequence of decreasing submodules
-  `N i` such that `I • N ≤ I (i + 1)`. Note that we do not require the filtration to start from `⊤`.
+- `Ideal.Filtration`:
+  An `I`-filtration on the module `M` is a sequence of decreasing submodules `N i` such that
+  `∀ i, I • (N i) ≤ N (i + 1)`. Note that we do not require the filtration to start from `⊤`.
 - `Ideal.Filtration.Stable`: An `I`-filtration is stable if `I • (N i) = N (i + 1)` for large
   enough `i`.
 - `Ideal.Filtration.submodule`: The associated module `⨁ Nᵢ` of a filtration, implemented as a
move(Polynomial): Move out of Data (#11751)

Polynomial and MvPolynomial are algebraic objects, hence should be under Algebra (or at least not under Data)

Diff
@@ -3,12 +3,12 @@ Copyright (c) 2022 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
 -/
+import Mathlib.Algebra.Polynomial.Module.Basic
 import Mathlib.Algebra.Ring.Idempotents
 import Mathlib.RingTheory.Ideal.LocalRing
 import Mathlib.RingTheory.Noetherian
 import Mathlib.RingTheory.ReesAlgebra
 import Mathlib.RingTheory.Finiteness
-import Mathlib.Data.Polynomial.Module.Basic
 import Mathlib.Order.Basic
 import Mathlib.Order.Hom.Lattice
 
feat: pointwise scalar multiplication is monotone (#11809)

Everywhere we have a smul_mem_pointwise_smul lemma, I've added this result.

Diff
@@ -67,12 +67,12 @@ theorem pow_smul_le (i j : ℕ) : I ^ i • F.N j ≤ F.N (i + j) := by
   induction' i with _ ih
   · simp
   · rw [pow_succ', mul_smul, Nat.succ_eq_add_one, add_assoc, add_comm 1, ← add_assoc]
-    exact (Submodule.smul_mono_right ih).trans (F.smul_le _)
+    exact (smul_mono_right _ ih).trans (F.smul_le _)
 #align ideal.filtration.pow_smul_le Ideal.Filtration.pow_smul_le
 
 theorem pow_smul_le_pow_smul (i j k : ℕ) : I ^ (i + k) • F.N j ≤ I ^ k • F.N (i + j) := by
   rw [add_comm, pow_add, mul_smul]
-  exact Submodule.smul_mono_right (F.pow_smul_le i j)
+  exact smul_mono_right _ (F.pow_smul_le i j)
 #align ideal.filtration.pow_smul_le_pow_smul Ideal.Filtration.pow_smul_le_pow_smul
 
 protected theorem antitone : Antitone F.N :=
@@ -111,7 +111,7 @@ instance : SupSet (I.Filtration M) :=
 instance : Inf (I.Filtration M) :=
   ⟨fun F F' =>
     ⟨F.N ⊓ F'.N, fun i => inf_le_inf (F.mono i) (F'.mono i), fun i =>
-      (Submodule.smul_inf_le _ _ _).trans <| inf_le_inf (F.smul_le i) (F'.smul_le i)⟩⟩
+      (smul_inf_le _ _ _).trans <| inf_le_inf (F.smul_le i) (F'.smul_le i)⟩⟩
 
 /-- The `sInf` of a family of `I.Filtration`s is an `I.Filtration`. -/
 instance : InfSet (I.Filtration M) :=
@@ -123,7 +123,7 @@ instance : InfSet (I.Filtration M) :=
         exact ⟨_, ⟨⟨_, F, hF, rfl⟩, rfl⟩, F.mono i⟩
       smul_le := fun i => by
         rw [sInf_eq_iInf', iInf_apply, iInf_apply]
-        refine' Submodule.smul_iInf_le.trans _
+        refine' smul_iInf_le.trans _
         apply iInf_mono _
         rintro ⟨_, F, hF, rfl⟩
         exact F.smul_le i }⟩
@@ -245,7 +245,7 @@ theorem Stable.exists_forall_le (h : F.Stable) (e : F.N 0 ≤ F'.N 0) :
   induction' n with n hn
   · refine' (F.antitone _).trans e; simp
   · rw [Nat.succ_eq_one_add, add_assoc, add_comm, add_comm 1 n, ← hF]
-    exact (Submodule.smul_mono_right hn).trans (F'.smul_le _)
+    exact (smul_mono_right _ hn).trans (F'.smul_le _)
     simp
 #align ideal.filtration.stable.exists_forall_le Ideal.Filtration.Stable.exists_forall_le
 
change the order of operation in zsmulRec and nsmulRec (#11451)

We change the following field in the definition of an additive commutative monoid:

 nsmul_succ : ∀ (n : ℕ) (x : G),
-  AddMonoid.nsmul (n + 1) x = x + AddMonoid.nsmul n x
+  AddMonoid.nsmul (n + 1) x = AddMonoid.nsmul n x + x

where the latter is more natural

We adjust the definitions of ^ in monoids, groups, etc. Originally there was a warning comment about why this natural order was preferred

use x * npowRec n x and not npowRec n x * x in the definition to make sure that definitional unfolding of npowRec is blocked, to avoid deep recursion issues.

but it seems to no longer apply.

Remarks on the PR :

  • pow_succ and pow_succ' have switched their meanings.
  • Most of the time, the proofs were adjusted by priming/unpriming one lemma, or exchanging left and right; a few proofs were more complicated to adjust.
  • In particular, [Mathlib/NumberTheory/RamificationInertia.lean] used Ideal.IsPrime.mul_mem_pow which is defined in [Mathlib/RingTheory/DedekindDomain/Ideal.lean]. Changing the order of operation forced me to add the symmetric lemma Ideal.IsPrime.mem_pow_mul.
  • the docstring for Cauchy condensation test in [Mathlib/Analysis/PSeries.lean] was mathematically incorrect, I added the mention that the function is antitone.
Diff
@@ -66,7 +66,7 @@ namespace Ideal.Filtration
 theorem pow_smul_le (i j : ℕ) : I ^ i • F.N j ≤ F.N (i + j) := by
   induction' i with _ ih
   · simp
-  · rw [pow_succ, mul_smul, Nat.succ_eq_add_one, add_assoc, add_comm 1, ← add_assoc]
+  · rw [pow_succ', mul_smul, Nat.succ_eq_add_one, add_assoc, add_comm 1, ← add_assoc]
     exact (Submodule.smul_mono_right ih).trans (F.smul_le _)
 #align ideal.filtration.pow_smul_le Ideal.Filtration.pow_smul_le
 
@@ -233,7 +233,7 @@ theorem Stable.exists_pow_smul_eq_of_ge : ∃ n₀, ∀ n ≥ n₀, F.N n = I ^
 theorem stable_iff_exists_pow_smul_eq_of_ge :
     F.Stable ↔ ∃ n₀, ∀ n ≥ n₀, F.N n = I ^ (n - n₀) • F.N n₀ := by
   refine' ⟨Stable.exists_pow_smul_eq_of_ge, fun h => ⟨h.choose, fun n hn => _⟩⟩
-  rw [h.choose_spec n hn, h.choose_spec (n + 1) (by omega), smul_smul, ← pow_succ,
+  rw [h.choose_spec n hn, h.choose_spec (n + 1) (by omega), smul_smul, ← pow_succ',
     tsub_add_eq_add_tsub hn]
 #align ideal.filtration.stable_iff_exists_pow_smul_eq_of_ge Ideal.Filtration.stable_iff_exists_pow_smul_eq_of_ge
 
refactor: optimize proofs with omega (#11093)

I ran tryAtEachStep on all files under Mathlib to find all locations where omega succeeds. For each that was a linarith without an only, I tried replacing it with omega, and I verified that elaboration time got smaller. (In almost all cases, there was a noticeable speedup.) I also replaced some slow aesops along the way.

Diff
@@ -219,7 +219,7 @@ theorem Stable.exists_pow_smul_eq : ∃ n₀, ∀ k, F.N (n₀ + k) = I ^ k •
   induction' k with _ ih
   · simp
   · rw [Nat.succ_eq_add_one, ← add_assoc, ← hn, ih, add_comm, pow_add, mul_smul, pow_one]
-    linarith
+    omega
 #align ideal.filtration.stable.exists_pow_smul_eq Ideal.Filtration.Stable.exists_pow_smul_eq
 
 theorem Stable.exists_pow_smul_eq_of_ge : ∃ n₀, ∀ n ≥ n₀, F.N n = I ^ (n - n₀) • F.N n₀ := by
@@ -233,7 +233,7 @@ theorem Stable.exists_pow_smul_eq_of_ge : ∃ n₀, ∀ n ≥ n₀, F.N n = I ^
 theorem stable_iff_exists_pow_smul_eq_of_ge :
     F.Stable ↔ ∃ n₀, ∀ n ≥ n₀, F.N n = I ^ (n - n₀) • F.N n₀ := by
   refine' ⟨Stable.exists_pow_smul_eq_of_ge, fun h => ⟨h.choose, fun n hn => _⟩⟩
-  rw [h.choose_spec n hn, h.choose_spec (n + 1) (by linarith), smul_smul, ← pow_succ,
+  rw [h.choose_spec n hn, h.choose_spec (n + 1) (by omega), smul_smul, ← pow_succ,
     tsub_add_eq_add_tsub hn]
 #align ideal.filtration.stable_iff_exists_pow_smul_eq_of_ge Ideal.Filtration.stable_iff_exists_pow_smul_eq_of_ge
 
@@ -336,8 +336,8 @@ theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
     apply Submodule.sum_mem _ _
     rintro ⟨_, _, ⟨n', rfl⟩, _, ⟨hn', rfl⟩, m, hm, rfl⟩ -
     dsimp only [Subtype.coe_mk]
-    rw [Subalgebra.smul_def, smul_single_apply, if_pos (show n' ≤ n + 1 by linarith)]
-    have e : n' ≤ n := by linarith
+    rw [Subalgebra.smul_def, smul_single_apply, if_pos (show n' ≤ n + 1 by omega)]
+    have e : n' ≤ n := by omega
     have := F.pow_smul_le_pow_smul (n - n') n' 1
     rw [tsub_add_cancel_of_le e, pow_one, add_comm _ 1, ← add_tsub_assoc_of_le e, add_comm] at this
     exact this (Submodule.smul_mem_smul ((l _).2 <| n + 1 - n') hm)
fix(RingTheory/Finiteness): stablizes -> stabilizes (#10736)
Diff
@@ -373,7 +373,7 @@ theorem submodule_fg_iff_stable (hF' : ∀ i, (F.N i).FG) : F.submodule.FG ↔ F
   simp_rw [← F.submodule_eq_span_le_iff_stable_ge]
   constructor
   · rintro H
-    refine H.stablizes_of_iSup_eq
+    refine H.stabilizes_of_iSup_eq
         ⟨fun n₀ => Submodule.span _ (⋃ (i : ℕ) (_ : i ≤ n₀), single R i '' ↑(F.N i)), ?_⟩ ?_
     · intro n m e
       rw [Submodule.span_le, Set.iUnion₂_subset_iff]
chore: tidy various files (#10007)
Diff
@@ -83,7 +83,7 @@ protected theorem antitone : Antitone F.N :=
 @[simps]
 def _root_.Ideal.trivialFiltration (I : Ideal R) (N : Submodule R M) : I.Filtration M where
   N _ := N
-  mono _ := le_of_eq rfl
+  mono _ := le_rfl
   smul_le _ := Submodule.smul_le_right
 #align ideal.trivial_filtration Ideal.trivialFiltration
 
@@ -91,7 +91,7 @@ def _root_.Ideal.trivialFiltration (I : Ideal R) (N : Submodule R M) : I.Filtrat
 instance : Sup (I.Filtration M) :=
   ⟨fun F F' =>
     ⟨F.N ⊔ F'.N, fun i => sup_le_sup (F.mono i) (F'.mono i), fun i =>
-      (le_of_eq (Submodule.smul_sup _ _ _)).trans <| sup_le_sup (F.smul_le i) (F'.smul_le i)⟩⟩
+      (Submodule.smul_sup _ _ _).trans_le <| sup_le_sup (F.smul_le i) (F'.smul_le i)⟩⟩
 
 /-- The `sSup` of a family of `I.Filtration`s is an `I.Filtration`. -/
 instance : SupSet (I.Filtration M) :=
feat: a linear endomorphism that is a root of a squarefree polynomial is semisimple (#10128)

The main result is Module.End.isSemisimple_of_squarefree_aeval_eq_zero

Diff
@@ -8,7 +8,7 @@ import Mathlib.RingTheory.Ideal.LocalRing
 import Mathlib.RingTheory.Noetherian
 import Mathlib.RingTheory.ReesAlgebra
 import Mathlib.RingTheory.Finiteness
-import Mathlib.Data.Polynomial.Module
+import Mathlib.Data.Polynomial.Module.Basic
 import Mathlib.Order.Basic
 import Mathlib.Order.Hom.Lattice
 
chore: reduce imports (#9830)

This uses the improved shake script from #9772 to reduce imports across mathlib. The corresponding noshake.json file has been added to #9772.

Co-authored-by: Mario Carneiro <di.gama@gmail.com>

Diff
@@ -9,6 +9,7 @@ import Mathlib.RingTheory.Noetherian
 import Mathlib.RingTheory.ReesAlgebra
 import Mathlib.RingTheory.Finiteness
 import Mathlib.Data.Polynomial.Module
+import Mathlib.Order.Basic
 import Mathlib.Order.Hom.Lattice
 
 #align_import ring_theory.filtration from "leanprover-community/mathlib"@"70fd9563a21e7b963887c9360bd29b2393e6225a"
chore: reduce imports in Mathlib.RingTheory.Noetherian (#9322)
Diff
@@ -3,6 +3,7 @@ Copyright (c) 2022 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
 -/
+import Mathlib.Algebra.Ring.Idempotents
 import Mathlib.RingTheory.Ideal.LocalRing
 import Mathlib.RingTheory.Noetherian
 import Mathlib.RingTheory.ReesAlgebra
feat: A dedekind domain that is local is a PID. (#9282)

Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>

Diff
@@ -472,6 +472,19 @@ theorem Ideal.iInf_pow_eq_bot_of_localRing [IsNoetherianRing R] [LocalRing R] (h
   rw [smul_eq_mul, ← Ideal.one_eq_top, mul_one]
 #align ideal.infi_pow_eq_bot_of_local_ring Ideal.iInf_pow_eq_bot_of_localRing
 
+/-- Also see `Ideal.isIdempotentElem_iff_eq_bot_or_top` for integral domains. -/
+theorem Ideal.isIdempotentElem_iff_eq_bot_or_top_of_localRing {R} [CommRing R]
+    [IsNoetherianRing R] [LocalRing R] (I : Ideal R) :
+    IsIdempotentElem I ↔ I = ⊥ ∨ I = ⊤ := by
+  constructor
+  · intro H
+    by_cases I = ⊤; · exact Or.inr ‹_›
+    refine Or.inl (eq_bot_iff.mpr ?_)
+    rw [← Ideal.iInf_pow_eq_bot_of_localRing I ‹_›]
+    apply le_iInf
+    rintro (_|n) <;> simp [H.pow_succ_eq]
+  · rintro (rfl | rfl) <;> simp [IsIdempotentElem]
+
 /-- **Krull's intersection theorem** for noetherian domains. -/
 theorem Ideal.iInf_pow_eq_bot_of_isDomain [IsNoetherianRing R] [IsDomain R] (h : I ≠ ⊤) :
     ⨅ i : ℕ, I ^ i = ⊥ := by
feat: make isNoetherian_of_isNoetherianRing_of_finite an instance (#8999)

Make isNoetherian_of_isNoetherianRing_of_finite an instance: this was impossible in Lean 3 because of a loop.

Diff
@@ -404,7 +404,6 @@ variable {F}
 
 theorem Stable.of_le [IsNoetherianRing R] [Module.Finite R M] (hF : F.Stable)
     {F' : I.Filtration M} (hf : F' ≤ F) : F'.Stable := by
-  have := isNoetherian_of_isNoetherianRing_of_finite R M
   rw [← submodule_fg_iff_stable] at hF ⊢
   any_goals intro i; exact IsNoetherian.noetherian _
   have := isNoetherian_of_fg_of_noetherian _ hF
@@ -438,8 +437,7 @@ theorem Ideal.mem_iInf_smul_pow_eq_bot_iff [IsNoetherianRing R] [Module.Finite R
   have hN : ∀ k, (I.stableFiltration ⊤ ⊓ I.trivialFiltration N).N k = N :=
     fun k => inf_eq_right.mpr ((iInf_le _ k).trans <| le_of_eq <| by simp)
   constructor
-  · have := isNoetherian_of_isNoetherianRing_of_finite R M
-    obtain ⟨r, hr₁, hr₂⟩ :=
+  · obtain ⟨r, hr₁, hr₂⟩ :=
       Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul I N (IsNoetherian.noetherian N) (by
         obtain ⟨k, hk⟩ := (I.stableFiltration_stable ⊤).inter_right (I.trivialFiltration N)
         have := hk k (le_refl _)
feat(Data.Finset.Antidiagonal): generalize Finset.Nat.antidiagonal (#7486)

We define a type class Finset.HasAntidiagonal A which contains a function antidiagonal : A → Finset (A × A) such that antidiagonal n is the Finset of all pairs adding to n, as witnessed by mem_antidiagonal.

When A is a canonically ordered add monoid with locally finite order this typeclass can be instantiated with Finset.antidiagonalOfLocallyFinite. This applies in particular when A is , more generally or σ →₀ ℕ, or even ι →₀ A under the additional assumption OrderedSub A that make it a canonically ordered add monoid. (In fact, we would just need an AddMonoid with a compatible order, finite Iic, such that if a + b = n, then a, b ≤ n, and any finiteness condition would be OK.)

For computational reasons it is better to manually provide instances for and σ →₀ ℕ, to avoid quadratic runtime performance. These instances are provided as Finset.Nat.instHasAntidiagonal and Finsupp.instHasAntidiagonal. This is why Finset.antidiagonalOfLocallyFinite is an abbrev and not an instance.

This definition does not exactly match with that of Multiset.antidiagonal defined in Mathlib.Data.Multiset.Antidiagonal, because of the multiplicities. Indeed, by counting multiplicities, Multiset α is equivalent to α →₀ ℕ, but Finset.antidiagonal and Multiset.antidiagonal will return different objects. For example, for s : Multiset ℕ := {0,0,0}, Multiset.antidiagonal s has 8 elements but Finset.antidiagonal s has only 4.

def s : Multiset ℕ := {0, 0, 0}
#eval (Finset.antidiagonal s).card -- 4
#eval Multiset.card (Multiset.antidiagonal s) -- 8

TODO

  • Define HasMulAntidiagonal (for monoids). For PNat, we will recover the set of divisors of a strictly positive integer.

This closes #7917

Co-authored by: María Inés de Frutos-Fernández <mariaines.dff@gmail.com> and Eric Wieser <efw27@cam.ac.uk>

Co-authored-by: Antoine Chambert-Loir <antoine.chambert-loir@math.univ-paris-diderot.fr> Co-authored-by: Mario Carneiro <di.gama@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -269,7 +269,7 @@ protected def submodule : Submodule (reesAlgebra I) (PolynomialModule R M) where
     rw [Subalgebra.smul_def, PolynomialModule.smul_apply]
     apply Submodule.sum_mem
     rintro ⟨j, k⟩ e
-    rw [Finset.Nat.mem_antidiagonal] at e
+    rw [Finset.mem_antidiagonal] at e
     subst e
     exact F.pow_smul_le j k (Submodule.smul_mem_smul (r.2 j) (hf k))
 #align ideal.filtration.submodule Ideal.Filtration.submodule
chore: restate isNoetherian_of_fg_of_noetherian' using Module.Finite (and rename). (#6609)
Diff
@@ -402,9 +402,9 @@ theorem submodule_fg_iff_stable (hF' : ∀ i, (F.N i).FG) : F.submodule.FG ↔ F
 
 variable {F}
 
-theorem Stable.of_le [IsNoetherianRing R] [h : Module.Finite R M] (hF : F.Stable)
+theorem Stable.of_le [IsNoetherianRing R] [Module.Finite R M] (hF : F.Stable)
     {F' : I.Filtration M} (hf : F' ≤ F) : F'.Stable := by
-  haveI := isNoetherian_of_fg_of_noetherian' h.1
+  have := isNoetherian_of_isNoetherianRing_of_finite R M
   rw [← submodule_fg_iff_stable] at hF ⊢
   any_goals intro i; exact IsNoetherian.noetherian _
   have := isNoetherian_of_fg_of_noetherian _ hF
@@ -432,13 +432,13 @@ theorem Ideal.exists_pow_inf_eq_pow_smul [IsNoetherianRing R] [Module.Finite R M
   ((I.stableFiltration_stable ⊤).inter_right (I.trivialFiltration N)).exists_pow_smul_eq_of_ge
 #align ideal.exists_pow_inf_eq_pow_smul Ideal.exists_pow_inf_eq_pow_smul
 
-theorem Ideal.mem_iInf_smul_pow_eq_bot_iff [IsNoetherianRing R] [hM : Module.Finite R M] (x : M) :
+theorem Ideal.mem_iInf_smul_pow_eq_bot_iff [IsNoetherianRing R] [Module.Finite R M] (x : M) :
     x ∈ (⨅ i : ℕ, I ^ i • ⊤ : Submodule R M) ↔ ∃ r : I, (r : R) • x = x := by
   let N := (⨅ i : ℕ, I ^ i • ⊤ : Submodule R M)
   have hN : ∀ k, (I.stableFiltration ⊤ ⊓ I.trivialFiltration N).N k = N :=
     fun k => inf_eq_right.mpr ((iInf_le _ k).trans <| le_of_eq <| by simp)
   constructor
-  · haveI := isNoetherian_of_fg_of_noetherian' hM.out
+  · have := isNoetherian_of_isNoetherianRing_of_finite R M
     obtain ⟨r, hr₁, hr₂⟩ :=
       Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul I N (IsNoetherian.noetherian N) (by
         obtain ⟨k, hk⟩ := (I.stableFiltration_stable ⊤).inter_right (I.trivialFiltration N)
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
@@ -169,13 +169,13 @@ set_option linter.uppercaseLean3 false in
 #align ideal.filtration.bot_N Ideal.Filtration.bot_N
 
 @[simp]
-theorem iSup_N {ι : Sort _} (f : ι → I.Filtration M) : (iSup f).N = ⨆ i, (f i).N :=
+theorem iSup_N {ι : Sort*} (f : ι → I.Filtration M) : (iSup f).N = ⨆ i, (f i).N :=
   congr_arg sSup (Set.range_comp _ _).symm
 set_option linter.uppercaseLean3 false in
 #align ideal.filtration.supr_N Ideal.Filtration.iSup_N
 
 @[simp]
-theorem iInf_N {ι : Sort _} (f : ι → I.Filtration M) : (iInf f).N = ⨅ i, (f i).N :=
+theorem iInf_N {ι : Sort*} (f : ι → I.Filtration M) : (iInf f).N = ⨅ i, (f i).N :=
   congr_arg sInf (Set.range_comp _ _).symm
 set_option linter.uppercaseLean3 false in
 #align ideal.filtration.infi_N Ideal.Filtration.iInf_N
chore: use FunLike for OrderHom (#5805)

Co-authored-by: Jujian Zhang <jujian.zhang1998@outlook.com> Co-authored-by: Oliver Nash <github@olivernash.org>

Diff
@@ -371,8 +371,14 @@ theorem submodule_fg_iff_stable (hF' : ∀ i, (F.N i).FG) : F.submodule.FG ↔ F
   simp_rw [← F.submodule_eq_span_le_iff_stable_ge]
   constructor
   · rintro H
-    apply H.stablizes_of_iSup_eq
-        ⟨fun n₀ => Submodule.span _ (⋃ (i : ℕ) (_ : i ≤ n₀), single R i '' ↑(F.N i)), _⟩
+    refine H.stablizes_of_iSup_eq
+        ⟨fun n₀ => Submodule.span _ (⋃ (i : ℕ) (_ : i ≤ n₀), single R i '' ↑(F.N i)), ?_⟩ ?_
+    · intro n m e
+      rw [Submodule.span_le, Set.iUnion₂_subset_iff]
+      intro i hi
+      refine Set.Subset.trans ?_ Submodule.subset_span
+      refine @Set.subset_iUnion₂ _ _ _ (fun i => fun _ => ↑((single R i) '' ((N F i) : Set M))) i ?_
+      exact hi.trans e
     · dsimp
       rw [← Submodule.span_iUnion, ← submodule_span_single]
       congr 1
@@ -381,12 +387,6 @@ theorem submodule_fg_iff_stable (hF' : ∀ i, (F.N i).FG) : F.submodule.FG ↔ F
       constructor
       · rintro ⟨-, i, -, e⟩; exact ⟨i, e⟩
       · rintro ⟨i, e⟩; exact ⟨i, i, le_refl i, e⟩
-    · intro n m e
-      rw [Submodule.span_le, Set.iUnion₂_subset_iff]
-      intro i hi
-      refine Set.Subset.trans ?_ Submodule.subset_span
-      refine @Set.subset_iUnion₂ _ _ _ (fun i => fun _ => ↑((single R i) '' ((N F i) : Set M))) i ?_
-      exact hi.trans e
   · rintro ⟨n, hn⟩
     rw [hn]
     simp_rw [Submodule.span_iUnion₂, ← Finset.mem_range_succ_iff, iSup_subtype']
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,11 +2,6 @@
 Copyright (c) 2022 Andrew Yang. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Andrew Yang
-
-! This file was ported from Lean 3 source module ring_theory.filtration
-! 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.RingTheory.Ideal.LocalRing
 import Mathlib.RingTheory.Noetherian
@@ -15,6 +10,8 @@ import Mathlib.RingTheory.Finiteness
 import Mathlib.Data.Polynomial.Module
 import Mathlib.Order.Hom.Lattice
 
+#align_import ring_theory.filtration from "leanprover-community/mathlib"@"70fd9563a21e7b963887c9360bd29b2393e6225a"
+
 /-!
 
 # `I`-filtrations of modules
fix: precedences of ⨆⋃⋂⨅ (#5614)
Diff
@@ -471,7 +471,7 @@ theorem Ideal.iInf_pow_smul_eq_bot_of_localRing [IsNoetherianRing R] [LocalRing
 
 /-- **Krull's intersection theorem** for noetherian local rings. -/
 theorem Ideal.iInf_pow_eq_bot_of_localRing [IsNoetherianRing R] [LocalRing R] (h : I ≠ ⊤) :
-    (⨅ i : ℕ, I ^ i) = ⊥ := by
+    ⨅ i : ℕ, I ^ i = ⊥ := by
   convert I.iInf_pow_smul_eq_bot_of_localRing (M := R) h
   ext i
   rw [smul_eq_mul, ← Ideal.one_eq_top, mul_one]
@@ -479,7 +479,7 @@ theorem Ideal.iInf_pow_eq_bot_of_localRing [IsNoetherianRing R] [LocalRing R] (h
 
 /-- **Krull's intersection theorem** for noetherian domains. -/
 theorem Ideal.iInf_pow_eq_bot_of_isDomain [IsNoetherianRing R] [IsDomain R] (h : I ≠ ⊤) :
-    (⨅ i : ℕ, I ^ i) = ⊥ := by
+    ⨅ i : ℕ, I ^ i = ⊥ := by
   rw [eq_bot_iff]
   intro x hx
   by_contra hx'
chore: clean up spacing around at and goals (#5387)

Changes are of the form

  • some_tactic at h⊢ -> some_tactic at h ⊢
  • some_tactic at h -> some_tactic at h
Diff
@@ -408,7 +408,7 @@ variable {F}
 theorem Stable.of_le [IsNoetherianRing R] [h : Module.Finite R M] (hF : F.Stable)
     {F' : I.Filtration M} (hf : F' ≤ F) : F'.Stable := by
   haveI := isNoetherian_of_fg_of_noetherian' h.1
-  rw [← submodule_fg_iff_stable] at hF⊢
+  rw [← submodule_fg_iff_stable] at hF ⊢
   any_goals intro i; exact IsNoetherian.noetherian _
   have := isNoetherian_of_fg_of_noetherian _ hF
   rw [isNoetherian_submodule] at this
style: allow _ for an argument in notation3 & replace _foo with _ in notation3 (#4652)
Diff
@@ -375,7 +375,7 @@ theorem submodule_fg_iff_stable (hF' : ∀ i, (F.N i).FG) : F.submodule.FG ↔ F
   constructor
   · rintro H
     apply H.stablizes_of_iSup_eq
-        ⟨fun n₀ => Submodule.span _ (⋃ (i : ℕ) (_H : i ≤ n₀), single R i '' ↑(F.N i)), _⟩
+        ⟨fun n₀ => Submodule.span _ (⋃ (i : ℕ) (_ : i ≤ n₀), single R i '' ↑(F.N i)), _⟩
     · dsimp
       rw [← Submodule.span_iUnion, ← submodule_span_single]
       congr 1
feat: port RingTheory.Filtration (#4488)

Co-authored-by: Xavier-François Roblot <46200072+xroblot@users.noreply.github.com>

Dependencies 8 + 548

549 files ported (98.6%)
228980 lines ported (98.7%)
Show graph

The unported dependencies are