@@ -15,7 +15,51 @@ and `+ : A × A → A` continuous (with all the products having the product topo
15
15
16
16
This topology was suggested by Will Sawin [ here ] (https://mathoverflow.net/a/477763/1384).
17
17
18
+ ## Mathematical details
19
+
20
+ I (buzzard) don't know of any reference for this other than Sawin's mathoverflow answer,
21
+ so I expand some of the details here.
22
+
23
+ First note that there is a finest topology with this property! Indeed, topologies on a fixed
24
+ type form a complete lattice (infinite infs and sups exist). So if `τ` is the Inf of all
25
+ the topologies on `A` which make `+` and `•` continuous, then the claim is that `+` and `•`
26
+ are still continuous for `τ`. To show `+ : A × A → A` is continuous we need to show that the
27
+ pushforward of the product topology `τ × τ` along `+` is `≤ τ`, and because `τ` is an Inf it
28
+ suffices to show that it's `≤ σ` for any `σ` on `A` which makes `+` and `•` continuous.
29
+ However pushforward and products are monotone, so `τ × τ ≤ σ × σ`, and the pushforward of
30
+ `σ × σ` is `≤ σ` because that's precisely the statement that `+` is continuous for `σ`.
31
+ The proof for `•` is similar.
32
+
33
+ A *topological module* for a topological ring `R` is an `R`-module `A` such that `+` and `•`
34
+ are continuous. A crucial observation is that if `M` is a topological module, if `A` is a module,
35
+ and if `φ : A → M` is linear, then the pullback of `M`'s topology to `A` is a topology making `A`
36
+ into a topological module. Let's for example check that `•` is continuous. If `U ⊆ A` is open
37
+ then by definition of the pullback topology, `U = φ⁻¹(V)` for some open `V ⊆ M`, and
38
+ now the pullback of `U` under `•` is just the pullback along the continuous map
39
+ `id × φ : R × A → R × M` of the preimage of `V` under the continuous map `• : R × M → M`,
40
+ so it's open. The proof for `+` is similar.
41
+
42
+ As a consequence of this, we see that all linear maps are automatically continuous for
43
+ the action topology. Indeed the argument above shows that if `A → M` is linear then the action
44
+ topology on `A` is `≤` the pullback of the action topology on `M` (because it's the inf of a set
45
+ containing this topology) which is the definition of continuity.
46
+
47
+ We deduce that the action topology is a functor from the category of `R`-modules (`R` a topological
48
+ ring) to the category of topological `R`-modules, and it is perhaps unsurprising that this is
49
+ an adjoint to the forgetful functor. Indeed, if `A` is an `R`-module and `M` is
50
+ a topological `R`-module, then the linear maps `A → M` are precisely the continuous linear maps
51
+ from `A` with its action topology, to `M`, so the action topology is a left adjoint to the
52
+ forgetful functor.
53
+
54
+ This file develops the theory of the action topology. We prove that the action topology on
55
+ `R` as a module over itself is `R`'s original topology, that the action topology on a product
56
+ of modules is the product of the action topologies, and that the action topology on a quotient
57
+ module is the quotient topology.
58
+
59
+ If the module is
60
+
18
61
## TODO
62
+
19
63
Drop freeness from continuity of bilinear map claim; presumably only finiteness is needed,
20
64
becuse of Sawin's observation that the quotient topology for a surjection of R-mods
21
65
is the action topology.
@@ -216,28 +260,26 @@ instance prod : IsActionTopology R (M × N) := by
216
260
constructor
217
261
haveI : ContinuousAdd M := isActionTopology_continuousAdd R M
218
262
haveI : ContinuousAdd N := isActionTopology_continuousAdd R N
219
- apply le_antisymm
220
- · rw [← continuous_id_iff_le]
221
- have foo : (id : M × N → M × N) =
222
- (fun abcd ↦ abcd.1 + abcd.2 : (M × N) × (M × N) → M × N) ∘
223
- (fun ab ↦ ((ab.1 , 0 ),(0 , ab.2 ))) := by
224
- ext ⟨a, b⟩ <;> simp
225
- rw [foo]
226
- obtain ⟨bar⟩ : @ContinuousAdd (M × N) (actionTopology R (M × N)) _ := ActionTopology.continuousAdd _ _
227
- refine @Continuous.comp _ _ _ (_) ((_ : TopologicalSpace ((M × N) × (M × N)))) (_) _ _ bar ?_
228
- apply (@continuous_prod_mk _ _ _ (_) (_) (_) _ _).2
229
- constructor
230
- · -- bleurgh, fighting typeclass inference all the time, which wants one "canonical"
231
- -- topology on e.g. M × N.
232
- refine @Continuous.comp _ _ _ (_) (_) (_) _ ((LinearMap.inl R M N)) ?_
233
- (continuous_fst : Continuous (Prod.fst : M × N → M))
234
- apply @continuous_of_linearMap _ _ _ _ _ _ _ _ _ _ _ (actionTopology _ _) (?_)
235
- exact @IsActionTopology.mk _ _ _ _ _ (_) rfl
236
- · refine @Continuous.comp _ _ _ (_) (_) (_) _ ((LinearMap.inr R M N)) ?_
237
- (continuous_snd : Continuous (Prod.snd : M × N → N))
238
- apply @continuous_of_linearMap _ _ _ _ _ _ _ _ _ _ _ (actionTopology _ _) (?_)
239
- exact @IsActionTopology.mk _ _ _ _ _ (_) rfl
240
- · exact sInf_le ⟨Prod.continuousSMul, Prod.continuousAdd⟩
263
+ refine le_antisymm ?_ <| sInf_le ⟨Prod.continuousSMul, Prod.continuousAdd⟩
264
+ rw [← continuous_id_iff_le]
265
+ rw [show (id : M × N → M × N) =
266
+ (fun abcd ↦ abcd.1 + abcd.2 : (M × N) × (M × N) → M × N) ∘
267
+ (fun ab ↦ ((ab.1 , 0 ),(0 , ab.2 ))) by
268
+ ext ⟨a, b⟩ <;> simp]
269
+ -- The rest of the proof is a massive fight against typeclass inference, which is desperate
270
+ -- to always put the product topology on M × N, when we sometimes want the action topology
271
+ -- (they are equal, but that's exactly what we're proving so we can't assume it yet).
272
+ -- This issue stops the standard continuity tactics from working.
273
+ obtain ⟨this⟩ : @ContinuousAdd (M × N) (actionTopology R (M × N)) _ :=
274
+ ActionTopology.continuousAdd _ _
275
+ refine @Continuous.comp _ ((M × N) × (M × N)) _ (_) (_) (_) _ _ this ?_
276
+ refine (@continuous_prod_mk _ _ _ (_) (_) (_) _ _).2 ⟨?_, ?_⟩
277
+ · refine @Continuous.comp _ _ _ (_) (_) (_) _ ((LinearMap.inl R M N)) ?_ continuous_fst
278
+ apply @continuous_of_linearMap _ _ _ _ _ _ _ _ _ _ _ (actionTopology _ _) (?_)
279
+ exact @IsActionTopology.mk _ _ _ _ _ (_) rfl
280
+ · refine @Continuous.comp _ _ _ (_) (_) (_) _ ((LinearMap.inr R M N)) ?_ continuous_snd
281
+ apply @continuous_of_linearMap _ _ _ _ _ _ _ _ _ _ _ (actionTopology _ _) (?_)
282
+ exact @IsActionTopology.mk _ _ _ _ _ (_) rfl
241
283
242
284
end prod
243
285
@@ -261,30 +303,26 @@ variable {ι : Type*} [Finite ι] {A : ι → Type*} [∀ i, AddCommGroup (A i)]
261
303
262
304
instance pi : IsActionTopology R (∀ i, A i) := by
263
305
induction ι using Finite.induction_empty_option
264
- · case of_equiv X Y e hind _ _ _ _ =>
265
- specialize hind (A := fun x ↦ A (e x))
266
- apply iso (R := R) (A := ∀ j, A (e j)) (B := ∀ i, A i)
267
- (Homeomorph.piCongrLeft e) (by exact LinearEquiv.piCongrLeft R A e)
268
- aesop
306
+ · case of_equiv X Y e _ _ _ _ _ =>
307
+ exact iso (Homeomorph.piCongrLeft e) (LinearEquiv.piCongrLeft R A e) (fun _ ↦ rfl)
269
308
· apply subsingleton
270
309
· case h_option X _ hind _ _ _ _ =>
271
- specialize hind (A := fun x ↦ A (some x))
272
310
let e : Option X ≃ X ⊕ Unit := Equiv.optionEquivSumPUnit X
273
311
refine @iso (ehomeo := Homeomorph.piCongrLeft e.symm)
274
312
(elinear := LinearEquiv.piCongrLeft R A e.symm) _ (fun f ↦ rfl) ?_
275
313
apply @iso (ehomeo := (Homeomorph.sumPiEquivProdPi X Unit _).symm)
276
314
(elinear := (LinearEquiv.sumPiEquivProdPi R X Unit _).symm) _ (fun f ↦ rfl) ?_
277
315
refine @prod _ _ _ _ _ _ (_) (hind) _ _ _ (_) (?_)
278
316
let φ : Unit → Option X := fun t ↦ e.symm (Sum.inr t)
279
- let f : (∀ t, A (φ t)) ≃ₜ A (φ ()) := Homeomorph.pUnitPiEquiv _
280
- let g : (∀ t, A (φ t)) ≃ₗ[R] A (φ ()) := LinearEquiv.pUnitPiEquiv R _
281
- exact iso f.symm g.symm (fun a ↦ rfl)
317
+ exact iso (Homeomorph.pUnitPiEquiv (fun t ↦ A (φ t))).symm
318
+ (LinearEquiv.pUnitPiEquiv R (fun t ↦ A (φ t))).symm (fun a ↦ rfl)
282
319
283
320
end Pi
284
321
285
322
section bilinear
286
323
287
- -- I need these because ` ChooseBasisIndex.fintype` needs a ring instead of a semiring
324
+ -- I need rings not semirings here, because ` ChooseBasisIndex.fintype` incorrectly(?) needs
325
+ -- a ring instead of a semiring
288
326
variable {R : Type *} [τR : TopologicalSpace R] [CommRing R] [TopologicalRing R]
289
327
290
328
-- similarly these don't need to be groups
@@ -295,32 +333,38 @@ variable {C : Type*} [AddCommGroup C] [Module R C] [aC : TopologicalSpace C] [Is
295
333
lemma Module.continuous_bilinear_of_pi_finite (ι : Type *) [Finite ι]
296
334
(bil : (ι → R) →ₗ[R] B →ₗ[R] C) : Continuous (fun ab ↦ bil ab.1 ab.2 : ((ι → R) × B → C)) := by
297
335
classical
298
- have foo : (fun fb ↦ bil fb.1 fb.2 : ((ι → R) × B → C)) = (fun fb ↦ ∑ᶠ i, ((fb.1 i) • (bil (Pi.single i 1 ) fb.2 ) : C)) := by
336
+ have foo : (fun fb ↦ bil fb.1 fb.2 : ((ι → R) × B → C)) =
337
+ (fun fb ↦ ∑ᶠ i, ((fb.1 i) • (bil (Pi.single i 1 ) fb.2 ) : C)) := by
299
338
ext ⟨f, b⟩
300
339
simp_rw [← LinearMap.smul_apply]
301
340
rw [← LinearMap.finsum_apply]
302
341
congr
303
- simp_rw [LinearMap.smul_apply]
304
- simp_rw [← LinearMap.map_smul]
305
- --rw [ LinearMap.finsum_apply ]
342
+ simp_rw [LinearMap.smul_apply, ← LinearMap.map_smul]
306
343
convert AddMonoidHom.map_finsum bil.toAddMonoidHom _
307
- ·
308
- ext j
344
+ · ext j
309
345
simp_rw [← Pi.single_smul, smul_eq_mul, mul_one]
310
346
symm
347
+ -- Is there a missing delaborator? No ∑ᶠ notation
311
348
change (∑ᶠ (i : ι), Pi.single i (f i)) j = f j
349
+ -- last tactic has no effect
312
350
rw [finsum_apply]
313
- convert finsum_eq_single (fun i ↦ Pi.single i (f i) j) j _ using 1
314
- · simp
315
- · aesop
316
- · exact Set.toFinite _--(Function.support fun x ↦ f x • Pi.single x 1)
351
+ convert finsum_eq_single (fun i ↦ Pi.single i (f i) j) j
352
+ ( by simp (config := {contextual := true })) using 1
353
+ simp
354
+ · apply Set.toFinite _--(Function.support fun x ↦ f x • Pi.single x 1)
317
355
rw [foo]
318
356
haveI : ContinuousAdd C := isActionTopology_continuousAdd R C
319
357
apply continuous_finsum (fun i ↦ by fun_prop)
320
358
intro x
321
359
use Set.univ
322
360
simp [Set.toFinite _]
323
361
362
+ -- Probably this can be beefed up in two distinct ways:
363
+ -- Firstly, as it stands the lemma should be provable for semirings.
364
+ -- Secind, we should be able to drop Module.Free in the ring case, change elinear.symm
365
+ -- into a
366
+ -- surjection not a bijection, and then use that quotients coinduce the action
367
+ -- topology for groups (proved later, but not using this)
324
368
lemma Module.continuous_bilinear_of_finite_free [Module.Finite R A] [Module.Free R A]
325
369
(bil : A →ₗ[R] B →ₗ[R] C) : Continuous (fun ab ↦ bil ab.1 ab.2 : (A × B → C)) := by
326
370
let ι := Module.Free.ChooseBasisIndex R A
@@ -362,14 +406,13 @@ def Module.topologicalRing : TopologicalRing D where
362
406
363
407
end algebra
364
408
365
- -- everything from here on is dead code and ideas which use other topologies
366
409
section topology_problem
367
410
368
411
variable {R : Type *} [τR : TopologicalSpace R] [Ring R] [TopologicalRing R]
369
412
variable {A : Type *} [AddCommGroup A] [Module R A] [aA : TopologicalSpace A] [IsActionTopology R A]
370
413
variable {B : Type *} [AddCommGroup B] [Module R B] [aB : TopologicalSpace B] [IsActionTopology R B]
371
414
372
- -- Here I need the lemma about how quotients are open so I need groups
415
+ -- Here I need the lemma about how quotients are open so I do need groups
373
416
-- because this relies on translates of an open being open
374
417
lemma coinduced_of_surjective {φ : A →ₗ[R] B} (hφ : Function.Surjective φ) :
375
418
TopologicalSpace.coinduced φ (actionTopology R A) = actionTopology R B := by
@@ -418,7 +461,7 @@ lemma coinduced_of_surjective {φ : A →ₗ[R] B} (hφ : Function.Surjective φ
418
461
· apply @Continuous.prod_map _ _ _ _ (_) (_) (_) (_) <;>
419
462
· rw [continuous_iff_coinduced_le, isActionTopology R A]; rfl
420
463
· rw [← isActionTopology R A]
421
- exact coinduced_prod_eq_prod_coinduced (φ.toAddMonoidHom : A →+ B) φ.toAddMonoidHom hφ hφ
464
+ exact coinduced_prod_eq_prod_coinduced φ φ hφ hφ
422
465
423
466
424
467
end topology_problem
0 commit comments