Skip to content

Commit 3cf5388

Browse files
feat(AbsoluteValue/Equivalence): two absolute values v and w are equivalent if and only if WithAbs v and WithAbs w are homeomorphic (#29966)
Co-authored-by: Michael Stoll <Michael.Stoll@uni-bayreuth.de>
1 parent 2c3f8ca commit 3cf5388

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

Mathlib/Analysis/AbsoluteValue/Equivalence.lean

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Michael Stoll
55
-/
66
import Mathlib.Analysis.SpecialFunctions.Pow.Real
7+
import Mathlib.Analysis.Normed.Field.WithAbs
78

89
/-!
910
# Equivalence of real-valued absolute values
@@ -277,7 +278,7 @@ end LinearOrderedField
277278

278279
section Real
279280

280-
open Real
281+
open Real Topology
281282

282283
variable {F : Type*} [Field F] {v w : AbsoluteValue F ℝ}
283284

@@ -337,6 +338,42 @@ theorem isEquiv_iff_exists_rpow_eq {v w : AbsoluteValue F ℝ} :
337338
· exact ⟨1, zero_lt_one, funext fun x ↦ by rcases eq_or_ne x 0 with rfl | h₀ <;>
338339
aesop (add simp [h.isNontrivial_congr])⟩
339340

341+
theorem IsEquiv.equivWithAbs_image_mem_nhds_zero (h : v.IsEquiv w) {U : Set (WithAbs v)}
342+
(hU : U ∈ 𝓝 0) : WithAbs.equivWithAbs v w '' U ∈ 𝓝 0 := by
343+
rw [Metric.mem_nhds_iff] at hU ⊢
344+
obtain ⟨ε, hε, hU⟩ := hU
345+
obtain ⟨c, hc, hvw⟩ := isEquiv_iff_exists_rpow_eq.1 h
346+
refine ⟨ε ^ c, rpow_pos_of_pos hε _, fun x hx ↦ ?_⟩
347+
rw [← RingEquiv.apply_symm_apply (WithAbs.equivWithAbs v w) x]
348+
refine Set.mem_image_of_mem _ (hU ?_)
349+
rw [Metric.mem_ball, dist_zero_right, WithAbs.norm_eq_abv, ← funext_iff.1 hvw,
350+
rpow_lt_rpow_iff (v.nonneg _) hε.le hc] at hx
351+
simpa [WithAbs.norm_eq_abv]
352+
353+
open Topology IsTopologicalAddGroup in
354+
theorem IsEquiv.isEmbedding_equivWithAbs (h : v.IsEquiv w) :
355+
IsEmbedding (WithAbs.equivWithAbs v w) := by
356+
refine IsInducing.isEmbedding <| isInducing_iff_nhds_zero.2 <| Filter.ext fun U ↦
357+
fun hU ↦ ?_, fun hU ↦ ?_⟩
358+
· exact ⟨WithAbs.equivWithAbs v w '' U, h.equivWithAbs_image_mem_nhds_zero hU,
359+
by simp [RingEquiv.image_eq_preimage, Set.preimage_preimage]⟩
360+
· rw [← RingEquiv.coe_toEquiv, ← Filter.map_equiv_symm] at hU
361+
obtain ⟨s, hs, hss⟩ := Filter.mem_map_iff_exists_image.1 hU
362+
rw [← RingEquiv.coe_toEquiv_symm, WithAbs.equivWithAbs_symm] at hss
363+
exact Filter.mem_of_superset (h.symm.equivWithAbs_image_mem_nhds_zero hs) hss
364+
365+
theorem isEquiv_iff_isHomeomorph (v w : AbsoluteValue F ℝ) :
366+
v.IsEquiv w ↔ IsHomeomorph (WithAbs.equivWithAbs v w) := by
367+
rw [isHomeomorph_iff_isEmbedding_surjective]
368+
refine ⟨fun h ↦ ⟨h.isEmbedding_equivWithAbs, RingEquiv.surjective _⟩, fun ⟨hi, _⟩ ↦ ?_⟩
369+
refine isEquiv_iff_lt_one_iff.2 fun x ↦ ?_
370+
conv_lhs => rw [← (WithAbs.equiv v).apply_symm_apply x]
371+
conv_rhs => rw [← (WithAbs.equiv w).apply_symm_apply x]
372+
simp_rw [← WithAbs.norm_eq_abv, ← tendsto_pow_atTop_nhds_zero_iff_norm_lt_one]
373+
exact ⟨fun h ↦ by simpa [Function.comp_def] using (hi.continuous.tendsto 0).comp h, fun h ↦ by
374+
simpa [Function.comp_def] using (hi.continuous_iff (f := (WithAbs.equivWithAbs v w).symm)).2
375+
continuous_id |>.tendsto 0 |>.comp h ⟩
376+
340377
end Real
341378

342379
end AbsoluteValue

Mathlib/Analysis/Normed/Ring/WithAbs.lean

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,26 @@ instance instInhabited : Inhabited (WithAbs v) := ⟨0⟩
5151
/-- The canonical (semiring) equivalence between `WithAbs v` and `R`. -/
5252
def equiv : WithAbs v ≃+* R := RingEquiv.refl _
5353

54+
/-- The canonical (semiring) equivalence between `WithAbs v` and `WithAbs w`, for any two
55+
absolute values `v` and `w` on `R`. -/
56+
def equivWithAbs (v w : AbsoluteValue R S) : WithAbs v ≃+* WithAbs w :=
57+
(WithAbs.equiv v).trans <| (WithAbs.equiv w).symm
58+
59+
theorem equivWithAbs_symm (v w : AbsoluteValue R S) :
60+
(equivWithAbs v w).symm = equivWithAbs w v := rfl
61+
62+
@[simp]
63+
theorem equiv_equivWithAbs_symm_apply {v w : AbsoluteValue R S} {x : WithAbs w} :
64+
equiv v ((equivWithAbs v w).symm x) = equiv w x := rfl
65+
66+
@[simp]
67+
theorem equivWithAbs_equiv_symm_apply {v w : AbsoluteValue R S} {x : R} :
68+
equivWithAbs v w ((equiv v).symm x) = (equiv w).symm x := rfl
69+
70+
@[simp]
71+
theorem equivWithAbs_symm_equiv_symm_apply {v w : AbsoluteValue R S} {x : R} :
72+
(equivWithAbs v w).symm ((equiv w).symm x) = (equiv v).symm x := rfl
73+
5474
end semiring
5575

5676
section more_instances

0 commit comments

Comments
 (0)