@@ -8,6 +8,7 @@ import order.filter.pointwise
8
8
import topology.algebra.monoid
9
9
import topology.compact_open
10
10
import topology.sets.compacts
11
+ import topology.algebra.constructions
11
12
12
13
/-!
13
14
# Theory of topological groups
@@ -464,6 +465,17 @@ instance pi.topological_group {C : β → Type*} [∀ b, topological_space (C b)
464
465
[∀ b, group (C b)] [∀ b, topological_group (C b)] : topological_group (Π b, C b) :=
465
466
{ continuous_inv := continuous_pi (λ i, (continuous_apply i).inv) }
466
467
468
+ open mul_opposite
469
+
470
+ @[to_additive]
471
+ instance [group α] [has_continuous_inv α] : has_continuous_inv αᵐᵒᵖ :=
472
+ { continuous_inv := continuous_induced_rng $ (@continuous_inv α _ _ _).comp continuous_unop }
473
+
474
+ /-- If multiplication is continuous in `α`, then it also is in `αᵐᵒᵖ`. -/
475
+ @[to_additive " If addition is continuous in `α`, then it also is in `αᵃᵒᵖ`." ]
476
+ instance [group α] [topological_group α] :
477
+ topological_group αᵐᵒᵖ := { }
478
+
467
479
variable (G)
468
480
469
481
/-- Inversion in a topological group as a homeomorphism. -/
@@ -916,27 +928,43 @@ section
916
928
variables [topological_space G] [group G] [topological_group G]
917
929
918
930
/-- Given a compact set `K` inside an open set `U`, there is a open neighborhood `V` of `1`
919
- such that `KV ⊆ U`. -/
931
+ such that `K * V ⊆ U`. -/
920
932
@[to_additive " Given a compact set `K` inside an open set `U`, there is a open neighborhood `V` of
921
933
`0` such that `K + V ⊆ U`." ]
922
- lemma compact_open_separated_mul {K U : set G} (hK : is_compact K) (hU : is_open U) (hKU : K ⊆ U) :
923
- ∃ V : set G, is_open V ∧ (1 : G) ∈ V ∧ K * V ⊆ U :=
934
+ lemma compact_open_separated_mul_right {K U : set G} (hK : is_compact K) (hU : is_open U)
935
+ (hKU : K ⊆ U) : ∃ V ∈ 𝓝 (1 : G), K * V ⊆ U :=
936
+ begin
937
+ apply hK.induction_on,
938
+ { exact ⟨univ, by simp⟩ },
939
+ { rintros s t hst ⟨V, hV, hV'⟩,
940
+ exact ⟨V, hV, (mul_subset_mul_right hst).trans hV'⟩ },
941
+ { rintros s t ⟨V, V_in, hV'⟩ ⟨W, W_in, hW'⟩,
942
+ use [V ∩ W, inter_mem V_in W_in],
943
+ rw union_mul,
944
+ exact union_subset ((mul_subset_mul_left (V.inter_subset_left W)).trans hV')
945
+ ((mul_subset_mul_left (V.inter_subset_right W)).trans hW') },
946
+ { intros x hx,
947
+ have := tendsto_mul (show U ∈ 𝓝 (x * 1 ), by simpa using hU.mem_nhds (hKU hx)),
948
+ rw [nhds_prod_eq, mem_map, mem_prod_iff] at this ,
949
+ rcases this with ⟨t, ht, s, hs, h⟩,
950
+ rw [← image_subset_iff, image_mul_prod] at h,
951
+ exact ⟨t, mem_nhds_within_of_mem_nhds ht, s, hs, h⟩ }
952
+ end
953
+
954
+ open mul_opposite
955
+
956
+ /-- Given a compact set `K` inside an open set `U`, there is a open neighborhood `V` of `1`
957
+ such that `V * K ⊆ U`. -/
958
+ @[to_additive " Given a compact set `K` inside an open set `U`, there is a open neighborhood `V` of
959
+ `0` such that `V + K ⊆ U`." ]
960
+ lemma compact_open_separated_mul_left {K U : set G} (hK : is_compact K) (hU : is_open U)
961
+ (hKU : K ⊆ U) : ∃ V ∈ 𝓝 (1 : G), V * K ⊆ U :=
924
962
begin
925
- let W : G → set G := λ x, (λ y, x * y) ⁻¹' U,
926
- have h1W : ∀ x, is_open (W x) := λ x, hU.preimage (continuous_mul_left x),
927
- have h2W : ∀ x ∈ K, (1 : G) ∈ W x := λ x hx, by simp only [mem_preimage, mul_one, hKU hx],
928
- choose V hV using λ x : K, exists_open_nhds_one_mul_subset ((h1W x).mem_nhds (h2W x.1 x.2 )),
929
- let X : K → set G := λ x, (λ y, (x : G)⁻¹ * y) ⁻¹' (V x),
930
- obtain ⟨t, ht⟩ : ∃ t : finset ↥K, K ⊆ ⋃ i ∈ t, X i,
931
- { refine hK.elim_finite_subcover X (λ x, (hV x).1 .preimage (continuous_mul_left x⁻¹)) _,
932
- intros x hx, rw [mem_Union], use ⟨x, hx⟩, rw [mem_preimage], convert (hV _).2 .1 ,
933
- simp only [mul_left_inv, subtype.coe_mk] },
934
- refine ⟨⋂ x ∈ t, V x, is_open_bInter (finite_mem_finset _) (λ x hx, (hV x).1 ), _, _⟩,
935
- { simp only [mem_Inter], intros x hx, exact (hV x).2 .1 },
936
- rintro _ ⟨x, y, hx, hy, rfl⟩, simp only [mem_Inter] at hy,
937
- have := ht hx, simp only [mem_Union, mem_preimage] at this , rcases this with ⟨z, h1z, h2z⟩,
938
- have : (z : G)⁻¹ * x * y ∈ W z := (hV z).2 .2 (mul_mem_mul h2z (hy z h1z)),
939
- rw [mem_preimage] at this , convert this using 1 , simp only [mul_assoc, mul_inv_cancel_left]
963
+ rcases compact_open_separated_mul_right (hK.image continuous_op) (op_homeomorph.is_open_map U hU)
964
+ (image_subset op hKU) with ⟨V, (hV : V ∈ 𝓝 (op (1 : G))), hV' : op '' K * V ⊆ op '' U⟩,
965
+ refine ⟨op ⁻¹' V, continuous_op.continuous_at hV, _⟩,
966
+ rwa [← image_preimage_eq V op_surjective, ← image_op_mul, image_subset_iff,
967
+ preimage_image_eq _ op_injective] at hV'
940
968
end
941
969
942
970
/-- A compact set is covered by finitely many left multiplicative translates of a set
0 commit comments