Realization Boundaries · Lean source
DiagonalAutomorphisms.lean
Declared contract recorded Coverage and evidence
The cited release explicitly reports completion of its registered formal contract, under its exact hypotheses.
This viewer reads the retained source; it does not run Lean or assign new claim mappings.
Local imports (1)
RealizationBoundaries/DiagonalAutomorphisms.lean189 lines
Original source path
RealizationBoundaries/DiagonalAutomorphisms.leanSkip declarations and read code
1 import RealizationBoundaries.EndomorphismScalars
2
3 /-!
4 # Inverses and automorphisms of the original groups
5
6 An everywhere nonzero diagonal is invertible on the product. For a source with
7 an infinite selector, its inverse also preserves the appropriate original
8 rational-line preimages. This last step is proved; product invertibility alone
9 is not silently identified with invertibility on an arbitrary subspace.
10 -/
11 set_option autoImplicit false
12 set_option backward.isDefEq.respectTransparency false
13 noncomputable section
14 namespace RealizationBoundaries
15
16 def inverseDiagonal (c : Ambient) : Ambient := fun p => (c p)⁻¹
17
18 @[simp] theorem inverseDiagonal_apply (c : Ambient) (p : Prime) :
19 inverseDiagonal c p = (c p)⁻¹ := rfl
20
21 theorem diagonal_inverse_left (c : Ambient) (hc : ∀ p, c p ≠ 0) (x : Ambient) :
22 diagonal (inverseDiagonal c) (diagonal c x) = x := by
23 funext p
24 exact inv_mul_cancel_left₀ (hc p) (x p)
25
26 theorem diagonal_inverse_right (c : Ambient) (hc : ∀ p, c p ≠ 0) (x : Ambient) :
27 diagonal c (diagonal (inverseDiagonal c) x) = x := by
28 funext p
29 exact mul_inv_cancel_left₀ (hc p) (x p)
30
31 /-- A topological additive equivalence on the actual infinite product. -/
32 def diagonalAmbientEquiv (c : Ambient) (hc : ∀ p, c p ≠ 0) : Ambient ≃ₜ+ Ambient where
33 toFun := diagonal c
34 invFun := diagonal (inverseDiagonal c)
35 left_inv := diagonal_inverse_left c hc
36 right_inv := diagonal_inverse_right c hc
37 map_add' := map_add (diagonal c)
38 continuous_toFun := diagonal_continuous c
39 continuous_invFun := diagonal_continuous (inverseDiagonal c)
40
41 theorem diagonalTail_inverse_left (c : Ambient) (hc : ∀ p, c p ≠ 0) (v : TailSpace) :
42 diagonalTail (inverseDiagonal c) (diagonalTail c v) = v := by
43 obtain ⟨x, rfl⟩ := quotientMap_surjective v
44 simp only [diagonalTail_quotient, diagonal_inverse_left c hc]
45
46 theorem diagonalTail_inverse_right (c : Ambient) (hc : ∀ p, c p ≠ 0) (v : TailSpace) :
47 diagonalTail c (diagonalTail (inverseDiagonal c) v) = v := by
48 obtain ⟨x, rfl⟩ := quotientMap_surjective v
49 simp only [diagonalTail_quotient, diagonal_inverse_right c hc]
50
51 /-- A zero coordinate of the diagonal kills an actual nonzero prime seed. -/
52 theorem hom_injective_iff_diagonal_nonzero (U V : Submodule ℚ TailSpace)
53 (f : preimage U →+ preimage V) :
54 Function.Injective f ↔ ∀ p, homDiagonal U V f p ≠ 0 := by
55 constructor
56 · intro hf p hp
57 have hz : f (preimageSeed U p) = 0 := by
58 apply Subtype.ext
59 funext q
60 rw [hom_coordinate_formula U V f]
61 by_cases hq : q = p
62 · subst q
63 simp [hp]
64 · classical
65 simp [preimageSeed, primeSeed, cut, hq]
66 have he : preimageSeed U p = 0 := hf (hz.trans (map_zero f).symm)
67 have he' := congrArg (fun x : preimage U => x.val p) he
68 simp at he'
69 · intro hc x y hxy
70 apply Subtype.ext
71 funext p
72 have he := congrArg (fun z : preimage V => z.val p) hxy
73 rw [hom_coordinate_formula U V f, hom_coordinate_formula U V f] at he
74 exact mul_left_cancel₀ (hc p) he
75
76 /-- Surjectivity also forces every diagonal coefficient to be nonzero. -/
77 theorem hom_surjective_diagonal_nonzero (U V : Submodule ℚ TailSpace)
78 (f : preimage U →+ preimage V) (hf : Function.Surjective f) :
79 ∀ p, homDiagonal U V f p ≠ 0 := by
80 intro p hp
81 obtain ⟨x, hx⟩ := hf (preimageSeed V p)
82 have he := congrArg (fun z : preimage V => z.val p) hx
83 rw [hom_coordinate_formula U V f, hp, zero_mul, preimageSeed_apply] at he
84 exact zero_ne_one he
85
86 /-- Nonzero coordinate scalars cannot annihilate the source's nonzero rational line. -/
87 theorem diagonalSlope_ne_zero (S T : Set Prime) (hS : S.Infinite) (c : Ambient)
88 (hc : DiagonalAdmissible (selectorLine S) (selectorLine T) c)
89 (hn : ∀ p, c p ≠ 0) : diagonalSlope S T c hc ≠ 0 := by
90 intro hz
91 have hs := diagonalSlope_spec S T c hc
92 rw [hz, zero_smul] at hs
93 have hi := congrArg (diagonalTail (inverseDiagonal c)) hs
94 rw [diagonalTail_inverse_left c hn, map_zero] at hi
95 exact indicator_tail_ne_zero hS hi
96
97 /-- The inverse multiplier maps the target line back to the source line.
98 The nonzero slope and the inverse line equation are derived explicitly. -/
99 theorem inverseDiagonal_admissible (S T : Set Prime) (hS : S.Infinite) (c : Ambient)
100 (hc : DiagonalAdmissible (selectorLine S) (selectorLine T) c)
101 (hn : ∀ p, c p ≠ 0) :
102 DiagonalAdmissible (selectorLine T) (selectorLine S) (inverseDiagonal c) := by
103 let r := diagonalSlope S T c hc
104 have hr : r ≠ 0 := diagonalSlope_ne_zero S T hS c hc hn
105 have he : quotientMap (indicator S) =
106 r • diagonalTail (inverseDiagonal c) (quotientMap (indicator T)) := by
107 have h := congrArg (diagonalTail (inverseDiagonal c)) (diagonalSlope_spec S T c hc)
108 rw [diagonalTail_inverse_left c hn, map_smul] at h
109 exact h
110 apply (diagonalAdmissible_selector_iff T S _).mpr
111 apply (mem_selectorGroup_iff S _).mpr
112 refine ⟨r⁻¹, ?_⟩
113 rw [he, smul_smul, inv_mul_cancel₀ hr, one_smul]
114 rfl
115
116 /-- Exact inverse on the original subgroups, not only on their completion. -/
117 def selectorEquivOfNonzeroDiagonal (S T : Set Prime) (hS : S.Infinite)
118 (f : selectorGroup S →+ selectorGroup T)
119 (hn : ∀ p, homDiagonal (selectorLine S) (selectorLine T) f p ≠ 0) :
120 selectorGroup S ≃+ selectorGroup T where
121 toFun := f
122 invFun := diagonalRestriction (selectorLine T) (selectorLine S)
123 (inverseDiagonal (homDiagonal (selectorLine S) (selectorLine T) f))
124 (inverseDiagonal_admissible S T hS _ (homDiagonal_admissible _ _ f) hn)
125 left_inv x := by
126 apply Subtype.ext
127 change diagonal (inverseDiagonal (homDiagonal (selectorLine S) (selectorLine T) f))
128 (f x).val = x.val
129 exact (congrArg (diagonal (inverseDiagonal
130 (homDiagonal (selectorLine S) (selectorLine T) f)))
131 (hom_eq_diagonal (selectorLine S) (selectorLine T) f x)).trans
132 (diagonal_inverse_left _ hn x.val)
133 right_inv y := by
134 apply Subtype.ext
135 exact (hom_eq_diagonal (selectorLine S) (selectorLine T) f _).trans
136 (diagonal_inverse_right _ hn y.val)
137 map_add' := map_add f
138
139 @[simp] theorem selectorEquivOfNonzeroDiagonal_apply (S T : Set Prime) (hS : S.Infinite)
140 (f : selectorGroup S →+ selectorGroup T)
141 (hn : ∀ p, homDiagonal (selectorLine S) (selectorLine T) f p ≠ 0)
142 (x : selectorGroup S) : selectorEquivOfNonzeroDiagonal S T hS f hn x = f x := rfl
143
144 /-- The inverse formula is the reciprocal diagonal at every prime, with no tail exceptions. -/
145 theorem selectorEquiv_inverse_coordinate (S T : Set Prime) (hS : S.Infinite)
146 (f : selectorGroup S →+ selectorGroup T)
147 (hn : ∀ p, homDiagonal (selectorLine S) (selectorLine T) f p ≠ 0)
148 (y : selectorGroup T) (p : Prime) :
149 ((selectorEquivOfNonzeroDiagonal S T hS f hn).symm y).val p =
150 (homDiagonal (selectorLine S) (selectorLine T) f p)⁻¹ * y.val p := rfl
151
152 /-- The rank-one line argument is essential to this converse. -/
153 theorem selector_hom_bijective_iff (S T : Set Prime) (hS : S.Infinite)
154 (f : selectorGroup S →+ selectorGroup T) :
155 Function.Bijective f ↔ ∀ p, homDiagonal (selectorLine S) (selectorLine T) f p ≠ 0 := by
156 constructor
157 · intro hf
158 exact (hom_injective_iff_diagonal_nonzero _ _ f).mp hf.1
159 · intro hn
160 exact (selectorEquivOfNonzeroDiagonal S T hS f hn).bijective
161
162 /-- In this rank-one family an injective supplied map is automatically an isomorphism. -/
163 theorem selector_hom_injective_iff_bijective (S T : Set Prime) (hS : S.Infinite)
164 (f : selectorGroup S →+ selectorGroup T) :
165 Function.Injective f ↔ Function.Bijective f := by
166 rw [selector_hom_bijective_iff S T hS]
167 exact hom_injective_iff_diagonal_nonzero _ _ f
168
169 theorem selector_hom_surjective_iff_bijective (S T : Set Prime) (hS : S.Infinite)
170 (f : selectorGroup S →+ selectorGroup T) :
171 Function.Surjective f ↔ Function.Bijective f := by
172 constructor
173 · intro hf
174 exact (selector_hom_bijective_iff S T hS f).mpr
175 (hom_surjective_diagonal_nonzero _ _ f hf)
176 · exact fun hf => hf.2
177
178 /-- Corollary 7.8, including the existence of an actual additive automorphism. -/
179 theorem selector_endomorphism_automorphism_iff (S : Set Prime) (hS : S.Infinite)
180 (f : AddMonoid.End (selectorGroup S)) :
181 (∃ e : selectorGroup S ≃+ selectorGroup S, e.toAddMonoidHom = f) ↔
182 ∀ p, homDiagonal (selectorLine S) (selectorLine S) f p ≠ 0 := by
183 constructor
184 · rintro ⟨e, rfl⟩
185 exact (hom_injective_iff_diagonal_nonzero _ _ _).mp e.injective
186 · intro hn
187 exact ⟨selectorEquivOfNonzeroDiagonal S S hS f hn, rfl⟩
188
189 end RealizationBoundaries
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: 9f354e378b7526f98b1b6012625997fcb310ad77088f9891ee7f715698abae35