Skip to content

Commit 6edd067

Browse files
committed
feat: collections of non-trivial and pairwise inequivalent absolute values contain values that diverge around 1 (#27969)
If $v_1, ..., v_k$ is a a finite collection of non-trivial and pairwise inequivalent absolute values in a field, then for each $v_i$ there is a point $a$ for which $1 < v_i(a)$ while $v_j(a) < 1$ for all $j \neq i$. This generalises the corresponding result on pairs of absolute values PR'd in #27964 This PR continues the work from #22142. Original PR: #22142
1 parent 79a1283 commit 6edd067

File tree

3 files changed

+152
-0
lines changed

3 files changed

+152
-0
lines changed

Mathlib/Analysis/AbsoluteValue/Equivalence.lean

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,130 @@ theorem exists_one_lt_lt_one_of_not_isEquiv {v w : AbsoluteValue R S} (hv : v.Is
151151

152152
end LinearOrderedSemifield
153153

154+
section LinearOrderedField
155+
156+
open Filter
157+
open scoped Topology
158+
159+
variable {R S : Type*} [Field R] [Field S] [LinearOrder S] {v w : AbsoluteValue R S}
160+
[TopologicalSpace S] [IsStrictOrderedRing S] [Archimedean S] [OrderTopology S]
161+
{ι : Type*} [Fintype ι] [DecidableEq ι] {v : ι → AbsoluteValue R S} {w : AbsoluteValue R S}
162+
{a b : R} {i : ι}
163+
164+
/--
165+
Suppose that
166+
- `v i` and `w` are absolute values on a field `R`.
167+
- `v i` is inequivalent to `v j` for all `j ≠ i` via the divergent point `a : R`.
168+
- `v i` is inequivalent to `w` via the divergent point `b : R`.
169+
- `w a = 1`.
170+
171+
Then there is a common divergent point `k` causing both `v i` and `w` to be inequivalent to
172+
each `v j` for `j ≠ i`.
173+
-/
174+
private theorem exists_one_lt_lt_one_pi_of_eq_one (ha : 1 < v i a) (haj : ∀ j ≠ i, v j a < 1)
175+
(haw : w a = 1) (hb : 1 < v i b) (hbw : w b < 1) :
176+
∃ k : R, 1 < v i k ∧ (∀ j ≠ i, v j k < 1) ∧ w k < 1 := by
177+
let c : ℕ → R := fun n ↦ a ^ n * b
178+
have hcᵢ : Tendsto (fun n ↦ (v i) (c n)) atTop atTop := by
179+
simpa [c] using Tendsto.atTop_mul_const (by linarith) (tendsto_pow_atTop_atTop_of_one_lt ha)
180+
have hcⱼ (j : ι) (hj : j ≠ i) : Tendsto (fun n ↦ (v j) (c n)) atTop (𝓝 0) := by
181+
simpa [c] using (tendsto_pow_atTop_nhds_zero_of_lt_one ((v j).nonneg _) (haj j hj)).mul_const _
182+
simp_rw [OrderTopology.topology_eq_generate_intervals,
183+
TopologicalSpace.tendsto_nhds_generateFrom_iff, mem_atTop_sets, Set.mem_preimage] at hcⱼ
184+
choose r₁ hr₁ using tendsto_atTop_atTop.1 hcᵢ 2
185+
choose rₙ hrₙ using fun j hj ↦ hcⱼ j hj (.Iio 1) (by simpa using ⟨1, .inr rfl⟩) (by simp)
186+
let r := Finset.univ.sup fun j ↦ if h : j = i then r₁ else rₙ j h
187+
refine ⟨c r, lt_of_lt_of_le (by linarith) (hr₁ r ?_), fun j hj ↦ ?_, by simpa [c, haw]⟩
188+
· exact Finset.le_sup_dite_pos (p := fun j ↦ j = i) (f := fun _ _ ↦ r₁) (Finset.mem_univ _) rfl
189+
· simpa using hrₙ j hj _ <| Finset.le_sup_dite_neg (fun j ↦ j = i) (Finset.mem_univ j) _
190+
191+
/--
192+
Suppose that
193+
- `v i` and `w` are absolute values on a field `R`.
194+
- `v i` is inequivalent to `v j` for all `j ≠ i` via the divergent point `a : R`.
195+
- `v i` is inequivalent to `w` via the divergent point `b : R`.
196+
- `1 < w a`.
197+
198+
Then there is a common divergent point `k : R` causing both `v i` and `w` to be inequivalent to
199+
each `v j` for `j ≠ i`.
200+
-/
201+
private theorem exists_one_lt_lt_one_pi_of_one_lt (ha : 1 < v i a) (haj : ∀ j ≠ i, v j a < 1)
202+
(haw : 1 < w a) (hb : 1 < v i b) (hbw : w b < 1) :
203+
∃ k : R, 1 < v i k ∧ (∀ j ≠ i, v j k < 1) ∧ w k < 1 := by
204+
let c : ℕ → R := fun n ↦ 1 / (1 + a⁻¹ ^ n) * b
205+
have hcᵢ : Tendsto (fun n ↦ v i (c n)) atTop (𝓝 (v i b)) := by
206+
have : v i a⁻¹ < 1 := map_inv₀ (v i) a ▸ inv_lt_one_of_one_lt₀ ha
207+
simpa [c] using (tendsto_div_one_add_pow_nhds_one this).mul_const (v i b)
208+
have hcⱼ (j : ι) (hj : j ≠ i) : atTop.Tendsto (fun n ↦ v j (c n)) (𝓝 0) := by
209+
have : 1 < v j a⁻¹ := map_inv₀ (v j) _ ▸
210+
(one_lt_inv₀ <| (v j).pos fun h ↦ by linarith [map_zero (v _) ▸ h ▸ ha]).2 (haj j hj)
211+
simpa [c] using (tendsto_div_one_add_pow_nhds_zero this).mul_const _
212+
have hcₙ : atTop.Tendsto (fun n ↦ w (c n)) (𝓝 (w b)) := by
213+
have : w a⁻¹ < 1 := map_inv₀ w _ ▸ inv_lt_one_of_one_lt₀ haw
214+
simpa [c] using (tendsto_div_one_add_pow_nhds_one this).mul_const (w b)
215+
simp_rw [OrderTopology.topology_eq_generate_intervals,
216+
TopologicalSpace.tendsto_nhds_generateFrom_iff, mem_atTop_sets, Set.mem_preimage] at hcⱼ
217+
choose r₁ hr₁ using Filter.eventually_atTop.1 <| Filter.Tendsto.eventually_const_lt hb hcᵢ
218+
choose rₙ hrₙ using fun j hj ↦ hcⱼ j hj (.Iio 1) (by simpa using ⟨1, .inr rfl⟩) (by simp)
219+
choose rN hrN using Filter.eventually_atTop.1 <| Filter.Tendsto.eventually_lt_const hbw hcₙ
220+
let r := max (Finset.univ.sup fun j ↦ if h : j = i then r₁ else rₙ j h) rN
221+
refine ⟨c r, hr₁ r ?_, fun j hj ↦ ?_, ?_⟩
222+
· exact le_max_iff.2 <| .inl <|
223+
Finset.le_sup_dite_pos (p := fun j ↦ j = i) (f := fun _ _ ↦ r₁) (Finset.mem_univ _) rfl
224+
· exact hrₙ j hj _ <| le_max_iff.2 <| .inl <|
225+
Finset.le_sup_dite_neg (fun j ↦ j = i) (Finset.mem_univ j) _
226+
· exact hrN _ <| le_max_iff.2 (.inr le_rfl)
227+
228+
open Fintype Subtype in
229+
/--
230+
If `v : ι → AbsoluteValue R S` is a finite collection of non-trivial and pairwise inequivalent
231+
absolute values, then for any `i` there is some `a : R` such that `1 < v i a` and
232+
`v j a < 1` for all `j ≠ i`.
233+
-/
234+
theorem exists_one_lt_lt_one_pi_of_not_isEquiv (h : ∀ i, (v i).IsNontrivial)
235+
(hv : Pairwise fun i j ↦ ¬(v i).IsEquiv (v j)) :
236+
∀ i, ∃ (a : R), 1 < v i a ∧ ∀ j ≠ i, v j a < 1 := by
237+
let P (ι : Type _) [Fintype ι] : Prop := [DecidableEq ι] →
238+
∀ v : ι → AbsoluteValue R S, (∀ i, (v i).IsNontrivial) →
239+
(Pairwise fun i j ↦ ¬(v i).IsEquiv (v j)) → ∀ i, ∃ (a : R), 1 < v i a ∧ ∀ j ≠ i, v j a < 1
240+
-- Use strong induction on the index.
241+
revert hv h; refine induction_subsingleton_or_nontrivial (P := P) ι (fun ι _ _ _ v h hv i ↦ ?_)
242+
(fun ι _ _ ih _ v h hv i ↦ ?_) v
243+
· -- If `ι` is trivial this follows immediately from `(v i).IsNontrivial`.
244+
let ⟨a, ha⟩ := (h i).exists_abv_gt_one
245+
exact ⟨a, ha, fun j hij ↦ absurd (Subsingleton.elim i j) hij.symm⟩
246+
· rcases eq_or_ne (card ι) 2 with (hc | hc)
247+
· -- If `ι` has two elements this is `exists_one_lt_lt_one_of_not_isEquiv`.
248+
let ⟨j, hj⟩ := (Nat.card_eq_two_iff' i).1 <| card_eq_nat_card ▸ hc
249+
let ⟨a, ha⟩ := (v i).exists_one_lt_lt_one_of_not_isEquiv (h i) (h j) (hv hj.1.symm)
250+
exact ⟨a, ha.1, fun _ h ↦ hj.2 _ h ▸ ha.2
251+
have hlt : 2 < card ι := Nat.lt_of_le_of_ne (one_lt_card_iff_nontrivial.2 ‹_›) hc.symm
252+
-- Otherwise, choose another distinguished index `j ≠ i`.
253+
let ⟨j, hj⟩ := exists_ne i
254+
-- Apply induction first on the subcollection `v i` for `i ≠ j` to get `a : K`
255+
let ⟨a, ha⟩ := ih {k : ι // k ≠ j} (card_subtype_lt fun a ↦ a rfl) (restrict _ v)
256+
(fun i ↦ h _) (hv.comp_of_injective val_injective) ⟨i, hj.symm⟩
257+
-- Then apply induction next to the subcollection `{v i, v j}` to get `b : K`.
258+
let ⟨b, hb⟩ := ih {k : ι // k = i ∨ k = j} (by linarith [card_subtype_eq_or_eq_of_ne hj.symm])
259+
(restrict _ v) (fun _ ↦ h _) (hv.comp_of_injective val_injective) ⟨i, .inl rfl⟩
260+
rcases eq_or_ne (v j a) 1 with (ha₁ | ha₁)
261+
· -- If `v j a = 1` then take a large enough value from the sequence `a ^ n * b`.
262+
let ⟨c, hc⟩ := exists_one_lt_lt_one_pi_of_eq_one ha.1 ha.2 ha₁ hb.1 (hb.2 ⟨j, .inr rfl⟩
263+
(by grind))
264+
refine ⟨c, hc.1, fun k hk ↦ ?_⟩
265+
rcases eq_or_ne k j with (rfl | h); try exact hc.2.2; exact hc.2.1 ⟨k, h⟩ (by grind)
266+
rcases ha₁.lt_or_gt with (ha_lt | ha_gt)
267+
· -- If `v j a < 1` then `a` works as the divergent point.
268+
refine ⟨a, ha.1, fun k hk ↦ ?_⟩
269+
rcases eq_or_ne k j with (rfl | h); try exact ha_lt; exact ha.2 ⟨k, h⟩ (by grind)
270+
· -- If `1 < v j a` then take a large enough value from the sequence `b / (1 + a ^ (-n))`.
271+
let ⟨c, hc⟩ := exists_one_lt_lt_one_pi_of_one_lt ha.1 ha.2 ha_gt hb.1 (hb.2 ⟨j, .inr rfl⟩
272+
(by grind))
273+
refine ⟨c, hc.1, fun k hk ↦ ?_⟩
274+
rcases eq_or_ne k j with (rfl | h); try exact hc.2.2; exact hc.2.1 ⟨k, h⟩ (by grind)
275+
276+
end LinearOrderedField
277+
154278
section Real
155279

156280
open Real

Mathlib/Analysis/SpecificLimits/Normed.lean

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,30 @@ lemma tendsto_pow_atTop_nhds_zero_iff_norm_lt_one {R : Type*} [SeminormedRing R]
235235
| base => simp
236236
| succ n hn IH => simp [pow_succ, IH]
237237

238+
variable {R S : Type*} [Field R] [Field S] [LinearOrder S] {v w : AbsoluteValue R S}
239+
[TopologicalSpace S] [IsStrictOrderedRing S] [Archimedean S] [_i : OrderTopology S]
240+
241+
/-- `v (1 / (1 + a ^n))` tends to `1` for all `v : AbsoluteValue R S` for fields `R` and `S`,
242+
provided `v a < 1`. -/
243+
theorem AbsoluteValue.tendsto_div_one_add_pow_nhds_one {v : AbsoluteValue R S} {a : R}
244+
(ha : v a < 1) : atTop.Tendsto (fun (n : ℕ) ↦ v (1 / (1 + a ^ n))) (𝓝 1) := by
245+
simp_rw [map_div₀ v, v.map_one]
246+
apply one_div_one (G := S) ▸ Tendsto.div tendsto_const_nhds _ one_ne_zero
247+
have h_add := (tendsto_pow_atTop_nhds_zero_of_lt_one (v.nonneg _) ha).const_add 1
248+
have h_sub := (tendsto_pow_atTop_nhds_zero_of_lt_one (v.nonneg _) ha).const_sub 1
249+
exact tendsto_of_tendsto_of_tendsto_of_le_of_le (by simpa using h_sub) (by simpa using h_add)
250+
(fun n ↦ le_trans (by simp) (v.le_add _ _))
251+
(fun n ↦ le_trans (v.add_le _ _) (by simp))
252+
253+
/-- `v (1 / (1 + a ^n))` tends to `0` whenever `v : AbsoluteValue R S` for fields `R` and `S`,
254+
provided `1 < v a`. -/
255+
theorem AbsoluteValue.tendsto_div_one_add_pow_nhds_zero {v : AbsoluteValue R S} {a : R}
256+
(ha : 1 < v a) : Filter.Tendsto (fun (n : ℕ) ↦ v (1 / (1 + a ^ n))) Filter.atTop (𝓝 0) := by
257+
simp_rw [div_eq_mul_inv, one_mul, map_inv₀, fun n ↦ add_comm 1 (a ^ n)]
258+
refine (tendsto_atTop_mono (fun n ↦ v.le_add _ _) ?_).inv_tendsto_atTop
259+
simpa using (tendsto_atTop_add_right_of_le _ _ (tendsto_pow_atTop_atTop_of_one_lt ha)
260+
(fun _ ↦ le_rfl)).congr fun n ↦ (sub_eq_add_neg (v a ^ n) 1).symm
261+
238262
/-! ### Geometric series -/
239263

240264
/-- A normed ring has summable geometric series if, for all `ξ` of norm `< 1`, the geometric series

Mathlib/Data/Fintype/Sum.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,10 @@ theorem Fintype.card_subtype_or_disjoint (p q : α → Prop) (h : Disjoint p q)
137137
convert Fintype.card_congr (subtypeOrEquiv p q h)
138138
simp
139139

140+
theorem Fintype.card_subtype_eq_or_eq_of_ne {α : Type*} [Fintype α] [DecidableEq α] {a b : α}
141+
(h : a ≠ b) : Fintype.card { c : α // c = a ∨ c = b } = 2 :=
142+
Fintype.card_subtype_or_disjoint _ _ fun _ ha hb _ hc ↦ ha _ hc ▸ hb _ hc ▸ h <| rfl
143+
140144
attribute [local instance] Fintype.ofFinite in
141145
@[simp]
142146
theorem infinite_sum : Infinite (α ⊕ β) ↔ Infinite α ∨ Infinite β := by

0 commit comments

Comments
 (0)