ring_theory.graded_algebra.radical
⟷
Mathlib.RingTheory.GradedAlgebra.Radical
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -85,7 +85,7 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
intro x hx
rw [filter_nonempty_iff]
contrapose! hx
- simp_rw [proj_apply] at hx
+ simp_rw [proj_apply] at hx
rw [← sum_support_decompose 𝒜 x]
exact Ideal.sum_mem _ hx
set max₁ := set₁.max' (Nonempty x rid₁) with max₁_eq
@@ -114,7 +114,7 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
rw [eq_sub_of_add_eq eq_add_sum.symm]
refine' Ideal.sub_mem _ hxy (Ideal.sum_mem _ fun z H => _)
rcases z with ⟨i, j⟩
- simp only [mem_erase, Prod.mk.inj_iff, Ne.def, mem_filter, mem_product] at H
+ simp only [mem_erase, Prod.mk.inj_iff, Ne.def, mem_filter, mem_product] at H
rcases H with ⟨H₁, ⟨H₂, H₃⟩, H₄⟩
have max_lt : max₁ < i ∨ max₂ < j :=
by
@@ -123,26 +123,26 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
· refine' False.elim (H₁ ⟨rfl, add_left_cancel H₄⟩)
· apply Or.inr
have := add_lt_add_right h j
- rw [H₄] at this
+ rw [H₄] at this
exact lt_of_add_lt_add_left this
cases max_lt
· -- in this case `max₁ < i`, then `xᵢ ∈ I`; for otherwise `i ∈ set₁` then `i ≤ max₁`.
have not_mem : i ∉ set₁ := fun h =>
lt_irrefl _ ((max'_lt_iff set₁ (Nonempty x rid₁)).mp max_lt i h)
- rw [set₁_eq] at not_mem
- simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
+ rw [set₁_eq] at not_mem
+ simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
exact Ideal.mul_mem_right _ I (not_mem H₂)
· -- in this case `max₂ < j`, then `yⱼ ∈ I`; for otherwise `j ∈ set₂`, then `j ≤ max₂`.
have not_mem : j ∉ set₂ := fun h =>
lt_irrefl _ ((max'_lt_iff set₂ (Nonempty y rid₂)).mp max_lt j h)
- rw [set₂_eq] at not_mem
- simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
+ rw [set₂_eq] at not_mem
+ simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
exact Ideal.mul_mem_left I _ (not_mem H₃)
have not_mem_I : proj 𝒜 max₁ x * proj 𝒜 max₂ y ∉ I :=
by
have neither_mem : proj 𝒜 max₁ x ∉ I ∧ proj 𝒜 max₂ y ∉ I :=
by
- rw [mem_filter] at mem_max₁ mem_max₂
+ rw [mem_filter] at mem_max₁ mem_max₂
exact ⟨mem_max₁.2, mem_max₂.2⟩
intro rid
cases homogeneous_mem_or_mem ⟨max₁, SetLike.coe_mem _⟩ ⟨max₂, SetLike.coe_mem _⟩ mem_I
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -62,27 +62,97 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
intro x y hxy
by_contra rid
obtain ⟨rid₁, rid₂⟩ := not_or_distrib.mp rid
- classical⟩
+ classical
+ /-
+ The idea of the proof is the following :
+ since `x * y ∈ I` and `I` homogeneous, then `proj i (x * y) ∈ I` for any `i : ι`.
+ Then consider two sets `{i ∈ x.support | xᵢ ∉ I}` and `{j ∈ y.support | yⱼ ∉ J}`;
+ let `max₁, max₂` be the maximum of the two sets, then `proj (max₁ + max₂) (x * y) ∈ I`.
+ Then, `proj max₁ x ∉ I` and `proj max₂ j ∉ I`
+ but `proj i x ∈ I` for all `max₁ < i` and `proj j y ∈ I` for all `max₂ < j`.
+ ` proj (max₁ + max₂) (x * y)`
+ `= ∑ {(i, j) ∈ supports | i + j = max₁ + max₂}, xᵢ * yⱼ`
+ `= proj max₁ x * proj max₂ y`
+ ` + ∑ {(i, j) ∈ supports \ {(max₁, max₂)} | i + j = max₁ + max₂}, xᵢ * yⱼ`.
+ This is a contradiction, because both `proj (max₁ + max₂) (x * y) ∈ I` and the sum on the
+ right hand side is in `I` however `proj max₁ x * proj max₂ y` is not in `I`.
+ -/
+ set set₁ := (decompose 𝒜 x).support.filterₓ fun i => proj 𝒜 i x ∉ I with set₁_eq
+ set set₂ := (decompose 𝒜 y).support.filterₓ fun i => proj 𝒜 i y ∉ I with set₂_eq
+ have nonempty :
+ ∀ x : A, x ∉ I → ((decompose 𝒜 x).support.filterₓ fun i => proj 𝒜 i x ∉ I).Nonempty :=
+ by
+ intro x hx
+ rw [filter_nonempty_iff]
+ contrapose! hx
+ simp_rw [proj_apply] at hx
+ rw [← sum_support_decompose 𝒜 x]
+ exact Ideal.sum_mem _ hx
+ set max₁ := set₁.max' (Nonempty x rid₁) with max₁_eq
+ set max₂ := set₂.max' (Nonempty y rid₂) with max₂_eq
+ have mem_max₁ : max₁ ∈ set₁ := max'_mem set₁ (Nonempty x rid₁)
+ have mem_max₂ : max₂ ∈ set₂ := max'_mem set₂ (Nonempty y rid₂)
+ replace hxy : proj 𝒜 (max₁ + max₂) (x * y) ∈ I := hI _ hxy
+ have mem_I : proj 𝒜 max₁ x * proj 𝒜 max₂ y ∈ I :=
+ by
+ set antidiag :=
+ ((decompose 𝒜 x).support ×ˢ (decompose 𝒜 y).support).filterₓ fun z : ι × ι =>
+ z.1 + z.2 = max₁ + max₂ with
+ ha
+ have mem_antidiag : (max₁, max₂) ∈ antidiag :=
+ by
+ simp only [add_sum_erase, mem_filter, mem_product]
+ exact ⟨⟨mem_of_mem_filter _ mem_max₁, mem_of_mem_filter _ mem_max₂⟩, rfl⟩
+ have eq_add_sum :=
+ calc
+ proj 𝒜 (max₁ + max₂) (x * y) = ∑ ij in antidiag, proj 𝒜 ij.1 x * proj 𝒜 ij.2 y := by
+ simp_rw [ha, proj_apply, DirectSum.decompose_mul, DirectSum.coe_mul_apply 𝒜]
+ _ =
+ proj 𝒜 max₁ x * proj 𝒜 max₂ y +
+ ∑ ij in antidiag.erase (max₁, max₂), proj 𝒜 ij.1 x * proj 𝒜 ij.2 y :=
+ (add_sum_erase _ _ mem_antidiag).symm
+ rw [eq_sub_of_add_eq eq_add_sum.symm]
+ refine' Ideal.sub_mem _ hxy (Ideal.sum_mem _ fun z H => _)
+ rcases z with ⟨i, j⟩
+ simp only [mem_erase, Prod.mk.inj_iff, Ne.def, mem_filter, mem_product] at H
+ rcases H with ⟨H₁, ⟨H₂, H₃⟩, H₄⟩
+ have max_lt : max₁ < i ∨ max₂ < j :=
+ by
+ rcases lt_trichotomy max₁ i with (h | rfl | h)
+ · exact Or.inl h
+ · refine' False.elim (H₁ ⟨rfl, add_left_cancel H₄⟩)
+ · apply Or.inr
+ have := add_lt_add_right h j
+ rw [H₄] at this
+ exact lt_of_add_lt_add_left this
+ cases max_lt
+ · -- in this case `max₁ < i`, then `xᵢ ∈ I`; for otherwise `i ∈ set₁` then `i ≤ max₁`.
+ have not_mem : i ∉ set₁ := fun h =>
+ lt_irrefl _ ((max'_lt_iff set₁ (Nonempty x rid₁)).mp max_lt i h)
+ rw [set₁_eq] at not_mem
+ simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
+ exact Ideal.mul_mem_right _ I (not_mem H₂)
+ · -- in this case `max₂ < j`, then `yⱼ ∈ I`; for otherwise `j ∈ set₂`, then `j ≤ max₂`.
+ have not_mem : j ∉ set₂ := fun h =>
+ lt_irrefl _ ((max'_lt_iff set₂ (Nonempty y rid₂)).mp max_lt j h)
+ rw [set₂_eq] at not_mem
+ simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
+ exact Ideal.mul_mem_left I _ (not_mem H₃)
+ have not_mem_I : proj 𝒜 max₁ x * proj 𝒜 max₂ y ∉ I :=
+ by
+ have neither_mem : proj 𝒜 max₁ x ∉ I ∧ proj 𝒜 max₂ y ∉ I :=
+ by
+ rw [mem_filter] at mem_max₁ mem_max₂
+ exact ⟨mem_max₁.2, mem_max₂.2⟩
+ intro rid
+ cases homogeneous_mem_or_mem ⟨max₁, SetLike.coe_mem _⟩ ⟨max₂, SetLike.coe_mem _⟩ mem_I
+ · apply neither_mem.1 h
+ · apply neither_mem.2 h
+ exact not_mem_I mem_I⟩
#align ideal.is_homogeneous.is_prime_of_homogeneous_mem_or_mem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem
-/
#print Ideal.IsHomogeneous.isPrime_iff /-
-/-
- The idea of the proof is the following :
- since `x * y ∈ I` and `I` homogeneous, then `proj i (x * y) ∈ I` for any `i : ι`.
- Then consider two sets `{i ∈ x.support | xᵢ ∉ I}` and `{j ∈ y.support | yⱼ ∉ J}`;
- let `max₁, max₂` be the maximum of the two sets, then `proj (max₁ + max₂) (x * y) ∈ I`.
- Then, `proj max₁ x ∉ I` and `proj max₂ j ∉ I`
- but `proj i x ∈ I` for all `max₁ < i` and `proj j y ∈ I` for all `max₂ < j`.
- ` proj (max₁ + max₂) (x * y)`
- `= ∑ {(i, j) ∈ supports | i + j = max₁ + max₂}, xᵢ * yⱼ`
- `= proj max₁ x * proj max₂ y`
- ` + ∑ {(i, j) ∈ supports \ {(max₁, max₂)} | i + j = max₁ + max₂}, xᵢ * yⱼ`.
- This is a contradiction, because both `proj (max₁ + max₂) (x * y) ∈ I` and the sum on the
- right hand side is in `I` however `proj max₁ x * proj max₂ y` is not in `I`.
- -/
--- in this case `max₁ < i`, then `xᵢ ∈ I`; for otherwise `i ∈ set₁` then `i ≤ max₁`.
--- in this case `max₂ < j`, then `yⱼ ∈ I`; for otherwise `j ∈ set₂`, then `j ≤ max₂`.
theorem Ideal.IsHomogeneous.isPrime_iff {I : Ideal A} (h : I.Homogeneous 𝒜) :
I.IsPrime ↔
I ≠ ⊤ ∧
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -62,97 +62,27 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
intro x y hxy
by_contra rid
obtain ⟨rid₁, rid₂⟩ := not_or_distrib.mp rid
- classical
- /-
- The idea of the proof is the following :
- since `x * y ∈ I` and `I` homogeneous, then `proj i (x * y) ∈ I` for any `i : ι`.
- Then consider two sets `{i ∈ x.support | xᵢ ∉ I}` and `{j ∈ y.support | yⱼ ∉ J}`;
- let `max₁, max₂` be the maximum of the two sets, then `proj (max₁ + max₂) (x * y) ∈ I`.
- Then, `proj max₁ x ∉ I` and `proj max₂ j ∉ I`
- but `proj i x ∈ I` for all `max₁ < i` and `proj j y ∈ I` for all `max₂ < j`.
- ` proj (max₁ + max₂) (x * y)`
- `= ∑ {(i, j) ∈ supports | i + j = max₁ + max₂}, xᵢ * yⱼ`
- `= proj max₁ x * proj max₂ y`
- ` + ∑ {(i, j) ∈ supports \ {(max₁, max₂)} | i + j = max₁ + max₂}, xᵢ * yⱼ`.
- This is a contradiction, because both `proj (max₁ + max₂) (x * y) ∈ I` and the sum on the
- right hand side is in `I` however `proj max₁ x * proj max₂ y` is not in `I`.
- -/
- set set₁ := (decompose 𝒜 x).support.filterₓ fun i => proj 𝒜 i x ∉ I with set₁_eq
- set set₂ := (decompose 𝒜 y).support.filterₓ fun i => proj 𝒜 i y ∉ I with set₂_eq
- have nonempty :
- ∀ x : A, x ∉ I → ((decompose 𝒜 x).support.filterₓ fun i => proj 𝒜 i x ∉ I).Nonempty :=
- by
- intro x hx
- rw [filter_nonempty_iff]
- contrapose! hx
- simp_rw [proj_apply] at hx
- rw [← sum_support_decompose 𝒜 x]
- exact Ideal.sum_mem _ hx
- set max₁ := set₁.max' (Nonempty x rid₁) with max₁_eq
- set max₂ := set₂.max' (Nonempty y rid₂) with max₂_eq
- have mem_max₁ : max₁ ∈ set₁ := max'_mem set₁ (Nonempty x rid₁)
- have mem_max₂ : max₂ ∈ set₂ := max'_mem set₂ (Nonempty y rid₂)
- replace hxy : proj 𝒜 (max₁ + max₂) (x * y) ∈ I := hI _ hxy
- have mem_I : proj 𝒜 max₁ x * proj 𝒜 max₂ y ∈ I :=
- by
- set antidiag :=
- ((decompose 𝒜 x).support ×ˢ (decompose 𝒜 y).support).filterₓ fun z : ι × ι =>
- z.1 + z.2 = max₁ + max₂ with
- ha
- have mem_antidiag : (max₁, max₂) ∈ antidiag :=
- by
- simp only [add_sum_erase, mem_filter, mem_product]
- exact ⟨⟨mem_of_mem_filter _ mem_max₁, mem_of_mem_filter _ mem_max₂⟩, rfl⟩
- have eq_add_sum :=
- calc
- proj 𝒜 (max₁ + max₂) (x * y) = ∑ ij in antidiag, proj 𝒜 ij.1 x * proj 𝒜 ij.2 y := by
- simp_rw [ha, proj_apply, DirectSum.decompose_mul, DirectSum.coe_mul_apply 𝒜]
- _ =
- proj 𝒜 max₁ x * proj 𝒜 max₂ y +
- ∑ ij in antidiag.erase (max₁, max₂), proj 𝒜 ij.1 x * proj 𝒜 ij.2 y :=
- (add_sum_erase _ _ mem_antidiag).symm
- rw [eq_sub_of_add_eq eq_add_sum.symm]
- refine' Ideal.sub_mem _ hxy (Ideal.sum_mem _ fun z H => _)
- rcases z with ⟨i, j⟩
- simp only [mem_erase, Prod.mk.inj_iff, Ne.def, mem_filter, mem_product] at H
- rcases H with ⟨H₁, ⟨H₂, H₃⟩, H₄⟩
- have max_lt : max₁ < i ∨ max₂ < j :=
- by
- rcases lt_trichotomy max₁ i with (h | rfl | h)
- · exact Or.inl h
- · refine' False.elim (H₁ ⟨rfl, add_left_cancel H₄⟩)
- · apply Or.inr
- have := add_lt_add_right h j
- rw [H₄] at this
- exact lt_of_add_lt_add_left this
- cases max_lt
- · -- in this case `max₁ < i`, then `xᵢ ∈ I`; for otherwise `i ∈ set₁` then `i ≤ max₁`.
- have not_mem : i ∉ set₁ := fun h =>
- lt_irrefl _ ((max'_lt_iff set₁ (Nonempty x rid₁)).mp max_lt i h)
- rw [set₁_eq] at not_mem
- simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
- exact Ideal.mul_mem_right _ I (not_mem H₂)
- · -- in this case `max₂ < j`, then `yⱼ ∈ I`; for otherwise `j ∈ set₂`, then `j ≤ max₂`.
- have not_mem : j ∉ set₂ := fun h =>
- lt_irrefl _ ((max'_lt_iff set₂ (Nonempty y rid₂)).mp max_lt j h)
- rw [set₂_eq] at not_mem
- simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
- exact Ideal.mul_mem_left I _ (not_mem H₃)
- have not_mem_I : proj 𝒜 max₁ x * proj 𝒜 max₂ y ∉ I :=
- by
- have neither_mem : proj 𝒜 max₁ x ∉ I ∧ proj 𝒜 max₂ y ∉ I :=
- by
- rw [mem_filter] at mem_max₁ mem_max₂
- exact ⟨mem_max₁.2, mem_max₂.2⟩
- intro rid
- cases homogeneous_mem_or_mem ⟨max₁, SetLike.coe_mem _⟩ ⟨max₂, SetLike.coe_mem _⟩ mem_I
- · apply neither_mem.1 h
- · apply neither_mem.2 h
- exact not_mem_I mem_I⟩
+ classical⟩
#align ideal.is_homogeneous.is_prime_of_homogeneous_mem_or_mem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem
-/
#print Ideal.IsHomogeneous.isPrime_iff /-
+/-
+ The idea of the proof is the following :
+ since `x * y ∈ I` and `I` homogeneous, then `proj i (x * y) ∈ I` for any `i : ι`.
+ Then consider two sets `{i ∈ x.support | xᵢ ∉ I}` and `{j ∈ y.support | yⱼ ∉ J}`;
+ let `max₁, max₂` be the maximum of the two sets, then `proj (max₁ + max₂) (x * y) ∈ I`.
+ Then, `proj max₁ x ∉ I` and `proj max₂ j ∉ I`
+ but `proj i x ∈ I` for all `max₁ < i` and `proj j y ∈ I` for all `max₂ < j`.
+ ` proj (max₁ + max₂) (x * y)`
+ `= ∑ {(i, j) ∈ supports | i + j = max₁ + max₂}, xᵢ * yⱼ`
+ `= proj max₁ x * proj max₂ y`
+ ` + ∑ {(i, j) ∈ supports \ {(max₁, max₂)} | i + j = max₁ + max₂}, xᵢ * yⱼ`.
+ This is a contradiction, because both `proj (max₁ + max₂) (x * y) ∈ I` and the sum on the
+ right hand side is in `I` however `proj max₁ x * proj max₂ y` is not in `I`.
+ -/
+-- in this case `max₁ < i`, then `xᵢ ∈ I`; for otherwise `i ∈ set₁` then `i ≤ max₁`.
+-- in this case `max₂ < j`, then `yⱼ ∈ I`; for otherwise `j ∈ set₂`, then `j ≤ max₂`.
theorem Ideal.IsHomogeneous.isPrime_iff {I : Ideal A} (h : I.Homogeneous 𝒜) :
I.IsPrime ↔
I ≠ ⊤ ∧
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,7 +3,7 @@ Copyright (c) 2022 Jujian Zhang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jujian Zhang, Eric Wieser
-/
-import Mathbin.RingTheory.GradedAlgebra.HomogeneousIdeal
+import RingTheory.GradedAlgebra.HomogeneousIdeal
#align_import ring_theory.graded_algebra.radical from "leanprover-community/mathlib"@"38df578a6450a8c5142b3727e3ae894c2300cae0"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,14 +2,11 @@
Copyright (c) 2022 Jujian Zhang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jujian Zhang, Eric Wieser
-
-! This file was ported from Lean 3 source module ring_theory.graded_algebra.radical
-! leanprover-community/mathlib commit 38df578a6450a8c5142b3727e3ae894c2300cae0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.RingTheory.GradedAlgebra.HomogeneousIdeal
+#align_import ring_theory.graded_algebra.radical from "leanprover-community/mathlib"@"38df578a6450a8c5142b3727e3ae894c2300cae0"
+
/-!
This file contains a proof that the radical of any homogeneous ideal is a homogeneous ideal
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -54,9 +54,8 @@ variable [LinearOrderedCancelAddCommMonoid ι]
variable [SetLike σ A] [AddSubmonoidClass σ A] {𝒜 : ι → σ} [GradedRing 𝒜]
-include A
-
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem /-
theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI : I.Homogeneous 𝒜)
(I_ne_top : I ≠ ⊤)
(homogeneous_mem_or_mem :
@@ -154,7 +153,9 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
· apply neither_mem.2 h
exact not_mem_I mem_I⟩
#align ideal.is_homogeneous.is_prime_of_homogeneous_mem_or_mem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem
+-/
+#print Ideal.IsHomogeneous.isPrime_iff /-
theorem Ideal.IsHomogeneous.isPrime_iff {I : Ideal A} (h : I.Homogeneous 𝒜) :
I.IsPrime ↔
I ≠ ⊤ ∧
@@ -164,7 +165,9 @@ theorem Ideal.IsHomogeneous.isPrime_iff {I : Ideal A} (h : I.Homogeneous 𝒜) :
fun ⟨I_ne_top, homogeneous_mem_or_mem⟩ =>
h.isPrime_of_homogeneous_mem_or_mem I_ne_top @homogeneous_mem_or_mem⟩
#align ideal.is_homogeneous.is_prime_iff Ideal.IsHomogeneous.isPrime_iff
+-/
+#print Ideal.IsPrime.homogeneousCore /-
theorem Ideal.IsPrime.homogeneousCore {I : Ideal A} (h : I.IsPrime) :
(I.homogeneousCore 𝒜).toIdeal.IsPrime :=
by
@@ -176,7 +179,9 @@ theorem Ideal.IsPrime.homogeneousCore {I : Ideal A} (h : I.IsPrime) :
· exact Ideal.mem_homogeneousCore_of_homogeneous_of_mem hx
· exact Ideal.mem_homogeneousCore_of_homogeneous_of_mem hy
#align ideal.is_prime.homogeneous_core Ideal.IsPrime.homogeneousCore
+-/
+#print Ideal.IsHomogeneous.radical_eq /-
theorem Ideal.IsHomogeneous.radical_eq {I : Ideal A} (hI : I.Homogeneous 𝒜) :
I.radical = sInf {J | J.Homogeneous 𝒜 ∧ I ≤ J ∧ J.IsPrime} :=
by
@@ -189,19 +194,26 @@ theorem Ideal.IsHomogeneous.radical_eq {I : Ideal A} (hI : I.Homogeneous 𝒜) :
refine' ⟨HomogeneousIdeal.isHomogeneous _, _, HJ₂.homogeneous_core⟩
refine' hI.to_ideal_homogeneous_core_eq_self.symm.trans_le (Ideal.homogeneousCore_mono _ HJ₁)
#align ideal.is_homogeneous.radical_eq Ideal.IsHomogeneous.radical_eq
+-/
+#print Ideal.IsHomogeneous.radical /-
theorem Ideal.IsHomogeneous.radical {I : Ideal A} (h : I.Homogeneous 𝒜) : I.radical.Homogeneous 𝒜 :=
by rw [h.radical_eq]; exact Ideal.IsHomogeneous.sInf fun _ => And.left
#align ideal.is_homogeneous.radical Ideal.IsHomogeneous.radical
+-/
+#print HomogeneousIdeal.radical /-
/-- The radical of a homogenous ideal, as another homogenous ideal. -/
def HomogeneousIdeal.radical (I : HomogeneousIdeal 𝒜) : HomogeneousIdeal 𝒜 :=
⟨I.toIdeal.radical, I.Homogeneous.radical⟩
#align homogeneous_ideal.radical HomogeneousIdeal.radical
+-/
+#print HomogeneousIdeal.coe_radical /-
@[simp]
theorem HomogeneousIdeal.coe_radical (I : HomogeneousIdeal 𝒜) :
I.radical.toIdeal = I.toIdeal.radical :=
rfl
#align homogeneous_ideal.coe_radical HomogeneousIdeal.coe_radical
+-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -115,7 +115,6 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
proj 𝒜 max₁ x * proj 𝒜 max₂ y +
∑ ij in antidiag.erase (max₁, max₂), proj 𝒜 ij.1 x * proj 𝒜 ij.2 y :=
(add_sum_erase _ _ mem_antidiag).symm
-
rw [eq_sub_of_add_eq eq_add_sum.symm]
refine' Ideal.sub_mem _ hxy (Ideal.sum_mem _ fun z H => _)
rcases z with ⟨i, j⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -67,93 +67,93 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
by_contra rid
obtain ⟨rid₁, rid₂⟩ := not_or_distrib.mp rid
classical
- /-
- The idea of the proof is the following :
- since `x * y ∈ I` and `I` homogeneous, then `proj i (x * y) ∈ I` for any `i : ι`.
- Then consider two sets `{i ∈ x.support | xᵢ ∉ I}` and `{j ∈ y.support | yⱼ ∉ J}`;
- let `max₁, max₂` be the maximum of the two sets, then `proj (max₁ + max₂) (x * y) ∈ I`.
- Then, `proj max₁ x ∉ I` and `proj max₂ j ∉ I`
- but `proj i x ∈ I` for all `max₁ < i` and `proj j y ∈ I` for all `max₂ < j`.
- ` proj (max₁ + max₂) (x * y)`
- `= ∑ {(i, j) ∈ supports | i + j = max₁ + max₂}, xᵢ * yⱼ`
- `= proj max₁ x * proj max₂ y`
- ` + ∑ {(i, j) ∈ supports \ {(max₁, max₂)} | i + j = max₁ + max₂}, xᵢ * yⱼ`.
- This is a contradiction, because both `proj (max₁ + max₂) (x * y) ∈ I` and the sum on the
- right hand side is in `I` however `proj max₁ x * proj max₂ y` is not in `I`.
- -/
- set set₁ := (decompose 𝒜 x).support.filterₓ fun i => proj 𝒜 i x ∉ I with set₁_eq
- set set₂ := (decompose 𝒜 y).support.filterₓ fun i => proj 𝒜 i y ∉ I with set₂_eq
- have nonempty :
- ∀ x : A, x ∉ I → ((decompose 𝒜 x).support.filterₓ fun i => proj 𝒜 i x ∉ I).Nonempty :=
+ /-
+ The idea of the proof is the following :
+ since `x * y ∈ I` and `I` homogeneous, then `proj i (x * y) ∈ I` for any `i : ι`.
+ Then consider two sets `{i ∈ x.support | xᵢ ∉ I}` and `{j ∈ y.support | yⱼ ∉ J}`;
+ let `max₁, max₂` be the maximum of the two sets, then `proj (max₁ + max₂) (x * y) ∈ I`.
+ Then, `proj max₁ x ∉ I` and `proj max₂ j ∉ I`
+ but `proj i x ∈ I` for all `max₁ < i` and `proj j y ∈ I` for all `max₂ < j`.
+ ` proj (max₁ + max₂) (x * y)`
+ `= ∑ {(i, j) ∈ supports | i + j = max₁ + max₂}, xᵢ * yⱼ`
+ `= proj max₁ x * proj max₂ y`
+ ` + ∑ {(i, j) ∈ supports \ {(max₁, max₂)} | i + j = max₁ + max₂}, xᵢ * yⱼ`.
+ This is a contradiction, because both `proj (max₁ + max₂) (x * y) ∈ I` and the sum on the
+ right hand side is in `I` however `proj max₁ x * proj max₂ y` is not in `I`.
+ -/
+ set set₁ := (decompose 𝒜 x).support.filterₓ fun i => proj 𝒜 i x ∉ I with set₁_eq
+ set set₂ := (decompose 𝒜 y).support.filterₓ fun i => proj 𝒜 i y ∉ I with set₂_eq
+ have nonempty :
+ ∀ x : A, x ∉ I → ((decompose 𝒜 x).support.filterₓ fun i => proj 𝒜 i x ∉ I).Nonempty :=
+ by
+ intro x hx
+ rw [filter_nonempty_iff]
+ contrapose! hx
+ simp_rw [proj_apply] at hx
+ rw [← sum_support_decompose 𝒜 x]
+ exact Ideal.sum_mem _ hx
+ set max₁ := set₁.max' (Nonempty x rid₁) with max₁_eq
+ set max₂ := set₂.max' (Nonempty y rid₂) with max₂_eq
+ have mem_max₁ : max₁ ∈ set₁ := max'_mem set₁ (Nonempty x rid₁)
+ have mem_max₂ : max₂ ∈ set₂ := max'_mem set₂ (Nonempty y rid₂)
+ replace hxy : proj 𝒜 (max₁ + max₂) (x * y) ∈ I := hI _ hxy
+ have mem_I : proj 𝒜 max₁ x * proj 𝒜 max₂ y ∈ I :=
+ by
+ set antidiag :=
+ ((decompose 𝒜 x).support ×ˢ (decompose 𝒜 y).support).filterₓ fun z : ι × ι =>
+ z.1 + z.2 = max₁ + max₂ with
+ ha
+ have mem_antidiag : (max₁, max₂) ∈ antidiag :=
by
- intro x hx
- rw [filter_nonempty_iff]
- contrapose! hx
- simp_rw [proj_apply] at hx
- rw [← sum_support_decompose 𝒜 x]
- exact Ideal.sum_mem _ hx
- set max₁ := set₁.max' (Nonempty x rid₁) with max₁_eq
- set max₂ := set₂.max' (Nonempty y rid₂) with max₂_eq
- have mem_max₁ : max₁ ∈ set₁ := max'_mem set₁ (Nonempty x rid₁)
- have mem_max₂ : max₂ ∈ set₂ := max'_mem set₂ (Nonempty y rid₂)
- replace hxy : proj 𝒜 (max₁ + max₂) (x * y) ∈ I := hI _ hxy
- have mem_I : proj 𝒜 max₁ x * proj 𝒜 max₂ y ∈ I :=
+ simp only [add_sum_erase, mem_filter, mem_product]
+ exact ⟨⟨mem_of_mem_filter _ mem_max₁, mem_of_mem_filter _ mem_max₂⟩, rfl⟩
+ have eq_add_sum :=
+ calc
+ proj 𝒜 (max₁ + max₂) (x * y) = ∑ ij in antidiag, proj 𝒜 ij.1 x * proj 𝒜 ij.2 y := by
+ simp_rw [ha, proj_apply, DirectSum.decompose_mul, DirectSum.coe_mul_apply 𝒜]
+ _ =
+ proj 𝒜 max₁ x * proj 𝒜 max₂ y +
+ ∑ ij in antidiag.erase (max₁, max₂), proj 𝒜 ij.1 x * proj 𝒜 ij.2 y :=
+ (add_sum_erase _ _ mem_antidiag).symm
+
+ rw [eq_sub_of_add_eq eq_add_sum.symm]
+ refine' Ideal.sub_mem _ hxy (Ideal.sum_mem _ fun z H => _)
+ rcases z with ⟨i, j⟩
+ simp only [mem_erase, Prod.mk.inj_iff, Ne.def, mem_filter, mem_product] at H
+ rcases H with ⟨H₁, ⟨H₂, H₃⟩, H₄⟩
+ have max_lt : max₁ < i ∨ max₂ < j :=
by
- set antidiag :=
- ((decompose 𝒜 x).support ×ˢ (decompose 𝒜 y).support).filterₓ fun z : ι × ι =>
- z.1 + z.2 = max₁ + max₂ with
- ha
- have mem_antidiag : (max₁, max₂) ∈ antidiag :=
- by
- simp only [add_sum_erase, mem_filter, mem_product]
- exact ⟨⟨mem_of_mem_filter _ mem_max₁, mem_of_mem_filter _ mem_max₂⟩, rfl⟩
- have eq_add_sum :=
- calc
- proj 𝒜 (max₁ + max₂) (x * y) = ∑ ij in antidiag, proj 𝒜 ij.1 x * proj 𝒜 ij.2 y := by
- simp_rw [ha, proj_apply, DirectSum.decompose_mul, DirectSum.coe_mul_apply 𝒜]
- _ =
- proj 𝒜 max₁ x * proj 𝒜 max₂ y +
- ∑ ij in antidiag.erase (max₁, max₂), proj 𝒜 ij.1 x * proj 𝒜 ij.2 y :=
- (add_sum_erase _ _ mem_antidiag).symm
-
- rw [eq_sub_of_add_eq eq_add_sum.symm]
- refine' Ideal.sub_mem _ hxy (Ideal.sum_mem _ fun z H => _)
- rcases z with ⟨i, j⟩
- simp only [mem_erase, Prod.mk.inj_iff, Ne.def, mem_filter, mem_product] at H
- rcases H with ⟨H₁, ⟨H₂, H₃⟩, H₄⟩
- have max_lt : max₁ < i ∨ max₂ < j :=
- by
- rcases lt_trichotomy max₁ i with (h | rfl | h)
- · exact Or.inl h
- · refine' False.elim (H₁ ⟨rfl, add_left_cancel H₄⟩)
- · apply Or.inr
- have := add_lt_add_right h j
- rw [H₄] at this
- exact lt_of_add_lt_add_left this
- cases max_lt
- · -- in this case `max₁ < i`, then `xᵢ ∈ I`; for otherwise `i ∈ set₁` then `i ≤ max₁`.
- have not_mem : i ∉ set₁ := fun h =>
- lt_irrefl _ ((max'_lt_iff set₁ (Nonempty x rid₁)).mp max_lt i h)
- rw [set₁_eq] at not_mem
- simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
- exact Ideal.mul_mem_right _ I (not_mem H₂)
- · -- in this case `max₂ < j`, then `yⱼ ∈ I`; for otherwise `j ∈ set₂`, then `j ≤ max₂`.
- have not_mem : j ∉ set₂ := fun h =>
- lt_irrefl _ ((max'_lt_iff set₂ (Nonempty y rid₂)).mp max_lt j h)
- rw [set₂_eq] at not_mem
- simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
- exact Ideal.mul_mem_left I _ (not_mem H₃)
- have not_mem_I : proj 𝒜 max₁ x * proj 𝒜 max₂ y ∉ I :=
+ rcases lt_trichotomy max₁ i with (h | rfl | h)
+ · exact Or.inl h
+ · refine' False.elim (H₁ ⟨rfl, add_left_cancel H₄⟩)
+ · apply Or.inr
+ have := add_lt_add_right h j
+ rw [H₄] at this
+ exact lt_of_add_lt_add_left this
+ cases max_lt
+ · -- in this case `max₁ < i`, then `xᵢ ∈ I`; for otherwise `i ∈ set₁` then `i ≤ max₁`.
+ have not_mem : i ∉ set₁ := fun h =>
+ lt_irrefl _ ((max'_lt_iff set₁ (Nonempty x rid₁)).mp max_lt i h)
+ rw [set₁_eq] at not_mem
+ simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
+ exact Ideal.mul_mem_right _ I (not_mem H₂)
+ · -- in this case `max₂ < j`, then `yⱼ ∈ I`; for otherwise `j ∈ set₂`, then `j ≤ max₂`.
+ have not_mem : j ∉ set₂ := fun h =>
+ lt_irrefl _ ((max'_lt_iff set₂ (Nonempty y rid₂)).mp max_lt j h)
+ rw [set₂_eq] at not_mem
+ simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
+ exact Ideal.mul_mem_left I _ (not_mem H₃)
+ have not_mem_I : proj 𝒜 max₁ x * proj 𝒜 max₂ y ∉ I :=
+ by
+ have neither_mem : proj 𝒜 max₁ x ∉ I ∧ proj 𝒜 max₂ y ∉ I :=
by
- have neither_mem : proj 𝒜 max₁ x ∉ I ∧ proj 𝒜 max₂ y ∉ I :=
- by
- rw [mem_filter] at mem_max₁ mem_max₂
- exact ⟨mem_max₁.2, mem_max₂.2⟩
- intro rid
- cases homogeneous_mem_or_mem ⟨max₁, SetLike.coe_mem _⟩ ⟨max₂, SetLike.coe_mem _⟩ mem_I
- · apply neither_mem.1 h
- · apply neither_mem.2 h
- exact not_mem_I mem_I⟩
+ rw [mem_filter] at mem_max₁ mem_max₂
+ exact ⟨mem_max₁.2, mem_max₂.2⟩
+ intro rid
+ cases homogeneous_mem_or_mem ⟨max₁, SetLike.coe_mem _⟩ ⟨max₂, SetLike.coe_mem _⟩ mem_I
+ · apply neither_mem.1 h
+ · apply neither_mem.2 h
+ exact not_mem_I mem_I⟩
#align ideal.is_homogeneous.is_prime_of_homogeneous_mem_or_mem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem
theorem Ideal.IsHomogeneous.isPrime_iff {I : Ideal A} (h : I.Homogeneous 𝒜) :
@@ -179,7 +179,7 @@ theorem Ideal.IsPrime.homogeneousCore {I : Ideal A} (h : I.IsPrime) :
#align ideal.is_prime.homogeneous_core Ideal.IsPrime.homogeneousCore
theorem Ideal.IsHomogeneous.radical_eq {I : Ideal A} (hI : I.Homogeneous 𝒜) :
- I.radical = sInf { J | J.Homogeneous 𝒜 ∧ I ≤ J ∧ J.IsPrime } :=
+ I.radical = sInf {J | J.Homogeneous 𝒜 ∧ I ≤ J ∧ J.IsPrime} :=
by
rw [Ideal.radical_eq_sInf]
apply le_antisymm
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -89,7 +89,7 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
intro x hx
rw [filter_nonempty_iff]
contrapose! hx
- simp_rw [proj_apply] at hx
+ simp_rw [proj_apply] at hx
rw [← sum_support_decompose 𝒜 x]
exact Ideal.sum_mem _ hx
set max₁ := set₁.max' (Nonempty x rid₁) with max₁_eq
@@ -119,7 +119,7 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
rw [eq_sub_of_add_eq eq_add_sum.symm]
refine' Ideal.sub_mem _ hxy (Ideal.sum_mem _ fun z H => _)
rcases z with ⟨i, j⟩
- simp only [mem_erase, Prod.mk.inj_iff, Ne.def, mem_filter, mem_product] at H
+ simp only [mem_erase, Prod.mk.inj_iff, Ne.def, mem_filter, mem_product] at H
rcases H with ⟨H₁, ⟨H₂, H₃⟩, H₄⟩
have max_lt : max₁ < i ∨ max₂ < j :=
by
@@ -128,26 +128,26 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
· refine' False.elim (H₁ ⟨rfl, add_left_cancel H₄⟩)
· apply Or.inr
have := add_lt_add_right h j
- rw [H₄] at this
+ rw [H₄] at this
exact lt_of_add_lt_add_left this
cases max_lt
· -- in this case `max₁ < i`, then `xᵢ ∈ I`; for otherwise `i ∈ set₁` then `i ≤ max₁`.
have not_mem : i ∉ set₁ := fun h =>
lt_irrefl _ ((max'_lt_iff set₁ (Nonempty x rid₁)).mp max_lt i h)
- rw [set₁_eq] at not_mem
- simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
+ rw [set₁_eq] at not_mem
+ simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
exact Ideal.mul_mem_right _ I (not_mem H₂)
· -- in this case `max₂ < j`, then `yⱼ ∈ I`; for otherwise `j ∈ set₂`, then `j ≤ max₂`.
have not_mem : j ∉ set₂ := fun h =>
lt_irrefl _ ((max'_lt_iff set₂ (Nonempty y rid₂)).mp max_lt j h)
- rw [set₂_eq] at not_mem
- simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
+ rw [set₂_eq] at not_mem
+ simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
exact Ideal.mul_mem_left I _ (not_mem H₃)
have not_mem_I : proj 𝒜 max₁ x * proj 𝒜 max₂ y ∉ I :=
by
have neither_mem : proj 𝒜 max₁ x ∉ I ∧ proj 𝒜 max₂ y ∉ I :=
by
- rw [mem_filter] at mem_max₁ mem_max₂
+ rw [mem_filter] at mem_max₁ mem_max₂
exact ⟨mem_max₁.2, mem_max₂.2⟩
intro rid
cases homogeneous_mem_or_mem ⟨max₁, SetLike.coe_mem _⟩ ⟨max₂, SetLike.coe_mem _⟩ mem_I
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -44,7 +44,7 @@ homogeneous, radical
open GradedRing DirectSum SetLike Finset
-open BigOperators
+open scoped BigOperators
variable {ι σ A : Type _}
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -56,9 +56,6 @@ variable [SetLike σ A] [AddSubmonoidClass σ A] {𝒜 : ι → σ} [GradedRing
include A
-/- warning: ideal.is_homogeneous.is_prime_of_homogeneous_mem_or_mem -> Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align ideal.is_homogeneous.is_prime_of_homogeneous_mem_or_mem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_memₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI : I.Homogeneous 𝒜)
(I_ne_top : I ≠ ⊤)
@@ -159,9 +156,6 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
exact not_mem_I mem_I⟩
#align ideal.is_homogeneous.is_prime_of_homogeneous_mem_or_mem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem
-/- warning: ideal.is_homogeneous.is_prime_iff -> Ideal.IsHomogeneous.isPrime_iff is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align ideal.is_homogeneous.is_prime_iff Ideal.IsHomogeneous.isPrime_iffₓ'. -/
theorem Ideal.IsHomogeneous.isPrime_iff {I : Ideal A} (h : I.Homogeneous 𝒜) :
I.IsPrime ↔
I ≠ ⊤ ∧
@@ -172,12 +166,6 @@ theorem Ideal.IsHomogeneous.isPrime_iff {I : Ideal A} (h : I.Homogeneous 𝒜) :
h.isPrime_of_homogeneous_mem_or_mem I_ne_top @homogeneous_mem_or_mem⟩
#align ideal.is_homogeneous.is_prime_iff Ideal.IsHomogeneous.isPrime_iff
-/- warning: ideal.is_prime.homogeneous_core -> Ideal.IsPrime.homogeneousCore is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {σ : Type.{u2}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u1} ι] [_inst_3 : SetLike.{u2, u3} σ A] [_inst_4 : AddSubmonoidClass.{u2, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (AddCommGroupWithOne.toAddGroupWithOne.{u3} A (Ring.toAddCommGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u1, u3, u2} ι A σ (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))}, (Ideal.IsPrime.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) I) -> (Ideal.IsPrime.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (HomogeneousIdeal.toIdeal.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 (Ideal.homogeneousCore.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 I)))
-but is expected to have type
- forall {ι : Type.{u2}} {σ : Type.{u1}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u2} ι] [_inst_3 : SetLike.{u1, u3} σ A] [_inst_4 : AddSubmonoidClass.{u1, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (Ring.toAddGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u2, u3, u1} ι A σ (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))}, (Ideal.IsPrime.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) I) -> (Ideal.IsPrime.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (HomogeneousIdeal.toIdeal.{u2, u1, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 (Ideal.homogeneousCore.{u2, u1, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 I)))
-Case conversion may be inaccurate. Consider using '#align ideal.is_prime.homogeneous_core Ideal.IsPrime.homogeneousCoreₓ'. -/
theorem Ideal.IsPrime.homogeneousCore {I : Ideal A} (h : I.IsPrime) :
(I.homogeneousCore 𝒜).toIdeal.IsPrime :=
by
@@ -190,9 +178,6 @@ theorem Ideal.IsPrime.homogeneousCore {I : Ideal A} (h : I.IsPrime) :
· exact Ideal.mem_homogeneousCore_of_homogeneous_of_mem hy
#align ideal.is_prime.homogeneous_core Ideal.IsPrime.homogeneousCore
-/- warning: ideal.is_homogeneous.radical_eq -> Ideal.IsHomogeneous.radical_eq is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align ideal.is_homogeneous.radical_eq Ideal.IsHomogeneous.radical_eqₓ'. -/
theorem Ideal.IsHomogeneous.radical_eq {I : Ideal A} (hI : I.Homogeneous 𝒜) :
I.radical = sInf { J | J.Homogeneous 𝒜 ∧ I ≤ J ∧ J.IsPrime } :=
by
@@ -206,33 +191,15 @@ theorem Ideal.IsHomogeneous.radical_eq {I : Ideal A} (hI : I.Homogeneous 𝒜) :
refine' hI.to_ideal_homogeneous_core_eq_self.symm.trans_le (Ideal.homogeneousCore_mono _ HJ₁)
#align ideal.is_homogeneous.radical_eq Ideal.IsHomogeneous.radical_eq
-/- warning: ideal.is_homogeneous.radical -> Ideal.IsHomogeneous.radical is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {σ : Type.{u2}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u1} ι] [_inst_3 : SetLike.{u2, u3} σ A] [_inst_4 : AddSubmonoidClass.{u2, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (AddCommGroupWithOne.toAddGroupWithOne.{u3} A (Ring.toAddCommGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u1, u3, u2} ι A σ (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 I) -> (Ideal.IsHomogeneous.{u1, u2, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 (Ideal.radical.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1) I))
-but is expected to have type
- forall {ι : Type.{u2}} {σ : Type.{u1}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u2} ι] [_inst_3 : SetLike.{u1, u3} σ A] [_inst_4 : AddSubmonoidClass.{u1, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (Ring.toAddGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u2, u3, u1} ι A σ (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u2, u1, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 I) -> (Ideal.IsHomogeneous.{u2, u1, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 (Ideal.radical.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1) I))
-Case conversion may be inaccurate. Consider using '#align ideal.is_homogeneous.radical Ideal.IsHomogeneous.radicalₓ'. -/
theorem Ideal.IsHomogeneous.radical {I : Ideal A} (h : I.Homogeneous 𝒜) : I.radical.Homogeneous 𝒜 :=
by rw [h.radical_eq]; exact Ideal.IsHomogeneous.sInf fun _ => And.left
#align ideal.is_homogeneous.radical Ideal.IsHomogeneous.radical
-/- warning: homogeneous_ideal.radical -> HomogeneousIdeal.radical is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {σ : Type.{u2}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u1} ι] [_inst_3 : SetLike.{u2, u3} σ A] [_inst_4 : AddSubmonoidClass.{u2, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (AddCommGroupWithOne.toAddGroupWithOne.{u3} A (Ring.toAddCommGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u1, u3, u2} ι A σ (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜], (HomogeneousIdeal.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5) -> (HomogeneousIdeal.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5)
-but is expected to have type
- forall {ι : Type.{u1}} {σ : Type.{u2}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u1} ι] [_inst_3 : SetLike.{u2, u3} σ A] [_inst_4 : AddSubmonoidClass.{u2, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (Ring.toAddGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u1, u3, u2} ι A σ (fun (a : ι) (b : ι) => instDecidableEq.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜], (HomogeneousIdeal.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5) -> (HomogeneousIdeal.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5)
-Case conversion may be inaccurate. Consider using '#align homogeneous_ideal.radical HomogeneousIdeal.radicalₓ'. -/
/-- The radical of a homogenous ideal, as another homogenous ideal. -/
def HomogeneousIdeal.radical (I : HomogeneousIdeal 𝒜) : HomogeneousIdeal 𝒜 :=
⟨I.toIdeal.radical, I.Homogeneous.radical⟩
#align homogeneous_ideal.radical HomogeneousIdeal.radical
-/- warning: homogeneous_ideal.coe_radical -> HomogeneousIdeal.coe_radical is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {σ : Type.{u2}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u1} ι] [_inst_3 : SetLike.{u2, u3} σ A] [_inst_4 : AddSubmonoidClass.{u2, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (AddCommGroupWithOne.toAddGroupWithOne.{u3} A (Ring.toAddCommGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u1, u3, u2} ι A σ (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] (I : HomogeneousIdeal.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5), Eq.{succ u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (HomogeneousIdeal.toIdeal.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 (HomogeneousIdeal.radical.{u1, u2, u3} ι σ A _inst_1 _inst_2 _inst_3 _inst_4 𝒜 _inst_5 I)) (Ideal.radical.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1) (HomogeneousIdeal.toIdeal.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 I))
-but is expected to have type
- forall {ι : Type.{u3}} {σ : Type.{u2}} {A : Type.{u1}} [_inst_1 : CommRing.{u1} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u3} ι] [_inst_3 : SetLike.{u2, u1} σ A] [_inst_4 : AddSubmonoidClass.{u2, u1} σ A (AddMonoid.toAddZeroClass.{u1} A (AddMonoidWithOne.toAddMonoid.{u1} A (AddGroupWithOne.toAddMonoidWithOne.{u1} A (Ring.toAddGroupWithOne.{u1} A (CommRing.toRing.{u1} A _inst_1))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u3, u1, u2} ι A σ (fun (a : ι) (b : ι) => instDecidableEq.{u3} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u3} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u3} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u3} ι (AddCancelMonoid.toAddRightCancelMonoid.{u3} ι (AddCancelCommMonoid.toAddCancelMonoid.{u3} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u3} ι _inst_2))))) (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_1)) _inst_3 _inst_4 𝒜] (I : HomogeneousIdeal.{u3, u2, u1} ι σ A (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u3} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u3} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u3} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u3} ι (AddCancelMonoid.toAddRightCancelMonoid.{u3} ι (AddCancelCommMonoid.toAddCancelMonoid.{u3} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u3} ι _inst_2))))) _inst_5), Eq.{succ u1} (Ideal.{u1} A (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_1))) (HomogeneousIdeal.toIdeal.{u3, u2, u1} ι σ A (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u3} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u3} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u3} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u3} ι (AddCancelMonoid.toAddRightCancelMonoid.{u3} ι (AddCancelCommMonoid.toAddCancelMonoid.{u3} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u3} ι _inst_2))))) _inst_5 (HomogeneousIdeal.radical.{u3, u2, u1} ι σ A _inst_1 _inst_2 _inst_3 _inst_4 𝒜 _inst_5 I)) (Ideal.radical.{u1} A (CommRing.toCommSemiring.{u1} A _inst_1) (HomogeneousIdeal.toIdeal.{u3, u2, u1} ι σ A (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u3} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u3} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u3} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u3} ι (AddCancelMonoid.toAddRightCancelMonoid.{u3} ι (AddCancelCommMonoid.toAddCancelMonoid.{u3} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u3} ι _inst_2))))) _inst_5 I))
-Case conversion may be inaccurate. Consider using '#align homogeneous_ideal.coe_radical HomogeneousIdeal.coe_radicalₓ'. -/
@[simp]
theorem HomogeneousIdeal.coe_radical (I : HomogeneousIdeal 𝒜) :
I.radical.toIdeal = I.toIdeal.radical :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -213,9 +213,7 @@ but is expected to have type
forall {ι : Type.{u2}} {σ : Type.{u1}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u2} ι] [_inst_3 : SetLike.{u1, u3} σ A] [_inst_4 : AddSubmonoidClass.{u1, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (Ring.toAddGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u2, u3, u1} ι A σ (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u2, u1, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 I) -> (Ideal.IsHomogeneous.{u2, u1, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 (Ideal.radical.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1) I))
Case conversion may be inaccurate. Consider using '#align ideal.is_homogeneous.radical Ideal.IsHomogeneous.radicalₓ'. -/
theorem Ideal.IsHomogeneous.radical {I : Ideal A} (h : I.Homogeneous 𝒜) : I.radical.Homogeneous 𝒜 :=
- by
- rw [h.radical_eq]
- exact Ideal.IsHomogeneous.sInf fun _ => And.left
+ by rw [h.radical_eq]; exact Ideal.IsHomogeneous.sInf fun _ => And.left
#align ideal.is_homogeneous.radical Ideal.IsHomogeneous.radical
/- warning: homogeneous_ideal.radical -> HomogeneousIdeal.radical is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -57,10 +57,7 @@ variable [SetLike σ A] [AddSubmonoidClass σ A] {𝒜 : ι → σ} [GradedRing
include A
/- warning: ideal.is_homogeneous.is_prime_of_homogeneous_mem_or_mem -> Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {σ : Type.{u2}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u1} ι] [_inst_3 : SetLike.{u2, u3} σ A] [_inst_4 : AddSubmonoidClass.{u2, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (AddCommGroupWithOne.toAddGroupWithOne.{u3} A (Ring.toAddCommGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u1, u3, u2} ι A σ (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 I) -> (Ne.{succ u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) I (Top.top.{u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (Submodule.hasTop.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) -> (forall {x : A} {y : A}, (SetLike.Homogeneous.{u1, u3, u2} ι A σ _inst_3 𝒜 x) -> (SetLike.Homogeneous.{u1, u3, u2} ι A σ _inst_3 𝒜 y) -> (Membership.Mem.{u3, u3} A (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (SetLike.hasMem.{u3, u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (HMul.hMul.{u3, u3, u3} A A A (instHMul.{u3} A (Distrib.toHasMul.{u3} A (Ring.toDistrib.{u3} A (CommRing.toRing.{u3} A _inst_1)))) x y) I) -> (Or (Membership.Mem.{u3, u3} A (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (SetLike.hasMem.{u3, u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) x I) (Membership.Mem.{u3, u3} A (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (SetLike.hasMem.{u3, u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) y I))) -> (Ideal.IsPrime.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) I)
-but is expected to have type
- forall {ι : Type.{u2}} {σ : Type.{u1}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u2} ι] [_inst_3 : SetLike.{u1, u3} σ A] [_inst_4 : AddSubmonoidClass.{u1, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (Ring.toAddGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u2, u3, u1} ι A σ (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u2, u1, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 I) -> (Ne.{succ u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) I (Top.top.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Submodule.instTopSubmodule.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)))))) -> (forall {x : A} {y : A}, (SetLike.Homogeneous.{u2, u3, u1} ι A σ _inst_3 𝒜 x) -> (SetLike.Homogeneous.{u2, u3, u1} ι A σ _inst_3 𝒜 y) -> (Membership.mem.{u3, u3} A (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (SetLike.instMembership.{u3, u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (HMul.hMul.{u3, u3, u3} A A A (instHMul.{u3} A (NonUnitalNonAssocRing.toMul.{u3} A (NonAssocRing.toNonUnitalNonAssocRing.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_1))))) x y) I) -> (Or (Membership.mem.{u3, u3} A (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (SetLike.instMembership.{u3, u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) x I) (Membership.mem.{u3, u3} A (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (SetLike.instMembership.{u3, u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) y I))) -> (Ideal.IsPrime.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) I)
+<too large>
Case conversion may be inaccurate. Consider using '#align ideal.is_homogeneous.is_prime_of_homogeneous_mem_or_mem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_memₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI : I.Homogeneous 𝒜)
@@ -163,10 +160,7 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
#align ideal.is_homogeneous.is_prime_of_homogeneous_mem_or_mem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem
/- warning: ideal.is_homogeneous.is_prime_iff -> Ideal.IsHomogeneous.isPrime_iff is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {σ : Type.{u2}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u1} ι] [_inst_3 : SetLike.{u2, u3} σ A] [_inst_4 : AddSubmonoidClass.{u2, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (AddCommGroupWithOne.toAddGroupWithOne.{u3} A (Ring.toAddCommGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u1, u3, u2} ι A σ (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 I) -> (Iff (Ideal.IsPrime.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) I) (And (Ne.{succ u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) I (Top.top.{u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (Submodule.hasTop.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) (forall {x : A} {y : A}, (SetLike.Homogeneous.{u1, u3, u2} ι A σ _inst_3 𝒜 x) -> (SetLike.Homogeneous.{u1, u3, u2} ι A σ _inst_3 𝒜 y) -> (Membership.Mem.{u3, u3} A (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (SetLike.hasMem.{u3, u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (HMul.hMul.{u3, u3, u3} A A A (instHMul.{u3} A (Distrib.toHasMul.{u3} A (Ring.toDistrib.{u3} A (CommRing.toRing.{u3} A _inst_1)))) x y) I) -> (Or (Membership.Mem.{u3, u3} A (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (SetLike.hasMem.{u3, u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) x I) (Membership.Mem.{u3, u3} A (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (SetLike.hasMem.{u3, u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) y I)))))
-but is expected to have type
- forall {ι : Type.{u2}} {σ : Type.{u1}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u2} ι] [_inst_3 : SetLike.{u1, u3} σ A] [_inst_4 : AddSubmonoidClass.{u1, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (Ring.toAddGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u2, u3, u1} ι A σ (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u2, u1, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 I) -> (Iff (Ideal.IsPrime.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) I) (And (Ne.{succ u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) I (Top.top.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Submodule.instTopSubmodule.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)))))) (forall {x : A} {y : A}, (SetLike.Homogeneous.{u2, u3, u1} ι A σ _inst_3 𝒜 x) -> (SetLike.Homogeneous.{u2, u3, u1} ι A σ _inst_3 𝒜 y) -> (Membership.mem.{u3, u3} A (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (SetLike.instMembership.{u3, u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (HMul.hMul.{u3, u3, u3} A A A (instHMul.{u3} A (NonUnitalNonAssocRing.toMul.{u3} A (NonAssocRing.toNonUnitalNonAssocRing.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_1))))) x y) I) -> (Or (Membership.mem.{u3, u3} A (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (SetLike.instMembership.{u3, u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) x I) (Membership.mem.{u3, u3} A (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (SetLike.instMembership.{u3, u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) y I)))))
+<too large>
Case conversion may be inaccurate. Consider using '#align ideal.is_homogeneous.is_prime_iff Ideal.IsHomogeneous.isPrime_iffₓ'. -/
theorem Ideal.IsHomogeneous.isPrime_iff {I : Ideal A} (h : I.Homogeneous 𝒜) :
I.IsPrime ↔
@@ -197,10 +191,7 @@ theorem Ideal.IsPrime.homogeneousCore {I : Ideal A} (h : I.IsPrime) :
#align ideal.is_prime.homogeneous_core Ideal.IsPrime.homogeneousCore
/- warning: ideal.is_homogeneous.radical_eq -> Ideal.IsHomogeneous.radical_eq is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {σ : Type.{u2}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u1} ι] [_inst_3 : SetLike.{u2, u3} σ A] [_inst_4 : AddSubmonoidClass.{u2, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (AddCommGroupWithOne.toAddGroupWithOne.{u3} A (Ring.toAddCommGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u1, u3, u2} ι A σ (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 I) -> (Eq.{succ u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Ideal.radical.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1) I) (InfSet.sInf.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Submodule.hasInf.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)))) (setOf.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (fun (J : Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) => And (Ideal.IsHomogeneous.{u1, u2, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 J) (And (LE.le.{u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (Preorder.toHasLe.{u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (PartialOrder.toPreorder.{u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (SetLike.partialOrder.{u3, u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))))) I J) (Ideal.IsPrime.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) J))))))
-but is expected to have type
- forall {ι : Type.{u2}} {σ : Type.{u1}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u2} ι] [_inst_3 : SetLike.{u1, u3} σ A] [_inst_4 : AddSubmonoidClass.{u1, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (Ring.toAddGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u2, u3, u1} ι A σ (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u2, u1, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 I) -> (Eq.{succ u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Ideal.radical.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1) I) (InfSet.sInf.{u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (Submodule.instInfSetSubmodule.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)))) (setOf.{u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (fun (J : Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) => And (Ideal.IsHomogeneous.{u2, u1, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 J) (And (LE.le.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Preorder.toLE.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (PartialOrder.toPreorder.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Submodule.completeLattice.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)))))))) I J) (Ideal.IsPrime.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) J))))))
+<too large>
Case conversion may be inaccurate. Consider using '#align ideal.is_homogeneous.radical_eq Ideal.IsHomogeneous.radical_eqₓ'. -/
theorem Ideal.IsHomogeneous.radical_eq {I : Ideal A} (hI : I.Homogeneous 𝒜) :
I.radical = sInf { J | J.Homogeneous 𝒜 ∧ I ≤ J ∧ J.IsPrime } :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/8d33f09cd7089ecf074b4791907588245aec5d1b
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jujian Zhang, Eric Wieser
! This file was ported from Lean 3 source module ring_theory.graded_algebra.radical
-! leanprover-community/mathlib commit f1944b30c97c5eb626e498307dec8b022a05bd0a
+! leanprover-community/mathlib commit 38df578a6450a8c5142b3727e3ae894c2300cae0
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -16,6 +16,9 @@ This file contains a proof that the radical of any homogeneous ideal is a homoge
## Main statements
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
* `ideal.is_homogeneous.is_prime_iff`: for any `I : ideal A`, if `I` is homogeneous, then
`I` is prime if and only if `I` is homogeneously prime, i.e. `I ≠ ⊤` and if `x, y` are
homogeneous elements such that `x * y ∈ I`, then at least one of `x,y` is in `I`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/75e7fca56381d056096ce5d05e938f63a6567828
@@ -53,6 +53,12 @@ variable [SetLike σ A] [AddSubmonoidClass σ A] {𝒜 : ι → σ} [GradedRing
include A
+/- warning: ideal.is_homogeneous.is_prime_of_homogeneous_mem_or_mem -> Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {σ : Type.{u2}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u1} ι] [_inst_3 : SetLike.{u2, u3} σ A] [_inst_4 : AddSubmonoidClass.{u2, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (AddCommGroupWithOne.toAddGroupWithOne.{u3} A (Ring.toAddCommGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u1, u3, u2} ι A σ (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 I) -> (Ne.{succ u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) I (Top.top.{u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (Submodule.hasTop.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) -> (forall {x : A} {y : A}, (SetLike.Homogeneous.{u1, u3, u2} ι A σ _inst_3 𝒜 x) -> (SetLike.Homogeneous.{u1, u3, u2} ι A σ _inst_3 𝒜 y) -> (Membership.Mem.{u3, u3} A (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (SetLike.hasMem.{u3, u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (HMul.hMul.{u3, u3, u3} A A A (instHMul.{u3} A (Distrib.toHasMul.{u3} A (Ring.toDistrib.{u3} A (CommRing.toRing.{u3} A _inst_1)))) x y) I) -> (Or (Membership.Mem.{u3, u3} A (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (SetLike.hasMem.{u3, u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) x I) (Membership.Mem.{u3, u3} A (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (SetLike.hasMem.{u3, u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) y I))) -> (Ideal.IsPrime.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) I)
+but is expected to have type
+ forall {ι : Type.{u2}} {σ : Type.{u1}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u2} ι] [_inst_3 : SetLike.{u1, u3} σ A] [_inst_4 : AddSubmonoidClass.{u1, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (Ring.toAddGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u2, u3, u1} ι A σ (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u2, u1, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 I) -> (Ne.{succ u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) I (Top.top.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Submodule.instTopSubmodule.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)))))) -> (forall {x : A} {y : A}, (SetLike.Homogeneous.{u2, u3, u1} ι A σ _inst_3 𝒜 x) -> (SetLike.Homogeneous.{u2, u3, u1} ι A σ _inst_3 𝒜 y) -> (Membership.mem.{u3, u3} A (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (SetLike.instMembership.{u3, u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (HMul.hMul.{u3, u3, u3} A A A (instHMul.{u3} A (NonUnitalNonAssocRing.toMul.{u3} A (NonAssocRing.toNonUnitalNonAssocRing.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_1))))) x y) I) -> (Or (Membership.mem.{u3, u3} A (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (SetLike.instMembership.{u3, u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) x I) (Membership.mem.{u3, u3} A (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (SetLike.instMembership.{u3, u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) y I))) -> (Ideal.IsPrime.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) I)
+Case conversion may be inaccurate. Consider using '#align ideal.is_homogeneous.is_prime_of_homogeneous_mem_or_mem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_memₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI : I.Homogeneous 𝒜)
(I_ne_top : I ≠ ⊤)
@@ -153,6 +159,12 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
exact not_mem_I mem_I⟩
#align ideal.is_homogeneous.is_prime_of_homogeneous_mem_or_mem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem
+/- warning: ideal.is_homogeneous.is_prime_iff -> Ideal.IsHomogeneous.isPrime_iff is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {σ : Type.{u2}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u1} ι] [_inst_3 : SetLike.{u2, u3} σ A] [_inst_4 : AddSubmonoidClass.{u2, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (AddCommGroupWithOne.toAddGroupWithOne.{u3} A (Ring.toAddCommGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u1, u3, u2} ι A σ (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 I) -> (Iff (Ideal.IsPrime.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) I) (And (Ne.{succ u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) I (Top.top.{u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (Submodule.hasTop.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) (forall {x : A} {y : A}, (SetLike.Homogeneous.{u1, u3, u2} ι A σ _inst_3 𝒜 x) -> (SetLike.Homogeneous.{u1, u3, u2} ι A σ _inst_3 𝒜 y) -> (Membership.Mem.{u3, u3} A (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (SetLike.hasMem.{u3, u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (HMul.hMul.{u3, u3, u3} A A A (instHMul.{u3} A (Distrib.toHasMul.{u3} A (Ring.toDistrib.{u3} A (CommRing.toRing.{u3} A _inst_1)))) x y) I) -> (Or (Membership.Mem.{u3, u3} A (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (SetLike.hasMem.{u3, u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) x I) (Membership.Mem.{u3, u3} A (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (SetLike.hasMem.{u3, u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) y I)))))
+but is expected to have type
+ forall {ι : Type.{u2}} {σ : Type.{u1}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u2} ι] [_inst_3 : SetLike.{u1, u3} σ A] [_inst_4 : AddSubmonoidClass.{u1, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (Ring.toAddGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u2, u3, u1} ι A σ (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u2, u1, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 I) -> (Iff (Ideal.IsPrime.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) I) (And (Ne.{succ u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) I (Top.top.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Submodule.instTopSubmodule.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)))))) (forall {x : A} {y : A}, (SetLike.Homogeneous.{u2, u3, u1} ι A σ _inst_3 𝒜 x) -> (SetLike.Homogeneous.{u2, u3, u1} ι A σ _inst_3 𝒜 y) -> (Membership.mem.{u3, u3} A (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (SetLike.instMembership.{u3, u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (HMul.hMul.{u3, u3, u3} A A A (instHMul.{u3} A (NonUnitalNonAssocRing.toMul.{u3} A (NonAssocRing.toNonUnitalNonAssocRing.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_1))))) x y) I) -> (Or (Membership.mem.{u3, u3} A (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (SetLike.instMembership.{u3, u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) x I) (Membership.mem.{u3, u3} A (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (SetLike.instMembership.{u3, u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) y I)))))
+Case conversion may be inaccurate. Consider using '#align ideal.is_homogeneous.is_prime_iff Ideal.IsHomogeneous.isPrime_iffₓ'. -/
theorem Ideal.IsHomogeneous.isPrime_iff {I : Ideal A} (h : I.Homogeneous 𝒜) :
I.IsPrime ↔
I ≠ ⊤ ∧
@@ -163,6 +175,12 @@ theorem Ideal.IsHomogeneous.isPrime_iff {I : Ideal A} (h : I.Homogeneous 𝒜) :
h.isPrime_of_homogeneous_mem_or_mem I_ne_top @homogeneous_mem_or_mem⟩
#align ideal.is_homogeneous.is_prime_iff Ideal.IsHomogeneous.isPrime_iff
+/- warning: ideal.is_prime.homogeneous_core -> Ideal.IsPrime.homogeneousCore is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {σ : Type.{u2}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u1} ι] [_inst_3 : SetLike.{u2, u3} σ A] [_inst_4 : AddSubmonoidClass.{u2, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (AddCommGroupWithOne.toAddGroupWithOne.{u3} A (Ring.toAddCommGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u1, u3, u2} ι A σ (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))}, (Ideal.IsPrime.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) I) -> (Ideal.IsPrime.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (HomogeneousIdeal.toIdeal.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 (Ideal.homogeneousCore.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 I)))
+but is expected to have type
+ forall {ι : Type.{u2}} {σ : Type.{u1}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u2} ι] [_inst_3 : SetLike.{u1, u3} σ A] [_inst_4 : AddSubmonoidClass.{u1, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (Ring.toAddGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u2, u3, u1} ι A σ (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))}, (Ideal.IsPrime.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) I) -> (Ideal.IsPrime.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (HomogeneousIdeal.toIdeal.{u2, u1, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 (Ideal.homogeneousCore.{u2, u1, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 I)))
+Case conversion may be inaccurate. Consider using '#align ideal.is_prime.homogeneous_core Ideal.IsPrime.homogeneousCoreₓ'. -/
theorem Ideal.IsPrime.homogeneousCore {I : Ideal A} (h : I.IsPrime) :
(I.homogeneousCore 𝒜).toIdeal.IsPrime :=
by
@@ -175,6 +193,12 @@ theorem Ideal.IsPrime.homogeneousCore {I : Ideal A} (h : I.IsPrime) :
· exact Ideal.mem_homogeneousCore_of_homogeneous_of_mem hy
#align ideal.is_prime.homogeneous_core Ideal.IsPrime.homogeneousCore
+/- warning: ideal.is_homogeneous.radical_eq -> Ideal.IsHomogeneous.radical_eq is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {σ : Type.{u2}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u1} ι] [_inst_3 : SetLike.{u2, u3} σ A] [_inst_4 : AddSubmonoidClass.{u2, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (AddCommGroupWithOne.toAddGroupWithOne.{u3} A (Ring.toAddCommGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u1, u3, u2} ι A σ (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 I) -> (Eq.{succ u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Ideal.radical.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1) I) (InfSet.sInf.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Submodule.hasInf.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)))) (setOf.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (fun (J : Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) => And (Ideal.IsHomogeneous.{u1, u2, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 J) (And (LE.le.{u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (Preorder.toHasLe.{u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (PartialOrder.toPreorder.{u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (SetLike.partialOrder.{u3, u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) A (Submodule.setLike.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))))) I J) (Ideal.IsPrime.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) J))))))
+but is expected to have type
+ forall {ι : Type.{u2}} {σ : Type.{u1}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u2} ι] [_inst_3 : SetLike.{u1, u3} σ A] [_inst_4 : AddSubmonoidClass.{u1, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (Ring.toAddGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u2, u3, u1} ι A σ (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u2, u1, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 I) -> (Eq.{succ u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Ideal.radical.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1) I) (InfSet.sInf.{u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (Submodule.instInfSetSubmodule.{u3, u3} A A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)))) (setOf.{u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (fun (J : Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) => And (Ideal.IsHomogeneous.{u2, u1, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 J) (And (LE.le.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Preorder.toLE.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (PartialOrder.toPreorder.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (OmegaCompletePartialOrder.toPartialOrder.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (CompleteLattice.instOmegaCompletePartialOrder.{u3} (Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Submodule.completeLattice.{u3, u3} A A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} A (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))))) (Semiring.toModule.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)))))))) I J) (Ideal.IsPrime.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) J))))))
+Case conversion may be inaccurate. Consider using '#align ideal.is_homogeneous.radical_eq Ideal.IsHomogeneous.radical_eqₓ'. -/
theorem Ideal.IsHomogeneous.radical_eq {I : Ideal A} (hI : I.Homogeneous 𝒜) :
I.radical = sInf { J | J.Homogeneous 𝒜 ∧ I ≤ J ∧ J.IsPrime } :=
by
@@ -188,17 +212,35 @@ theorem Ideal.IsHomogeneous.radical_eq {I : Ideal A} (hI : I.Homogeneous 𝒜) :
refine' hI.to_ideal_homogeneous_core_eq_self.symm.trans_le (Ideal.homogeneousCore_mono _ HJ₁)
#align ideal.is_homogeneous.radical_eq Ideal.IsHomogeneous.radical_eq
+/- warning: ideal.is_homogeneous.radical -> Ideal.IsHomogeneous.radical is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {σ : Type.{u2}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u1} ι] [_inst_3 : SetLike.{u2, u3} σ A] [_inst_4 : AddSubmonoidClass.{u2, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (AddCommGroupWithOne.toAddGroupWithOne.{u3} A (Ring.toAddCommGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u1, u3, u2} ι A σ (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 I) -> (Ideal.IsHomogeneous.{u1, u2, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 (Ideal.radical.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1) I))
+but is expected to have type
+ forall {ι : Type.{u2}} {σ : Type.{u1}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u2} ι] [_inst_3 : SetLike.{u1, u3} σ A] [_inst_4 : AddSubmonoidClass.{u1, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (Ring.toAddGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u2, u3, u1} ι A σ (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] {I : Ideal.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))}, (Ideal.IsHomogeneous.{u2, u1, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 I) -> (Ideal.IsHomogeneous.{u2, u1, u3} ι σ A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u2} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u2} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u2} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u2} ι (AddCancelMonoid.toAddRightCancelMonoid.{u2} ι (AddCancelCommMonoid.toAddCancelMonoid.{u2} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u2} ι _inst_2))))) _inst_5 (Ideal.radical.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1) I))
+Case conversion may be inaccurate. Consider using '#align ideal.is_homogeneous.radical Ideal.IsHomogeneous.radicalₓ'. -/
theorem Ideal.IsHomogeneous.radical {I : Ideal A} (h : I.Homogeneous 𝒜) : I.radical.Homogeneous 𝒜 :=
by
rw [h.radical_eq]
exact Ideal.IsHomogeneous.sInf fun _ => And.left
#align ideal.is_homogeneous.radical Ideal.IsHomogeneous.radical
+/- warning: homogeneous_ideal.radical -> HomogeneousIdeal.radical is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {σ : Type.{u2}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u1} ι] [_inst_3 : SetLike.{u2, u3} σ A] [_inst_4 : AddSubmonoidClass.{u2, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (AddCommGroupWithOne.toAddGroupWithOne.{u3} A (Ring.toAddCommGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u1, u3, u2} ι A σ (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜], (HomogeneousIdeal.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5) -> (HomogeneousIdeal.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5)
+but is expected to have type
+ forall {ι : Type.{u1}} {σ : Type.{u2}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u1} ι] [_inst_3 : SetLike.{u2, u3} σ A] [_inst_4 : AddSubmonoidClass.{u2, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (Ring.toAddGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u1, u3, u2} ι A σ (fun (a : ι) (b : ι) => instDecidableEq.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜], (HomogeneousIdeal.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5) -> (HomogeneousIdeal.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5)
+Case conversion may be inaccurate. Consider using '#align homogeneous_ideal.radical HomogeneousIdeal.radicalₓ'. -/
/-- The radical of a homogenous ideal, as another homogenous ideal. -/
def HomogeneousIdeal.radical (I : HomogeneousIdeal 𝒜) : HomogeneousIdeal 𝒜 :=
⟨I.toIdeal.radical, I.Homogeneous.radical⟩
#align homogeneous_ideal.radical HomogeneousIdeal.radical
+/- warning: homogeneous_ideal.coe_radical -> HomogeneousIdeal.coe_radical is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {σ : Type.{u2}} {A : Type.{u3}} [_inst_1 : CommRing.{u3} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u1} ι] [_inst_3 : SetLike.{u2, u3} σ A] [_inst_4 : AddSubmonoidClass.{u2, u3} σ A (AddMonoid.toAddZeroClass.{u3} A (AddMonoidWithOne.toAddMonoid.{u3} A (AddGroupWithOne.toAddMonoidWithOne.{u3} A (AddCommGroupWithOne.toAddGroupWithOne.{u3} A (Ring.toAddCommGroupWithOne.{u3} A (CommRing.toRing.{u3} A _inst_1)))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u1, u3, u2} ι A σ (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜] (I : HomogeneousIdeal.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5), Eq.{succ u3} (Ideal.{u3} A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1))) (HomogeneousIdeal.toIdeal.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 (HomogeneousIdeal.radical.{u1, u2, u3} ι σ A _inst_1 _inst_2 _inst_3 _inst_4 𝒜 _inst_5 I)) (Ideal.radical.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1) (HomogeneousIdeal.toIdeal.{u1, u2, u3} ι σ A (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => Eq.decidable.{u1} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u1} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u1} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u1} ι (AddCancelMonoid.toAddRightCancelMonoid.{u1} ι (AddCancelCommMonoid.toAddCancelMonoid.{u1} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u1} ι _inst_2))))) _inst_5 I))
+but is expected to have type
+ forall {ι : Type.{u3}} {σ : Type.{u2}} {A : Type.{u1}} [_inst_1 : CommRing.{u1} A] [_inst_2 : LinearOrderedCancelAddCommMonoid.{u3} ι] [_inst_3 : SetLike.{u2, u1} σ A] [_inst_4 : AddSubmonoidClass.{u2, u1} σ A (AddMonoid.toAddZeroClass.{u1} A (AddMonoidWithOne.toAddMonoid.{u1} A (AddGroupWithOne.toAddMonoidWithOne.{u1} A (Ring.toAddGroupWithOne.{u1} A (CommRing.toRing.{u1} A _inst_1))))) _inst_3] {𝒜 : ι -> σ} [_inst_5 : GradedRing.{u3, u1, u2} ι A σ (fun (a : ι) (b : ι) => instDecidableEq.{u3} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u3} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u3} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u3} ι (AddCancelMonoid.toAddRightCancelMonoid.{u3} ι (AddCancelCommMonoid.toAddCancelMonoid.{u3} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u3} ι _inst_2))))) (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_1)) _inst_3 _inst_4 𝒜] (I : HomogeneousIdeal.{u3, u2, u1} ι σ A (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u3} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u3} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u3} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u3} ι (AddCancelMonoid.toAddRightCancelMonoid.{u3} ι (AddCancelCommMonoid.toAddCancelMonoid.{u3} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u3} ι _inst_2))))) _inst_5), Eq.{succ u1} (Ideal.{u1} A (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_1))) (HomogeneousIdeal.toIdeal.{u3, u2, u1} ι σ A (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u3} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u3} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u3} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u3} ι (AddCancelMonoid.toAddRightCancelMonoid.{u3} ι (AddCancelCommMonoid.toAddCancelMonoid.{u3} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u3} ι _inst_2))))) _inst_5 (HomogeneousIdeal.radical.{u3, u2, u1} ι σ A _inst_1 _inst_2 _inst_3 _inst_4 𝒜 _inst_5 I)) (Ideal.radical.{u1} A (CommRing.toCommSemiring.{u1} A _inst_1) (HomogeneousIdeal.toIdeal.{u3, u2, u1} ι σ A (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_1)) _inst_3 _inst_4 𝒜 (fun (a : ι) (b : ι) => instDecidableEq.{u3} ι (LinearOrderedAddCommMonoid.toLinearOrder.{u3} ι (LinearOrderedCancelAddCommMonoid.toLinearOrderedAddCommMonoid.{u3} ι _inst_2)) a b) (AddRightCancelMonoid.toAddMonoid.{u3} ι (AddCancelMonoid.toAddRightCancelMonoid.{u3} ι (AddCancelCommMonoid.toAddCancelMonoid.{u3} ι (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} ι (LinearOrderedCancelAddCommMonoid.toOrderedCancelAddCommMonoid.{u3} ι _inst_2))))) _inst_5 I))
+Case conversion may be inaccurate. Consider using '#align homogeneous_ideal.coe_radical HomogeneousIdeal.coe_radicalₓ'. -/
@[simp]
theorem HomogeneousIdeal.coe_radical (I : HomogeneousIdeal 𝒜) :
I.radical.toIdeal = I.toIdeal.radical :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/c89fe2d59ae06402c3f55f978016d1ada444f57e
@@ -191,7 +191,7 @@ theorem Ideal.IsHomogeneous.radical_eq {I : Ideal A} (hI : I.Homogeneous 𝒜) :
theorem Ideal.IsHomogeneous.radical {I : Ideal A} (h : I.Homogeneous 𝒜) : I.radical.Homogeneous 𝒜 :=
by
rw [h.radical_eq]
- exact Ideal.IsHomogeneous.inf fun _ => And.left
+ exact Ideal.IsHomogeneous.sInf fun _ => And.left
#align ideal.is_homogeneous.radical Ideal.IsHomogeneous.radical
/-- The radical of a homogenous ideal, as another homogenous ideal. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -176,12 +176,12 @@ theorem Ideal.IsPrime.homogeneousCore {I : Ideal A} (h : I.IsPrime) :
#align ideal.is_prime.homogeneous_core Ideal.IsPrime.homogeneousCore
theorem Ideal.IsHomogeneous.radical_eq {I : Ideal A} (hI : I.Homogeneous 𝒜) :
- I.radical = infₛ { J | J.Homogeneous 𝒜 ∧ I ≤ J ∧ J.IsPrime } :=
+ I.radical = sInf { J | J.Homogeneous 𝒜 ∧ I ≤ J ∧ J.IsPrime } :=
by
- rw [Ideal.radical_eq_infₛ]
+ rw [Ideal.radical_eq_sInf]
apply le_antisymm
- · exact infₛ_le_infₛ fun J => And.right
- · refine' infₛ_le_infₛ_of_forall_exists_le _
+ · exact sInf_le_sInf fun J => And.right
+ · refine' sInf_le_sInf_of_forall_exists_le _
rintro J ⟨HJ₁, HJ₂⟩
refine' ⟨(J.homogeneous_core 𝒜).toIdeal, _, J.to_ideal_homogeneous_core_le _⟩
refine' ⟨HomogeneousIdeal.isHomogeneous _, _, HJ₂.homogeneous_core⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -103,7 +103,7 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
rw [eq_sub_of_add_eq eq_add_sum.symm]
refine' Ideal.sub_mem _ hxy (Ideal.sum_mem _ fun z H => _)
rcases z with ⟨i, j⟩
- simp only [antidiag, mem_erase, Prod.mk.inj_iff, Ne.def, mem_filter, mem_product] at H
+ simp only [antidiag, mem_erase, Prod.mk.inj_iff, Ne, mem_filter, mem_product] at H
rcases H with ⟨H₁, ⟨H₂, H₃⟩, H₄⟩
have max_lt : max₁ < i ∨ max₂ < j := by
rcases lt_trichotomy max₁ i with (h | rfl | h)
@@ -118,13 +118,13 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
have not_mem : i ∉ set₁ := fun h =>
lt_irrefl _ ((max'_lt_iff set₁ (nonempty x rid₁)).mp max_lt i h)
rw [set₁_eq] at not_mem
- simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
+ simp only [not_and, Classical.not_not, Ne, mem_filter] at not_mem
exact Ideal.mul_mem_right _ I (not_mem H₂)
· -- in this case `max₂ < j`, then `yⱼ ∈ I`; for otherwise `j ∈ set₂`, then `j ≤ max₂`.
have not_mem : j ∉ set₂ := fun h =>
lt_irrefl _ ((max'_lt_iff set₂ (nonempty y rid₂)).mp max_lt j h)
rw [set₂_eq] at not_mem
- simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
+ simp only [not_and, Classical.not_not, Ne, mem_filter] at not_mem
exact Ideal.mul_mem_left I _ (not_mem H₃)
have not_mem_I : proj 𝒜 max₁ x * proj 𝒜 max₂ y ∉ I := by
have neither_mem : proj 𝒜 max₁ x ∉ I ∧ proj 𝒜 max₂ y ∉ I := by
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -41,11 +41,8 @@ open GradedRing DirectSum SetLike Finset
open BigOperators
variable {ι σ A : Type*}
-
variable [CommRing A]
-
variable [LinearOrderedCancelAddCommMonoid ι]
-
variable [SetLike σ A] [AddSubmonoidClass σ A] {𝒜 : ι → σ} [GradedRing 𝒜]
-- Porting note: This proof needs a long time to elaborate
@@ -93,7 +93,7 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
((decompose 𝒜 x).support ×ˢ (decompose 𝒜 y).support).filter (fun z : ι × ι =>
z.1 + z.2 = max₁ + max₂) with ha
have mem_antidiag : (max₁, max₂) ∈ antidiag := by
- simp only [add_sum_erase, mem_filter, mem_product]
+ simp only [antidiag, add_sum_erase, mem_filter, mem_product]
exact ⟨⟨mem_of_mem_filter _ mem_max₁, mem_of_mem_filter _ mem_max₂⟩, trivial⟩
have eq_add_sum :=
calc
@@ -106,7 +106,7 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
rw [eq_sub_of_add_eq eq_add_sum.symm]
refine' Ideal.sub_mem _ hxy (Ideal.sum_mem _ fun z H => _)
rcases z with ⟨i, j⟩
- simp only [mem_erase, Prod.mk.inj_iff, Ne.def, mem_filter, mem_product] at H
+ simp only [antidiag, mem_erase, Prod.mk.inj_iff, Ne.def, mem_filter, mem_product] at H
rcases H with ⟨H₁, ⟨H₂, H₃⟩, H₄⟩
have max_lt : max₁ < i ∨ max₂ < j := by
rcases lt_trichotomy max₁ i with (h | rfl | h)
@@ -56,7 +56,7 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
Ideal.IsPrime I :=
⟨I_ne_top, by
intro x y hxy
- by_contra' rid
+ by_contra! rid
obtain ⟨rid₁, rid₂⟩ := rid
classical
/-
@@ -56,8 +56,7 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
Ideal.IsPrime I :=
⟨I_ne_top, by
intro x y hxy
- by_contra rid
- push_neg at rid
+ by_contra' rid
obtain ⟨rid₁, rid₂⟩ := rid
classical
/-
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -40,7 +40,7 @@ open GradedRing DirectSum SetLike Finset
open BigOperators
-variable {ι σ A : Type _}
+variable {ι σ A : Type*}
variable [CommRing A]
@@ -28,7 +28,7 @@ This file contains a proof that the radical of any homogeneous ideal is a homoge
Throughout this file, the indexing type `ι` of grading is assumed to be a
`LinearOrderedCancelAddCommMonoid`. This might be stronger than necessary but cancelling
property is strictly necessary; for a counterexample of how `Ideal.IsHomogeneous.isPrime_iff`
-fails for a non-cancellative set see `counterexample/homogeneous_prime_not_prime.lean`.
+fails for a non-cancellative set see `Counterexamples/HomogeneousPrimeNotPrime.lean`.
## Tags
@@ -48,7 +48,7 @@ variable [LinearOrderedCancelAddCommMonoid ι]
variable [SetLike σ A] [AddSubmonoidClass σ A] {𝒜 : ι → σ} [GradedRing 𝒜]
-set_option maxHeartbeats 300000 in -- Porting note: This proof needs a long time to elaborate
+-- Porting note: This proof needs a long time to elaborate
theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI : I.IsHomogeneous 𝒜)
(I_ne_top : I ≠ ⊤)
(homogeneous_mem_or_mem :
@@ -20,8 +20,8 @@ This file contains a proof that the radical of any homogeneous ideal is a homoge
`I.homogeneous_core 𝒜` (i.e. the largest homogeneous ideal contained in `I`) is also prime.
* `Ideal.IsHomogeneous.radical`: for any `I : Ideal A`, if `I` is homogeneous, then the
radical of `I` is homogeneous as well.
-* `HomogeneousIdeal.radical`: for any `I : HomogeneousIdeal 𝒜`, `I.radical` is the the
- radical of `I` as a `HomogeneousIdeal 𝒜`
+* `HomogeneousIdeal.radical`: for any `I : HomogeneousIdeal 𝒜`, `I.radical` is the
+ radical of `I` as a `HomogeneousIdeal 𝒜`.
## Implementation details
@@ -2,14 +2,11 @@
Copyright (c) 2022 Jujian Zhang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jujian Zhang, Eric Wieser
-
-! This file was ported from Lean 3 source module ring_theory.graded_algebra.radical
-! leanprover-community/mathlib commit f1944b30c97c5eb626e498307dec8b022a05bd0a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.RingTheory.GradedAlgebra.HomogeneousIdeal
+#align_import ring_theory.graded_algebra.radical from "leanprover-community/mathlib"@"f1944b30c97c5eb626e498307dec8b022a05bd0a"
+
/-!
This file contains a proof that the radical of any homogeneous ideal is a homogeneous ideal
@@ -127,7 +127,7 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
rw [set₁_eq] at not_mem
simp only [not_and, Classical.not_not, Ne.def, mem_filter] at not_mem
exact Ideal.mul_mem_right _ I (not_mem H₂)
- · -- in this case `max₂ < j`, then `yⱼ ∈ I`; for otherwise `j ∈ set₂`, then `j ≤ max₂`.
+ · -- in this case `max₂ < j`, then `yⱼ ∈ I`; for otherwise `j ∈ set₂`, then `j ≤ max₂`.
have not_mem : j ∉ set₂ := fun h =>
lt_irrefl _ ((max'_lt_iff set₂ (nonempty y rid₂)).mp max_lt j h)
rw [set₂_eq] at not_mem
SProd
to implement overloaded notation · ×ˢ ·
(#4200)
Currently, the following notations are changed from · ×ˢ ·
because Lean 4 can't deal with ambiguous notations.
| Definition | Notation |
| :
Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Chris Hughes <chrishughes24@gmail.com>
@@ -94,7 +94,7 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
replace hxy : proj 𝒜 (max₁ + max₂) (x * y) ∈ I := hI _ hxy
have mem_I : proj 𝒜 max₁ x * proj 𝒜 max₂ y ∈ I := by
set antidiag :=
- ((decompose 𝒜 x).support ×ᶠ (decompose 𝒜 y).support).filter (fun z : ι × ι =>
+ ((decompose 𝒜 x).support ×ˢ (decompose 𝒜 y).support).filter (fun z : ι × ι =>
z.1 + z.2 = max₁ + max₂) with ha
have mem_antidiag : (max₁, max₂) ∈ antidiag := by
simp only [add_sum_erase, mem_filter, mem_product]
@@ -107,7 +107,6 @@ theorem Ideal.IsHomogeneous.isPrime_of_homogeneous_mem_or_mem {I : Ideal A} (hI
proj 𝒜 max₁ x * proj 𝒜 max₂ y +
∑ ij in antidiag.erase (max₁, max₂), proj 𝒜 ij.1 x * proj 𝒜 ij.2 y :=
(add_sum_erase _ _ mem_antidiag).symm
-
rw [eq_sub_of_add_eq eq_add_sum.symm]
refine' Ideal.sub_mem _ hxy (Ideal.sum_mem _ fun z H => _)
rcases z with ⟨i, j⟩
The unported dependencies are