Paper XI · Lean source

FractionMatrix106.lean

Selected results recorded Coverage and evidence

Compiler/replay evidence is reported for a subset or bounded block. No whole-work coverage is implied.

This viewer reads the retained source; it does not run Lean or assign new claim mappings.

Local imports (2)

PaperXI/FractionMatrix106.lean57 lines

Original source pathformalization/PaperXI/FractionMatrix106.lean
Skip declarations and read code

Skip source text

1 import PaperXI.SmithMatrix106
2 import PaperXI.SplitRadical105
3 import Mathlib.RingTheory.Localization.FractionRing
4 import Mathlib.RingTheory.Localization.Integer
5 
6 /-! Clear denominators and retain both integral basis changes. -/
7 set_option autoImplicit false
8 noncomputable section
9 namespace PaperXI.FractionMatrix106
10 open Matrix
11 open scoped nonZeroDivisors
12 variable {ι R F : Type*} [Fintype ι] [DecidableEq ι]
13   [CommRing R] [IsDomain R] [IsPrincipalIdealRing R]
14   [Field F] [Algebra R F] [IsFractionRing R F]
15 
16 omit [IsPrincipalIdealRing R] in
17 theorem exists_integral_multiple (g : GL ι F) :
18     ∃ b : R, ∃ A : Matrix ι ι R,
19       b ≠ 0 ∧ A.det ≠ 0 ∧ A.map (algebraMap R F) = (algebraMap R F b) • g.val := by
20   obtain ⟨b, hb⟩ := IsLocalization.exist_integer_multiples_of_finite
21     (R⁰) (fun ij : ι × ι => g ij.1 ij.2)
22   choose A hA using hb
23   have hb0 : (b : R) ≠ 0 := nonZeroDivisors.ne_zero b.property
24   have hbF : algebraMap R F (b : R) ≠ 0 := fun h => hb0 ((IsFractionRing.injective R F) (h.trans (map_zero _).symm))
25   let M : Matrix ι ι R := fun i j => A (i, j)
26   have hm : M.map (algebraMap R F) = (algebraMap R F (b : R)) • g.val := by
27     ext i j
28     change algebraMap R F (A (i, j)) = algebraMap R F (b : R) * g i j
29     simpa only [Algebra.smul_def] using hA (i, j)
30   have hdet : M.det ≠ 0 := by
31     intro h
32     have he := congrArg Matrix.det hm
33     change (RingHom.mapMatrix (algebraMap R F) M).det = _ at he
34     rw [← RingHom.map_det, h, map_zero, Matrix.det_smul] at he
35     exact (mul_ne_zero (pow_ne_zero _ hbF) g.det_ne_zero) he.symm
36   exact ⟨b, M, hb0, hdet, hm⟩
37 
38 theorem exists_integral_diagonal (g : GL ι F) :
39     ∃ c : Fˣ, ∃ P Q : GL ι R, ∃ d : ι → R, ∃ hd : ∀ i, algebraMap R F (d i) ≠ 0,
40       g = GeneralLinearGroup.scalar ι c *
41         (GeneralLinearGroup.map (algebraMap R F) P *
42           SplitRadical105.diagonalGL (fun i => algebraMap R F (d i)) hd *
43           GeneralLinearGroup.map (algebraMap R F) Q) := by
44   obtain ⟨b, A, hb, hA, he⟩ := exists_integral_multiple (R := R) g
45   obtain ⟨P, Q, d, hd, hdiag⟩ := SmithMatrix106.exists_diagonal A hA
46   have hbF : algebraMap R F b ≠ 0 := fun h => hb ((IsFractionRing.injective R F) (h.trans (map_zero _).symm))
47   let c : Fˣ := (Units.mk0 (algebraMap R F b) hbF)⁻¹
48   refine ⟨c, P, Q, d, fun i h => hd i ((IsFractionRing.injective R F) (h.trans (map_zero _).symm)), ?_⟩
49   apply Units.ext
50   change g.val = Matrix.scalar ι (algebraMap R F b)⁻¹ *
51     (P.val.map (algebraMap R F) * diagonal (fun i => algebraMap R F (d i)) *
52       Q.val.map (algebraMap R F))
53   have hdmap := congrArg (fun M : Matrix ι ι R => M.map (algebraMap R F)) hdiag
54   rw [Matrix.map_mul, Matrix.map_mul, Matrix.diagonal_map (map_zero _)] at hdmap
55   rw [← hdmap, he, Matrix.scalar_apply, ← Matrix.smul_eq_diagonal_mul, smul_smul, inv_mul_cancel₀ hbF, one_smul]
56 
57 end PaperXI.FractionMatrix106

Back to source controls

Original file and source record

This copy matches the recorded source file. Its publication here does not change the work’s review status.

SHA-256: 37125ed47f602558238d6c6b2e9ef6abc4f83592ef58525b03697009a9ac54b6

Original source on GitHub

Back to Paper XI: Packets, Arithmetic Realization, and Conditional Comparison