Skip to content

Commit 6032e3a

Browse files
j-loreauxurkud
andcommitted
feat: inv interchanges cobounded and 𝓝[≠] 0 in normed division rings (#8234)
Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>
1 parent 76c21f6 commit 6032e3a

File tree

6 files changed

+53
-13
lines changed

6 files changed

+53
-13
lines changed

Mathlib/Analysis/Normed/Field/Basic.lean

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ definitions.
1919

2020
variable {α : Type*} {β : Type*} {γ : Type*} {ι : Type*}
2121

22-
open Filter Metric
22+
open Filter Metric Bornology
2323

2424
open Topology BigOperators NNReal ENNReal uniformity Pointwise
2525

@@ -616,6 +616,25 @@ theorem Filter.tendsto_mul_right_cobounded {a : α} (ha : a ≠ 0) :
616616
tendsto_comap.atTop_mul (norm_pos_iff.2 ha) tendsto_const_nhds
617617
#align filter.tendsto_mul_right_cobounded Filter.tendsto_mul_right_cobounded
618618

619+
@[simp]
620+
lemma Filter.inv_cobounded₀ : (cobounded α)⁻¹ = 𝓝[≠] 0 := by
621+
rw [← comap_norm_atTop, ← Filter.comap_inv, ← comap_norm_nhdsWithin_Ioi_zero,
622+
← inv_atTop₀, ← Filter.comap_inv]
623+
simp only [comap_comap, (· ∘ ·), norm_inv]
624+
625+
@[simp]
626+
lemma Filter.inv_nhdsWithin_ne_zero : (𝓝[≠] (0 : α))⁻¹ = cobounded α := by
627+
rw [← inv_cobounded₀, inv_inv]
628+
629+
lemma Filter.tendsto_inv₀_cobounded' : Tendsto Inv.inv (cobounded α) (𝓝[≠] 0) :=
630+
inv_cobounded₀.le
631+
632+
theorem Filter.tendsto_inv₀_cobounded : Tendsto Inv.inv (cobounded α) (𝓝 0) :=
633+
tendsto_inv₀_cobounded'.mono_right inf_le_left
634+
635+
lemma Filter.tendsto_inv₀_nhdsWithin_ne_zero : Tendsto Inv.inv (𝓝[≠] 0) (cobounded α) :=
636+
inv_nhdsWithin_ne_zero.le
637+
619638
-- see Note [lower instance priority]
620639
instance (priority := 100) NormedDivisionRing.to_hasContinuousInv₀ : HasContinuousInv₀ α := by
621640
refine' ⟨fun r r0 => tendsto_iff_norm_sub_tendsto_zero.2 _⟩

Mathlib/Analysis/Normed/Group/Basic.lean

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2101,6 +2101,10 @@ theorem coe_normGroupNorm : ⇑(normGroupNorm E) = norm :=
21012101
rfl
21022102
#align coe_norm_group_norm coe_normGroupNorm
21032103

2104+
@[to_additive comap_norm_nhdsWithin_Ioi_zero]
2105+
lemma comap_norm_nhdsWithin_Ioi_zero' : comap norm (𝓝[>] 0) = 𝓝[≠] (1 : E) := by
2106+
simp [nhdsWithin, comap_norm_nhds_one, Set.preimage, Set.compl_def]
2107+
21042108
end NormedGroup
21052109

21062110
section NormedAddGroup
@@ -2109,7 +2113,6 @@ variable [NormedAddGroup E] [TopologicalSpace α] {f : α → E}
21092113

21102114
/-! Some relations with `HasCompactSupport` -/
21112115

2112-
21132116
theorem hasCompactSupport_norm_iff : (HasCompactSupport fun x => ‖f x‖) ↔ HasCompactSupport f :=
21142117
hasCompactSupport_comp_left norm_eq_zero
21152118
#align has_compact_support_norm_iff hasCompactSupport_norm_iff

Mathlib/Order/Filter/AtTopBot.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,13 @@ theorem atTop_basis_Ioi [Nonempty α] [SemilatticeSup α] [NoMaxOrder α] :
277277
(exists_gt a).imp fun _b hb => ⟨ha, Ici_subset_Ioi.2 hb⟩
278278
#align filter.at_top_basis_Ioi Filter.atTop_basis_Ioi
279279

280+
lemma atTop_basis_Ioi' [SemilatticeSup α] [NoMaxOrder α] (a : α) : atTop.HasBasis (a < ·) Ioi :=
281+
have : Nonempty α := ⟨a⟩
282+
atTop_basis_Ioi.to_hasBasis (fun b _ ↦
283+
let ⟨c, hc⟩ := exists_gt (a ⊔ b)
284+
⟨c, le_sup_left.trans_lt hc, Ioi_subset_Ioi <| le_sup_right.trans hc.le⟩) fun b _ ↦
285+
⟨b, trivial, Subset.rfl⟩
286+
280287
theorem atTop_countable_basis [Nonempty α] [SemilatticeSup α] [Countable α] :
281288
HasCountableBasis (atTop : Filter α) (fun _ => True) Ici :=
282289
{ atTop_basis with countable := to_countable _ }

Mathlib/Order/Filter/Bases.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,11 @@ theorem HasBasis.to_hasBasis (hl : l.HasBasis p s) (h : ∀ i, p i → ∃ i', p
356356
hl.mem_iff.2 ⟨i, hi, hss'⟩
357357
#align filter.has_basis.to_has_basis Filter.HasBasis.to_hasBasis
358358

359+
protected lemma HasBasis.congr (hl : l.HasBasis p s) {p' s'} (hp : ∀ i, p i ↔ p' i)
360+
(hs : ∀ i, p i → s i = s' i) : l.HasBasis p' s' :=
361+
fun t ↦ by simp only [hl.mem_iff, ← hp]; exact exists_congr fun i ↦
362+
and_congr_right fun hi ↦ hs i hi ▸ Iff.rfl⟩
363+
359364
theorem HasBasis.to_subset (hl : l.HasBasis p s) {t : ι → Set α} (h : ∀ i, p i → t i ⊆ s i)
360365
(ht : ∀ i, p i → t i ∈ l) : l.HasBasis p t :=
361366
hl.to_hasBasis' (fun i hi => ⟨i, hi, h i hi⟩) ht

Mathlib/Topology/Algebra/Order/Field.lean

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ then `f * g` tends to positive infinity.
1919
-/
2020

2121

22-
open Set Filter TopologicalSpace Function Topology Classical
22+
open Set Filter TopologicalSpace Function
23+
open scoped Pointwise Topology
2324
open OrderDual (toDual ofDual)
2425

2526
/-- If a (possibly non-unital and/or non-associative) ring `R` admits a submultiplicative
@@ -117,20 +118,22 @@ theorem Filter.Tendsto.neg_mul_atBot {C : 𝕜} (hC : C < 0) (hf : Tendsto f l (
117118
simpa only [mul_comm] using hg.atBot_mul_neg hC hf
118119
#align filter.tendsto.neg_mul_at_bot Filter.Tendsto.neg_mul_atBot
119120

121+
@[simp]
122+
lemma inv_atTop₀ : (atTop : Filter 𝕜)⁻¹ = 𝓝[>] 0 :=
123+
(((atTop_basis_Ioi' (0 : 𝕜)).map _).comp_surjective inv_surjective).eq_of_same_basis <|
124+
(nhdsWithin_Ioi_basis _).congr (by simp) fun a ha ↦ by simp [inv_Ioi (inv_pos.2 ha)]
125+
126+
@[simp] lemma inv_nhdsWithin_Ioi_zero : (𝓝[>] (0 : 𝕜))⁻¹ = atTop := by
127+
rw [← inv_atTop₀, inv_inv]
128+
120129
/-- The function `x ↦ x⁻¹` tends to `+∞` on the right of `0`. -/
121-
theorem tendsto_inv_zero_atTop : Tendsto (fun x : 𝕜 => x⁻¹) (𝓝[>] (0 : 𝕜)) atTop := by
122-
refine' (atTop_basis' 1).tendsto_right_iff.2 fun b hb => _
123-
have hb' : 0 < b := by positivity
124-
filter_upwards [Ioc_mem_nhdsWithin_Ioi
125-
⟨le_rfl, inv_pos.2 hb'⟩] with x hx using(le_inv hx.1 hb').1 hx.2
130+
theorem tendsto_inv_zero_atTop : Tendsto (fun x : 𝕜 => x⁻¹) (𝓝[>] (0 : 𝕜)) atTop :=
131+
inv_nhdsWithin_Ioi_zero.le
126132
#align tendsto_inv_zero_at_top tendsto_inv_zero_atTop
127133

128134
/-- The function `r ↦ r⁻¹` tends to `0` on the right as `r → +∞`. -/
129-
theorem tendsto_inv_atTop_zero' : Tendsto (fun r : 𝕜 => r⁻¹) atTop (𝓝[>] (0 : 𝕜)) := by
130-
refine (atTop_basis.tendsto_iff ⟨fun s => mem_nhdsWithin_Ioi_iff_exists_Ioc_subset⟩).2 ?_
131-
refine fun b hb => ⟨b⁻¹, trivial, fun x hx => ?_⟩
132-
have : 0 < x := lt_of_lt_of_le (inv_pos.2 hb) hx
133-
exact ⟨inv_pos.2 this, (inv_le this hb).2 hx⟩
135+
theorem tendsto_inv_atTop_zero' : Tendsto (fun r : 𝕜 => r⁻¹) atTop (𝓝[>] (0 : 𝕜)) :=
136+
inv_atTop₀.le
134137
#align tendsto_inv_at_top_zero' tendsto_inv_atTop_zero'
135138

136139
theorem tendsto_inv_atTop_zero : Tendsto (fun r : 𝕜 => r⁻¹) atTop (𝓝 0) :=

Mathlib/Topology/Order/Basic.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1681,6 +1681,9 @@ theorem nhdsWithin_Ioi_basis' {a : α} (h : ∃ b, a < b) : (𝓝[>] a).HasBasis
16811681
let ⟨_, h⟩ := h
16821682
fun _ => mem_nhdsWithin_Ioi_iff_exists_Ioo_subset' h⟩
16831683

1684+
lemma nhdsWithin_Ioi_basis [NoMaxOrder α] (a : α) : (𝓝[>] a).HasBasis (a < ·) (Ioo a) :=
1685+
nhdsWithin_Ioi_basis' <| exists_gt a
1686+
16841687
theorem nhdsWithin_Ioi_eq_bot_iff {a : α} : 𝓝[>] a = ⊥ ↔ IsTop a ∨ ∃ b, a ⋖ b := by
16851688
by_cases ha : IsTop a
16861689
· simp [ha, ha.isMax.Ioi_eq]

0 commit comments

Comments
 (0)