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

Commit 8905e5e

Browse files
committed
feat(topology/algebra/module/strong_topology): golf arrow_congrSL introduced in #19107 (#19128)
I added more general definitions `precomp` and `postcomp` for expressing that (pre/post)-composing by a *fixed* continuous linear maps is continuous. These were planned about a year ago when I defined the strong topology and follow from [uniform_on_fun.precomp_uniform_continuous](https://leanprover-community.github.io/mathlib_docs/topology/uniform_space/uniform_convergence_topology.html#uniform_on_fun.precomp_uniform_continuous) and [uniform_on_fun.postcomp_uniform_continuous](https://leanprover-community.github.io/mathlib_docs/topology/uniform_space/uniform_convergence_topology.html#uniform_on_fun.postcomp_uniform_continuous). The proof of continuity of `arrow_congrSL` is a direct consequence of these, so we don't have to do it by hand. This is not really a "golf" since I added more lines than I removed, but these more general constructions will be needed at some point anyway (my use case was distribution theory) so I'm doing some proactive golfing 😄.
1 parent 5dc6092 commit 8905e5e

4 files changed

Lines changed: 62 additions & 40 deletions

File tree

src/analysis/convolution.lean

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1500,9 +1500,7 @@ begin
15001500
simp only [ef, eg, comp_app, continuous_linear_equiv.apply_symm_apply, coe_comp',
15011501
continuous_linear_equiv.prod_apply, continuous_linear_equiv.map_sub,
15021502
continuous_linear_equiv.arrow_congr, continuous_linear_equiv.arrow_congrSL_symm_apply,
1503-
continuous_linear_equiv.coe_coe, comp_app, continuous_linear_equiv.apply_symm_apply,
1504-
linear_equiv.inv_fun_eq_symm, continuous_linear_equiv.arrow_congrₛₗ_symm_apply,
1505-
eq_self_iff_true] },
1503+
continuous_linear_equiv.coe_coe, comp_app, continuous_linear_equiv.apply_symm_apply ] },
15061504
simp_rw [this] at A,
15071505
exact A,
15081506
end

