|
| 1 | +/- |
| 2 | +Copyright (c) 2025 Junyan Xu. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Junyan Xu |
| 5 | +-/ |
| 6 | +import Mathlib.Algebra.TrivSqZeroExt |
| 7 | +import Mathlib.Data.DFinsupp.Module |
| 8 | +import Mathlib.RingTheory.PicardGroup |
| 9 | + |
| 10 | +/-! |
| 11 | +# A class of examples of invertible modules that are not isomorphic to ideals |
| 12 | +
|
| 13 | +References: https://math.stackexchange.com/a/5090562 or https://mathoverflow.net/a/499258 |
| 14 | +-/ |
| 15 | + |
| 16 | +variable (R : Type*) [CommRing R] |
| 17 | + |
| 18 | +/-- The trivial square-zero extension of a commutative ring R given by the direct sum |
| 19 | +R ⊕ ⨁ₘ R⧸m where m ranges over maximal ideals of R. -/ |
| 20 | +abbrev SqZeroExtQuotMax := TrivSqZeroExt R (Π₀ m : MaximalSpectrum R, R ⧸ m.1) |
| 21 | + |
| 22 | +instance : IsFractionRing (SqZeroExtQuotMax R) (SqZeroExtQuotMax R) := |
| 23 | + IsFractionRing.self_iff_nonZeroDivisors_le_isUnit.mpr fun x hx ↦ |
| 24 | + TrivSqZeroExt.isUnit_iff_isUnit_fst.mpr <| of_not_not fun hr ↦ by |
| 25 | + have ⟨M, hM, hrM⟩ := exists_max_ideal_of_mem_nonunits hr |
| 26 | + classical |
| 27 | + have := hx.1 (.inr <| .single ⟨M, hM⟩ 1) <| by |
| 28 | + ext1; · simp |
| 29 | + simpa [-DFinsupp.single_apply, ← DFinsupp.single_smul, DFinsupp.single_eq_zero] |
| 30 | + using (Ideal.Quotient.mk_eq_mk_iff_sub_mem ..).mpr (by simpa) |
| 31 | + simpa using congr(($this).snd) |
| 32 | + |
| 33 | +/-- R as an algebra over `SqZeroExtQuotMax R`. -/ |
| 34 | +abbrev SqZeroExtQuotMax.algebraBase : Algebra (SqZeroExtQuotMax R) R := TrivSqZeroExt.algebraBase .. |
| 35 | + |
| 36 | +open CommRing (Pic) in |
| 37 | +/-- If the Picard group of a commutative ring R is nontrivial, then `SqZeroExtQuotMax R` |
| 38 | +has an invertible module (which is the base change of an invertible ideal of R) |
| 39 | +not isomorphic to any ideal. -/ |
| 40 | +theorem SqZeroExtQuotMax.not_exists_linearEquiv_ideal_of_invertible [Nontrivial (Pic R)] : |
| 41 | + ∃ M : Pic (SqZeroExtQuotMax R), |
| 42 | + ¬ ∃ I : Ideal (SqZeroExtQuotMax R), Nonempty (M ≃ₗ[SqZeroExtQuotMax R] I) := by |
| 43 | + by_contra! h |
| 44 | + have ⟨M, hM⟩ := exists_ne (1 : Pic R) |
| 45 | + have ⟨I, ⟨eI⟩⟩ := h (M.mapAlgebra R _) |
| 46 | + have ⟨J, ⟨eJ⟩⟩ := h (M⁻¹.mapAlgebra R _) |
| 47 | + have := Module.Invertible.congr eI |
| 48 | + have := Module.Invertible.congr eJ |
| 49 | + obtain ⟨rfl | rfl⟩ := I.eq_top_of_mk_tensor_eq_one J <| by |
| 50 | + rw [Pic.mk_tensor, ← Pic.mk_eq_mk_iff.mpr ⟨eI⟩, ← Pic.mk_eq_mk_iff.mpr ⟨eJ⟩, |
| 51 | + Pic.mk_eq_self, Pic.mk_eq_self, ← map_mul, mul_inv_cancel, map_one] |
| 52 | + have eq := Pic.mk_eq_one_iff.mpr ⟨eI ≪≫ₗ Submodule.topEquiv⟩ |
| 53 | + rw [Pic.mk_eq_self] at eq |
| 54 | + let := TrivSqZeroExt.algebraBase |
| 55 | + have eq := congr(Pic.mapAlgebra (SqZeroExtQuotMax R) R $eq) |
| 56 | + exact hM <| by rwa [map_one, Pic.mapAlgebra_mapAlgebra, Pic.mapAlgebra_self] at eq |
0 commit comments