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

Commit 5e98dc1

Browse files
committed
feat(topology/continuous_function/zero_at_infty): add more instances for zero_at_infty_continuous_map and establish C₀ functorial properties (#13196)
This adds more instances for the type `C₀(α, β)` of continuous functions vanishing at infinity. Notably, these new instances include its non-unital ring, normed space and star structures, culminating with `cstar_ring` when `β` is a `cstar_ring` which is also a `topological_ring`. In addition, this establishes functorial properties of `C₀(-, β)` for various choices of algebraic categories involving `β`. The domain of these (contravariant) functors is the category of topological spaces with cocompact continuous maps, and the functor applied to a cocompact map is given by pre-composition.
1 parent 0719b36 commit 5e98dc1

File tree

3 files changed

+248
-12
lines changed

3 files changed

+248
-12
lines changed

src/topology/continuous_function/bounded.lean

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -994,16 +994,32 @@ In this section, if `R` is a normed ring, then we show that the space of bounded
994994
continuous functions from `α` to `R` inherits a normed ring structure, by using
995995
pointwise operations and checking that they are compatible with the uniform distance. -/
996996

997-
variables [topological_space α] {R : Type*} [normed_ring R]
997+
variables [topological_space α] {R : Type*}
998+
999+
section non_unital
1000+
1001+
variables [non_unital_normed_ring R]
9981002

9991003
instance : has_mul (α →ᵇ R) :=
10001004
{ mul := λ f g, of_normed_group (f * g) (f.continuous.mul g.continuous) (∥f∥ * ∥g∥) $ λ x,
1001-
le_trans (normed_ring.norm_mul (f x) (g x)) $
1005+
le_trans (non_unital_normed_ring.norm_mul (f x) (g x)) $
10021006
mul_le_mul (f.norm_coe_le_norm x) (g.norm_coe_le_norm x) (norm_nonneg _) (norm_nonneg _) }
10031007

10041008
@[simp] lemma coe_mul (f g : α →ᵇ R) : ⇑(f * g) = f * g := rfl
10051009
lemma mul_apply (f g : α →ᵇ R) (x : α) : (f * g) x = f x * g x := rfl
10061010

1011+
instance : non_unital_ring (α →ᵇ R) :=
1012+
fun_like.coe_injective.non_unital_ring _ coe_zero coe_add coe_mul coe_neg coe_sub
1013+
(λ _ _, coe_nsmul _ _) (λ _ _, coe_zsmul _ _)
1014+
1015+
instance : non_unital_normed_ring (α →ᵇ R) :=
1016+
{ norm_mul := λ f g, norm_of_normed_group_le _ (mul_nonneg (norm_nonneg _) (norm_nonneg _)) _,
1017+
.. bounded_continuous_function.normed_group }
1018+
1019+
end non_unital
1020+
1021+
variables [normed_ring R]
1022+
10071023
@[simp] lemma coe_npow_rec (f : α →ᵇ R) : ∀ n, ⇑(npow_rec n f) = f ^ n
10081024
| 0 := by rw [npow_rec, pow_zero, coe_one]
10091025
| (n + 1) := by rw [npow_rec, pow_succ, coe_mul, coe_npow_rec]
@@ -1023,8 +1039,7 @@ fun_like.coe_injective.ring _ coe_zero coe_one coe_add coe_mul coe_neg coe_sub
10231039
(λ _ _, coe_pow _ _)
10241040

10251041
instance : normed_ring (α →ᵇ R) :=
1026-
{ norm_mul := λ f g, norm_of_normed_group_le _ (mul_nonneg (norm_nonneg _) (norm_nonneg _)) _,
1027-
.. bounded_continuous_function.normed_group }
1042+
{ ..bounded_continuous_function.non_unital_normed_ring }
10281043

10291044
end normed_ring
10301045

@@ -1173,7 +1188,7 @@ end normed_group
11731188
section cstar_ring
11741189

11751190
variables [topological_space α]
1176-
variables [normed_ring β] [star_ring β]
1191+
variables [non_unital_normed_ring β] [star_ring β]
11771192

11781193
instance [normed_star_group β] : star_ring (α →ᵇ β) :=
11791194
{ star_mul := λ f g, ext $ λ x, star_mul (f x) (g x),

src/topology/continuous_function/cocompact_map.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ open filter set
1919
/-! ### Cocompact continuous maps -/
2020

2121
/-- A *cocompact continuous map* is a continuous function between topological spaces which
22-
tends to the cocompact filter along the cocompact filter. Functions for which preimgaes of compact
22+
tends to the cocompact filter along the cocompact filter. Functions for which preimages of compact
2323
sets are compact always satisfy this property, and the converse holds for cocompact continuous maps
2424
when the codomain is Hausdorff (see `cocompact_map.tendsto_of_forall_preimage` and
2525
`cocompact_map.compact_preimage`) -/
@@ -43,6 +43,8 @@ instance : has_coe_t F (cocompact_map α β) := ⟨λ f, ⟨f, cocompact_tendsto
4343

4444
end cocompact_map_class
4545

46+
export cocompact_map_class (cocompact_tendsto)
47+
4648
namespace cocompact_map
4749

4850
section basics
@@ -55,8 +57,6 @@ instance : cocompact_map_class (cocompact_map α β) α β :=
5557
map_continuous := λ f, f.continuous_to_fun,
5658
cocompact_tendsto := λ f, f.cocompact_tendsto' }
5759

58-
export cocompact_map_class (cocompact_tendsto)
59-
6060
/-- Helper instance for when there's too many metavariables to apply `fun_like.has_coe_to_fun`
6161
directly. -/
6262
instance : has_coe_to_fun (cocompact_map α β) (λ _, α → β) := fun_like.has_coe_to_fun

src/topology/continuous_function/zero_at_infty.lean

Lines changed: 225 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Jireh Loreaux
55
-/
66
import topology.continuous_function.bounded
7+
import topology.continuous_function.cocompact_map
78

89
/-!
910
# Continuous functions vanishing at infinity
@@ -107,6 +108,13 @@ def zero_at_infty_continuous_map_class.of_compact {G : Type*} [continuous_map_cl
107108

108109
end basics
109110

111+
/-! ### Algebraic structure
112+
113+
Whenever `β` has suitable algebraic structure and a compatible topological structure, then
114+
`C₀(α, β)` inherits a corresponding algebraic structure. The primary exception to this is that
115+
`C₀(α, β)` will not have a multiplicative identity.
116+
-/
117+
110118
section algebraic_structure
111119

112120
variables [topological_space β] (x : α)
@@ -211,16 +219,59 @@ instance [has_zero β] {R : Type*} [monoid_with_zero R] [mul_action_with_zero R
211219
[has_continuous_const_smul R β] : mul_action_with_zero R C₀(α, β) :=
212220
function.injective.mul_action_with_zero ⟨_, coe_zero⟩ fun_like.coe_injective coe_smul
213221

214-
instance [add_comm_monoid β] [has_continuous_add β] {R : Type*} [comm_semiring R] [module R β]
222+
instance [add_comm_monoid β] [has_continuous_add β] {R : Type*} [semiring R] [module R β]
215223
[has_continuous_const_smul R β] : module R C₀(α, β) :=
216224
function.injective.module R ⟨_, coe_zero, coe_add⟩ fun_like.coe_injective coe_smul
217225

218-
instance [non_unital_semiring β] [has_continuous_add β] [has_continuous_mul β] :
226+
instance [non_unital_non_assoc_semiring β] [topological_semiring β] :
227+
non_unital_non_assoc_semiring C₀(α, β) :=
228+
fun_like.coe_injective.non_unital_non_assoc_semiring _ coe_zero coe_add coe_mul (λ _ _, rfl)
229+
230+
instance [non_unital_semiring β] [topological_semiring β] :
219231
non_unital_semiring C₀(α, β) :=
220232
fun_like.coe_injective.non_unital_semiring _ coe_zero coe_add coe_mul (λ _ _, rfl)
221233

234+
instance [non_unital_non_assoc_ring β] [topological_ring β] :
235+
non_unital_non_assoc_ring C₀(α, β) :=
236+
fun_like.coe_injective.non_unital_non_assoc_ring _ coe_zero coe_add coe_mul coe_neg coe_sub
237+
(λ _ _, rfl) (λ _ _, rfl)
238+
239+
instance [non_unital_ring β] [topological_ring β] :
240+
non_unital_ring C₀(α, β) :=
241+
fun_like.coe_injective.non_unital_ring _ coe_zero coe_add coe_mul coe_neg coe_sub (λ _ _, rfl)
242+
(λ _ _, rfl)
243+
244+
instance {R : Type*} [semiring R] [non_unital_non_assoc_semiring β] [topological_semiring β]
245+
[module R β] [has_continuous_const_smul R β] [is_scalar_tower R β β] :
246+
is_scalar_tower R C₀(α, β) C₀(α, β) :=
247+
{ smul_assoc := λ r f g,
248+
begin
249+
ext,
250+
simp only [smul_eq_mul, coe_mul, coe_smul, pi.mul_apply, pi.smul_apply],
251+
rw [←smul_eq_mul, ←smul_eq_mul, smul_assoc],
252+
end }
253+
254+
instance {R : Type*} [semiring R] [non_unital_non_assoc_semiring β] [topological_semiring β]
255+
[module R β] [has_continuous_const_smul R β] [smul_comm_class R β β] :
256+
smul_comm_class R C₀(α, β) C₀(α, β) :=
257+
{ smul_comm := λ r f g,
258+
begin
259+
ext,
260+
simp only [smul_eq_mul, coe_smul, coe_mul, pi.smul_apply, pi.mul_apply],
261+
rw [←smul_eq_mul, ←smul_eq_mul, smul_comm],
262+
end }
263+
264+
222265
end algebraic_structure
223266

267+
/-! ### Metric structure
268+
269+
When `β` is a metric space, then every element of `C₀(α, β)` is bounded, and so there is a natural
270+
inclusion map `zero_at_infty_continuous_map.to_bcf : C₀(α, β) → (α →ᵇ β)`. Via this map `C₀(α, β)`
271+
inherits a metric as the pullback of the metric on `α →ᵇ β`. Moreover, this map has closed range
272+
in `α →ᵇ β` and consequently `C₀(α, β)` is a complete space whenever `β` is complete.
273+
-/
274+
224275
section metric
225276

226277
open metric set
@@ -259,7 +310,7 @@ def to_bcf (f : C₀(α, β)) : α →ᵇ β :=
259310

260311
section
261312
variables (α) (β)
262-
lemma to_bounded_continuous_function_injective :
313+
lemma to_bcf_injective :
263314
function.injective (to_bcf : C₀(α, β) → α →ᵇ β) :=
264315
λ f g h, by { ext, simpa only using fun_like.congr_fun h x, }
265316
end
@@ -269,7 +320,7 @@ variables {C : ℝ} {f g : C₀(α, β)}
269320
/-- The type of continuous functions vanishing at infinity, with the uniform distance induced by the
270321
inclusion `zero_at_infinity_continuous_map.to_bcf`, is a metric space. -/
271322
noncomputable instance : metric_space C₀(α, β) :=
272-
metric_space.induced _ (to_bounded_continuous_function_injective α β) (by apply_instance)
323+
metric_space.induced _ (to_bcf_injective α β) (by apply_instance)
273324

274325
@[simp]
275326
lemma dist_to_bcf_eq_dist {f g : C₀(α, β)} : dist f.to_bcf g.to_bcf = dist f g := rfl
@@ -307,4 +358,174 @@ instance [complete_space β] : complete_space C₀(α, β) :=
307358

308359
end metric
309360

361+
section norm
362+
363+
/-! ### Normed space
364+
365+
The norm structure on `C₀(α, β)` is the one induced by the inclusion `to_bcf : C₀(α, β) → (α →ᵇ b)`,
366+
viewed as an additive monoid homomorphism. Then `C₀(α, β)` is naturally a normed space over a normed
367+
field `𝕜` whenever `β` is as well.
368+
-/
369+
370+
section normed_space
371+
372+
variables [normed_group β] {𝕜 : Type*} [normed_field 𝕜] [normed_space 𝕜 β]
373+
374+
/-- The natural inclusion `to_bcf : C₀(α, β) → (α →ᵇ β)` realized as an additive monoid
375+
homomorphism. -/
376+
def to_bcf_add_monoid_hom : C₀(α, β) →+ (α →ᵇ β) :=
377+
{ to_fun := to_bcf,
378+
map_zero' := rfl,
379+
map_add' := λ x y, rfl }
380+
381+
@[simp]
382+
lemma coe_to_bcf_add_monoid_hom (f : C₀(α, β)) : (f.to_bcf_add_monoid_hom : α → β) = f := rfl
383+
384+
noncomputable instance : normed_group C₀(α, β) :=
385+
normed_group.induced to_bcf_add_monoid_hom (to_bcf_injective α β)
386+
387+
@[simp]
388+
lemma norm_to_bcf_eq_norm {f : C₀(α, β)} : ∥f.to_bcf∥ = ∥f∥ := rfl
389+
390+
instance : normed_space 𝕜 C₀(α, β) :=
391+
{ norm_smul_le := λ k f, (norm_smul k f.to_bcf).le }
392+
393+
end normed_space
394+
395+
section normed_ring
396+
397+
variables [non_unital_normed_ring β]
398+
399+
noncomputable instance : non_unital_normed_ring C₀(α, β) :=
400+
{ norm_mul := λ f g, norm_mul_le f.to_bcf g.to_bcf,
401+
..zero_at_infty_continuous_map.non_unital_ring,
402+
..zero_at_infty_continuous_map.normed_group }
403+
404+
end normed_ring
405+
406+
end norm
407+
408+
section star
409+
410+
/-! ### Star structure
411+
412+
It is possible to equip `C₀(α, β)` with a pointwise `star` operation whenever there is a continuous
413+
`star : β → β` for which `star (0 : β) = 0`. However, we have no such minimal type classes (e.g.,
414+
`has_continuous_star` or `star_zero_class`) and so the type class assumptions on `β` sufficient to
415+
guarantee these conditions are `[normed_group β]`, `[star_add_monoid β]` and
416+
`[normed_star_group β]`, which allow for the corresponding classes on `C₀(α, β)` essentially
417+
inherited from their counterparts on `α →ᵇ β`. Ultimately, when `β` is a C⋆-ring, then so is
418+
`C₀(α, β)`.
419+
-/
420+
421+
variables [normed_group β] [star_add_monoid β] [normed_star_group β]
422+
423+
instance : has_star C₀(α, β) :=
424+
{ star := λ f,
425+
{ to_fun := λ x, star (f x),
426+
continuous_to_fun := (map_continuous f).star,
427+
zero_at_infty' := by simpa only [star_zero]
428+
using (continuous_star.tendsto (0 : β)).comp (zero_at_infty f) } }
429+
430+
@[simp]
431+
lemma coe_star (f : C₀(α, β)) : ⇑(star f) = star f := rfl
432+
433+
lemma star_apply (f : C₀(α, β)) (x : α) :
434+
(star f) x = star (f x) := rfl
435+
436+
instance : star_add_monoid C₀(α, β) :=
437+
{ star_involutive := λ f, ext $ λ x, star_star (f x),
438+
star_add := λ f g, ext $ λ x, star_add (f x) (g x) }
439+
440+
instance : normed_star_group C₀(α, β) :=
441+
{ norm_star := λ f, @norm_star _ _ _ _ f.to_bcf }
442+
443+
end star
444+
445+
section star_module
446+
447+
variables {𝕜 : Type*} [semiring 𝕜] [has_star 𝕜]
448+
[normed_group β] [star_add_monoid β] [normed_star_group β]
449+
[module 𝕜 β] [has_continuous_const_smul 𝕜 β] [star_module 𝕜 β]
450+
451+
instance : star_module 𝕜 C₀(α, β) :=
452+
{ star_smul := λ k f, ext $ λ x, star_smul k (f x) }
453+
454+
end star_module
455+
456+
section star_ring
457+
458+
variables [non_unital_normed_ring β] [star_ring β]
459+
460+
instance [normed_star_group β] : star_ring C₀(α, β) :=
461+
{ star_mul := λ f g, ext $ λ x, star_mul (f x) (g x),
462+
..zero_at_infty_continuous_map.star_add_monoid }
463+
464+
instance [cstar_ring β] : cstar_ring C₀(α, β) :=
465+
{ norm_star_mul_self := λ f, @cstar_ring.norm_star_mul_self _ _ _ _ f.to_bcf }
466+
467+
end star_ring
468+
469+
/-! ### C₀ as a functor
470+
471+
For each `β` with sufficient structure, there is a contravariant functor `C₀(-, β)` from the
472+
category of topological spaces with morphisms given by `cocompact_map`s.
473+
-/
474+
475+
variables {δ : Type*} [topological_space β] [topological_space γ] [topological_space δ]
476+
477+
local notation α ` →co ` β := cocompact_map α β
478+
479+
section
480+
variables [has_zero δ]
481+
482+
/-- Composition of a continuous function vanishing at infinity with a cocompact map yields another
483+
continuous function vanishing at infinity. -/
484+
def comp (f : C₀(γ, δ)) (g : β →co γ) : C₀(β, δ) :=
485+
{ to_continuous_map := (f : C(γ, δ)).comp g,
486+
zero_at_infty' := (zero_at_infty f).comp (cocompact_tendsto g) }
487+
488+
@[simp] lemma coe_comp_to_continuous_fun (f : C₀(γ, δ)) (g : β →co γ) :
489+
((f.comp g).to_continuous_map : β → δ) = f ∘ g := rfl
490+
491+
@[simp] lemma comp_id (f : C₀(γ, δ)) : f.comp (cocompact_map.id γ) = f := ext (λ x, rfl)
492+
493+
@[simp] lemma comp_assoc (f : C₀(γ, δ)) (g : β →co γ) (h : α →co β) :
494+
(f.comp g).comp h = f.comp (g.comp h) := rfl
495+
496+
@[simp] lemma zero_comp (g : β →co γ) : (0 : C₀(γ, δ)).comp g = 0 := rfl
497+
498+
end
499+
500+
/-- Composition as an additive monoid homomorphism. -/
501+
def comp_add_monoid_hom [add_monoid δ] [has_continuous_add δ] (g : β →co γ) :
502+
C₀(γ, δ) →+ C₀(β, δ) :=
503+
{ to_fun := λ f, f.comp g,
504+
map_zero' := zero_comp g,
505+
map_add' := λ f₁ f₂, rfl }
506+
507+
/-- Composition as a semigroup homomorphism. -/
508+
def comp_mul_hom [mul_zero_class δ] [has_continuous_mul δ]
509+
(g : β →co γ) : mul_hom C₀(γ, δ) C₀(β, δ) :=
510+
{ to_fun := λ f, f.comp g,
511+
map_mul' := λ f₁ f₂, rfl }
512+
513+
/-- Composition as a linear map. -/
514+
def comp_linear_map [add_comm_monoid δ] [has_continuous_add δ] {R : Type*}
515+
[semiring R] [module R δ] [has_continuous_const_smul R δ] (g : β →co γ) :
516+
C₀(γ, δ) →ₗ[R] C₀(β, δ) :=
517+
{ to_fun := λ f, f.comp g,
518+
map_add' := λ f₁ f₂, rfl,
519+
map_smul' := λ r f, rfl }
520+
521+
/-- Composition as a non-unital algebra homomorphism. -/
522+
def comp_non_unital_alg_hom {R : Type*} [semiring R] [non_unital_non_assoc_semiring δ]
523+
[topological_semiring δ] [module R δ] [has_continuous_const_smul R δ] (g : β →co γ) :
524+
non_unital_alg_hom R C₀(γ, δ) C₀(β, δ) :=
525+
{ to_fun := λ f, f.comp g,
526+
map_smul' := λ r f, rfl,
527+
map_zero' := rfl,
528+
map_add' := λ f₁ f₂, rfl,
529+
map_mul' := λ f₁ f₂, rfl }
530+
310531
end zero_at_infty_continuous_map

0 commit comments

Comments
 (0)