@@ -197,14 +197,14 @@ hf.inv
197197
198198@[to_additive]
199199instance [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
202202variable {ι : Type *}
203203
204204@[to_additive]
205205instance 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
210210Lean fails to use `pi.has_continuous_inv` for non-dependent functions. -/
@@ -274,34 +274,31 @@ end continuous_involutive_inv
274274
275275section 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) _ :=
293288by {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
303295end 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+
305302section topological_group
306303
307304/-!
@@ -465,7 +462,7 @@ open mul_opposite
465462
466463@[to_additive]
467464instance [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
499496variables {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+
501509namespace 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
512514end subgroup
513515
@@ -524,17 +526,6 @@ def subgroup.topological_closure (s : subgroup G) : subgroup G :=
524526 (s.topological_closure : set G) = closure s :=
525527rfl
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 :=
540531subset_closure
@@ -1226,14 +1217,12 @@ end units
12261217
12271218section 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) _ :=
12491237by {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₂) _ :=
12571242by {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-
12731244end lattice_ops
12741245
12751246/-!
12761247### Lattice of group topologies
1248+
12771249We define a type class `group_topology α` which endows a group `α` with a topology such that all
12781250group operations are continuous.
12791251
@@ -1366,12 +1338,7 @@ instance : bounded_order (group_topology α) :=
13661338
13671339@[to_additive]
13681340instance : 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]
13771344lemma 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" ]
13891356instance : 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]
14041361lemma to_topological_space_Inf (s : set (group_topology α)) :
0 commit comments