|
| 1 | +/- |
| 2 | +Copyright (c) 2025 Andrew Yang. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Andrew Yang |
| 5 | +-/ |
| 6 | +module |
| 7 | + |
| 8 | +public import Mathlib.LinearAlgebra.TensorProduct.Quotient |
| 9 | +public import Mathlib.RingTheory.Finiteness.Subalgebra |
| 10 | +public import Mathlib.RingTheory.Ideal.Quotient.Operations |
| 11 | +public import Mathlib.RingTheory.Noetherian.Nilpotent |
| 12 | +public import Mathlib.RingTheory.TensorProduct.Finite |
| 13 | + |
| 14 | +/-! # Descend finiteness along quotients by nilpotent ideals -/ |
| 15 | + |
| 16 | +@[expose] public section |
| 17 | + |
| 18 | +open TensorProduct |
| 19 | + |
| 20 | +/-- If `I` is a finitely generated nilpotent ideal of an `R`-algebra `S`, and `T = S / I` is |
| 21 | +`R`-finite, then `S` is also `R`-finite. -/ |
| 22 | +lemma Module.finite_of_surjective_of_ker_le_nilradical |
| 23 | + {R S T : Type*} [CommRing R] [CommRing S] [CommRing T] |
| 24 | + [Algebra R S] [Algebra R T] |
| 25 | + [Module.Finite R T] (f : S →ₐ[R] T) |
| 26 | + (hf₁ : Function.Surjective f) (hf₂ : RingHom.ker f ≤ nilradical S) |
| 27 | + (hf₃ : (RingHom.ker f).FG) : |
| 28 | + Module.Finite R S := by |
| 29 | + have : Module.Finite R (S ⧸ RingHom.ker f) := |
| 30 | + let e := Ideal.quotientKerAlgEquivOfSurjective hf₁ |
| 31 | + .of_surjective e.symm.toLinearMap e.symm.surjective |
| 32 | + generalize hI : RingHom.ker f = I at * |
| 33 | + suffices ∀ i, Module.Finite R (S ⧸ I ^ i) by |
| 34 | + obtain ⟨n, hn : _ = ⊥⟩ := hf₃.isNilpotent_iff_le_nilradical.mpr hf₂ |
| 35 | + let e : (S ⧸ I ^ n) ≃ₐ[R] S := hn ▸ (AlgEquiv.quotientBot R S) |
| 36 | + exact .of_surjective e.toLinearMap e.surjective |
| 37 | + intro n |
| 38 | + induction n with |
| 39 | + | zero => rw [pow_zero, Ideal.one_eq_top]; infer_instance |
| 40 | + | succ n IH => |
| 41 | + let φ : (S ⧸ I ^ (n + 1)) →ₐ[S] S ⧸ I ^ n := |
| 42 | + Ideal.Quotient.factorₐ _ (Ideal.pow_le_pow_right n.le_succ) |
| 43 | + have hφ : Function.Surjective φ := |
| 44 | + Ideal.Quotient.factor_surjective (Ideal.pow_le_pow_right n.le_succ) |
| 45 | + have hφ' : φ.toLinearMap ∘ₗ (I ^ (n + 1)).mkQ = (I ^ n).mkQ := rfl |
| 46 | + refine ⟨Submodule.fg_of_fg_map_of_fg_inf_ker (φ.toLinearMap.restrictScalars R) ?_ ?_⟩ |
| 47 | + · simpa [LinearMap.range_eq_top_of_surjective (φ.toLinearMap.restrictScalars R) hφ] using |
| 48 | + Module.Finite.fg_top |
| 49 | + · have : Module.Finite R ((S ⧸ I) ⊗[S] ↑(I ^ n)) := by |
| 50 | + have : Module.Finite S ↑(I ^ n) := Module.Finite.iff_fg.mpr (.pow hf₃ _) |
| 51 | + exact .trans (S ⧸ I) _ |
| 52 | + let ψ : (S ⧸ I) ⊗[S] ↑(I ^ n) →ₗ[S] (S ⧸ I ^ (n + 1)) := by |
| 53 | + refine ?_ ∘ₗ (TensorProduct.quotTensorEquivQuotSMul _ I).toLinearMap |
| 54 | + refine Submodule.liftQ _ ((Submodule.mkQ _).comp (I ^ n).subtype) ?_ |
| 55 | + rw [LinearMap.ker_comp, ← Submodule.map_le_map_iff_of_injective (I ^ n).subtype_injective, |
| 56 | + Submodule.map_smul'', Submodule.map_comap_eq] |
| 57 | + simpa [pow_succ'] using Ideal.mul_le_left (I := I) (J := I ^ n) |
| 58 | + convert Module.Finite.fg_top.map (ψ.restrictScalars R) using 1 |
| 59 | + suffices LinearMap.ker φ.toLinearMap = Submodule.map (I ^ (n + 1)).mkQ (I ^ n) by |
| 60 | + simpa [LinearMap.range_restrictScalars, ψ, LinearMap.range_comp, Submodule.range_liftQ] |
| 61 | + apply Submodule.comap_injective_of_surjective (I ^ (n + 1)).mkQ_surjective |
| 62 | + simpa [← LinearMap.ker_comp, hφ'] using Ideal.pow_le_pow_right n.le_succ |
0 commit comments