forked from leanprover-community/mathlib4
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRestrictScalars.lean
More file actions
94 lines (68 loc) · 3.25 KB
/
Copy pathRestrictScalars.lean
File metadata and controls
94 lines (68 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/-
Copyright (c) 2019 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel, Yury Kudryashov
-/
module
public import Mathlib.Topology.Algebra.Module.ContinuousLinearMap.Basic
/-!
# Restriction of scalars for continuous linear maps
In this file, we define and study `ContinuousLinearMap.restrictScalars`, which reinterprets
a continuous `R`-linear map as a continuous `S`-linear map, for suitable `R` and `S`.
This is the continuous version of `LinearMap.restrictScalars`.
-/
@[expose] public section
section RestrictScalars
namespace ContinuousLinearMap
section Semiring
variable {A M₁ M₂ R S : Type*} [Semiring A] [Semiring R] [Semiring S]
[AddCommMonoid M₁] [Module A M₁] [Module R M₁] [TopologicalSpace M₁]
[AddCommMonoid M₂] [Module A M₂] [Module R M₂] [TopologicalSpace M₂]
[LinearMap.CompatibleSMul M₁ M₂ R A]
variable (R) in
/-- If `A` is an `R`-algebra, then a continuous `A`-linear map can be interpreted as a continuous
`R`-linear map. We assume `LinearMap.CompatibleSMul M₁ M₂ R A` to match assumptions of
`LinearMap.map_smul_of_tower`. -/
def restrictScalars (f : M₁ →L[A] M₂) : M₁ →L[R] M₂ :=
⟨(f : M₁ →ₗ[A] M₂).restrictScalars R, f.continuous⟩
@[simp]
theorem coe_restrictScalars (f : M₁ →L[A] M₂) :
(f.restrictScalars R : M₁ →ₗ[R] M₂) = (f : M₁ →ₗ[A] M₂).restrictScalars R := rfl
@[simp]
theorem coe_restrictScalars' (f : M₁ →L[A] M₂) : ⇑(f.restrictScalars R) = f := rfl
@[simp]
theorem toContinuousAddMonoidHom_restrictScalars (f : M₁ →L[A] M₂) :
↑(f.restrictScalars R) = (f : ContinuousAddMonoidHom M₁ M₂) := rfl
@[simp] lemma restrictScalars_zero : (0 : M₁ →L[A] M₂).restrictScalars R = 0 := rfl
@[simp]
lemma restrictScalars_add [ContinuousAdd M₂] (f g : M₁ →L[A] M₂) :
(f + g).restrictScalars R = f.restrictScalars R + g.restrictScalars R := rfl
variable [Module S M₂] [ContinuousConstSMul S M₂] [SMulCommClass A S M₂] [SMulCommClass R S M₂]
@[simp]
theorem restrictScalars_smul (c : S) (f : M₁ →L[A] M₂) :
(c • f).restrictScalars R = c • f.restrictScalars R :=
rfl
variable [ContinuousAdd M₂]
variable (A R S M₁ M₂) in
/-- `ContinuousLinearMap.restrictScalars` as a `LinearMap`. See also
`ContinuousLinearMap.restrictScalarsL`. -/
def restrictScalarsₗ : (M₁ →L[A] M₂) →ₗ[S] M₁ →L[R] M₂ where
toFun := restrictScalars R
map_add' := restrictScalars_add
map_smul' := restrictScalars_smul
@[simp]
theorem coe_restrictScalarsₗ : ⇑(restrictScalarsₗ A M₁ M₂ R S) = restrictScalars R := rfl
end Semiring
section Ring
variable {A R S M₁ M₂ : Type*} [Ring A] [Ring R] [Ring S]
[AddCommGroup M₁] [Module A M₁] [Module R M₁] [TopologicalSpace M₁]
[AddCommGroup M₂] [Module A M₂] [Module R M₂] [TopologicalSpace M₂]
[LinearMap.CompatibleSMul M₁ M₂ R A] [IsTopologicalAddGroup M₂]
@[simp]
lemma restrictScalars_sub (f g : M₁ →L[A] M₂) :
(f - g).restrictScalars R = f.restrictScalars R - g.restrictScalars R := rfl
@[simp]
lemma restrictScalars_neg (f : M₁ →L[A] M₂) : (-f).restrictScalars R = -f.restrictScalars R := rfl
end Ring
end ContinuousLinearMap
end RestrictScalars