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

Commit 19ecff8

Browse files
author
ashwiniyengar
committed
feat(topology/algebra/nonarchimedean): added nonarchimedean groups and rings (#6551)
Adding nonarchimedean topological groups and rings.
1 parent ae33fb0 commit 19ecff8

File tree

3 files changed

+183
-8
lines changed

3 files changed

+183
-8
lines changed
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
/-
2+
Copyright (c) 2021 Ashwin Iyengar. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Author: Kevin Buzzard, Johan Commelin, Ashwin Iyengar, Patrick Massot.
5+
-/
6+
import topology.algebra.ring
7+
import topology.algebra.open_subgroup
8+
import data.set.basic
9+
import group_theory.subgroup
10+
11+
/-!
12+
# Nonarchimedean Topology
13+
14+
In this file we set up the theory of nonarchimedean topological groups and rings.
15+
16+
A nonarchimedean group is a topological group whose topology admits a basis of
17+
open neighborhoods of the identity element in the group consisting of open subgroups.
18+
A nonarchimedean ring is a topological ring whose underlying topological (additive)
19+
group is nonarchimedean.
20+
21+
## Definitions
22+
23+
- `nonarchimedean_add_group`: nonarchimedean additive group.
24+
- `nonarchimedean_group`: nonarchimedean multiplicative group.
25+
- `nonarchimedean_ring`: nonarchimedean ring.
26+
27+
-/
28+
29+
/-- An topological additive group is nonarchimedean if every neighborhood of 0
30+
contains an open subgroup. -/
31+
class nonarchimedean_add_group (G : Type*)
32+
[add_group G] [topological_space G] extends topological_add_group G : Prop :=
33+
(is_nonarchimedean : ∀ U ∈ nhds (0 : G), ∃ V : open_add_subgroup G, (V : set G) ⊆ U)
34+
35+
/-- A topological group is nonarchimedean if every neighborhood of 1 contains an open subgroup. -/
36+
@[to_additive]
37+
class nonarchimedean_group (G : Type*)
38+
[group G] [topological_space G] extends topological_group G : Prop :=
39+
(is_nonarchimedean : ∀ U ∈ nhds (1 : G), ∃ V : open_subgroup G, (V : set G) ⊆ U)
40+
41+
/-- An topological ring is nonarchimedean if its underlying topological additive
42+
group is nonarchimedean. -/
43+
class nonarchimedean_ring (R : Type*)
44+
[ring R] [topological_space R] extends topological_ring R : Prop :=
45+
(is_nonarchimedean : ∀ U ∈ nhds (0 : R), ∃ V : open_add_subgroup R, (V : set R) ⊆ U)
46+
47+
/-- Every nonarchimedean ring is naturally a nonarchimedean additive group. -/
48+
@[priority 100] -- see Note [lower instance priority]
49+
instance nonarchimedean_ring.to_nonarchimedean_add_group
50+
(R : Type*) [ring R] [topological_space R] [t: nonarchimedean_ring R] :
51+
nonarchimedean_add_group R := {..t}
52+
53+
namespace nonarchimedean_group
54+
55+
variables {G : Type*} [group G] [topological_space G] [nonarchimedean_group G]
56+
variables {H : Type*} [group H] [topological_space H] [topological_group H]
57+
variables {K : Type*} [group K] [topological_space K] [nonarchimedean_group K]
58+
59+
/-- If a topological group embeds into a nonarchimedean group, then it
60+
is nonarchimedean. -/
61+
@[to_additive nonarchimedean_add_group.nonarchimedean_of_emb]
62+
lemma nonarchimedean_of_emb (f : G →* H) (emb : open_embedding f) : nonarchimedean_group H :=
63+
{ is_nonarchimedean := λ U hU, have h₁ : (f ⁻¹' U) ∈ nhds (1 : G), from
64+
by {apply emb.continuous.tendsto, rwa is_group_hom.map_one f},
65+
let ⟨V, hV⟩ := is_nonarchimedean (f ⁻¹' U) h₁ in
66+
⟨{is_open' := emb.is_open_map _ V.is_open, ..subgroup.map f V},
67+
set.image_subset_iff.2 hV⟩ }
68+
69+
/-- An open neighborhood of the identity in the cartesian product of two nonarchimedean groups
70+
contains the cartesian product of an open neighborhood in each group. -/
71+
@[to_additive nonarchimedean_add_group.prod_subset]
72+
lemma prod_subset {U} (hU : U ∈ nhds (1 : G × K)) :
73+
∃ (V : open_subgroup G) (W : open_subgroup K), (V : set G).prod (W : set K) ⊆ U :=
74+
begin
75+
erw [nhds_prod_eq, filter.mem_prod_iff] at hU,
76+
rcases hU with ⟨U₁, hU₁, U₂, hU₂, h⟩,
77+
cases is_nonarchimedean _ hU₁ with V hV,
78+
cases is_nonarchimedean _ hU₂ with W hW,
79+
use V, use W,
80+
rw set.prod_subset_iff,
81+
intros x hX y hY,
82+
exact set.subset.trans (set.prod_mono hV hW) h (set.mem_sep hX hY),
83+
end
84+
85+
/-- An open neighborhood of the identity in the cartesian square of a nonarchimedean group
86+
contains the cartesian square of an open neighborhood in the group. -/
87+
@[to_additive nonarchimedean_add_group.prod_self_subset]
88+
lemma prod_self_subset {U} (hU : U ∈ nhds (1 : G × G)) :
89+
∃ (V : open_subgroup G), (V : set G).prod (V : set G) ⊆ U :=
90+
let ⟨V, W, h⟩ := prod_subset hU in
91+
⟨V ⊓ W, by {refine set.subset.trans (set.prod_mono _ _) ‹_›; simp}⟩
92+
93+
/-- The cartesian product of two nonarchimedean groups is nonarchimedean. -/
94+
@[to_additive]
95+
instance : nonarchimedean_group (G × K) :=
96+
{ is_nonarchimedean := λ U hU, let ⟨V, W, h⟩ := prod_subset hU in ⟨V.prod W, ‹_›⟩ }
97+
98+
end nonarchimedean_group
99+
100+
namespace nonarchimedean_ring
101+
102+
open nonarchimedean_ring
103+
open nonarchimedean_add_group
104+
105+
variables {R S : Type*}
106+
variables [ring R] [topological_space R] [nonarchimedean_ring R]
107+
variables [ring S] [topological_space S] [nonarchimedean_ring S]
108+
109+
/-- The cartesian product of two nonarchimedean rings is nonarchimedean. -/
110+
instance : nonarchimedean_ring (R × S) :=
111+
{ is_nonarchimedean := nonarchimedean_add_group.is_nonarchimedean }
112+
113+
/-- Given an open subgroup `U` and an element `r` of a nonarchimedean ring, there is an open
114+
subgroup `V` such that `r • V` is contained in `U`. -/
115+
lemma left_mul_subset (U : open_add_subgroup R) (r : R) :
116+
∃ V : open_add_subgroup R, r • (V : set R) ⊆ U :=
117+
⟨U.comap (add_monoid_hom.mul_left r) (continuous_mul_left r),
118+
(U : set R).image_preimage_subset _⟩
119+
120+
/-- An open subgroup of a nonarchimedean ring contains the square of another one. -/
121+
lemma mul_subset (U : open_add_subgroup R) :
122+
∃ V : open_add_subgroup R, (V : set R) * V ⊆ U :=
123+
let ⟨V, H⟩ := prod_self_subset (mem_nhds_sets (is_open.preimage continuous_mul U.is_open)
124+
begin
125+
simpa only [set.mem_preimage, open_add_subgroup.mem_coe, prod.snd_zero, mul_zero]
126+
using U.zero_mem,
127+
end) in
128+
begin
129+
use V,
130+
rintros v ⟨a, b, ha, hb, hv⟩,
131+
have hy := H (set.mk_mem_prod ha hb),
132+
simp only [set.mem_preimage, open_add_subgroup.mem_coe] at hy,
133+
rwa hv at hy
134+
end
135+
136+
end nonarchimedean_ring

src/topology/algebra/open_subgroup.lean

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,31 @@ instance : semilattice_inf_top (open_subgroup G) :=
141141
attribute [norm_cast] coe_inf coe_subset coe_subgroup_le open_add_subgroup.coe_inf
142142
open_add_subgroup.coe_subset open_add_subgroup.coe_add_subgroup_le
143143

144+
variables {N : Type*} [group N] [topological_space N]
145+
146+
/-- The preimage of an `open_subgroup` along a continuous `monoid` homomorphism
147+
is an `open_subgroup`. -/
148+
@[to_additive "The preimage of an `open_add_subgroup` along a continuous `add_monoid` homomorphism
149+
is an `open_add_subgroup`."]
150+
def comap (f : G →* N)
151+
(hf : continuous f) (H : open_subgroup N) : open_subgroup G :=
152+
{ is_open' := H.is_open.preimage hf,
153+
.. (H : subgroup N).comap f }
154+
155+
@[simp, to_additive]
156+
lemma coe_comap (H : open_subgroup N) (f : G →* N) (hf : continuous f) :
157+
(H.comap f hf : set G) = f ⁻¹' H := rfl
158+
159+
@[simp, to_additive]
160+
lemma mem_comap {H : open_subgroup N} {f : G →* N} {hf : continuous f} {x : G} :
161+
x ∈ H.comap f hf ↔ f x ∈ H := iff.rfl
162+
163+
@[to_additive]
164+
lemma comap_comap {P : Type*} [group P] [topological_space P]
165+
(K : open_subgroup P) (f₂ : N →* P) (hf₂ : continuous f₂) (f₁ : G →* N) (hf₁ : continuous f₁) :
166+
(K.comap f₂ hf₂).comap f₁ hf₁ = K.comap (f₂.comp f₁) (hf₂.comp hf₁) :=
167+
rfl
168+
144169
end open_subgroup
145170

146171
namespace subgroup

src/topology/algebra/ring.lean

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,46 @@ Theory of topological rings.
77
-/
88
import topology.algebra.group
99
import ring_theory.ideal.basic
10+
import algebra.ring.prod
1011

1112
open classical set filter topological_space
1213
open_locale classical
1314

1415
section topological_ring
15-
universes u v w
16-
variables (α : Type u) [topological_space α]
16+
variables (α : Type*)
1717

1818
/-- A topological semiring is a semiring where addition and multiplication are continuous. -/
19-
class topological_semiring [semiring α]
19+
class topological_semiring [topological_space α] [semiring α]
2020
extends has_continuous_add α, has_continuous_mul α : Prop
2121

22-
variables [ring α]
23-
2422
/-- A topological ring is a ring where the ring operations are continuous. -/
25-
class topological_ring extends has_continuous_add α, has_continuous_mul α : Prop :=
23+
class topological_ring [topological_space α] [ring α]
24+
extends has_continuous_add α, has_continuous_mul α : Prop :=
2625
(continuous_neg : continuous (λa:α, -a))
2726

28-
variables [t : topological_ring α]
27+
variables {α}
28+
29+
/-- The product topology on the cartesian product of two topological semirings
30+
makes the product into a topological semiring. -/
31+
instance prod_semiring {β : Type*}
32+
[semiring α] [topological_space α] [topological_semiring α]
33+
[semiring β] [topological_space β] [topological_semiring β] : topological_semiring (α × β) :=
34+
{}
35+
36+
variables [ring α] [topological_space α] [t : topological_ring α]
2937
@[priority 100] -- see Note [lower instance priority]
3038
instance topological_ring.to_topological_semiring : topological_semiring α := {..t}
3139

3240
@[priority 100] -- see Note [lower instance priority]
3341
instance topological_ring.to_topological_add_group : topological_add_group α := {..t}
3442

35-
variables {α} [topological_ring α]
43+
variables [topological_ring α]
44+
45+
/-- The product topology on the cartesian product of two topological rings
46+
makes the product into a topological ring. -/
47+
instance prod_ring {β : Type*}
48+
[ring β] [topological_space β] [topological_ring β] : topological_ring (α × β) :=
49+
{ continuous_neg := continuous_neg }
3650

3751
/-- In a topological ring, the left-multiplication `add_monoid_hom` is continuous. -/
3852
lemma mul_left_continuous (x : α) : continuous (add_monoid_hom.mul_left x) :=

0 commit comments

Comments
 (0)