Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 7c48d65

Browse files
committed
feat(topology/algebra/group): define has_continuous_inv and has_continuous_neg type classes (#12748)
This creates the `has_continuous_inv` and `has_continuous_neg` type classes. The `has_continuous_neg` class will be helpful for generalizing `topological_ring` to the setting of `non_unital_non_assoc_semiring`s (see [Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/continuous.20maps.20vanishing.20at.20infinity)). In addition, `ennreal` can have a `has_continuous_inv` instance.
1 parent eabc619 commit 7c48d65

File tree

3 files changed

+153
-30
lines changed

3 files changed

+153
-30
lines changed

src/topology/algebra/field.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ lemma units_top_group : topological_group Kˣ :=
104104
local attribute [instance] units_top_group
105105

106106
lemma continuous_units_inv : continuous (λ x : Kˣ, (↑(x⁻¹) : K)) :=
107-
(topological_ring.induced_units.continuous_coe K).comp topological_group.continuous_inv
107+
(topological_ring.induced_units.continuous_coe K).comp continuous_inv
108108

109109
end topological_division_ring
110110

src/topology/algebra/group.lean

Lines changed: 151 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -165,33 +165,29 @@ lemma subset_interior_mul : interior s * interior t ⊆ interior (s * t) :=
165165

166166
end pointwise
167167

168-
section topological_group
169-
170168
/-!
171-
### Topological groups
172-
173-
A topological group is a group in which the multiplication and inversion operations are
174-
continuous. Topological additive groups are defined in the same way. Equivalently, we can require
175-
that the division operation `λ x y, x * y⁻¹` (resp., subtraction) is continuous.
169+
### `has_continuous_inv` and `has_continuous_neg`
176170
-/
177171

178-
/-- A topological (additive) group is a group in which the addition and negation operations are
179-
continuous. -/
180-
class topological_add_group (G : Type u) [topological_space G] [add_group G]
181-
extends has_continuous_add G : Prop :=
182-
(continuous_neg : continuous (λa:G, -a))
172+
/-- Basic hypothesis to talk about a topological additive group. A topological additive group
173+
over `M`, for example, is obtained by requiring the instances `add_group M` and
174+
`has_continuous_add M` and `has_continuous_neg M`. -/
175+
class has_continuous_neg (G : Type u) [topological_space G] [has_neg G] : Prop :=
176+
(continuous_neg : continuous (λ a : G, -a))
183177

184-
/-- A topological group is a group in which the multiplication and inversion operations are
185-
continuous. -/
178+
/-- Basic hypothesis to talk about a topological group. A topological group over `M`, for example,
179+
is obtained by requiring the instances `group M` and `has_continuous_mul M` and
180+
`has_continuous_inv M`. -/
186181
@[to_additive]
187-
class topological_group (G : Type*) [topological_space G] [group G]
188-
extends has_continuous_mul G : Prop :=
189-
(continuous_inv : continuous (has_inv.inv : G → G))
182+
class has_continuous_inv (G : Type u) [topological_space G] [has_inv G] : Prop :=
183+
(continuous_inv : continuous (λ a : G, a⁻¹))
190184

191-
variables [topological_space G] [group G] [topological_group G]
185+
export has_continuous_inv (continuous_inv)
186+
export has_continuous_neg (continuous_neg)
192187

193-
export topological_group (continuous_inv)
194-
export topological_add_group (continuous_neg)
188+
section continuous_inv
189+
190+
variables [topological_space G] [has_inv G] [has_continuous_inv G]
195191

196192
@[to_additive]
197193
lemma continuous_on_inv {s : set G} : continuous_on has_inv.inv s :=
@@ -209,11 +205,6 @@ continuous_inv.continuous_at
209205
lemma tendsto_inv (a : G) : tendsto has_inv.inv (𝓝 a) (𝓝 (a⁻¹)) :=
210206
continuous_at_inv
211207

212-
/-- Conjugation in a topological group is continuous.-/
213-
@[to_additive "Conjugation in a topological additive group is continuous."]
214-
lemma topological_group.continuous_conj (g : G) : continuous (λ (h : G), g * h * g⁻¹) :=
215-
(continuous_mul_right g⁻¹).comp (continuous_mul_left g)
216-
217208
/-- If a function converges to a value in a multiplicative topological group, then its inverse
218209
converges to the inverse of this value. For the version in normed fields assuming additionally
219210
that the limit is nonzero, use `tendsto.inv'`. -/
@@ -242,9 +233,140 @@ lemma continuous_within_at.inv (hf : continuous_within_at f s x) :
242233
hf.inv
243234

244235
@[to_additive]
245-
lemma is_compact.inv {s : set G} (hs : is_compact s) : is_compact (s⁻¹) :=
236+
instance [topological_space H] [has_inv H] [has_continuous_inv H] : has_continuous_inv (G × H) :=
237+
⟨(continuous_inv.comp continuous_fst).prod_mk (continuous_inv.comp continuous_snd)⟩
238+
239+
variable {ι : Type*}
240+
241+
@[to_additive]
242+
instance pi.has_continuous_inv {C : ι → Type*} [∀ i, topological_space (C i)]
243+
[∀ i, has_inv (C i)] [∀ i, has_continuous_inv (C i)] : has_continuous_inv (Π i, C i) :=
244+
{ continuous_inv := continuous_pi (λ i, continuous.inv (continuous_apply i)) }
245+
246+
/-- A version of `pi.has_continuous_inv` for non-dependent functions. It is needed because sometimes
247+
Lean fails to use `pi.has_continuous_inv` for non-dependent functions. -/
248+
@[to_additive "A version of `pi.has_continuous_neg` for non-dependent functions. It is needed
249+
because sometimes Lean fails to use `pi.has_continuous_neg` for non-dependent functions."]
250+
instance pi.has_continuous_inv' : has_continuous_inv (ι → G) :=
251+
pi.has_continuous_inv
252+
253+
@[priority 100, to_additive]
254+
instance has_continuous_inv_of_discrete_topology [topological_space H]
255+
[has_inv H] [discrete_topology H] : has_continuous_inv H :=
256+
⟨continuous_of_discrete_topology⟩
257+
258+
section pointwise_limits
259+
260+
variables (G₁ G₂ : Type*) [topological_space G₂] [t2_space G₂]
261+
262+
@[to_additive] lemma is_closed_set_of_map_inv [has_inv G₁] [has_inv G₂] [has_continuous_inv G₂] :
263+
is_closed {f : G₁ → G₂ | ∀ x, f x⁻¹ = (f x)⁻¹ } :=
264+
begin
265+
simp only [set_of_forall],
266+
refine is_closed_Inter (λ i, is_closed_eq (continuous_apply _) (continuous_apply _).inv),
267+
end
268+
269+
end pointwise_limits
270+
271+
instance additive.has_continuous_neg [h : topological_space H] [has_inv H]
272+
[has_continuous_inv H] : @has_continuous_neg (additive H) h _ :=
273+
{ continuous_neg := @continuous_inv H _ _ _ }
274+
275+
instance multiplicative.has_continuous_inv [h : topological_space H] [has_neg H]
276+
[has_continuous_neg H] : @has_continuous_inv (multiplicative H) h _ :=
277+
{ continuous_inv := @continuous_neg H _ _ _ }
278+
279+
end continuous_inv
280+
281+
@[to_additive]
282+
lemma is_compact.inv [topological_space G] [has_involutive_inv G] [has_continuous_inv G]
283+
{s : set G} (hs : is_compact s) : is_compact (s⁻¹) :=
246284
by { rw [← image_inv], exact hs.image continuous_inv }
247285

286+
section lattice_ops
287+
288+
variables {ι' : Sort*} [has_inv G] [has_inv H] {ts : set (topological_space G)}
289+
(h : Π t ∈ ts, @has_continuous_inv G t _) {ts' : ι' → topological_space G}
290+
(h' : Π i, @has_continuous_inv G (ts' i) _) {t₁ t₂ : topological_space G}
291+
(h₁ : @has_continuous_inv G t₁ _) (h₂ : @has_continuous_inv G t₂ _)
292+
{t : topological_space H} [has_continuous_inv H]
293+
294+
295+
@[to_additive] lemma has_continuous_inv_Inf :
296+
@has_continuous_inv G (Inf ts) _ :=
297+
{ continuous_inv := continuous_Inf_rng (λ t ht, continuous_Inf_dom ht
298+
(@has_continuous_inv.continuous_inv G t _ (h t ht))) }
299+
300+
include h'
301+
302+
@[to_additive] lemma has_continuous_inv_infi :
303+
@has_continuous_inv G (⨅ i, ts' i) _ :=
304+
by {rw ← Inf_range, exact has_continuous_inv_Inf (set.forall_range_iff.mpr h')}
305+
306+
omit h'
307+
308+
include h₁ h₂
309+
310+
@[to_additive] lemma has_continuous_inv_inf :
311+
@has_continuous_inv G (t₁ ⊓ t₂) _ :=
312+
by {rw inf_eq_infi, refine has_continuous_inv_infi (λ b, _), cases b; assumption}
313+
314+
end lattice_ops
315+
316+
section topological_group
317+
318+
/-!
319+
### Topological groups
320+
321+
A topological group is a group in which the multiplication and inversion operations are
322+
continuous. Topological additive groups are defined in the same way. Equivalently, we can require
323+
that the division operation `λ x y, x * y⁻¹` (resp., subtraction) is continuous.
324+
-/
325+
326+
/-- A topological (additive) group is a group in which the addition and negation operations are
327+
continuous. -/
328+
class topological_add_group (G : Type u) [topological_space G] [add_group G]
329+
extends has_continuous_add G, has_continuous_neg G : Prop
330+
331+
/-- A topological group is a group in which the multiplication and inversion operations are
332+
continuous. -/
333+
@[to_additive]
334+
class topological_group (G : Type*) [topological_space G] [group G]
335+
extends has_continuous_mul G, has_continuous_inv G : Prop
336+
337+
section conj
338+
339+
/-- we slightly weaken the type class assumptions here so that it will also apply to `ennreal`, but
340+
we nevertheless leave it in the `topological_group` namespace. -/
341+
342+
variables [topological_space G] [has_inv G] [has_mul G]
343+
[has_continuous_mul G]
344+
345+
/-- Conjugation is jointly continuous on `G × G` when both `mul` and `inv` are continuous. -/
346+
@[to_additive "Conjugation is jointly continuous on `G × G` when both `mul` and `inv` are
347+
continuous."]
348+
lemma topological_group.continuous_conj_prod [has_continuous_inv G] :
349+
continuous (λ g : G × G, g.fst * g.snd * g.fst⁻¹) :=
350+
continuous_mul.mul (continuous_inv.comp continuous_fst)
351+
352+
/-- Conjugation by a fixed element is continuous when `mul` is continuous. -/
353+
@[to_additive "Conjugation by a fixed element is continuous when `add` is continuous."]
354+
lemma topological_group.continuous_conj (g : G) : continuous (λ (h : G), g * h * g⁻¹) :=
355+
(continuous_mul_right g⁻¹).comp (continuous_mul_left g)
356+
357+
/-- Conjugation acting on fixed element of the group is continuous when both `mul` and
358+
`inv` are continuous. -/
359+
@[to_additive "Conjugation acting on fixed element of the additive group is continuous when both
360+
`add` and `neg` are continuous."]
361+
lemma topological_group.continuous_conj' [has_continuous_inv G]
362+
(h : G) : continuous (λ (g : G), g * h * g⁻¹) :=
363+
(continuous_mul_right h).mul continuous_inv
364+
365+
end conj
366+
367+
variables [topological_space G] [group G] [topological_group G]
368+
[topological_space α] {f : α → G} {s : set α} {x : α}
369+
248370
section zpow
249371

250372
@[continuity, to_additive]
@@ -997,8 +1119,9 @@ variables {ι : Sort*} [group G] [group H] {ts : set (topological_space G)}
9971119

9981120
@[to_additive] lemma topological_group_Inf :
9991121
@topological_group G (Inf ts) _ :=
1000-
{ continuous_inv := continuous_Inf_rng (λ t ht, continuous_Inf_dom ht
1001-
(@topological_group.continuous_inv G t _ (h t ht))),
1122+
{ continuous_inv := @has_continuous_inv.continuous_inv G (Inf ts) _
1123+
(@has_continuous_inv_Inf _ _ _
1124+
(λ t ht, @topological_group.to_has_continuous_inv G t _ (h t ht))),
10021125
continuous_mul := @has_continuous_mul.continuous_mul G (Inf ts) _
10031126
(@has_continuous_mul_Inf _ _ _
10041127
(λ t ht, @topological_group.to_has_continuous_mul G t _ (h t ht))) }

src/topology/continuous_function/algebra.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ def continuous_submonoid (α : Type*) (β : Type*) [topological_space α] [topol
159159
@[to_additive "The `add_subgroup` of continuous maps `α → β`. "]
160160
def continuous_subgroup (α : Type*) (β : Type*) [topological_space α] [topological_space β]
161161
[group β] [topological_group β] : subgroup (α → β) :=
162-
{ inv_mem' := λ f fc, continuous.comp (@topological_group.continuous_inv β _ _ _) fc,
162+
{ inv_mem' := λ f fc, continuous.inv fc,
163163
..continuous_submonoid α β, }.
164164

165165
end subtype

0 commit comments

Comments
 (0)