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

Commit c31b1f3

Browse files
committed
chore(topology/algebra): cleanup (#15301)
* Drop instances about `sub*.topological_closure`. Normal `sub*` instances apply. * Add `units.inducing_embed_product` and `units.embedding_embed_product`. * Add `inducing.has_continuous_mul`, `inducing.has_continuous_inv`, and `inducing.topological_group`. * Use new lemmas to golf some instances. * Don't use `section .. variables` for assumptions that are used only once. * Reuse `topological_group_inf`, `topological_group_Inf` in `group_topology.has_inf`, `group_topology.has_Inf`.
1 parent 7059323 commit c31b1f3

File tree

6 files changed

+82
-169
lines changed

6 files changed

+82
-169
lines changed

src/topology/algebra/algebra.lean

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,14 @@ end topological_algebra
5555
section topological_algebra
5656
variables {R : Type*} [comm_semiring R]
5757
variables {A : Type u} [topological_space A]
58-
variables [semiring A]
59-
variables [algebra R A] [topological_semiring A]
58+
variables [semiring A] [algebra R A]
59+
60+
instance subalgebra.has_continuous_smul [topological_space R] [has_continuous_smul R A]
61+
(s : subalgebra R A) :
62+
has_continuous_smul R s :=
63+
s.to_submodule.has_continuous_smul
64+
65+
variables [topological_semiring A]
6066

6167
/-- The closure of a subalgebra in a topological algebra as a subalgebra. -/
6268
def subalgebra.topological_closure (s : subalgebra R A) : subalgebra R A :=
@@ -68,14 +74,8 @@ def subalgebra.topological_closure (s : subalgebra R A) : subalgebra R A :=
6874
(s.topological_closure : set A) = closure (s : set A) :=
6975
rfl
7076

71-
instance subalgebra.topological_closure_topological_semiring (s : subalgebra R A) :
72-
topological_semiring (s.topological_closure) :=
73-
s.to_subsemiring.topological_closure_topological_semiring
74-
75-
instance subalgebra.topological_closure_topological_algebra
76-
[topological_space R] [has_continuous_smul R A] (s : subalgebra R A) :
77-
has_continuous_smul R (s.topological_closure) :=
78-
s.to_submodule.topological_closure_has_continuous_smul
77+
instance subalgebra.topological_semiring (s : subalgebra R A) : topological_semiring s :=
78+
s.to_subsemiring.topological_semiring
7979

8080
lemma subalgebra.subalgebra_topological_closure (s : subalgebra R A) :
8181
s ≤ s.topological_closure :=

src/topology/algebra/constructions.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ variables [topological_space M] [monoid M]
7070
@[to_additive] instance : topological_space Mˣ :=
7171
topological_space.induced (embed_product M) prod.topological_space
7272

73+
@[to_additive] lemma inducing_embed_product : inducing (embed_product M) := ⟨rfl⟩
74+
75+
@[to_additive] lemma embedding_embed_product : embedding (embed_product M) :=
76+
⟨inducing_embed_product, embed_product_injective M⟩
77+
7378
@[to_additive] lemma continuous_embed_product : continuous (embed_product M) :=
7479
continuous_induced_dom
7580

src/topology/algebra/group.lean

Lines changed: 39 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -197,14 +197,14 @@ hf.inv
197197

198198
@[to_additive]
199199
instance [topological_space H] [has_inv H] [has_continuous_inv H] : has_continuous_inv (G × H) :=
200-
(continuous_inv.comp continuous_fst).prod_mk (continuous_inv.comp continuous_snd)
200+
⟨continuous_inv.fst'.prod_mk continuous_inv.snd'
201201

202202
variable {ι : Type*}
203203

204204
@[to_additive]
205205
instance pi.has_continuous_inv {C : ι → Type*} [∀ i, topological_space (C i)]
206206
[∀ i, has_inv (C i)] [∀ i, has_continuous_inv (C i)] : has_continuous_inv (Π i, C i) :=
207-
{ continuous_inv := continuous_pi (λ i, continuous.inv (continuous_apply i)) }
207+
{ continuous_inv := continuous_pi (λ i, (continuous_apply i).inv) }
208208

209209
/-- A version of `pi.has_continuous_inv` for non-dependent functions. It is needed because sometimes
210210
Lean fails to use `pi.has_continuous_inv` for non-dependent functions. -/
@@ -274,34 +274,31 @@ end continuous_involutive_inv
274274

275275
section lattice_ops
276276

277-
variables {ι' : Sort*} [has_inv G] [has_inv H] {ts : set (topological_space G)}
278-
(h : Π t ∈ ts, @has_continuous_inv G t _) {ts' : ι' → topological_space G}
279-
(h' : Π i, @has_continuous_inv G (ts' i) _) {t₁ t₂ : topological_space G}
280-
(h₁ : @has_continuous_inv G t₁ _) (h₂ : @has_continuous_inv G t₂ _)
281-
{t : topological_space H} [has_continuous_inv H]
282-
277+
variables {ι' : Sort*} [has_inv G]
283278

284-
@[to_additive] lemma has_continuous_inv_Inf :
279+
@[to_additive] lemma has_continuous_inv_Inf {ts : set (topological_space G)}
280+
(h : Π t ∈ ts, @has_continuous_inv G t _) :
285281
@has_continuous_inv G (Inf ts) _ :=
286282
{ continuous_inv := continuous_Inf_rng (λ t ht, continuous_Inf_dom ht
287283
(@has_continuous_inv.continuous_inv G t _ (h t ht))) }
288284

289-
include h'
290-
291-
@[to_additive] lemma has_continuous_inv_infi :
285+
@[to_additive] lemma has_continuous_inv_infi {ts' : ι' → topological_space G}
286+
(h' : Π i, @has_continuous_inv G (ts' i) _) :
292287
@has_continuous_inv G (⨅ i, ts' i) _ :=
293288
by {rw ← Inf_range, exact has_continuous_inv_Inf (set.forall_range_iff.mpr h')}
294289

295-
omit h'
296-
297-
include h₁ h₂
298-
299-
@[to_additive] lemma has_continuous_inv_inf :
290+
@[to_additive] lemma has_continuous_inv_inf {t₁ t₂ : topological_space G}
291+
(h₁ : @has_continuous_inv G t₁ _) (h₂ : @has_continuous_inv G t₂ _) :
300292
@has_continuous_inv G (t₁ ⊓ t₂) _ :=
301-
by {rw inf_eq_infi, refine has_continuous_inv_infi (λ b, _), cases b; assumption}
293+
by { rw inf_eq_infi, refine has_continuous_inv_infi (λ b, _), cases b; assumption }
302294

303295
end lattice_ops
304296

297+
@[to_additive] lemma inducing.has_continuous_inv {G H : Type*} [has_inv G] [has_inv H]
298+
[topological_space G] [topological_space H] [has_continuous_inv H] {f : G → H} (hf : inducing f)
299+
(hf_inv : ∀ x, f x⁻¹ = (f x)⁻¹) : has_continuous_inv G :=
300+
⟨hf.continuous_iff.2 $ by simpa only [(∘), hf_inv] using hf.continuous.inv⟩
301+
305302
section topological_group
306303

307304
/-!
@@ -465,7 +462,7 @@ open mul_opposite
465462

466463
@[to_additive]
467464
instance [group α] [has_continuous_inv α] : has_continuous_inv αᵐᵒᵖ :=
468-
{ continuous_inv := continuous_induced_rng $ (@continuous_inv α _ _ _).comp continuous_unop }
465+
op_homeomorph.symm.inducing.has_continuous_inv unop_inv
469466

470467
/-- If multiplication is continuous in `α`, then it also is in `αᵐᵒᵖ`. -/
471468
@[to_additive "If addition is continuous in `α`, then it also is in `αᵃᵒᵖ`."]
@@ -498,16 +495,21 @@ rfl
498495

499496
variables {G}
500497

498+
@[to_additive] protected lemma inducing.topological_group {F : Type*} [group H]
499+
[topological_space H] [monoid_hom_class F H G] (f : F) (hf : inducing f) :
500+
topological_group H :=
501+
{ to_has_continuous_mul := hf.has_continuous_mul _,
502+
to_has_continuous_inv := hf.has_continuous_inv (map_inv f) }
503+
504+
@[to_additive] protected lemma topological_group_induced {F : Type*} [group H]
505+
[monoid_hom_class F H G] (f : F) :
506+
@topological_group H (induced f ‹_›) _ :=
507+
by { letI := induced f ‹_›, exact inducing.topological_group f ⟨rfl⟩ }
508+
501509
namespace subgroup
502510

503-
@[to_additive] instance (S : subgroup G) :
504-
topological_group S :=
505-
{ continuous_inv :=
506-
begin
507-
rw embedding_subtype_coe.to_inducing.continuous_iff,
508-
exact continuous_subtype_coe.inv
509-
end,
510-
..S.to_submonoid.has_continuous_mul }
511+
@[to_additive] instance (S : subgroup G) : topological_group S :=
512+
inducing.topological_group S.subtype inducing_coe
511513

512514
end subgroup
513515

@@ -524,17 +526,6 @@ def subgroup.topological_closure (s : subgroup G) : subgroup G :=
524526
(s.topological_closure : set G) = closure s :=
525527
rfl
526528

527-
@[to_additive]
528-
instance subgroup.topological_closure_topological_group (s : subgroup G) :
529-
topological_group (s.topological_closure) :=
530-
{ continuous_inv :=
531-
begin
532-
apply continuous_induced_rng,
533-
change continuous (λ p : s.topological_closure, (p : G)⁻¹),
534-
continuity,
535-
end
536-
..s.to_submonoid.topological_closure_has_continuous_mul}
537-
538529
@[to_additive] lemma subgroup.subgroup_topological_closure (s : subgroup G) :
539530
s ≤ s.topological_closure :=
540531
subset_closure
@@ -1226,14 +1217,12 @@ end units
12261217

12271218
section lattice_ops
12281219

1229-
variables {ι : Sort*} [group G] [group H] {ts : set (topological_space G)}
1230-
(h : ∀ t ∈ ts, @topological_group G t _) {ts' : ι → topological_space G}
1231-
(h' : ∀ i, @topological_group G (ts' i) _) {t₁ t₂ : topological_space G}
1232-
(h₁ : @topological_group G t₁ _) (h₂ : @topological_group G t₂ _)
1220+
variables {ι : Sort*} [group G] [group H]
12331221
{t : topological_space H} [topological_group H] {F : Type*}
12341222
[monoid_hom_class F G H] (f : F)
12351223

1236-
@[to_additive] lemma topological_group_Inf :
1224+
@[to_additive] lemma topological_group_Inf {ts : set (topological_space G)}
1225+
(h : ∀ t ∈ ts, @topological_group G t _) :
12371226
@topological_group G (Inf ts) _ :=
12381227
{ continuous_inv := @has_continuous_inv.continuous_inv G (Inf ts) _
12391228
(@has_continuous_inv_Inf _ _ _
@@ -1242,38 +1231,21 @@ variables {ι : Sort*} [group G] [group H] {ts : set (topological_space G)}
12421231
(@has_continuous_mul_Inf _ _ _
12431232
(λ t ht, @topological_group.to_has_continuous_mul G t _ (h t ht))) }
12441233

1245-
include h'
1246-
1247-
@[to_additive] lemma topological_group_infi :
1234+
@[to_additive] lemma topological_group_infi {ts' : ι → topological_space G}
1235+
(h' : ∀ i, @topological_group G (ts' i) _) :
12481236
@topological_group G (⨅ i, ts' i) _ :=
12491237
by {rw ← Inf_range, exact topological_group_Inf (set.forall_range_iff.mpr h')}
12501238

1251-
omit h'
1252-
1253-
include h₁ h₂
1254-
1255-
@[to_additive] lemma topological_group_inf :
1239+
@[to_additive] lemma topological_group_inf {t₁ t₂ : topological_space G}
1240+
(h₁ : @topological_group G t₁ _) (h₂ : @topological_group G t₂ _) :
12561241
@topological_group G (t₁ ⊓ t₂) _ :=
12571242
by {rw inf_eq_infi, refine topological_group_infi (λ b, _), cases b; assumption}
12581243

1259-
omit h₁ h₂
1260-
1261-
@[to_additive] lemma topological_group_induced :
1262-
@topological_group G (t.induced f) _ :=
1263-
{ continuous_inv :=
1264-
begin
1265-
letI : topological_space G := t.induced f,
1266-
refine continuous_induced_rng _,
1267-
simp_rw [function.comp, map_inv],
1268-
exact continuous_inv.comp (continuous_induced_dom : continuous f)
1269-
end,
1270-
continuous_mul := @has_continuous_mul.continuous_mul G (t.induced f) _
1271-
(@has_continuous_mul_induced G H _ _ t _ _ _ f) }
1272-
12731244
end lattice_ops
12741245

12751246
/-!
12761247
### Lattice of group topologies
1248+
12771249
We define a type class `group_topology α` which endows a group `α` with a topology such that all
12781250
group operations are continuous.
12791251
@@ -1366,12 +1338,7 @@ instance : bounded_order (group_topology α) :=
13661338

13671339
@[to_additive]
13681340
instance : has_inf (group_topology α) :=
1369-
{ inf := λ x y,
1370-
{ to_topological_space := x.to_topological_space ⊓ y.to_topological_space,
1371-
continuous_mul := continuous_inf_rng
1372-
(continuous_inf_dom_left₂ x.continuous_mul') (continuous_inf_dom_right₂ y.continuous_mul'),
1373-
continuous_inv := continuous_inf_rng
1374-
(continuous_inf_dom_left x.continuous_inv') (continuous_inf_dom_right y.continuous_inv') } }
1341+
{ inf := λ x y, ⟨x.1 ⊓ y.1, topological_group_inf x.2 y.2⟩ }
13751342

13761343
@[simp, to_additive]
13771344
lemma to_topological_space_inf (x y : group_topology α) :
@@ -1388,17 +1355,7 @@ local notation `cont` := @continuous _ _
13881355
@[to_additive "Infimum of a collection of additive group topologies"]
13891356
instance : has_Inf (group_topology α) :=
13901357
{ Inf := λ S,
1391-
{ to_topological_space := Inf (to_topological_space '' S),
1392-
continuous_mul := continuous_Inf_rng begin
1393-
rintros _ ⟨⟨t, tr⟩, haS, rfl⟩, resetI,
1394-
exact continuous_Inf_dom₂
1395-
(set.mem_image_of_mem to_topological_space haS)
1396-
(set.mem_image_of_mem to_topological_space haS) continuous_mul,
1397-
end,
1398-
continuous_inv := continuous_Inf_rng begin
1399-
rintros _ ⟨⟨t, tr⟩, haS, rfl⟩, resetI,
1400-
exact continuous_Inf_dom (set.mem_image_of_mem to_topological_space haS) continuous_inv,
1401-
end, } }
1358+
⟨Inf (to_topological_space '' S), topological_group_Inf $ ball_image_iff.2 $ λ t ht, t.2⟩ }
14021359

14031360
@[simp, to_additive]
14041361
lemma to_topological_space_Inf (s : set (group_topology α)) :

src/topology/algebra/module/basic.lean

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -208,16 +208,6 @@ def submodule.topological_closure (s : submodule R M) : submodule R M :=
208208
(s.topological_closure : set M) = closure (s : set M) :=
209209
rfl
210210

211-
instance submodule.topological_closure_has_continuous_smul (s : submodule R M) :
212-
has_continuous_smul R (s.topological_closure) :=
213-
{ continuous_smul :=
214-
begin
215-
apply continuous_induced_rng,
216-
change continuous (λ p : R × s.topological_closure, p.1 • (p.2 : M)),
217-
continuity,
218-
end,
219-
..s.to_add_submonoid.topological_closure_has_continuous_add }
220-
221211
lemma submodule.submodule_topological_closure (s : submodule R M) :
222212
s ≤ s.topological_closure :=
223213
subset_closure

0 commit comments

Comments
 (0)