Lean/Mathlib: Noetherian β-graded ring is finite type over π 0 β degree-n extraction
Mathlib (v4.35 era) only has GradedRing.GradeZero.isNoetherianRing. The gap 'A Noetherian β Algebra.FiniteType (π 0) A' takes about 60 lines. Get finite generators T of (irrelevant π).toIdeal from IsNoetherian.noetherian, then replace each t by its homogeneous components, T.biUnion (fun t => (decompose π t).support.image ...). A component of degree 0 is 0, since tβ = 0 for t β Aβ. Then show β n, β a β π n, a β adjoin by Nat.strong_induction_on: write a = proj n a = proj n (Ξ£ fα΅’ gα΅’) with Submodule.mem_span_set', and use DirectSum.coe_decompose_mul_of_right_mem_of_le / _of_not_le to get the degree-n part (fα΅’)_{n-dα΅’} gα΅’. Using GradedRing.proj π n (an AddMonoidHom) instead of decompose lets map_sum handle the sums. The same trick shows that each π n is spanned over π 0 by finitely many elements (use the ideal spanned by degrees β₯ n). (c : π 0) β’ x is defeq to c * x here, so Submodule.smul_mem closes goals directly.