|
| 1 | +/- |
| 2 | +Copyright (c) 2025 David Loeffler. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: David Loeffler |
| 5 | +-/ |
| 6 | + |
| 7 | +import Mathlib.GroupTheory.Commensurable |
| 8 | +import Mathlib.Topology.Algebra.ContinuousMonoidHom |
| 9 | +import Mathlib.Topology.Algebra.Group.ClosedSubgroup |
| 10 | +import Mathlib.Topology.Algebra.IsUniformGroup.Basic |
| 11 | + |
| 12 | +/-! |
| 13 | +# Discrete subgroups of topological groups |
| 14 | +
|
| 15 | +Note that the instance `Subgroup.isClosed_of_discrete` does not live here, in order that it can |
| 16 | +be used in other files without requiring lots of group-theoretic imports. |
| 17 | +-/ |
| 18 | + |
| 19 | +open Filter Topology Uniformity |
| 20 | + |
| 21 | +variable {G : Type*} [Group G] [TopologicalSpace G] |
| 22 | + |
| 23 | +/-- If `G` has a topology, and `H ≤ K` are subgroups, then `H` as a subgroup of `K` is isomorphic, |
| 24 | +as a topological group, to `H` as a subgroup of `G`. This is `subgroupOfEquivOfLe` upgraded to a |
| 25 | +`ContinuousMulEquiv`. -/ |
| 26 | +@[to_additive (attr := simps! apply) /-- If `G` has a topology, and `H ≤ K` are |
| 27 | +subgroups, then `H` as a subgroup of `K` is isomorphic, as a topological group, to `H` as a subgroup |
| 28 | +of `G`. This is `addSubgroupOfEquivOfLe` upgraded to a `ContinuousAddEquiv`.-/] |
| 29 | +def Subgroup.subgroupOfContinuousMulEquivOfLe {H K : Subgroup G} (hHK : H ≤ K) : |
| 30 | + (H.subgroupOf K) ≃ₜ* H := |
| 31 | + (subgroupOfEquivOfLe hHK).toContinuousMulEquiv (by |
| 32 | + simp only [subgroupOfEquivOfLe, Topology.IsInducing.subtypeVal.isOpen_iff, |
| 33 | + exists_exists_and_eq_and] |
| 34 | + simpa [Set.ext_iff] using fun s ↦ exists_congr |
| 35 | + fun t ↦ and_congr_right fun _ ↦ ⟨fun aux g hgh ↦ aux g (hHK hgh) hgh, by grind⟩) |
| 36 | + |
| 37 | +@[to_additive (attr := simp)] |
| 38 | +lemma Subgroup.subgroupOfContinuousMulEquivOfLe_symm_apply |
| 39 | + {H K : Subgroup G} (hHK : H ≤ K) (g : H) : |
| 40 | + (subgroupOfContinuousMulEquivOfLe hHK).symm g = ⟨⟨g.1, hHK g.2⟩, g.2⟩ := |
| 41 | + rfl |
| 42 | + |
| 43 | +@[to_additive (attr := simp)] |
| 44 | +lemma Subgroup.subgroupOfContinuousMulEquivOfLe_toMulEquiv {H K : Subgroup G} (hHK : H ≤ K) : |
| 45 | + (subgroupOfContinuousMulEquivOfLe hHK : H.subgroupOf K ≃* H) = subgroupOfEquivOfLe hHK := by |
| 46 | + rfl |
| 47 | + |
| 48 | +variable [IsTopologicalGroup G] [T2Space G] |
| 49 | + |
| 50 | +/-- If `G` is a topological group and `H` a finite-index subgroup, then `G` is topologically |
| 51 | +discrete iff `H` is. -/ |
| 52 | +@[to_additive] |
| 53 | +lemma Subgroup.discreteTopology_iff_of_finiteIndex {H : Subgroup G} [H.FiniteIndex] : |
| 54 | + DiscreteTopology H ↔ DiscreteTopology G := by |
| 55 | + refine ⟨fun hH ↦ ?_, fun hG ↦ inferInstance⟩ |
| 56 | + suffices IsOpen (H : Set G) by |
| 57 | + rw [discreteTopology_iff_isOpen_singleton_one, isOpen_singleton_iff_nhds_eq_pure, |
| 58 | + ← H.coe_one, ← this.isOpenEmbedding_subtypeVal.map_nhds_eq, nhds_discrete, map_pure] |
| 59 | + exact H.isOpen_of_isClosed_of_finiteIndex Subgroup.isClosed_of_discrete |
| 60 | + |
| 61 | +@[to_additive] |
| 62 | +lemma Subgroup.discreteTopology_iff_of_isFiniteRelIndex {H K : Subgroup G} (hHK : H ≤ K) |
| 63 | + [IsFiniteRelIndex H K] : DiscreteTopology H ↔ DiscreteTopology K := by |
| 64 | + haveI : (H.subgroupOf K).FiniteIndex := IsFiniteRelIndex.to_finiteIndex_subgroupOf |
| 65 | + rw [← (subgroupOfContinuousMulEquivOfLe hHK).discreteTopology_iff, |
| 66 | + discreteTopology_iff_of_finiteIndex] |
| 67 | + |
| 68 | +@[to_additive] |
| 69 | +lemma Subgroup.Commensurable.discreteTopology_iff |
| 70 | + {G : Type*} [Group G] [TopologicalSpace G] [IsTopologicalGroup G] [T2Space G] |
| 71 | + {H K : Subgroup G} (h : Commensurable H K) : |
| 72 | + DiscreteTopology H ↔ DiscreteTopology K := |
| 73 | + calc DiscreteTopology H ↔ DiscreteTopology ↑(H ⊓ K) := |
| 74 | + haveI : IsFiniteRelIndex (H ⊓ K) H := ⟨Subgroup.inf_relIndex_left H K ▸ h.2⟩ |
| 75 | + (Subgroup.discreteTopology_iff_of_isFiniteRelIndex inf_le_left).symm |
| 76 | + _ ↔ DiscreteTopology K := |
| 77 | + haveI : IsFiniteRelIndex (H ⊓ K) K := ⟨Subgroup.inf_relIndex_right H K ▸ h.1⟩ |
| 78 | + Subgroup.discreteTopology_iff_of_isFiniteRelIndex inf_le_right |
0 commit comments