@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Jireh Loreaux
5
5
-/
6
6
import topology.continuous_function.bounded
7
+ import topology.continuous_function.cocompact_map
7
8
8
9
/-!
9
10
# Continuous functions vanishing at infinity
@@ -107,6 +108,13 @@ def zero_at_infty_continuous_map_class.of_compact {G : Type*} [continuous_map_cl
107
108
108
109
end basics
109
110
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
+
110
118
section algebraic_structure
111
119
112
120
variables [topological_space β] (x : α)
@@ -211,16 +219,59 @@ instance [has_zero β] {R : Type*} [monoid_with_zero R] [mul_action_with_zero R
211
219
[has_continuous_const_smul R β] : mul_action_with_zero R C₀(α, β) :=
212
220
function.injective.mul_action_with_zero ⟨_, coe_zero⟩ fun_like.coe_injective coe_smul
213
221
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 β]
215
223
[has_continuous_const_smul R β] : module R C₀(α, β) :=
216
224
function.injective.module R ⟨_, coe_zero, coe_add⟩ fun_like.coe_injective coe_smul
217
225
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 β] :
219
231
non_unital_semiring C₀(α, β) :=
220
232
fun_like.coe_injective.non_unital_semiring _ coe_zero coe_add coe_mul (λ _ _, rfl)
221
233
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
+
222
265
end algebraic_structure
223
266
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
+
224
275
section metric
225
276
226
277
open metric set
@@ -259,7 +310,7 @@ def to_bcf (f : C₀(α, β)) : α →ᵇ β :=
259
310
260
311
section
261
312
variables (α) (β)
262
- lemma to_bounded_continuous_function_injective :
313
+ lemma to_bcf_injective :
263
314
function.injective (to_bcf : C₀(α, β) → α →ᵇ β) :=
264
315
λ f g h, by { ext, simpa only using fun_like.congr_fun h x, }
265
316
end
@@ -269,7 +320,7 @@ variables {C : ℝ} {f g : C₀(α, β)}
269
320
/-- The type of continuous functions vanishing at infinity, with the uniform distance induced by the
270
321
inclusion `zero_at_infinity_continuous_map.to_bcf`, is a metric space. -/
271
322
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)
273
324
274
325
@[simp]
275
326
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₀(α, β) :=
307
358
308
359
end metric
309
360
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
+
310
531
end zero_at_infty_continuous_map
0 commit comments