|
7 | 7 |
|
8 | 8 | public import Mathlib.LinearAlgebra.Matrix.Charpoly.Coeff |
9 | 9 | public import Mathlib.LinearAlgebra.Matrix.ToLin |
| 10 | +public import Mathlib.Algebra.Module.SpanRank |
10 | 11 |
|
11 | 12 | /-! |
12 | 13 |
|
@@ -198,34 +199,46 @@ theorem Matrix.isRepresentation.toEnd_surjective : |
198 | 199 | end |
199 | 200 |
|
200 | 201 | /-- The **Cayley-Hamilton Theorem** for f.g. modules over arbitrary rings states that for each |
201 | | -`R`-endomorphism `φ` of an `R`-module `M` such that `φ(M) ≤ I • M` for some ideal `I`, there |
202 | | -exists some `n` and some `aᵢ ∈ Iⁱ` such that `φⁿ + a₁ φⁿ⁻¹ + ⋯ + aₙ = 0`. |
| 202 | +`R`-endomorphism `φ` of an `R`-module `M` generated by `n` elements such that `φ(M) ≤ I • M` |
| 203 | +for some ideal `I`, there exist some `aᵢ ∈ Iⁱ` such that `φⁿ + a₁ φⁿ⁻¹ + ⋯ + aₙ = 0`. |
203 | 204 |
|
204 | | -This is the version found in Eisenbud 4.3, which is slightly weaker than Matsumura 2.1 |
205 | | -(this lacks the constraint on `n`), and is slightly stronger than Atiyah-Macdonald 2.4. |
| 205 | +This is the version in [Matsumura 2.1][matsumura1987], which is stronger than those in |
| 206 | +[Eisenbud 4.3][Eisenbud1995] and [Atiyah-Macdonald 2.4][atiyah-macdonald]. |
206 | 207 | -/ |
207 | | -theorem LinearMap.exists_monic_and_coeff_mem_pow_and_aeval_eq_zero_of_range_le_smul |
| 208 | +theorem LinearMap.exists_monic_and_natDegree_eq_and_coeff_mem_pow_and_aeval_eq_zero |
208 | 209 | [Module.Finite R M] (f : Module.End R M) (I : Ideal R) (hI : LinearMap.range f ≤ I • ⊤) : |
209 | | - ∃ p : R[X], p.Monic ∧ (∀ k, p.coeff k ∈ I ^ (p.natDegree - k)) ∧ Polynomial.aeval f p = 0 := by |
| 210 | + ∃ p : R[X], p.Monic ∧ p.natDegree = (⊤ : Submodule R M).spanFinrank ∧ |
| 211 | + (∀ k, p.coeff k ∈ I ^ (p.natDegree - k)) ∧ Polynomial.aeval f p = 0 := by |
210 | 212 | classical |
211 | 213 | cases subsingleton_or_nontrivial R |
212 | | - · exact ⟨0, Polynomial.monic_of_subsingleton _, by simp⟩ |
213 | | - obtain ⟨s : Finset M, hs : Submodule.span R (s : Set M) = ⊤⟩ := |
214 | | - Module.Finite.fg_top (R := R) (M := M) |
215 | | - have : Submodule.span R (Set.range ((↑) : { x // x ∈ s } → M)) = ⊤ := by |
216 | | - rw [Subtype.range_coe_subtype, Finset.setOf_mem, hs] |
217 | | - obtain ⟨A, rfl, h⟩ := |
218 | | - Matrix.isRepresentation.toEnd_exists_mem_ideal R ((↑) : s → M) this f I hI |
219 | | - refine ⟨A.1.charpoly, A.1.charpoly_monic, ?_, ?_⟩ |
220 | | - · rw [A.1.charpoly_natDegree_eq_dim] |
221 | | - exact coeff_charpoly_mem_ideal_pow h |
222 | | - · rw [Polynomial.aeval_algHom_apply, |
223 | | - ← map_zero (Matrix.isRepresentation.toEnd R ((↑) : s → M) this)] |
224 | | - congr 1 |
225 | | - ext1 |
226 | | - rw [Polynomial.aeval_subalgebra_coe, Matrix.aeval_self_charpoly, Subalgebra.coe_zero] |
| 214 | + · exact ⟨0, by simp [nontriviality]⟩ |
| 215 | + obtain ⟨s, hs_card, hs_span⟩ := |
| 216 | + Submodule.FG.exists_span_finset_card_eq_spanFinrank (R := R) (M := M) Module.Finite.fg_top |
| 217 | + have : Submodule.span R (Set.range ((↑) : s → M)) = ⊤ := by simp [hs_span] |
| 218 | + obtain ⟨A, rfl, h⟩ := Matrix.isRepresentation.toEnd_exists_mem_ideal R ((↑) : s → M) this f I hI |
| 219 | + refine ⟨A.1.charpoly, A.1.charpoly_monic, by simp [hs_card], |
| 220 | + by simpa using coeff_charpoly_mem_ideal_pow h, ?_⟩ |
| 221 | + rw [Polynomial.aeval_algHom_apply, |
| 222 | + ← map_zero (Matrix.isRepresentation.toEnd R ((↑) : s → M) this)] |
| 223 | + congr 1 |
| 224 | + ext1 |
| 225 | + rw [Polynomial.aeval_subalgebra_coe, Matrix.aeval_self_charpoly, Subalgebra.coe_zero] |
| 226 | + |
| 227 | +@[deprecated |
| 228 | +"strengthened conclusion to |
| 229 | +`LinearMap.exists_monic_and_natDegree_eq_and_coeff_mem_pow_and_aeval_eq_zero`" |
| 230 | +(since := "2026-04-10")] alias |
| 231 | +LinearMap.exists_monic_and_coeff_mem_pow_and_aeval_eq_zero_of_range_le_smul := |
| 232 | + LinearMap.exists_monic_and_natDegree_eq_and_coeff_mem_pow_and_aeval_eq_zero |
| 233 | + |
| 234 | +theorem LinearMap.exists_monic_and_natDegree_eq_and_aeval_eq_zero |
| 235 | + [Module.Finite R M] (f : Module.End R M) : |
| 236 | + ∃ p : R[X], p.Monic ∧ p.natDegree = (⊤ : Submodule R M).spanFinrank ∧ |
| 237 | + Polynomial.aeval f p = 0 := |
| 238 | + (LinearMap.exists_monic_and_natDegree_eq_and_coeff_mem_pow_and_aeval_eq_zero R f ⊤ (by simp)).imp |
| 239 | + fun _ h ↦ h.imp_right (And.imp_right And.right) |
227 | 240 |
|
228 | 241 | theorem LinearMap.exists_monic_and_aeval_eq_zero [Module.Finite R M] (f : Module.End R M) : |
229 | 242 | ∃ p : R[X], p.Monic ∧ Polynomial.aeval f p = 0 := |
230 | | - (LinearMap.exists_monic_and_coeff_mem_pow_and_aeval_eq_zero_of_range_le_smul R f ⊤ (by simp)).imp |
| 243 | + (LinearMap.exists_monic_and_natDegree_eq_and_aeval_eq_zero R f).imp |
231 | 244 | fun _ h => h.imp_right And.right |
0 commit comments