@@ -151,6 +151,130 @@ theorem exists_one_lt_lt_one_of_not_isEquiv {v w : AbsoluteValue R S} (hv : v.Is
151151
152152end 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+
154278section Real
155279
156280open Real
0 commit comments