@@ -252,6 +252,67 @@ lemma continuous_neg (C : Type*) [AddCommGroup C] [Module R C] [TopologicalSpace
252
252
253
253
end function
254
254
255
+ section surjection
256
+
257
+ variable {R : Type *} [τR : TopologicalSpace R] [Ring R] [TopologicalRing R]
258
+ variable {A : Type *} [AddCommGroup A] [Module R A] [aA : TopologicalSpace A] [IsActionTopology R A]
259
+ variable {B : Type *} [AddCommGroup B] [Module R B] [aB : TopologicalSpace B] [IsActionTopology R B]
260
+
261
+ -- Here I need the lemma about how quotients are open so I do need groups
262
+ -- because this relies on translates of an open being open
263
+ lemma coinduced_of_surjective {φ : A →ₗ[R] B} (hφ : Function.Surjective φ) :
264
+ TopologicalSpace.coinduced φ (actionTopology R A) = actionTopology R B := by
265
+ have : Continuous φ := continuous_of_linearMap φ
266
+ rw [continuous_iff_coinduced_le, isActionTopology R A, isActionTopology R B] at this
267
+ apply le_antisymm this
268
+ have : ContinuousAdd A := isActionTopology_continuousAdd R A
269
+ refine sInf_le ⟨?_, ?_⟩
270
+ · apply @ContinuousSMul.mk R B _ _ (_)
271
+ obtain ⟨foo⟩ : ContinuousSMul R A := inferInstance
272
+ rw [continuous_def] at foo ⊢
273
+ intro U hU
274
+ rw [isOpen_coinduced, ← isActionTopology R A] at hU
275
+ specialize foo _ hU; clear hU
276
+ rw [← Set.preimage_comp, show φ ∘ (fun p ↦ p.1 • p.2 : R × A → A) =
277
+ (fun p ↦ p.1 • p.2 : R × B → B) ∘
278
+ (Prod.map id ⇑φ.toAddMonoidHom) by ext; simp, Set.preimage_comp] at foo
279
+ clear! aB -- easiest to just remove topology on B completely now so typeclass inference
280
+ -- never sees it
281
+ convert isOpenMap_of_coinduced (AddMonoidHom.prodMap (AddMonoidHom.id R) φ.toAddMonoidHom)
282
+ (_) (_) (_) foo
283
+ · -- aesop would do this if `Function.surjective_id : Surjective ⇑(AddMonoidHom.id R)`
284
+ -- was known by it
285
+ apply (Set.image_preimage_eq _ _).symm
286
+ rw [AddMonoidHom.coe_prodMap, Prod.map_surjective]
287
+ exact ⟨Function.surjective_id, by simp_all⟩
288
+ · -- should `apply continuousprodmap ctrl-space` find `Continuous.prod_map`?
289
+ apply @Continuous.prod_map _ _ _ _ (_) (_) (_) (_) id φ continuous_id
290
+ rw [continuous_iff_coinduced_le, isActionTopology R A]
291
+ · rw [← isActionTopology R A]
292
+ exact coinduced_prod_eq_prod_coinduced (AddMonoidHom.id R) φ.toAddMonoidHom
293
+ (Function.surjective_id) hφ
294
+ · apply @ContinuousAdd.mk _ (_)
295
+ obtain ⟨bar⟩ := isActionTopology_continuousAdd R A
296
+ rw [continuous_def] at bar ⊢
297
+ intro U hU
298
+ rw [isOpen_coinduced, ← isActionTopology R A] at hU
299
+ specialize bar _ hU; clear hU
300
+ rw [← Set.preimage_comp, show φ ∘ (fun p ↦ p.1 + p.2 : A × A → A) =
301
+ (fun p ↦ p.1 + p.2 : B × B → B) ∘
302
+ (Prod.map ⇑φ.toAddMonoidHom ⇑φ.toAddMonoidHom) by ext; simp, Set.preimage_comp] at bar
303
+ clear! aB -- easiest to just remove topology on B completely now
304
+ convert isOpenMap_of_coinduced (AddMonoidHom.prodMap φ.toAddMonoidHom φ.toAddMonoidHom)
305
+ (_) (_) (_) bar
306
+ · aesop
307
+ · apply @Continuous.prod_map _ _ _ _ (_) (_) (_) (_) <;>
308
+ · rw [continuous_iff_coinduced_le, isActionTopology R A]; rfl
309
+ · rw [← isActionTopology R A]
310
+ exact coinduced_prod_eq_prod_coinduced φ φ hφ hφ
311
+
312
+
313
+ end surjection
314
+
315
+
255
316
section prod
256
317
257
318
variable {R : Type *} [TopologicalSpace R] [Semiring R] [TopologicalSemiring R]
@@ -291,16 +352,6 @@ section Pi
291
352
292
353
variable {R : Type *} [τR : TopologicalSpace R] [Semiring R] [TopologicalSemiring R]
293
354
294
- -- not sure I'm going to do it this way -- see `pi` below.
295
- -- instance piNat (n : ℕ) {A : Fin n → Type*} [∀ i, AddCommGroup (A i)]
296
- -- [∀ i, Module R (A i)] [∀ i, TopologicalSpace (A i)]
297
- -- [∀ i, IsActionTopology R (A i)]: IsActionTopology R (Π i, A i) := by
298
- -- induction n
299
- -- · infer_instance
300
- -- · case succ n IH _ _ _ _ =>
301
- -- specialize IH (A := fun i => A (Fin.castSucc i))
302
- -- sorry
303
-
304
355
variable {ι : Type *} [Finite ι] {A : ι → Type *} [∀ i, AddCommGroup (A i)]
305
356
[∀ i, Module R (A i)] [∀ i, TopologicalSpace (A i)]
306
357
[∀ i, IsActionTopology R (A i)]
@@ -324,10 +375,10 @@ instance pi : IsActionTopology R (∀ i, A i) := by
324
375
325
376
end Pi
326
377
327
- section bilinear
378
+ section semiring_bilinear
328
379
329
380
-- I need rings not semirings here, because ` ChooseBasisIndex.fintype` incorrectly(?) needs
330
- -- a ring instead of a semiring
381
+ -- a ring instead of a semiring. This should be fixed.
331
382
variable {R : Type *} [τR : TopologicalSpace R] [CommRing R] [TopologicalRing R]
332
383
333
384
-- similarly these don't need to be groups
@@ -364,12 +415,7 @@ lemma Module.continuous_bilinear_of_pi_finite (ι : Type*) [Finite ι]
364
415
use Set.univ
365
416
simp [Set.toFinite _]
366
417
367
- -- Probably this can be beefed up in two distinct ways:
368
- -- Firstly, as it stands the lemma should be provable for semirings.
369
- -- Secind, we should be able to drop Module.Free in the ring case, change elinear.symm
370
- -- into a
371
- -- surjection not a bijection, and then use that quotients coinduce the action
372
- -- topology for groups (proved later, but not using this)
418
+ -- Probably this can be beefed up to semirings.
373
419
lemma Module.continuous_bilinear_of_finite_free [Module.Finite R A] [Module.Free R A]
374
420
(bil : A →ₗ[R] B →ₗ[R] C) : Continuous (fun ab ↦ bil ab.1 ab.2 : (A × B → C)) := by
375
421
let ι := Module.Free.ChooseBasisIndex R A
@@ -387,9 +433,42 @@ lemma Module.continuous_bilinear_of_finite_free [Module.Finite R A] [Module.Free
387
433
· exact continuous_of_linearMap (elinear.toLinearMap ∘ₗ (LinearMap.fst R A B))
388
434
· fun_prop
389
435
390
- end bilinear
436
+ end semiring_bilinear
437
+
438
+ section ring_bilinear
439
+
440
+ variable {R : Type *} [τR : TopologicalSpace R] [CommRing R] [TopologicalRing R]
441
+
442
+ variable {A : Type *} [AddCommGroup A] [Module R A] [aA : TopologicalSpace A] [IsActionTopology R A]
443
+ variable {B : Type *} [AddCommGroup B] [Module R B] [aB : TopologicalSpace B] [IsActionTopology R B]
444
+ variable {C : Type *} [AddCommGroup C] [Module R C] [aC : TopologicalSpace C] [IsActionTopology R C]
445
+
446
+ -- This needs rings though
447
+ lemma Module.continuous_bilinear_of_finite [Module.Finite R A]
448
+ (bil : A →ₗ[R] B →ₗ[R] C) : Continuous (fun ab ↦ bil ab.1 ab.2 : (A × B → C)) := by
449
+ obtain ⟨m, f, hf⟩ := Module.Finite.exists_fin' R A
450
+ let bil' : (Fin m → R) →ₗ[R] B →ₗ[R] C := bil.comp f
451
+ have := Module.continuous_bilinear_of_pi_finite (Fin m) bil'
452
+ let φ := f.prodMap (LinearMap.id : B →ₗ[R] B)
453
+ have foo : Function.Surjective (LinearMap.id : B →ₗ[R] B) :=
454
+ Function.RightInverse.surjective (congrFun rfl)
455
+ have hφ : Function.Surjective φ := Function.Surjective.prodMap hf foo
456
+ have := coinduced_of_surjective hφ
457
+ rw [isActionTopology R (A × B), ← this, continuous_def]
458
+ intro U hU
459
+ rw [isOpen_coinduced, ← Set.preimage_comp]
460
+ suffices Continuous ((fun ab ↦ (bil ab.1 ) ab.2 ) ∘ φ : (Fin m → R) × B → C) by
461
+ rw [continuous_def] at this
462
+ convert this _ hU
463
+ rw [← prod.isActionTopology']
464
+ rw [show (fun ab ↦ (bil ab.1 ) ab.2 : A × B → C) ∘ φ = (fun fb ↦ bil' fb.1 fb.2 ) by
465
+ ext ⟨a, b⟩
466
+ simp [bil', φ]]
467
+ apply Module.continuous_bilinear_of_finite_free
391
468
392
- section algebra
469
+ end ring_bilinear
470
+
471
+ section semiring_algebra
393
472
394
473
-- these shouldn't be rings, they should be semirings
395
474
variable (R) [CommRing R] [TopologicalSpace R] [TopologicalRing R]
@@ -399,77 +478,39 @@ variable [TopologicalSpace D] [IsActionTopology R D]
399
478
open scoped TensorProduct
400
479
401
480
@[continuity, fun_prop]
402
- lemma continuous_mul
481
+ lemma continuous_mul'
403
482
(R) [CommRing R] [TopologicalSpace R] [TopologicalRing R]
404
483
(D : Type *) [Ring D] [Algebra R D] [Module.Finite R D] [Module.Free R D] [TopologicalSpace D]
405
484
[IsActionTopology R D]: Continuous (fun ab ↦ ab.1 * ab.2 : D × D → D) := by
406
485
letI : TopologicalSpace (D ⊗[R] D) := actionTopology R _
407
486
haveI : IsActionTopology R (D ⊗[R] D) := { isActionTopology' := rfl }
408
487
convert Module.continuous_bilinear_of_finite_free <| LinearMap.mul R D
409
488
410
- def Module.topologicalRing : TopologicalRing D where
489
+ -- this should be about top semirings
490
+ def Module.topologicalSemiring : TopologicalSemiring D where
411
491
continuous_add := (isActionTopology_continuousAdd R D).1
412
- continuous_mul := continuous_mul R D
413
- continuous_neg := continuous_neg R D
492
+ continuous_mul := continuous_mul' R D
414
493
415
- end algebra
494
+ end semiring_algebra
416
495
417
- section topology_problem
496
+ section ring_algebra
418
497
419
- variable {R : Type *} [τR : TopologicalSpace R] [Ring R] [TopologicalRing R]
420
- variable {A : Type *} [AddCommGroup A] [Module R A] [aA : TopologicalSpace A] [IsActionTopology R A]
421
- variable {B : Type *} [AddCommGroup B] [Module R B] [aB : TopologicalSpace B] [IsActionTopology R B]
498
+ -- these shouldn't be rings, they should be semirings
499
+ variable (R) [CommRing R] [TopologicalSpace R] [TopologicalRing R]
500
+ variable (D : Type *) [Ring D] [Algebra R D] [Module.Finite R D]
501
+ variable [TopologicalSpace D] [IsActionTopology R D]
422
502
423
- -- Here I need the lemma about how quotients are open so I do need groups
424
- -- because this relies on translates of an open being open
425
- lemma coinduced_of_surjective {φ : A →ₗ[R] B} (hφ : Function.Surjective φ) :
426
- TopologicalSpace.coinduced φ (actionTopology R A) = actionTopology R B := by
427
- have : Continuous φ := continuous_of_linearMap φ
428
- rw [continuous_iff_coinduced_le, isActionTopology R A, isActionTopology R B] at this
429
- apply le_antisymm this
430
- have : ContinuousAdd A := isActionTopology_continuousAdd R A
431
- refine sInf_le ⟨?_, ?_⟩
432
- · apply @ContinuousSMul.mk R B _ _ (_)
433
- obtain ⟨foo⟩ : ContinuousSMul R A := inferInstance
434
- rw [continuous_def] at foo ⊢
435
- intro U hU
436
- rw [isOpen_coinduced, ← isActionTopology R A] at hU
437
- specialize foo _ hU; clear hU
438
- rw [← Set.preimage_comp, show φ ∘ (fun p ↦ p.1 • p.2 : R × A → A) =
439
- (fun p ↦ p.1 • p.2 : R × B → B) ∘
440
- (Prod.map id ⇑φ.toAddMonoidHom) by ext; simp, Set.preimage_comp] at foo
441
- clear! aB -- easiest to just remove topology on B completely now so typeclass inference
442
- -- never sees it
443
- convert isOpenMap_of_coinduced (AddMonoidHom.prodMap (AddMonoidHom.id R) φ.toAddMonoidHom)
444
- (_) (_) (_) foo
445
- · -- aesop would do this if `Function.surjective_id : Surjective ⇑(AddMonoidHom.id R)`
446
- -- was known by it
447
- apply (Set.image_preimage_eq _ _).symm
448
- rw [AddMonoidHom.coe_prodMap, Prod.map_surjective]
449
- exact ⟨Function.surjective_id, by simp_all⟩
450
- · -- should `apply continuousprodmap ctrl-space` find `Continuous.prod_map`?
451
- apply @Continuous.prod_map _ _ _ _ (_) (_) (_) (_) id φ continuous_id
452
- rw [continuous_iff_coinduced_le, isActionTopology R A]
453
- · rw [← isActionTopology R A]
454
- exact coinduced_prod_eq_prod_coinduced (AddMonoidHom.id R) φ.toAddMonoidHom
455
- (Function.surjective_id) hφ
456
- · apply @ContinuousAdd.mk _ (_)
457
- obtain ⟨bar⟩ := isActionTopology_continuousAdd R A
458
- rw [continuous_def] at bar ⊢
459
- intro U hU
460
- rw [isOpen_coinduced, ← isActionTopology R A] at hU
461
- specialize bar _ hU; clear hU
462
- rw [← Set.preimage_comp, show φ ∘ (fun p ↦ p.1 + p.2 : A × A → A) =
463
- (fun p ↦ p.1 + p.2 : B × B → B) ∘
464
- (Prod.map ⇑φ.toAddMonoidHom ⇑φ.toAddMonoidHom) by ext; simp, Set.preimage_comp] at bar
465
- clear! aB -- easiest to just remove topology on B completely now
466
- convert isOpenMap_of_coinduced (AddMonoidHom.prodMap φ.toAddMonoidHom φ.toAddMonoidHom)
467
- (_) (_) (_) bar
468
- · aesop
469
- · apply @Continuous.prod_map _ _ _ _ (_) (_) (_) (_) <;>
470
- · rw [continuous_iff_coinduced_le, isActionTopology R A]; rfl
471
- · rw [← isActionTopology R A]
472
- exact coinduced_prod_eq_prod_coinduced φ φ hφ hφ
503
+ open scoped TensorProduct
473
504
505
+ @[continuity, fun_prop]
506
+ lemma continuous_mul : Continuous (fun ab ↦ ab.1 * ab.2 : D × D → D) := by
507
+ letI : TopologicalSpace (D ⊗[R] D) := actionTopology R _
508
+ haveI : IsActionTopology R (D ⊗[R] D) := { isActionTopology' := rfl }
509
+ convert Module.continuous_bilinear_of_finite <| LinearMap.mul R D
510
+
511
+ def Module.topologicalRing : TopologicalRing D where
512
+ continuous_add := (isActionTopology_continuousAdd R D).1
513
+ continuous_mul := continuous_mul R D
514
+ continuous_neg := continuous_neg R D
474
515
475
- end topology_problem
516
+ end ring_algebra
0 commit comments