src/geometry/manifold/vector_bundle/hom.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ begin
7070
simp only [continuous_linear_map_coord_change, continuous_linear_equiv.coe_coe,
7171
continuous_linear_equiv.arrow_congrSL_apply, comp_apply, function.comp, compL_apply,
7272
flip_apply, continuous_linear_equiv.symm_symm, linear_equiv.to_fun_eq_coe,
73-
continuous_linear_equiv.arrow_congrₛₗ_apply, continuous_linear_map.coe_comp'] },
73+
continuous_linear_map.coe_comp'] },
7474
end
7575

7676
include _i₁ _i₂

src/topology/algebra/module/strong_topology.lean

Lines changed: 57 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -175,9 +175,12 @@ end general
175175

176176
section bounded_sets
177177

178-
variables {𝕜₁ 𝕜₂ : Type*} [normed_field 𝕜₁] [normed_field 𝕜₂] {σ : 𝕜₁ →+* 𝕜₂} {E E' F F' : Type*}
178+
variables {𝕜₁ 𝕜₂ 𝕜₃ : Type*} [normed_field 𝕜₁] [normed_field 𝕜₂] [normed_field 𝕜₃]
179+
{σ : 𝕜₁ →+* 𝕜₂} {τ : 𝕜₂ →+* 𝕜₃} {ρ : 𝕜₁ →+* 𝕜₃} [ring_hom_comp_triple σ τ ρ]
180+
{E E' F F' G : Type*}
179181
[add_comm_group E] [module 𝕜₁ E] [add_comm_group E'] [module ℝ E']
180182
[add_comm_group F] [module 𝕜₂ F] [add_comm_group F'] [module ℝ F']
183+
[add_comm_group G] [module 𝕜₃ G]
181184
[topological_space E]
182185

183186
/-- The topology of bounded convergence on `E →L[𝕜] F`. This coincides with the topology induced by
@@ -224,6 +227,49 @@ protected lemma has_basis_nhds_zero [topological_space F]
224227
(λ SV, {f : E →SL[σ] F | ∀ x ∈ SV.1, f x ∈ SV.2}) :=
225228
continuous_linear_map.has_basis_nhds_zero_of_basis (𝓝 0).basis_sets
226229

230+
variables (G) [topological_space F] [topological_space G]
231+
232+
/-- Pre-composition by a *fixed* continuous linear map as a continuous linear map.
233+
Note that in non-normed space it is not always true that composition is continuous
234+
in both variables, so we have to fix one of them. -/
235+
@[simps] def precomp [topological_add_group G] [has_continuous_const_smul 𝕜₃ G]
236+
[ring_hom_surjective σ] [ring_hom_isometric σ] (L : E →SL[σ] F) :
237+
(F →SL[τ] G) →L[𝕜₃] (E →SL[ρ] G) :=
238+
{ to_fun := λ f, f.comp L,
239+
map_add' := λ f g, add_comp f g L,
240+
map_smul' := λ a f, smul_comp a f L,
241+
cont :=
242+
begin
243+
letI : uniform_space G := topological_add_group.to_uniform_space G,
244+
haveI : uniform_add_group G := topological_add_comm_group_is_uniform,
245+
rw (strong_topology.embedding_coe_fn _ _ _).continuous_iff,
246+
refine (uniform_on_fun.precomp_uniform_continuous _).continuous.comp
247+
(strong_topology.embedding_coe_fn _ _ _).continuous,
248+
exact λ S hS, hS.image L,
249+
end }
250+
251+
variables (E) {G}
252+
253+
/-- Post-composition by a *fixed* continuous linear map as a continuous linear map.
254+
Note that in non-normed space it is not always true that composition is continuous
255+
in both variables, so we have to fix one of them. -/
256+
@[simps] def postcomp [topological_add_group F] [topological_add_group G]
257+
[has_continuous_const_smul 𝕜₃ G] [has_continuous_const_smul 𝕜₂ F] (L : F →SL[τ] G) :
258+
(E →SL[σ] F) →SL[τ] (E →SL[ρ] G) :=
259+
{ to_fun := λ f, L.comp f,
260+
map_add' := comp_add L,
261+
map_smul' := comp_smulₛₗ L,
262+
cont :=
263+
begin
264+
letI : uniform_space G := topological_add_group.to_uniform_space G,
265+
haveI : uniform_add_group G := topological_add_comm_group_is_uniform,
266+
letI : uniform_space F := topological_add_group.to_uniform_space F,
267+
haveI : uniform_add_group F := topological_add_comm_group_is_uniform,
268+
rw (strong_topology.embedding_coe_fn _ _ _).continuous_iff,
269+
exact (uniform_on_fun.postcomp_uniform_continuous L.uniform_continuous).continuous.comp
270+
(strong_topology.embedding_coe_fn _ _ _).continuous
271+
end }
272+
227273
end bounded_sets
228274

229275
end continuous_linear_map
@@ -249,49 +295,29 @@ variables {𝕜 : Type*} {𝕜₂ : Type*} {𝕜₃ : Type*} {𝕜₄ : Type*}
249295
[ring_hom_inv_pair σ₄₃ σ₃₄]
250296
[ring_hom_comp_triple σ₂₁ σ₁₄ σ₂₄] [ring_hom_comp_triple σ₂₄ σ₄₃ σ₂₃]
251297
[ring_hom_comp_triple σ₁₂ σ₂₃ σ₁₃] [ring_hom_comp_triple σ₁₃ σ₃₄ σ₁₄]
298+
[ring_hom_comp_triple σ₂₃ σ₃₄ σ₂₄] [ring_hom_comp_triple σ₁₂ σ₂₄ σ₁₄]
299+
[ring_hom_isometric σ₁₂] [ring_hom_isometric σ₂₁]
252300

253301
include σ₁₄ σ₂₄ σ₁₃ σ₃₄ σ₂₁ σ₂₃
254302

255303
/-- A pair of continuous (semi)linear equivalences generates a (semi)linear equivalence between the
256304
spaces of continuous (semi)linear maps. -/
257-
@[simps] def arrow_congrₛₗ (e₁₂ : E ≃SL[σ₁₂] F) (e₄₃ : H ≃SL[σ₄₃] G) :
258-
(E →SL[σ₁₄] H) ≃ₛₗ[σ₄₃] (F →SL[σ₂₃] G) :=
305+
@[simps] def arrow_congrSL (e₁₂ : E ≃SL[σ₁₂] F) (e₄₃ : H ≃SL[σ₄₃] G) :
306+
(E →SL[σ₁₄] H) ≃SL[σ₄₃] (F →SL[σ₂₃] G) :=
259307
{ -- given explicitly to help `simps`
260308
to_fun := λ L, (e₄₃ : H →SL[σ₄₃] G).comp (L.comp (e₁₂.symm : F →SL[σ₂₁] E)),
261309
-- given explicitly to help `simps`
262310
inv_fun := λ L, (e₄₃.symm : G →SL[σ₃₄] H).comp (L.comp (e₁₂ : E →SL[σ₁₂] F)),
263311
map_add' := λ f g, by rw [add_comp, comp_add],
264312
map_smul' := λ t f, by rw [smul_comp, comp_smulₛₗ],
313+
continuous_to_fun :=
314+
((postcomp F e₄₃.to_continuous_linear_map).comp
315+
(precomp H e₁₂.symm.to_continuous_linear_map)).continuous,
316+
continuous_inv_fun :=
317+
((precomp H e₁₂.to_continuous_linear_map).comp
318+
(postcomp F e₄₃.symm.to_continuous_linear_map)).continuous,
265319
.. e₁₂.arrow_congr_equiv e₄₃, }
266320

267-
variables [ring_hom_isometric σ₂₁]
268-
269-
lemma arrow_congrₛₗ_continuous (e₁₂ : E ≃SL[σ₁₂] F) (e₄₃ : H ≃SL[σ₄₃] G) :
270-
continuous (id (e₁₂.arrow_congrₛₗ e₄₃ : (E →SL[σ₁₄] H) ≃ₛₗ[σ₄₃] (F →SL[σ₂₃] G))) :=
271-
begin
272-
apply continuous_of_continuous_at_zero,
273-
show filter.tendsto _ _ _,
274-
simp_rw [(e₁₂.arrow_congrₛₗ e₄₃).map_zero],
275-
rw continuous_linear_map.has_basis_nhds_zero.tendsto_iff
276-
continuous_linear_map.has_basis_nhds_zero,
277-
rintros ⟨sF, sG⟩ ⟨h1 : bornology.is_vonN_bounded 𝕜₂ sF, h2 : sG ∈ nhds (0:G)⟩,
278-
dsimp,
279-
refine ⟨(e₁₂.symm '' sF, e₄₃ ⁻¹' sG), ⟨h1.image (e₁₂.symm : F →SL[σ₂₁] E), _⟩,
280-
λ _ h _ hx, h _ (set.mem_image_of_mem _ hx)⟩,
281-
apply e₄₃.continuous.continuous_at,
282-
simpa using h2,
283-
end
284-
285-
variables [ring_hom_isometric σ₁₂]
286-
287-
/-- A pair of continuous (semi)linear equivalences generates an continuous (semi)linear equivalence
288-
between the spaces of continuous (semi)linear maps. -/
289-
@[simps] def arrow_congrSL (e₁₂ : E ≃SL[σ₁₂] F) (e₄₃ : H ≃SL[σ₄₃] G) :
290-
(E →SL[σ₁₄] H) ≃SL[σ₄₃] (F →SL[σ₂₃] G) :=
291-
{ continuous_to_fun := e₁₂.arrow_congrₛₗ_continuous e₄₃,
292-
continuous_inv_fun := e₁₂.symm.arrow_congrₛₗ_continuous e₄₃.symm,
293-
.. e₁₂.arrow_congrₛₗ e₄₃, }
294-
295321
end semilinear
296322

297323
section linear

src/topology/vector_bundle/hom.lean

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,8 @@ begin
110110
{ mfld_set_tac },
111111
{ intros b hb, ext L v,
112112
simp only [continuous_linear_map_coord_change, continuous_linear_equiv.coe_coe,
113-
continuous_linear_equiv.arrow_congrₛₗ_apply, linear_equiv.to_fun_eq_coe, coe_comp',
114-
continuous_linear_equiv.arrow_congrSL_apply, comp_apply, function.comp, compSL_apply,
115-
flip_apply, continuous_linear_equiv.symm_symm] },
113+
continuous_linear_equiv.arrow_congrSL_apply,
114+
comp_apply, function.comp, compSL_apply, flip_apply, continuous_linear_equiv.symm_symm] },
116115
end
117116

118117
omit
@@ -206,8 +205,7 @@ lemma continuous_linear_map_coord_change_apply (b : B)
206205
begin
207206
ext v,
208207
simp_rw [continuous_linear_map_coord_change, continuous_linear_equiv.coe_coe,
209-
continuous_linear_equiv.arrow_congrSL_apply, linear_equiv.to_fun_eq_coe,
210-
continuous_linear_equiv.arrow_congrₛₗ_apply,
208+
continuous_linear_equiv.arrow_congrSL_apply,
211209
continuous_linear_map_apply, continuous_linear_map_symm_apply' σ e₁ e₂ hb.1,
212210
comp_apply, continuous_linear_equiv.coe_coe, continuous_linear_equiv.symm_symm,
213211
trivialization.continuous_linear_map_at_apply, trivialization.symmL_apply],

0 commit comments

Comments
 (0)