@@ -53,8 +53,6 @@ instance has_one {G : Type*} [monoid G] [topological_space G] [charted_space H'
53
53
lemma coe_one {G : Type *} [monoid G] [topological_space G] [charted_space H' G] :
54
54
⇑(1 : C^∞⟮I, N; I', G⟯) = 1 := rfl
55
55
56
- end smooth_map
57
-
58
56
section group_structure
59
57
60
58
/-!
@@ -65,56 +63,63 @@ under pointwise multiplication.
65
63
-/
66
64
67
65
@[to_additive]
68
- instance smooth_map_semigroup {G : Type *} [semigroup G] [topological_space G]
66
+ instance semigroup {G : Type *} [semigroup G] [topological_space G]
69
67
[charted_space H' G] [has_smooth_mul I' G] :
70
68
semigroup C^∞⟮I, N; I', G⟯ :=
71
69
{ mul_assoc := λ a b c, by ext; exact mul_assoc _ _ _,
72
70
..smooth_map.has_mul}
73
71
74
72
@[to_additive]
75
- instance smooth_map_monoid {G : Type *} [monoid G] [topological_space G]
73
+ instance monoid {G : Type *} [monoid G] [topological_space G]
76
74
[charted_space H' G] [has_smooth_mul I' G] :
77
75
monoid C^∞⟮I, N; I', G⟯ :=
78
76
{ one_mul := λ a, by ext; exact one_mul _,
79
77
mul_one := λ a, by ext; exact mul_one _,
80
- ..smooth_map_semigroup ,
78
+ ..smooth_map.semigroup ,
81
79
..smooth_map.has_one }
82
80
81
+ /-- Coercion to a function as an `monoid_hom`. Similar to `monoid_hom.coe_fn`. -/
82
+ @[to_additive " Coercion to a function as an `add_monoid_hom`. Similar to `add_monoid_hom.coe_fn`." ,
83
+ simps]
84
+ def coe_fn_monoid_hom {G : Type *} [monoid G] [topological_space G]
85
+ [charted_space H' G] [has_smooth_mul I' G] : C^∞⟮I, N; I', G⟯ →* (N → G) :=
86
+ { to_fun := coe_fn, map_one' := coe_one, map_mul' := coe_mul }
87
+
83
88
@[to_additive]
84
- instance smooth_map_comm_monoid {G : Type *} [comm_monoid G] [topological_space G]
89
+ instance comm_monoid {G : Type *} [comm_monoid G] [topological_space G]
85
90
[charted_space H' G] [has_smooth_mul I' G] :
86
91
comm_monoid C^∞⟮I, N; I', G⟯ :=
87
92
{ mul_comm := λ a b, by ext; exact mul_comm _ _,
88
- ..smooth_map_monoid ,
93
+ ..smooth_map.monoid ,
89
94
..smooth_map.has_one }
90
95
91
96
@[to_additive]
92
- instance smooth_map_group {G : Type *} [group G] [topological_space G]
97
+ instance group {G : Type *} [group G] [topological_space G]
93
98
[charted_space H' G] [lie_group I' G] :
94
99
group C^∞⟮I, N; I', G⟯ :=
95
100
{ inv := λ f, ⟨λ x, (f x)⁻¹, f.smooth.inv⟩,
96
101
mul_left_inv := λ a, by ext; exact mul_left_inv _,
97
102
div := λ f g, ⟨f / g, f.smooth.div g.smooth⟩,
98
103
div_eq_mul_inv := λ f g, by ext; exact div_eq_mul_inv _ _,
99
- .. smooth_map_monoid }
104
+ .. smooth_map.monoid }
100
105
101
106
@[simp, to_additive]
102
- lemma smooth_map. coe_inv {G : Type *} [group G] [topological_space G]
107
+ lemma coe_inv {G : Type *} [group G] [topological_space G]
103
108
[charted_space H' G] [lie_group I' G] (f : C^∞⟮I, N; I', G⟯) :
104
109
⇑f⁻¹ = f⁻¹ := rfl
105
110
106
111
@[simp, to_additive]
107
- lemma smooth_map. coe_div {G : Type *} [group G] [topological_space G]
112
+ lemma coe_div {G : Type *} [group G] [topological_space G]
108
113
[charted_space H' G] [lie_group I' G] (f g : C^∞⟮I, N; I', G⟯) :
109
114
⇑(f / g) = f / g :=
110
115
rfl
111
116
112
117
@[to_additive]
113
- instance smooth_map_comm_group {G : Type *} [comm_group G] [topological_space G]
118
+ instance comm_group {G : Type *} [comm_group G] [topological_space G]
114
119
[charted_space H' G] [lie_group I' G] :
115
120
comm_group C^∞⟮I, N; I', G⟯ :=
116
- { ..smooth_map_group ,
117
- ..smooth_map_comm_monoid }
121
+ { ..smooth_map.group ,
122
+ ..smooth_map.comm_monoid }
118
123
119
124
end group_structure
120
125
@@ -127,28 +132,36 @@ In this section we show that smooth functions valued in a smooth ring `R` inheri
127
132
under pointwise multiplication.
128
133
-/
129
134
130
- instance smooth_map_semiring {R : Type *} [semiring R] [topological_space R]
135
+ instance semiring {R : Type *} [semiring R] [topological_space R]
131
136
[charted_space H' R] [smooth_semiring I' R] :
132
137
semiring C^∞⟮I, N; I', R⟯ :=
133
138
{ left_distrib := λ a b c, by ext; exact left_distrib _ _ _,
134
139
right_distrib := λ a b c, by ext; exact right_distrib _ _ _,
135
140
zero_mul := λ a, by ext; exact zero_mul _,
136
141
mul_zero := λ a, by ext; exact mul_zero _,
137
- ..smooth_map_add_comm_monoid ,
138
- ..smooth_map_monoid }
142
+ ..smooth_map.add_comm_monoid ,
143
+ ..smooth_map.monoid }
139
144
140
- instance smooth_map_ring {R : Type *} [ring R] [topological_space R]
145
+ instance ring {R : Type *} [ring R] [topological_space R]
141
146
[charted_space H' R] [smooth_ring I' R] :
142
147
ring C^∞⟮I, N; I', R⟯ :=
143
- { ..smooth_map_semiring ,
144
- ..smooth_map_add_comm_group , }
148
+ { ..smooth_map.semiring ,
149
+ ..smooth_map.add_comm_group , }
145
150
146
- instance smooth_map_comm_ring {R : Type *} [comm_ring R] [topological_space R]
151
+ instance comm_ring {R : Type *} [comm_ring R] [topological_space R]
147
152
[charted_space H' R] [smooth_ring I' R] :
148
153
comm_ring C^∞⟮I, N; I', R⟯ :=
149
- { ..smooth_map_semiring,
150
- ..smooth_map_add_comm_group,
151
- ..smooth_map_comm_monoid,}
154
+ { ..smooth_map.semiring,
155
+ ..smooth_map.add_comm_group,
156
+ ..smooth_map.comm_monoid,}
157
+
158
+ /-- Coercion to a function as a `ring_hom`. -/
159
+ @[simps]
160
+ def coe_fn_ring_hom {R : Type *} [comm_ring R] [topological_space R]
161
+ [charted_space H' R] [smooth_ring I' R] : C^∞⟮I, N; I', R⟯ →+* (N → R) :=
162
+ { to_fun := coe_fn,
163
+ ..(coe_fn_monoid_hom : C^∞⟮I, N; I', R⟯ →* _),
164
+ ..(coe_fn_add_monoid_hom : C^∞⟮I, N; I', R⟯ →+ _) }
152
165
153
166
end ring_structure
154
167
@@ -161,22 +174,20 @@ In this section we show that smooth functions valued in a vector space `M` over
161
174
field `𝕜` inherit a vector space structure.
162
175
-/
163
176
164
- instance smooth_map_has_scalar
165
- {V : Type *} [normed_group V] [normed_space 𝕜 V] :
177
+ instance has_scalar {V : Type *} [normed_group V] [normed_space 𝕜 V] :
166
178
has_scalar 𝕜 C^∞⟮I, N; 𝓘(𝕜, V), V⟯ :=
167
179
⟨λ r f, ⟨r • f, smooth_const.smul f.smooth⟩⟩
168
180
169
181
@[simp]
170
- lemma smooth_map. coe_smul
171
- {V : Type *} [normed_group V] [normed_space 𝕜 V] (r : 𝕜) (f : C^∞⟮I, N; 𝓘(𝕜, V), V⟯) :
182
+ lemma coe_smul {V : Type *} [normed_group V] [normed_space 𝕜 V]
183
+ (r : 𝕜) (f : C^∞⟮I, N; 𝓘(𝕜, V), V⟯) :
172
184
⇑(r • f) = r • f := rfl
173
185
174
- @[simp] lemma smooth_map. smul_comp {V : Type *} [normed_group V] [normed_space 𝕜 V]
186
+ @[simp] lemma smul_comp {V : Type *} [normed_group V] [normed_space 𝕜 V]
175
187
(r : 𝕜) (g : C^∞⟮I'', N'; 𝓘(𝕜, V), V⟯) (h : C^∞⟮I, N; I'', N'⟯) :
176
188
(r • g).comp h = r • (g.comp h) := rfl
177
189
178
- instance smooth_map_module
179
- {V : Type *} [normed_group V] [normed_space 𝕜 V] :
190
+ instance module {V : Type *} [normed_group V] [normed_space 𝕜 V] :
180
191
module 𝕜 C^∞⟮I, N; 𝓘(𝕜, V), V⟯ :=
181
192
module.of_core $
182
193
{ smul := (•),
@@ -185,6 +196,14 @@ module.of_core $
185
196
mul_smul := λ c₁ c₂ f, by ext x; exact mul_smul c₁ c₂ (f x),
186
197
one_smul := λ f, by ext x; exact one_smul 𝕜 (f x), }
187
198
199
+ /-- Coercion to a function as a `linear_map`. -/
200
+ @[simps]
201
+ def coe_fn_linear_map {V : Type *} [normed_group V] [normed_space 𝕜 V] :
202
+ C^∞⟮I, N; 𝓘(𝕜, V), V⟯ →ₗ[𝕜] (N → V) :=
203
+ { to_fun := coe_fn,
204
+ map_smul' := coe_smul,
205
+ ..(coe_fn_add_monoid_hom : C^∞⟮I, N; 𝓘(𝕜, V), V⟯ →+ _) }
206
+
188
207
end module_structure
189
208
190
209
section algebra_structure
@@ -199,20 +218,31 @@ inherit an algebra structure.
199
218
variables {A : Type *} [normed_ring A] [normed_algebra 𝕜 A] [smooth_ring 𝓘(𝕜, A) A]
200
219
201
220
/-- Smooth constant functions as a `ring_hom`. -/
202
- def smooth_map. C : 𝕜 →+* C^∞⟮I, N; 𝓘(𝕜, A), A⟯ :=
221
+ def C : 𝕜 →+* C^∞⟮I, N; 𝓘(𝕜, A), A⟯ :=
203
222
{ to_fun := λ c : 𝕜, ⟨λ x, ((algebra_map 𝕜 A) c), smooth_const⟩,
204
223
map_one' := by ext x; exact (algebra_map 𝕜 A).map_one,
205
224
map_mul' := λ c₁ c₂, by ext x; exact (algebra_map 𝕜 A).map_mul _ _,
206
225
map_zero' := by ext x; exact (algebra_map 𝕜 A).map_zero,
207
226
map_add' := λ c₁ c₂, by ext x; exact (algebra_map 𝕜 A).map_add _ _ }
208
227
209
- instance : algebra 𝕜 C^∞⟮I, N; 𝓘(𝕜, A), A⟯ :=
228
+ instance algebra : algebra 𝕜 C^∞⟮I, N; 𝓘(𝕜, A), A⟯ :=
210
229
{ smul := λ r f,
211
230
⟨r • f, smooth_const.smul f.smooth⟩,
212
231
to_ring_hom := smooth_map.C,
213
232
commutes' := λ c f, by ext x; exact algebra.commutes' _ _,
214
233
smul_def' := λ c f, by ext x; exact algebra.smul_def' _ _,
215
- ..smooth_map_semiring }
234
+ ..smooth_map.semiring }
235
+
236
+ /-- Coercion to a function as an `alg_hom`. -/
237
+ @[simps]
238
+ def coe_fn_alg_hom : C^∞⟮I, N; 𝓘(𝕜, A), A⟯ →ₐ[𝕜] (N → A) :=
239
+ { to_fun := coe_fn,
240
+ commutes' := λ r, rfl,
241
+ -- `..(smooth_map.coe_fn_ring_hom : C^∞⟮I, N; 𝓘(𝕜, A), A⟯ →+* _)` times out for some reason
242
+ map_zero' := smooth_map.coe_zero,
243
+ map_one' := smooth_map.coe_one,
244
+ map_add' := smooth_map.coe_add,
245
+ map_mul' := smooth_map.coe_mul }
216
246
217
247
end algebra_structure
218
248
@@ -224,17 +254,15 @@ section module_over_continuous_functions
224
254
If `V` is a module over `𝕜`, then we show that the space of smooth functions from `N` to `V`
225
255
is naturally a vector space over the ring of smooth functions from `N` to `𝕜`. -/
226
256
227
- instance smooth_map_has_scalar'
228
- {V : Type *} [normed_group V] [normed_space 𝕜 V] :
257
+ instance has_scalar' {V : Type *} [normed_group V] [normed_space 𝕜 V] :
229
258
has_scalar C^∞⟮I, N; 𝕜⟯ C^∞⟮I, N; 𝓘(𝕜, V), V⟯ :=
230
259
⟨λ f g, ⟨λ x, (f x) • (g x), (smooth.smul f.2 g.2 )⟩⟩
231
260
232
- @[simp] lemma smooth_map. smul_comp' {V : Type *} [normed_group V] [normed_space 𝕜 V]
261
+ @[simp] lemma smul_comp' {V : Type *} [normed_group V] [normed_space 𝕜 V]
233
262
(f : C^∞⟮I'', N'; 𝕜⟯) (g : C^∞⟮I'', N'; 𝓘(𝕜, V), V⟯) (h : C^∞⟮I, N; I'', N'⟯) :
234
263
(f • g).comp h = (f.comp h) • (g.comp h) := rfl
235
264
236
- instance smooth_map_module'
237
- {V : Type *} [normed_group V] [normed_space 𝕜 V] :
265
+ instance module' {V : Type *} [normed_group V] [normed_space 𝕜 V] :
238
266
module C^∞⟮I, N; 𝓘(𝕜), 𝕜⟯ C^∞⟮I, N; 𝓘(𝕜, V), V⟯ :=
239
267
{ smul := (•),
240
268
smul_add := λ c f g, by ext x; exact smul_add (c x) (f x) (g x),
@@ -245,3 +273,5 @@ instance smooth_map_module'
245
273
smul_zero := λ r, by ext x; exact smul_zero _, }
246
274
247
275
end module_over_continuous_functions
276
+
277
+ end smooth_map
0 commit comments