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

Commit 34f29db

Browse files
committed
feat(topology/algebra/group): Division is an open map (#14028)
A few missing lemmas about division in topological groups.
1 parent c892622 commit 34f29db

File tree

1 file changed

+104
-80
lines changed

1 file changed

+104
-80
lines changed

src/topology/algebra/group.lean

Lines changed: 104 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -128,45 +128,6 @@ lemma discrete_topology_iff_open_singleton_one : discrete_topology G ↔ is_open
128128

129129
end continuous_mul_group
130130

131-
/-!
132-
### Topological operations on pointwise sums and products
133-
134-
A few results about interior and closure of the pointwise addition/multiplication of sets in groups
135-
with continuous addition/multiplication. See also `submonoid.top_closure_mul_self_eq` in
136-
`topology.algebra.monoid`.
137-
-/
138-
139-
section pointwise
140-
variables [topological_space α] [group α] [has_continuous_mul α] {s t : set α}
141-
142-
@[to_additive]
143-
lemma is_open.mul_left (ht : is_open t) : is_open (s * t) :=
144-
begin
145-
rw ←Union_mul_left_image,
146-
exact is_open_Union (λ a, is_open_Union $ λ ha, is_open_map_mul_left a t ht),
147-
end
148-
149-
@[to_additive]
150-
lemma is_open.mul_right (hs : is_open s) : is_open (s * t) :=
151-
begin
152-
rw ←Union_mul_right_image,
153-
exact is_open_Union (λ a, is_open_Union $ λ ha, is_open_map_mul_right a s hs),
154-
end
155-
156-
@[to_additive]
157-
lemma subset_interior_mul_left : interior s * t ⊆ interior (s * t) :=
158-
interior_maximal (set.mul_subset_mul_right interior_subset) is_open_interior.mul_right
159-
160-
@[to_additive]
161-
lemma subset_interior_mul_right : s * interior t ⊆ interior (s * t) :=
162-
interior_maximal (set.mul_subset_mul_left interior_subset) is_open_interior.mul_left
163-
164-
@[to_additive]
165-
lemma subset_interior_mul : interior s * interior t ⊆ interior (s * t) :=
166-
(set.mul_subset_mul_left interior_subset).trans subset_interior_mul_left
167-
168-
end pointwise
169-
170131
/-!
171132
### `has_continuous_inv` and `has_continuous_neg`
172133
-/
@@ -280,11 +241,37 @@ instance multiplicative.has_continuous_inv [h : topological_space H] [has_neg H]
280241

281242
end continuous_inv
282243

283-
@[to_additive]
284-
lemma is_compact.inv [topological_space G] [has_involutive_inv G] [has_continuous_inv G]
285-
{s : set G} (hs : is_compact s) : is_compact (s⁻¹) :=
244+
section continuous_involutive_inv
245+
variables [topological_space G] [has_involutive_inv G] [has_continuous_inv G] {s : set G}
246+
247+
@[to_additive] lemma is_compact.inv (hs : is_compact s) : is_compact s⁻¹ :=
286248
by { rw [← image_inv], exact hs.image continuous_inv }
287249

250+
variables (G)
251+
252+
/-- Inversion in a topological group as a homeomorphism. -/
253+
@[to_additive "Negation in a topological group as a homeomorphism."]
254+
protected def homeomorph.inv (G : Type*) [topological_space G] [has_involutive_inv G]
255+
[has_continuous_inv G] : G ≃ₜ G :=
256+
{ continuous_to_fun := continuous_inv,
257+
continuous_inv_fun := continuous_inv,
258+
.. equiv.inv G }
259+
260+
@[to_additive] lemma is_open_map_inv : is_open_map (has_inv.inv : G → G) :=
261+
(homeomorph.inv _).is_open_map
262+
263+
@[to_additive] lemma is_closed_map_inv : is_closed_map (has_inv.inv : G → G) :=
264+
(homeomorph.inv _).is_closed_map
265+
266+
variables {G}
267+
268+
@[to_additive] lemma is_open.inv (hs : is_open s) : is_open s⁻¹ := hs.preimage continuous_inv
269+
@[to_additive] lemma is_closed.inv (hs : is_closed s) : is_closed s⁻¹ := hs.preimage continuous_inv
270+
@[to_additive] lemma inv_closure : ∀ s : set G, (closure s)⁻¹ = closure s⁻¹ :=
271+
(homeomorph.inv G).preimage_closure
272+
273+
end continuous_involutive_inv
274+
288275
section lattice_ops
289276

290277
variables {ι' : Sort*} [has_inv G] [has_inv H] {ts : set (topological_space G)}
@@ -487,13 +474,6 @@ instance [group α] [topological_group α] :
487474

488475
variable (G)
489476

490-
/-- Inversion in a topological group as a homeomorphism. -/
491-
@[to_additive "Negation in a topological group as a homeomorphism."]
492-
protected def homeomorph.inv : G ≃ₜ G :=
493-
{ continuous_to_fun := continuous_inv,
494-
continuous_inv_fun := continuous_inv,
495-
.. equiv.inv G }
496-
497477
@[to_additive]
498478
lemma nhds_one_symm : comap has_inv.inv (𝓝 (1 : G)) = 𝓝 (1 : G) :=
499479
((homeomorph.inv G).comap_nhds_eq _).trans (congr_arg nhds one_inv)
@@ -518,33 +498,6 @@ rfl
518498

519499
variables {G}
520500

521-
@[to_additive]
522-
lemma is_open.inv {s : set G} (hs : is_open s) : is_open s⁻¹ := hs.preimage continuous_inv
523-
524-
@[to_additive]
525-
lemma is_closed.inv {s : set G} (hs : is_closed s) : is_closed s⁻¹ := hs.preimage continuous_inv
526-
527-
@[to_additive]
528-
lemma inv_closure (s : set G) : (closure s)⁻¹ = closure s⁻¹ :=
529-
(homeomorph.inv G).preimage_closure s
530-
531-
@[to_additive] lemma is_open.mul_closure {U : set G} (hU : is_open U) (s : set G) :
532-
U * closure s = U * s :=
533-
begin
534-
refine subset.antisymm _ (mul_subset_mul subset.rfl subset_closure),
535-
rintro _ ⟨a, b, ha, hb, rfl⟩,
536-
rw mem_closure_iff at hb,
537-
have hbU : b ∈ U⁻¹ * {a * b},
538-
from ⟨a⁻¹, a * b, set.inv_mem_inv.2 ha, rfl, inv_mul_cancel_left _ _⟩,
539-
rcases hb _ hU.inv.mul_right hbU with ⟨_, ⟨c, d, hc, (rfl : d = _), rfl⟩, hcs⟩,
540-
exact ⟨c⁻¹, _, hc, hcs, inv_mul_cancel_left _ _⟩
541-
end
542-
543-
@[to_additive] lemma is_open.closure_mul {U : set G} (hU : is_open U) (s : set G) :
544-
closure s * U = s * U :=
545-
by rw [← inv_inv (closure s * U), set.mul_inv_rev, inv_closure, hU.inv.mul_closure,
546-
set.mul_inv_rev, inv_inv, inv_inv]
547-
548501
namespace subgroup
549502

550503
@[to_additive] instance (S : subgroup G) :
@@ -878,6 +831,12 @@ def homeomorph.div_left (x : G) : G ≃ₜ G :=
878831
continuous_inv_fun := continuous_inv.mul continuous_const,
879832
.. equiv.div_left x }
880833

834+
@[to_additive] lemma is_open_map_div_left (a : G) : is_open_map ((/) a) :=
835+
(homeomorph.div_left _).is_open_map
836+
837+
@[to_additive] lemma is_closed_map_div_left (a : G) : is_closed_map ((/) a) :=
838+
(homeomorph.div_left _).is_closed_map
839+
881840
/-- A version of `homeomorph.mul_right a⁻¹ b` that is defeq to `b / a`. -/
882841
@[to_additive /-" A version of `homeomorph.add_right (-a) b` that is defeq to `b - a`. "-/,
883842
simps {simp_rhs := tt}]
@@ -903,12 +862,77 @@ begin
903862
exact ⟨λ h, by simpa using h.mul A, λ h, by simpa using h.div' A⟩
904863
end
905864

865+
@[to_additive] lemma nhds_translation_div (x : G) : comap (/ x) (𝓝 1) = 𝓝 x :=
866+
by simpa only [div_eq_mul_inv] using nhds_translation_mul_inv x
867+
906868
end div_in_topological_group
907869

908-
@[to_additive]
909-
lemma nhds_translation_div [topological_space G] [group G] [topological_group G] (x : G) :
910-
comap (λy:G, y / x) (𝓝 1) = 𝓝 x :=
911-
by simpa only [div_eq_mul_inv] using nhds_translation_mul_inv x
870+
/-!
871+
### Topological operations on pointwise sums and products
872+
873+
A few results about interior and closure of the pointwise addition/multiplication of sets in groups
874+
with continuous addition/multiplication. See also `submonoid.top_closure_mul_self_eq` in
875+
`topology.algebra.monoid`.
876+
-/
877+
878+
section has_continuous_mul
879+
variables [topological_space α] [group α] [has_continuous_mul α] {s t : set α}
880+
881+
@[to_additive] lemma is_open.mul_left (ht : is_open t) : is_open (s * t) :=
882+
by { rw ←Union_mul_left_image, exact is_open_bUnion (λ a ha, is_open_map_mul_left a t ht) }
883+
884+
@[to_additive] lemma is_open.mul_right (hs : is_open s) : is_open (s * t) :=
885+
by { rw ←Union_mul_right_image, exact is_open_bUnion (λ a ha, is_open_map_mul_right a s hs) }
886+
887+
@[to_additive] lemma subset_interior_mul_left : interior s * t ⊆ interior (s * t) :=
888+
interior_maximal (set.mul_subset_mul_right interior_subset) is_open_interior.mul_right
889+
890+
@[to_additive] lemma subset_interior_mul_right : s * interior t ⊆ interior (s * t) :=
891+
interior_maximal (set.mul_subset_mul_left interior_subset) is_open_interior.mul_left
892+
893+
@[to_additive] lemma subset_interior_mul : interior s * interior t ⊆ interior (s * t) :=
894+
(set.mul_subset_mul_left interior_subset).trans subset_interior_mul_left
895+
896+
end has_continuous_mul
897+
898+
section topological_group
899+
variables [topological_space α] [group α] [topological_group α] {s t : set α}
900+
901+
@[to_additive] lemma is_open.div_left (ht : is_open t) : is_open (s / t) :=
902+
by { rw ←Union_div_left_image, exact is_open_bUnion (λ a ha, is_open_map_div_left a t ht) }
903+
904+
@[to_additive] lemma is_open.div_right (hs : is_open s) : is_open (s / t) :=
905+
by { rw ←Union_div_right_image, exact is_open_bUnion (λ a ha, is_open_map_div_right a s hs) }
906+
907+
@[to_additive] lemma subset_interior_div_left : interior s / t ⊆ interior (s / t) :=
908+
interior_maximal (div_subset_div_right interior_subset) is_open_interior.div_right
909+
910+
@[to_additive] lemma subset_interior_div_right : s / interior t ⊆ interior (s / t) :=
911+
interior_maximal (div_subset_div_left interior_subset) is_open_interior.div_left
912+
913+
@[to_additive] lemma subset_interior_div : interior s / interior t ⊆ interior (s / t) :=
914+
(div_subset_div_left interior_subset).trans subset_interior_div_left
915+
916+
@[to_additive] lemma is_open.mul_closure (hs : is_open s) (t : set α) : s * closure t = s * t :=
917+
begin
918+
refine (mul_subset_iff.2 $ λ a ha b hb, _).antisymm (mul_subset_mul_left subset_closure),
919+
rw mem_closure_iff at hb,
920+
have hbU : b ∈ s⁻¹ * {a * b} := ⟨a⁻¹, a * b, set.inv_mem_inv.2 ha, rfl, inv_mul_cancel_left _ _⟩,
921+
obtain ⟨_, ⟨c, d, hc, (rfl : d = _), rfl⟩, hcs⟩ := hb _ hs.inv.mul_right hbU,
922+
exact ⟨c⁻¹, _, hc, hcs, inv_mul_cancel_left _ _⟩,
923+
end
924+
925+
@[to_additive] lemma is_open.closure_mul (ht : is_open t) (s : set α) : closure s * t = s * t :=
926+
by rw [←inv_inv (closure s * t), set.mul_inv_rev, inv_closure, ht.inv.mul_closure, set.mul_inv_rev,
927+
inv_inv, inv_inv]
928+
929+
@[to_additive] lemma is_open.div_closure (hs : is_open s) (t : set α) : s / closure t = s / t :=
930+
by simp_rw [div_eq_mul_inv, inv_closure, hs.mul_closure]
931+
932+
@[to_additive] lemma is_open.closure_div (ht : is_open t) (s : set α) : closure s / t = s / t :=
933+
by simp_rw [div_eq_mul_inv, ht.inv.closure_mul]
934+
935+
end topological_group
912936

913937
/-- additive group with a neighbourhood around 0.
914938
Only used to construct a topology and uniform space.

0 commit comments

Comments
 (0)