@@ -16,9 +16,9 @@ This file develops the theory of continuous affine maps between affine spaces mo
16
16
spaces.
17
17
18
18
In the particular case that the affine spaces are just normed vector spaces `V`, `W`, we define a
19
- norm on the space of continuous affine maps by defining the norm of `f : V →A [𝕜] W` to be
19
+ norm on the space of continuous affine maps by defining the norm of `f : V →ᴬ [𝕜] W` to be
20
20
`‖f‖ = max ‖f 0‖ ‖f.cont_linear‖`. This is chosen so that we have a linear isometry:
21
- `(V →A [𝕜] W) ≃ₗᵢ[𝕜] W × (V →L[𝕜] W)`.
21
+ `(V →ᴬ [𝕜] W) ≃ₗᵢ[𝕜] W × (V →L[𝕜] W)`.
22
22
23
23
The abstract picture is that for an affine space `P` modelled on a vector space `V`, together with
24
24
a vector space `W`, there is an exact sequence of `𝕜`-modules: `0 → C → A → L → 0` where `C`, `A`
@@ -51,46 +51,46 @@ variable [NormedField R] [NormedSpace R V] [NormedSpace R W] [NormedSpace R W₂
51
51
variable [NontriviallyNormedField 𝕜] [NormedSpace 𝕜 V] [NormedSpace 𝕜 W] [NormedSpace 𝕜 W₂]
52
52
53
53
/-- The linear map underlying a continuous affine map is continuous. -/
54
- def contLinear (f : P →A [R] Q) : V →L[R] W :=
54
+ def contLinear (f : P →ᴬ [R] Q) : V →L[R] W :=
55
55
{ f.linear with
56
56
toFun := f.linear
57
57
cont := by rw [AffineMap.continuous_linear_iff]; exact f.cont }
58
58
#align continuous_affine_map.cont_linear ContinuousAffineMap.contLinear
59
59
60
60
@[simp]
61
- theorem coe_contLinear (f : P →A [R] Q) : (f.contLinear : V → W) = f.linear :=
61
+ theorem coe_contLinear (f : P →ᴬ [R] Q) : (f.contLinear : V → W) = f.linear :=
62
62
rfl
63
63
#align continuous_affine_map.coe_cont_linear ContinuousAffineMap.coe_contLinear
64
64
65
65
@[simp]
66
- theorem coe_contLinear_eq_linear (f : P →A [R] Q) :
66
+ theorem coe_contLinear_eq_linear (f : P →ᴬ [R] Q) :
67
67
(f.contLinear : V →ₗ[R] W) = (f : P →ᵃ[R] Q).linear := by ext; rfl
68
68
#align continuous_affine_map.coe_cont_linear_eq_linear ContinuousAffineMap.coe_contLinear_eq_linear
69
69
70
70
@[simp]
71
71
theorem coe_mk_const_linear_eq_linear (f : P →ᵃ[R] Q) (h) :
72
- ((⟨f, h⟩ : P →A [R] Q).contLinear : V → W) = f.linear :=
72
+ ((⟨f, h⟩ : P →ᴬ [R] Q).contLinear : V → W) = f.linear :=
73
73
rfl
74
74
#align continuous_affine_map.coe_mk_const_linear_eq_linear ContinuousAffineMap.coe_mk_const_linear_eq_linear
75
75
76
- theorem coe_linear_eq_coe_contLinear (f : P →A [R] Q) :
76
+ theorem coe_linear_eq_coe_contLinear (f : P →ᴬ [R] Q) :
77
77
((f : P →ᵃ[R] Q).linear : V → W) = (⇑f.contLinear : V → W) :=
78
78
rfl
79
79
#align continuous_affine_map.coe_linear_eq_coe_cont_linear ContinuousAffineMap.coe_linear_eq_coe_contLinear
80
80
81
81
@[simp]
82
- theorem comp_contLinear (f : P →A [R] Q) (g : Q →A [R] Q₂) :
82
+ theorem comp_contLinear (f : P →ᴬ [R] Q) (g : Q →ᴬ [R] Q₂) :
83
83
(g.comp f).contLinear = g.contLinear.comp f.contLinear :=
84
84
rfl
85
85
#align continuous_affine_map.comp_cont_linear ContinuousAffineMap.comp_contLinear
86
86
87
87
@[simp]
88
- theorem map_vadd (f : P →A [R] Q) (p : P) (v : V) : f (v +ᵥ p) = f.contLinear v +ᵥ f p :=
88
+ theorem map_vadd (f : P →ᴬ [R] Q) (p : P) (v : V) : f (v +ᵥ p) = f.contLinear v +ᵥ f p :=
89
89
f.map_vadd' p v
90
90
#align continuous_affine_map.map_vadd ContinuousAffineMap.map_vadd
91
91
92
92
@[simp]
93
- theorem contLinear_map_vsub (f : P →A [R] Q) (p₁ p₂ : P) : f.contLinear (p₁ -ᵥ p₂) = f p₁ -ᵥ f p₂ :=
93
+ theorem contLinear_map_vsub (f : P →ᴬ [R] Q) (p₁ p₂ : P) : f.contLinear (p₁ -ᵥ p₂) = f p₁ -ᵥ f p₂ :=
94
94
f.toAffineMap.linearMap_vsub p₁ p₂
95
95
#align continuous_affine_map.cont_linear_map_vsub ContinuousAffineMap.contLinear_map_vsub
96
96
@@ -99,7 +99,7 @@ theorem const_contLinear (q : Q) : (const R P q).contLinear = 0 :=
99
99
rfl
100
100
#align continuous_affine_map.const_cont_linear ContinuousAffineMap.const_contLinear
101
101
102
- theorem contLinear_eq_zero_iff_exists_const (f : P →A [R] Q) :
102
+ theorem contLinear_eq_zero_iff_exists_const (f : P →ᴬ [R] Q) :
103
103
f.contLinear = 0 ↔ ∃ q, f = const R P q := by
104
104
have h₁ : f.contLinear = 0 ↔ (f : P →ᵃ[R] Q).linear = 0 := by
105
105
refine' ⟨fun h => _, fun h => _⟩ <;> ext
@@ -121,43 +121,43 @@ theorem to_affine_map_contLinear (f : V →L[R] W) : f.toContinuousAffineMap.con
121
121
#align continuous_affine_map.to_affine_map_cont_linear ContinuousAffineMap.to_affine_map_contLinear
122
122
123
123
@[simp]
124
- theorem zero_contLinear : (0 : P →A [R] W).contLinear = 0 :=
124
+ theorem zero_contLinear : (0 : P →ᴬ [R] W).contLinear = 0 :=
125
125
rfl
126
126
#align continuous_affine_map.zero_cont_linear ContinuousAffineMap.zero_contLinear
127
127
128
128
@[simp]
129
- theorem add_contLinear (f g : P →A [R] W) : (f + g).contLinear = f.contLinear + g.contLinear :=
129
+ theorem add_contLinear (f g : P →ᴬ [R] W) : (f + g).contLinear = f.contLinear + g.contLinear :=
130
130
rfl
131
131
#align continuous_affine_map.add_cont_linear ContinuousAffineMap.add_contLinear
132
132
133
133
@[simp]
134
- theorem sub_contLinear (f g : P →A [R] W) : (f - g).contLinear = f.contLinear - g.contLinear :=
134
+ theorem sub_contLinear (f g : P →ᴬ [R] W) : (f - g).contLinear = f.contLinear - g.contLinear :=
135
135
rfl
136
136
#align continuous_affine_map.sub_cont_linear ContinuousAffineMap.sub_contLinear
137
137
138
138
@[simp]
139
- theorem neg_contLinear (f : P →A [R] W) : (-f).contLinear = -f.contLinear :=
139
+ theorem neg_contLinear (f : P →ᴬ [R] W) : (-f).contLinear = -f.contLinear :=
140
140
rfl
141
141
#align continuous_affine_map.neg_cont_linear ContinuousAffineMap.neg_contLinear
142
142
143
143
@[simp]
144
- theorem smul_contLinear (t : R) (f : P →A [R] W) : (t • f).contLinear = t • f.contLinear :=
144
+ theorem smul_contLinear (t : R) (f : P →ᴬ [R] W) : (t • f).contLinear = t • f.contLinear :=
145
145
rfl
146
146
#align continuous_affine_map.smul_cont_linear ContinuousAffineMap.smul_contLinear
147
147
148
- theorem decomp (f : V →A [R] W) : (f : V → W) = f.contLinear + Function.const V (f 0 ) := by
148
+ theorem decomp (f : V →ᴬ [R] W) : (f : V → W) = f.contLinear + Function.const V (f 0 ) := by
149
149
rcases f with ⟨f, h⟩
150
150
rw [coe_mk_const_linear_eq_linear, coe_mk, f.decomp, Pi.add_apply, LinearMap.map_zero, zero_add,
151
151
← Function.const_def]
152
152
#align continuous_affine_map.decomp ContinuousAffineMap.decomp
153
153
154
154
section NormedSpaceStructure
155
155
156
- variable (f : V →A [𝕜] W)
156
+ variable (f : V →ᴬ [𝕜] W)
157
157
158
158
/-- Note that unlike the operator norm for linear maps, this norm is _not_ submultiplicative:
159
159
we do _not_ necessarily have `‖f.comp g‖ ≤ ‖f‖ * ‖g‖`. See `norm_comp_le` for what we can say. -/
160
- noncomputable instance hasNorm : Norm (V →A [𝕜] W) :=
160
+ noncomputable instance hasNorm : Norm (V →ᴬ [𝕜] W) :=
161
161
⟨fun f => max ‖f 0 ‖ ‖f.contLinear‖⟩
162
162
#align continuous_affine_map.has_norm ContinuousAffineMap.hasNorm
163
163
@@ -182,7 +182,7 @@ theorem norm_eq (h : f 0 = 0) : ‖f‖ = ‖f.contLinear‖ :=
182
182
183
183
#align continuous_affine_map.norm_eq ContinuousAffineMap.norm_eq
184
184
185
- noncomputable instance : NormedAddCommGroup (V →A [𝕜] W) :=
185
+ noncomputable instance : NormedAddCommGroup (V →ᴬ [𝕜] W) :=
186
186
AddGroupNorm.toNormedAddCommGroup
187
187
{ toFun := fun f => max ‖f 0 ‖ ‖f.contLinear‖
188
188
map_zero' := by simp [(ContinuousAffineMap.zero_apply)]
@@ -206,18 +206,18 @@ noncomputable instance : NormedAddCommGroup (V →A[𝕜] W) :=
206
206
rw [h₂]
207
207
rfl }
208
208
209
- instance : NormedSpace 𝕜 (V →A [𝕜] W) where
209
+ instance : NormedSpace 𝕜 (V →ᴬ [𝕜] W) where
210
210
norm_smul_le t f := by
211
211
simp only [SMul.smul, norm_def, smul_contLinear, norm_smul]
212
212
-- Porting note: previously all these rewrites were in the `simp only`,
213
213
-- but now they don't fire.
214
214
-- (in fact, `norm_smul` fires, but only once rather than twice!)
215
- have : NormedAddCommGroup (V →A [𝕜] W) := inferInstance -- this is necessary for `norm_smul`
215
+ have : NormedAddCommGroup (V →ᴬ [𝕜] W) := inferInstance -- this is necessary for `norm_smul`
216
216
rw [coe_smul, Pi.smul_apply, norm_smul, norm_smul _ (f.contLinear),
217
217
← mul_max_of_nonneg _ _ (norm_nonneg t)]
218
218
219
219
220
- theorem norm_comp_le (g : W₂ →A [𝕜] V) : ‖f.comp g‖ ≤ ‖f‖ * ‖g‖ + ‖f 0 ‖ := by
220
+ theorem norm_comp_le (g : W₂ →ᴬ [𝕜] V) : ‖f.comp g‖ ≤ ‖f‖ * ‖g‖ + ‖f 0 ‖ := by
221
221
rw [norm_def, max_le_iff]
222
222
constructor
223
223
· calc
@@ -242,7 +242,7 @@ variable (𝕜 V W)
242
242
/-- The space of affine maps between two normed spaces is linearly isometric to the product of the
243
243
codomain with the space of linear maps, by taking the value of the affine map at `(0 : V)` and the
244
244
linear part. -/
245
- def toConstProdContinuousLinearMap : (V →A [𝕜] W) ≃ₗᵢ[𝕜] W × (V →L[𝕜] W) where
245
+ def toConstProdContinuousLinearMap : (V →ᴬ [𝕜] W) ≃ₗᵢ[𝕜] W × (V →L[𝕜] W) where
246
246
toFun f := ⟨f 0 , f.contLinear⟩
247
247
invFun p := p.2 .toContinuousAffineMap + const 𝕜 V p.1
248
248
left_inv f := by
@@ -256,13 +256,13 @@ def toConstProdContinuousLinearMap : (V →A[𝕜] W) ≃ₗᵢ[𝕜] W × (V
256
256
#align continuous_affine_map.to_const_prod_continuous_linear_map ContinuousAffineMap.toConstProdContinuousLinearMap
257
257
258
258
@[simp]
259
- theorem toConstProdContinuousLinearMap_fst (f : V →A [𝕜] W) :
259
+ theorem toConstProdContinuousLinearMap_fst (f : V →ᴬ [𝕜] W) :
260
260
(toConstProdContinuousLinearMap 𝕜 V W f).fst = f 0 :=
261
261
rfl
262
262
#align continuous_affine_map.to_const_prod_continuous_linear_map_fst ContinuousAffineMap.toConstProdContinuousLinearMap_fst
263
263
264
264
@[simp]
265
- theorem toConstProdContinuousLinearMap_snd (f : V →A [𝕜] W) :
265
+ theorem toConstProdContinuousLinearMap_snd (f : V →ᴬ [𝕜] W) :
266
266
(toConstProdContinuousLinearMap 𝕜 V W f).snd = f.contLinear :=
267
267
rfl
268
268
#align continuous_affine_map.to_const_prod_continuous_linear_map_snd ContinuousAffineMap.toConstProdContinuousLinearMap_snd
0 commit comments