-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Expand file tree
/
Copy pathBasic.lean
More file actions
599 lines (474 loc) ยท 28.5 KB
/
Basic.lean
File metadata and controls
599 lines (474 loc) ยท 28.5 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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
/-
Copyright (c) 2020 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, Heather Macbeth, Patrick Massot
-/
import Mathlib.Topology.Algebra.Module.Alternating.Topology
import Mathlib.Analysis.NormedSpace.Multilinear.Basic
/-!
# Operator norm on the space of continuous alternating maps
In this file we show that continuous alternating maps
from a seminormed space to a (semi)normed space form a (semi)normed space.
We also prove basic facts about this norm
and define bundled versions of some operations on continuous alternating maps.
Most proofs just invoke the corresponding fact about continuous multilinear maps.
-/
noncomputable section
open scoped BigOperators NNReal
open Finset Metric
/-!
### Type variables
We use the following type variables in this file:
* `๐` : a nontrivially normed field;
* `ฮน`: a finite index type;
* `E`, `F`, `G`: (semi)normed vector spaces over `๐`.
-/
/-- Applying a continuous alternating map to a vector is continuous
in the pair (map, vector).
Continuity in in the vector holds by definition
and continuity in the map holds if both the domain and the codomain are topological vector spaces.
However, continuity in the pair (map, vector) needs the domain to be a locally bounded TVS.
We have no typeclass for a locally bounded TVS,
so we require it to be a seminormed space instead. -/
instance ContinuousAlternatingMap.instContinuousEval {๐ ฮน E F : Type*}
[NormedField ๐] [Finite ฮน] [SeminormedAddCommGroup E] [NormedSpace ๐ E]
[TopologicalSpace F] [AddCommGroup F] [IsTopologicalAddGroup F] [Module ๐ F] :
ContinuousEval (E [โ^ฮน]โL[๐] F) (ฮน โ E) F :=
.of_continuous_forget continuous_toContinuousMultilinearMap
section Seminorm
universe u wE wF wG v
variable {๐ : Type u} {n : โ} {E : Type wE} {F : Type wF} {G : Type wG} {ฮน : Type v}
[NontriviallyNormedField ๐]
[SeminormedAddCommGroup E] [NormedSpace ๐ E]
[SeminormedAddCommGroup F] [NormedSpace ๐ F]
[SeminormedAddCommGroup G] [NormedSpace ๐ G]
/-!
### Continuity properties of alternating maps
We relate continuity of alternating maps to the inequality `โf mโ โค C * โ i, โm iโ`, in
both directions. Along the way, we prove useful bounds on the difference `โf mโ - f mโโ`.
-/
namespace AlternatingMap
/-- If `f` is a continuous alternating map on `E`
and `m` is an element of `ฮน โ E` such that one of the `m i` has norm `0`, then `f m` has norm `0`.
Note that we cannot drop the continuity assumption.
Indeed, let `โโ` be a copy or `โ` with zero norm and indiscrete topology.
Then `f : (Unit โ โโ) โ โ` given by `f x = x ()`
sends vector `1` with zero norm to number `1` with nonzero norm. -/
theorem norm_map_coord_zero (f : E [โ^ฮน]โโ[๐] F) (hf : Continuous f)
{m : ฮน โ E} {i : ฮน} (hi : โm iโ = 0) : โf mโ = 0 :=
f.1.norm_map_coord_zero hf hi
variable [Fintype ฮน]
/-- If an alternating map in finitely many variables on seminormed spaces
sends vectors with a component of norm zero to vectors of norm zero
and satisfies the inequality `โf mโ โค C * โ i, โm iโ` on a shell `ฮต i / โc iโ < โm iโ < ฮต i`
for some positive numbers `ฮต i` and elements `c i : ๐`, `1 < โc iโ`,
then it satisfies this inequality for all `m`.
The first assumption is automatically satisfied on normed spaces, see `bound_of_shell` below.
For seminormed spaces, it follows from continuity of `f`,
see lemma `bound_of_shell_of_continuous` below. -/
theorem bound_of_shell_of_norm_map_coord_zero (f : E [โ^ฮน]โโ[๐] F)
(hfโ : โ {m i}, โm iโ = 0 โ โf mโ = 0)
{ฮต : ฮน โ โ} {C : โ} (hฮต : โ i, 0 < ฮต i) {c : ฮน โ ๐} (hc : โ i, 1 < โc iโ)
(hf : โ m : ฮน โ E, (โ i, ฮต i / โc iโ โค โm iโ) โ (โ i, โm iโ < ฮต i) โ โf mโ โค C * โ i, โm iโ)
(m : ฮน โ E) : โf mโ โค C * โ i, โm iโ :=
f.1.bound_of_shell_of_norm_map_coord_zero hfโ hฮต hc hf m
/-- If a continuous alternating map in finitely many variables on normed spaces
satisfies the inequality `โf mโ โค C * โ i, โm iโ`
on a shell `ฮต / โcโ < โm iโ < ฮต` for some positive number `ฮต` and an elements `c : ๐`, `1 < โcโ`,
then it satisfies this inequality for all `m`.
If the domain is a Hausdorff space, then the continuity assumption is reduntant,
see `bound_of_shell` below. -/
theorem bound_of_shell_of_continuous (f : E [โ^ฮน]โโ[๐] F) (hfc : Continuous f)
{ฮต : โ} {C : โ} (hฮต : 0 < ฮต) {c : ๐} (hc : 1 < โcโ)
(hf : โ m : ฮน โ E, (โ i, ฮต / โcโ โค โm iโ) โ (โ i, โm iโ < ฮต) โ โf mโ โค C * โ i, โm iโ)
(m : ฮน โ E) : โf mโ โค C * โ i, โm iโ :=
f.1.bound_of_shell_of_continuous hfc (fun _ โฆ hฮต) (fun _ โฆ hc) hf m
/-- If an alternating map in finitely many variables on a seminormed space is continuous,
then it satisfies the inequality `โf mโ โค C * โ i, โm iโ`,
for some `C` which can be chosen to be positive. -/
theorem exists_bound_of_continuous (f : E [โ^ฮน]โโ[๐] F) (hf : Continuous f) :
โ (C : โ), 0 < C โง (โ m, โf mโ โค C * โ i, โm iโ) :=
f.1.exists_bound_of_continuous hf
/-- If an alternating map `f` satisfies a boundedness property around `0`,
one can deduce a bound on `f mโ - f mโ` using the multilinearity.
Here, we give a precise but hard to use version.
See `AlternatingMap.norm_image_sub_le_of_bound` for a less precise but more usable version.
The bound reads
`โf m - f m'โ โค
C * โm 1 - m' 1โ * max โm 2โ โm' 2โ * max โm 3โ โm' 3โ * ... * max โm nโ โm' nโ + ...`,
where the other terms in the sum are the same products where `1` is replaced by any `i`. -/
theorem norm_image_sub_le_of_bound' [DecidableEq ฮน] (f : E [โ^ฮน]โโ[๐] F) {C : โ} (hC : 0 โค C)
(H : โ m, โf mโ โค C * โ i, โm iโ) (mโ mโ : ฮน โ E) :
โf mโ - f mโโ โค C * โ i, โ j, if j = i then โmโ i - mโ iโ else max โmโ jโ โmโ jโ :=
f.toMultilinearMap.norm_image_sub_le_of_bound' hC H mโ mโ
/-- If an alternating map `f` satisfies a boundedness property around `0`,
one can deduce a bound on `f mโ - f mโ` using the multilinearity.
Here, we give a usable but not very precise version.
See `AlternatingMap.norm_image_sub_le_of_bound'` for a more precise but less usable version.
The bound is `โf m - f m'โ โค C * card ฮน * โm - m'โ * (max โmโ โm'โ) ^ (card ฮน - 1)`. -/
theorem norm_image_sub_le_of_bound (f : E [โ^ฮน]โโ[๐] F) {C : โ} (hC : 0 โค C)
(H : โ m, โf mโ โค C * โ i, โm iโ) (mโ mโ : ฮน โ E) :
โf mโ - f mโโ โค C * (Fintype.card ฮน) * (max โmโโ โmโโ) ^ (Fintype.card ฮน - 1) * โmโ - mโโ :=
f.toMultilinearMap.norm_image_sub_le_of_bound hC H mโ mโ
/-- If an alternating map satisfies an inequality `โf mโ โค C * โ i, โm iโ`,
then it is continuous. -/
theorem continuous_of_bound (f : E [โ^ฮน]โโ[๐] F) (C : โ) (H : โ m, โf mโ โค C * โ i, โm iโ) :
Continuous f :=
f.toMultilinearMap.continuous_of_bound C H
/-- Construct a continuous alternating map
from a alternating map satisfying a boundedness condition. -/
def mkContinuous (f : E [โ^ฮน]โโ[๐] F) (C : โ) (H : โ m, โf mโ โค C * โ i, โm iโ) : E [โ^ฮน]โL[๐] F :=
{ f with cont := f.continuous_of_bound C H }
@[simp] theorem coe_mkContinuous (f : E [โ^ฮน]โโ[๐] F) (C : โ) (H : โ m, โf mโ โค C * โ i, โm iโ) :
(f.mkContinuous C H : (ฮน โ E) โ F) = f :=
rfl
end AlternatingMap
/-!
### Continuous alternating maps
We define the norm `โfโ` of a continuous alternating map `f` in finitely many variables
as the smallest nonnegative number such that `โf mโ โค โfโ * โ i, โm iโ` for all `m`.
We show that this defines a normed space structure on `E [โ^ฮน]โL[๐] F`.
-/
namespace ContinuousAlternatingMap
variable [Fintype ฮน] {f : E [โ^ฮน]โL[๐] F} {m : ฮน โ E}
theorem bound (f : E [โ^ฮน]โL[๐] F) : โ (C : โ), 0 < C โง (โ m, โf mโ โค C * โ i, โm iโ) :=
f.toContinuousMultilinearMap.bound
/-- Continuous alternating maps form a seminormed additive commutative group.
We override projection to `PseudoMetricSpace` to ensure that instances commute
in `with_reducible_and_instances`. -/
instance instSeminormedAddCommGroup : SeminormedAddCommGroup (E [โ^ฮน]โL[๐] F) where
toPseudoMetricSpace := .induced toContinuousMultilinearMap inferInstance
__ := SeminormedAddCommGroup.induced _ _ (toMultilinearAddHom : E [โ^ฮน]โL[๐] F โ+ _)
norm f := โf.toContinuousMultilinearMapโ
@[simp] theorem norm_toContinuousMultilinearMap (f : E [โ^ฮน]โL[๐] F) : โf.1โ = โfโ := rfl
@[simp] theorem nnnorm_toContinuousMultilinearMap (f : E [โ^ฮน]โL[๐] F) : โf.1โโ = โfโโ := rfl
@[simp] theorem enorm_toContinuousMultilinearMap (f : E [โ^ฮน]โL[๐] F) : โf.1โโ = โfโโ := rfl
/-- The inclusion of `E [โ^ฮน]โL[๐] F` into `ContinuousMultilinearMap ๐ (fun _ : ฮน โฆ E) F`
as a linear isometry. -/
@[simps!]
def toContinuousMultilinearMapLI :
E [โ^ฮน]โL[๐] F โโแตข[๐] ContinuousMultilinearMap ๐ (fun _ : ฮน โฆ E) F where
toLinearMap := toContinuousMultilinearMapLinear
norm_map' _ := rfl
theorem norm_def (f : E [โ^ฮน]โL[๐] F) :
โfโ = sInf {c : โ | 0 โค c โง โ m, โf mโ โค c * โ i, โm iโ} :=
rfl
theorem bounds_nonempty :
โ c, c โ {c | 0 โค c โง โ m, โf mโ โค c * โ i, โm iโ} :=
ContinuousMultilinearMap.bounds_nonempty
theorem bounds_bddBelow {f : E [โ^ฮน]โL[๐] F} :
BddBelow {c | 0 โค c โง โ m, โf mโ โค c * โ i, โm iโ} :=
ContinuousMultilinearMap.bounds_bddBelow
theorem isLeast_opNorm (f : E [โ^ฮน]โL[๐] F) :
IsLeast {c : โ | 0 โค c โง โ m, โf mโ โค c * โ i, โm iโ} โfโ :=
f.1.isLeast_opNorm
/-- The fundamental property of the operator norm of a continuous alternating map:
`โf mโ` is bounded by `โfโ` times the product of the `โm iโ`. -/
theorem le_opNorm (f : E [โ^ฮน]โL[๐] F) (m : ฮน โ E) : โf mโ โค โfโ * โ i, โm iโ := f.1.le_opNorm m
theorem le_mul_prod_of_opNorm_le_of_le
{m : ฮน โ E} {C : โ} {b : ฮน โ โ} (hC : โfโ โค C) (hm : โ i, โm iโ โค b i) :
โf mโ โค C * โ i, b i :=
f.1.le_mul_prod_of_opNorm_le_of_le hC hm
theorem le_opNorm_mul_prod_of_le (f : E [โ^ฮน]โL[๐] F) {b : ฮน โ โ} (hm : โ i, โm iโ โค b i) :
โf mโ โค โfโ * โ i, b i :=
f.1.le_opNorm_mul_prod_of_le hm
theorem le_opNorm_mul_pow_card_of_le (f : E [โ^ฮน]โL[๐] F) {m b} (hm : โmโ โค b) :
โf mโ โค โfโ * b ^ Fintype.card ฮน :=
f.1.le_opNorm_mul_pow_card_of_le hm
theorem le_opNorm_mul_pow_of_le {n} (f : E [โ^Fin n]โL[๐] F) {m b} (hm : โmโ โค b) :
โf mโ โค โfโ * b ^ n :=
f.1.le_opNorm_mul_pow_of_le hm
theorem le_of_opNorm_le {C : โ} (h : โfโ โค C) (m : ฮน โ E) : โf mโ โค C * โ i, โm iโ :=
f.1.le_of_opNorm_le h m
theorem ratio_le_opNorm (f : E [โ^ฮน]โL[๐] F) (m : ฮน โ E) : โf mโ / โ i, โm iโ โค โfโ :=
f.1.ratio_le_opNorm m
/-- The image of the unit ball under a continuous alternating map is bounded. -/
theorem unit_le_opNorm (f : E [โ^ฮน]โL[๐] F) (h : โmโ โค 1) : โf mโ โค โfโ := f.1.unit_le_opNorm h
/-- If one controls the norm of every `f x`, then one controls the norm of `f`. -/
theorem opNorm_le_bound (f : E [โ^ฮน]โL[๐] F) {M : โ} (hMp : 0 โค M)
(hM : โ m, โf mโ โค M * โ i, โm iโ) : โfโ โค M :=
f.1.opNorm_le_bound hMp hM
theorem opNorm_le_iff {C : โ} (hC : 0 โค C) : โfโ โค C โ โ m, โf mโ โค C * โ i, โm iโ :=
f.1.opNorm_le_iff hC
/-- The fundamental property of the operator norm of a continuous alternating map:
`โf mโ` is bounded by `โfโ` times the product of the `โm iโ`, `nnnorm` version. -/
theorem le_opNNNorm (f : E [โ^ฮน]โL[๐] F) (m : ฮน โ E) : โf mโโ โค โfโโ * โ i, โm iโโ :=
f.1.le_opNNNorm m
theorem le_of_opNNNorm_le {C : โโฅ0} (h : โfโโ โค C) (m : ฮน โ E) : โf mโโ โค C * โ i, โm iโโ :=
f.1.le_of_opNNNorm_le h m
theorem opNNNorm_le_iff {C : โโฅ0} : โfโโ โค C โ โ m, โf mโโ โค C * โ i, โm iโโ :=
f.1.opNNNorm_le_iff
theorem isLeast_opNNNorm (f : E [โ^ฮน]โL[๐] F) :
IsLeast {C : โโฅ0 | โ m, โf mโโ โค C * โ i, โm iโโ} โfโโ :=
f.1.isLeast_opNNNorm
theorem opNNNorm_prod (f : E [โ^ฮน]โL[๐] F) (g : E [โ^ฮน]โL[๐] G) :
โf.prod gโโ = max (โfโโ) (โgโโ) :=
f.1.opNNNorm_prod g.1
theorem opNorm_prod (f : E [โ^ฮน]โL[๐] F) (g : E [โ^ฮน]โL[๐] G) : โf.prod gโ = max (โfโ) (โgโ) :=
f.1.opNorm_prod g.1
theorem opNNNorm_pi {ฮน' : Type*} [Fintype ฮน'] {F : ฮน' โ Type*} [โ i', SeminormedAddCommGroup (F i')]
[โ i', NormedSpace ๐ (F i')] (f : โ i', E [โ^ฮน]โL[๐] F i') : โpi fโโ = โfโโ :=
ContinuousMultilinearMap.opNNNorm_pi fun i โฆ (f i).1
theorem opNorm_pi {ฮน' : Type*} [Fintype ฮน'] {F : ฮน' โ Type*} [โ i', SeminormedAddCommGroup (F i')]
[โ i', NormedSpace ๐ (F i')] (f : โ i', E [โ^ฮน]โL[๐] F i') : โpi fโ = โfโ :=
ContinuousMultilinearMap.opNorm_pi fun i โฆ (f i).1
instance instNormedSpace {๐' : Type*} [NormedField ๐'] [NormedSpace ๐' F] [SMulCommClass ๐ ๐' F] :
NormedSpace ๐' (E [โ^ฮน]โL[๐] F) :=
โจfun c f โฆ f.1.opNorm_smul_le cโฉ
section
@[simp] theorem norm_ofSubsingleton [Subsingleton ฮน] (i : ฮน) (f : E โL[๐] F) :
โofSubsingleton ๐ E F i fโ = โfโ :=
ContinuousMultilinearMap.norm_ofSubsingleton i f
@[simp] theorem nnnorm_ofSubsingleton [Subsingleton ฮน] (i : ฮน) (f : E โL[๐] F) :
โofSubsingleton ๐ E F i fโโ = โfโโ :=
NNReal.eq <| norm_ofSubsingleton i f
/-- `ContinuousAlternatingMap.ofSubsingleton` as a linear isometry. -/
@[simps (config := { simpRhs := true })]
def ofSubsingletonLIE [Subsingleton ฮน] (i : ฮน) : (E โL[๐] F) โโแตข[๐] (E [โ^ฮน]โL[๐] F) where
__ := ofSubsingleton ๐ E F i
map_add' _ _ := rfl
map_smul' _ _ := rfl
norm_map' := norm_ofSubsingleton i
theorem norm_ofSubsingleton_id_le [Subsingleton ฮน] (i : ฮน) :
โofSubsingleton ๐ E E i (.id _ _)โ โค 1 :=
ContinuousMultilinearMap.norm_ofSubsingleton_id_le ..
theorem nnnorm_ofSubsingleton_id_le [Subsingleton ฮน] (i : ฮน) :
โofSubsingleton ๐ E E i (.id _ _)โโ โค 1 :=
ContinuousMultilinearMap.nnnorm_ofSubsingleton_id_le ..
variable (๐ E)
@[simp] theorem norm_constOfIsEmpty [IsEmpty ฮน] (x : F) : โconstOfIsEmpty ๐ E ฮน xโ = โxโ :=
ContinuousMultilinearMap.norm_constOfIsEmpty _ _ _
@[simp] theorem nnnorm_constOfIsEmpty [IsEmpty ฮน] (x : F) : โconstOfIsEmpty ๐ E ฮน xโโ = โxโโ :=
NNReal.eq <| norm_constOfIsEmpty _ _ _
end
variable (๐ E F G) in
/-- `ContinuousAlternatingMap.prod` as a `LinearIsometryEquiv`. -/
@[simps]
def prodLIE : (E [โ^ฮน]โL[๐] F) ร (E [โ^ฮน]โL[๐] G) โโแตข[๐] (E [โ^ฮน]โL[๐] (F ร G)) where
toFun f := f.1.prod f.2
invFun f := ((ContinuousLinearMap.fst ๐ F G).compContinuousAlternatingMap f,
(ContinuousLinearMap.snd ๐ F G).compContinuousAlternatingMap f)
map_add' _ _ := rfl
map_smul' _ _ := rfl
left_inv _ := rfl
right_inv _ := rfl
norm_map' f := opNorm_prod f.1 f.2
variable (๐ E) in
/-- `ContinuousAlternatingMap.pi` as a `LinearIsometryEquiv`. -/
@[simps!]
def piLIE {ฮน' : Type*} [Fintype ฮน'] {F : ฮน' โ Type*} [โ i', SeminormedAddCommGroup (F i')]
[โ i', NormedSpace ๐ (F i')] :
(โ i', E [โ^ฮน]โL[๐] F i') โโแตข[๐] (E [โ^ฮน]โL[๐] (โ i, F i)) where
toLinearEquiv := piLinearEquiv
norm_map' := opNorm_pi
section restrictScalars
variable {๐' : Type*} [NontriviallyNormedField ๐'] [NormedAlgebra ๐' ๐]
variable [NormedSpace ๐' F] [IsScalarTower ๐' ๐ F]
variable [NormedSpace ๐' E] [IsScalarTower ๐' ๐ E]
@[simp] theorem norm_restrictScalars : โf.restrictScalars ๐'โ = โfโ := rfl
variable (๐')
/-- `ContinuousAlternatingMap.restrictScalars` as a `LinearIsometry`. -/
@[simps]
def restrictScalarsLI : E [โ^ฮน]โL[๐] F โโแตข[๐'] E [โ^ฮน]โL[๐'] F where
toFun := restrictScalars ๐'
map_add' _ _ := rfl
map_smul' _ _ := rfl
norm_map' _ := rfl
variable {๐'}
end restrictScalars
/-- The difference `f mโ - f mโ` is controlled in terms of `โfโ` and `โmโ - mโโ`, precise version.
For a less precise but more usable version, see `norm_image_sub_le`. The bound reads
`โf m - f m'โ โค
โfโ * โm 1 - m' 1โ * max โm 2โ โm' 2โ * max โm 3โ โm' 3โ * ... * max โm nโ โm' nโ + ...`,
where the other terms in the sum are the same products where `1` is replaced by any `i`. -/
theorem norm_image_sub_le' [DecidableEq ฮน] (f : E [โ^ฮน]โL[๐] F) (mโ mโ : ฮน โ E) :
โf mโ - f mโโ โค โfโ * โ i, โ j, if j = i then โmโ i - mโ iโ else max โmโ jโ โmโ jโ :=
f.1.norm_image_sub_le' mโ mโ
/-- The difference `f mโ - f mโ` is controlled in terms of `โfโ` and `โmโ - mโโ`,
less precise version.
For a more precise but less usable version, see `norm_image_sub_le'`.
The bound is `โf m - f m'โ โค โfโ * card ฮน * โm - m'โ * (max โmโ โm'โ) ^ (card ฮน - 1)`. -/
theorem norm_image_sub_le (f : E [โ^ฮน]โL[๐] F) (mโ mโ : ฮน โ E) :
โf mโ - f mโโ โค โfโ * (Fintype.card ฮน) * (max โmโโ โmโโ) ^ (Fintype.card ฮน - 1) * โmโ - mโโ :=
f.1.norm_image_sub_le mโ mโ
end ContinuousAlternatingMap
variable [Fintype ฮน]
/-- If a continuous alternating map is constructed from a alternating map via the constructor
`mkContinuous`, then its norm is bounded by the bound given to the constructor if it is
nonnegative. -/
theorem AlternatingMap.mkContinuous_norm_le (f : E [โ^ฮน]โโ[๐] F) {C : โ} (hC : 0 โค C)
(H : โ m, โf mโ โค C * โ i, โm iโ) : โf.mkContinuous C Hโ โค C :=
f.toMultilinearMap.mkContinuous_norm_le hC H
/-- If a continuous alternating map is constructed from a alternating map via the constructor
`mk_continuous`, then its norm is bounded by the bound given to the constructor if it is
nonnegative. -/
theorem AlternatingMap.mkContinuous_norm_le' (f : E [โ^ฮน]โโ[๐] F) {C : โ}
(H : โ m, โf mโ โค C * โ i, โm iโ) : โf.mkContinuous C Hโ โค max C 0 :=
ContinuousMultilinearMap.opNorm_le_bound (le_max_right _ _) fun m โฆ (H m).trans <| by
gcongr
apply le_max_left
namespace ContinuousLinearMap
theorem norm_compContinuousAlternatingMap_le (g : F โL[๐] G) (f : E [โ^ฮน]โL[๐] F) :
โg.compContinuousAlternatingMap fโ โค โgโ * โfโ :=
g.norm_compContinuousMultilinearMap_le f.1
variable (๐ E F G) in
/-- `ContinuousLinearMap.compContinuousAlternatingMap` as a bundled continuous bilinear map. -/
@[simps! apply_apply]
def compContinuousAlternatingMapCLM : (F โL[๐] G) โL[๐] (E [โ^ฮน]โL[๐] F) โL[๐] (E [โ^ฮน]โL[๐] G) :=
LinearMap.mkContinuousโ (compContinuousAlternatingMapโ ๐ E F G) 1 fun f g โฆ by
simpa using f.norm_compContinuousAlternatingMap_le g
/-- `ContinuousLinearMap.compContinuousAlternatingMap` as a bundled continuous linear equiv. -/
@[simps (config := { simpRhs := true }) apply]
def _root_.ContinuousLinearEquiv.continuousAlternatingMapCongrRight (g : F โL[๐] G) :
(E [โ^ฮน]โL[๐] F) โL[๐] (E [โ^ฮน]โL[๐] G) where
__ := g.continuousAlternatingMapCongrRightEquiv
__ := compContinuousAlternatingMapCLM ๐ E F G g.toContinuousLinearMap
continuous_toFun :=
(compContinuousAlternatingMapCLM ๐ E F G g.toContinuousLinearMap).continuous
continuous_invFun :=
(compContinuousAlternatingMapCLM ๐ E G F g.symm.toContinuousLinearMap).continuous
@[simp]
theorem _root_.ContinuousLinearEquiv.continuousAlternatingMapCongrRight_symm (g : F โL[๐] G) :
(g.continuousAlternatingMapCongrRight (ฮน := ฮน) (E := E)).symm =
g.symm.continuousAlternatingMapCongrRight :=
rfl
/-- Flip arguments in `f : F โL[๐] E [โ^ฮน]โL[๐] G` to get `โ^ฮนโฎ๐; E; F โL[๐] Gโฏ` -/
@[simps! apply_apply]
def flipAlternating (f : F โL[๐] (E [โ^ฮน]โL[๐] G)) : E [โ^ฮน]โL[๐] (F โL[๐] G) where
toContinuousMultilinearMap :=
((ContinuousAlternatingMap.toContinuousMultilinearMapCLM ๐).comp f).flipMultilinear
map_eq_zero_of_eq' v i j hv hne := by ext x; simp [(f x).map_eq_zero_of_eq v hv hne]
end ContinuousLinearMap
theorem LinearIsometry.norm_compContinuousAlternatingMap (g : F โโแตข[๐] G) (f : E [โ^ฮน]โL[๐] F) :
โg.toContinuousLinearMap.compContinuousAlternatingMap fโ = โfโ :=
g.norm_compContinuousMultilinearMap f.1
open ContinuousAlternatingMap
section
theorem ContinuousAlternatingMap.norm_compContinuousLinearMap_le (f : F [โ^ฮน]โL[๐] G)
(g : E โL[๐] F) : โf.compContinuousLinearMap gโ โค โfโ * (โgโ ^ Fintype.card ฮน) :=
(f.1.norm_compContinuousLinearMap_le _).trans_eq <| by simp
/-- Composition of a continuous alternating map and a continuous linear map
as a bundled continuous linear map. -/
def ContinuousAlternatingMap.compContinuousLinearMapCLM (f : E โL[๐] F) :
(F [โ^ฮน]โL[๐] G) โL[๐] (E [โ^ฮน]โL[๐] G) :=
LinearMap.mkContinuous
(ContinuousAlternatingMap.compContinuousLinearMapโ f) (โfโ ^ Fintype.card ฮน) fun g โฆ
(g.norm_compContinuousLinearMap_le f).trans_eq (mul_comm _ _)
/-- Given a continuous linear isomorphism between the domains,
generate a continuous linear isomorphism between the spaces of continuous alternating maps. -/
@[simps apply]
def ContinuousLinearEquiv.continuousAlternatingMapCongrLeft (f : E โL[๐] F) :
E [โ^ฮน]โL[๐] G โL[๐] (F [โ^ฮน]โL[๐] G) where
__ := f.continuousAlternatingMapCongrLeftEquiv
__ := ContinuousAlternatingMap.compContinuousLinearMapCLM (f.symm : F โL[๐] E)
toFun g := g.compContinuousLinearMap (f.symm : F โL[๐] E)
continuous_invFun :=
(ContinuousAlternatingMap.compContinuousLinearMapCLM (f : E โL[๐] F)).cont
continuous_toFun :=
(ContinuousAlternatingMap.compContinuousLinearMapCLM (f.symm : F โL[๐] E)).cont
variable
{E' : Type*} [NormedAddCommGroup E'] [NormedSpace ๐ E']
{F' : Type*} [NormedAddCommGroup F'] [NormedSpace ๐ F']
/-- Continuous linear equivalences between the domains and the codomains
generate a continuous linear equivalence between the spaces of continuous alternating maps. -/
@[simps! apply]
def ContinuousLinearEquiv.continuousAlternatingMapCongr (e : E โL[๐] E') (e' : F โL[๐] F') :
(E [โ^ฮน]โL[๐] F) โL[๐] (E' [โ^ฮน]โL[๐] F') :=
e.continuousAlternatingMapCongrLeft.trans <| e'.continuousAlternatingMapCongrRight
end
open ContinuousAlternatingMap
namespace AlternatingMap
/-- Given a map `f : F โโ[๐] E [โ^ฮน]โโ[๐] G` and an estimate
`H : โ x m, โf x mโ โค C * โxโ * โ i, โm iโ`, construct a continuous linear
map from `F` to `E [โ^ฮน]โL[๐] G`.
In order to lift, e.g., a map `f : (E [โ^ฮน]โโ[๐] F) โโ[๐] E' [โ^ฮน]โโ[๐] G`
to a map `(E [โ^ฮน]โL[๐] F) โL[๐] E' [โ^ฮน]โL[๐] G`,
one can apply this construction to `f.comp ContinuousAlternatingMap.toAlternatingMapLinear`
which is a linear map from `E [โ^ฮน]โL[๐] F` to `E' [โ^ฮน]โโ[๐] G`. -/
def mkContinuousLinear (f : F โโ[๐] E [โ^ฮน]โโ[๐] G) (C : โ)
(H : โ x m, โf x mโ โค C * โxโ * โ i, โm iโ) : F โL[๐] E [โ^ฮน]โL[๐] G :=
LinearMap.mkContinuous
{ toFun x := (f x).mkContinuous (C * โxโ) <| H x
map_add' x y := by ext1; simp
map_smul' c x := by ext1; simp }
(max C 0) fun x โฆ by
rw [LinearMap.coe_mk, AddHom.coe_mk]
exact (mkContinuous_norm_le' _ _).trans_eq <| by
rw [max_mul_of_nonneg _ _ (norm_nonneg x), zero_mul]
theorem mkContinuousLinear_norm_le_max (f : F โโ[๐] E [โ^ฮน]โโ[๐] G) (C : โ)
(H : โ x m, โf x mโ โค C * โxโ * โ i, โm iโ) : โmkContinuousLinear f C Hโ โค max C 0 :=
LinearMap.mkContinuous_norm_le _ (le_max_right _ _) _
theorem mkContinuousLinear_norm_le (f : F โโ[๐] E [โ^ฮน]โโ[๐] G) {C : โ} (hC : 0 โค C)
(H : โ x m, โf x mโ โค C * โxโ * โ i, โm iโ) : โmkContinuousLinear f C Hโ โค C :=
(mkContinuousLinear_norm_le_max f C H).trans_eq (max_eq_left hC)
variable {ฮน' : Type*} [Fintype ฮน']
/-- Given a map `f : E [โ^ฮน]โโ[๐] (F [โ^ฮน']โโ[๐] G)` and an estimate
`H : โ m m', โf m m'โ โค C * โ i, โm iโ * โ i, โm' iโ`, upgrade all `AlternatingMap`s in the type
to `ContinuousAlternatingMap`s. -/
def mkContinuousAlternating (f : E [โ^ฮน]โโ[๐] (F [โ^ฮน']โโ[๐] G))
(C : โ) (H : โ mโ mโ, โf mโ mโโ โค (C * โ i, โmโ iโ) * โ i, โmโ iโ) :
E [โ^ฮน]โL[๐] (F [โ^ฮน']โL[๐] G) :=
mkContinuous
{ toFun m := mkContinuous (f m) (C * โ i, โm iโ) <| H m
map_update_add' m i x y := by ext1; simp
map_update_smul' m i c x := by ext1; simp
map_eq_zero_of_eq' v i j hv hij := by
ext v'
have : f v = 0 := by simpa using f.map_eq_zero_of_eq' v i j hv hij
simp [this] }
(max C 0) fun m => by
simp only [coe_mk, MultilinearMap.coe_mk]
refine ((f m).mkContinuous_norm_le' _).trans_eq ?_
rw [max_mul_of_nonneg, zero_mul]
positivity
@[simp]
theorem mkContinuousAlternating_apply (f : E [โ^ฮน]โโ[๐] (F [โ^ฮน']โโ[๐] G)) {C : โ}
(H : โ mโ mโ, โf mโ mโโ โค (C * โ i, โmโ iโ) * โ i, โmโ iโ) (m : ฮน โ E) :
โ(mkContinuousAlternating f C H m) = f m :=
rfl
theorem mkContinuousAlternating_norm_le_max (f : E [โ^ฮน]โโ[๐] (F [โ^ฮน']โโ[๐] G)) {C : โ}
(H : โ mโ mโ, โf mโ mโโ โค (C * โ i, โmโ iโ) * โ i, โmโ iโ) :
โmkContinuousAlternating f C Hโ โค max C 0 := by
dsimp only [mkContinuousAlternating]
exact mkContinuous_norm_le _ (le_max_right _ _) _
theorem mkContinuousAlternating_norm_le (f : E [โ^ฮน]โโ[๐] (F [โ^ฮน']โโ[๐] G)) {C : โ}
(hC : 0 โค C) (H : โ mโ mโ, โf mโ mโโ โค (C * โ i, โmโ iโ) * โ i, โmโ iโ) :
โmkContinuousAlternating f C Hโ โค C :=
(mkContinuousAlternating_norm_le_max f H).trans_eq (max_eq_left hC)
end AlternatingMap
end Seminorm
section Norm
/-! Results that are only true if the target space is a `NormedAddCommGroup`
(and not just a `SeminormedAddCommGroup`). -/
universe u wE wF v
variable {๐ : Type u} {n : โ} {E : Type wE} {F : Type wF} {ฮน : Type v}
[Fintype ฮน]
[NontriviallyNormedField ๐]
[SeminormedAddCommGroup E] [NormedSpace ๐ E]
[NormedAddCommGroup F] [NormedSpace ๐ F]
namespace ContinuousAlternatingMap
/-- Continuous alternating maps themselves form a normed group with respect to
the operator norm. -/
instance instNormedAddCommGroup : NormedAddCommGroup (E [โ^ฮน]โL[๐] F) :=
NormedAddCommGroup.ofSeparation fun _f hf โฆ
toContinuousMultilinearMap_injective <| norm_eq_zero.mp hf
variable (๐ F) in
theorem norm_ofSubsingleton_id [Subsingleton ฮน] [Nontrivial F] (i : ฮน) :
โofSubsingleton ๐ F F i (.id _ _)โ = 1 :=
ContinuousMultilinearMap.norm_ofSubsingleton_id ๐ F i
variable (๐ F) in
theorem nnnorm_ofSubsingleton_id [Subsingleton ฮน] [Nontrivial F] (i : ฮน) :
โofSubsingleton ๐ F F i (.id _ _)โโ = 1 :=
NNReal.eq <| norm_ofSubsingleton_id ..
end ContinuousAlternatingMap
namespace AlternatingMap
/-- If an alternating map in finitely many variables on a normed space satisfies the inequality
`โf mโ โค C * โ i, โm iโ` on a shell `ฮต i / โc iโ < โm iโ < ฮต i` for some positive numbers `ฮต i`
and elements `c i : ๐`, `1 < โc iโ`, then it satisfies this inequality for all `m`. -/
theorem bound_of_shell (f : F [โ^ฮน]โโ[๐] E) {ฮต : ฮน โ โ} {C : โ} {c : ฮน โ ๐}
(hฮต : โ i, 0 < ฮต i) (hc : โ i, 1 < โc iโ)
(hf : โ m : ฮน โ F, (โ i, ฮต i / โc iโ โค โm iโ) โ (โ i, โm iโ < ฮต i) โ โf mโ โค C * โ i, โm iโ)
(m : ฮน โ F) : โf mโ โค C * โ i, โm iโ :=
f.1.bound_of_shell hฮต hc hf m
end AlternatingMap
end Norm