@@ -8,6 +8,9 @@ import analysis.convex.star
8
8
import analysis.normed_space.ordered
9
9
import analysis.normed_space.pointwise
10
10
import data.real.pointwise
11
+ import topology.algebra.filter_basis
12
+ import topology.algebra.uniform_filter_basis
13
+ import data.real.sqrt
11
14
12
15
/-!
13
16
# Seminorms and Local Convexity
@@ -69,9 +72,9 @@ Absorbent and balanced sets in a vector space over a normed field.
69
72
-/
70
73
71
74
open normed_field set
72
- open_locale pointwise topological_space nnreal
75
+ open_locale pointwise topological_space nnreal big_operators
73
76
74
- variables {R 𝕜 𝕝 E F G ι : Type *}
77
+ variables {R 𝕜 𝕝 E F G ι ι' : Type *}
75
78
76
79
section semi_normed_ring
77
80
variables [semi_normed_ring 𝕜]
@@ -502,6 +505,10 @@ ext $ λ _, rfl
502
505
lemma comp_mono {p : seminorm 𝕜 F} {q : seminorm 𝕜 F} (f : E →ₗ[𝕜] F) (hp : p ≤ q) :
503
506
p.comp f ≤ q.comp f := λ _, hp _
504
507
508
+ /-- The composition as an `add_monoid_hom`. -/
509
+ @[simps] def pullback (f : E →ₗ[𝕜] F) : add_monoid_hom (seminorm 𝕜 F) (seminorm 𝕜 E) :=
510
+ ⟨λ p, p.comp f, zero_comp f, λ p q, add_comp p q f⟩
511
+
505
512
section norm_one_class
506
513
variables [norm_one_class 𝕜] (p : seminorm 𝕜 E) (x y : E) (r : ℝ)
507
514
@@ -532,8 +539,17 @@ instance : order_bot (seminorm 𝕜 E) := ⟨0, nonneg⟩
532
539
533
540
lemma bot_eq_zero : (⊥ : seminorm 𝕜 E) = 0 := rfl
534
541
542
+ lemma smul_le_smul {p q : seminorm 𝕜 E} {a b : ℝ≥0 } (hpq : p ≤ q) (hab : a ≤ b) :
543
+ a • p ≤ b • q :=
544
+ begin
545
+ simp_rw [le_def, pi.le_def, coe_smul],
546
+ intros x,
547
+ simp_rw [pi.smul_apply, nnreal.smul_def, smul_eq_mul],
548
+ exact mul_le_mul hab (hpq x) (nonneg p x) (nnreal.coe_nonneg b),
549
+ end
550
+
535
551
lemma finset_sup_apply (p : ι → seminorm 𝕜 E) (s : finset ι) (x : E) :
536
- s.sup p x = ↑(s.sup (λ i, ⟨p i x, nonneg (p i) x⟩) : nnreal ) :=
552
+ s.sup p x = ↑(s.sup (λ i, ⟨p i x, nonneg (p i) x⟩) : ℝ≥ 0 ) :=
537
553
begin
538
554
induction s using finset.cons_induction_on with a s ha ih,
539
555
{ rw [finset.sup_empty, finset.sup_empty, coe_bot, _root_.bot_eq_zero, pi.zero_apply,
@@ -542,6 +558,15 @@ begin
542
558
nnreal.coe_max, subtype.coe_mk, ih] }
543
559
end
544
560
561
+ lemma finset_sup_le_sum (p : ι → seminorm 𝕜 E) (s : finset ι) : s.sup p ≤ ∑ i in s, p i :=
562
+ begin
563
+ classical,
564
+ refine finset.sup_le_iff.mpr _,
565
+ intros i hi,
566
+ rw [finset.sum_eq_sum_diff_singleton_add hi, le_add_iff_nonneg_left],
567
+ exact bot_le,
568
+ end
569
+
545
570
end norm_one_class
546
571
end module
547
572
end semi_normed_ring
@@ -587,6 +612,12 @@ begin
587
612
rw [set.eq_univ_iff_forall, ball],
588
613
simp [hr],
589
614
end
615
+
616
+ lemma ball_smul (p : seminorm 𝕜 E) {c : nnreal} (hc : 0 < c) (r : ℝ) (x : E) :
617
+ (c • p).ball x r = p.ball x (r / c) :=
618
+ by { ext, rw [mem_ball, mem_ball, smul_apply, nnreal.smul_def, smul_eq_mul, mul_comm,
619
+ lt_div_iff (nnreal.coe_pos.mpr hc)] }
620
+
590
621
lemma ball_sup (p : seminorm 𝕜 E) (q : seminorm 𝕜 E) (e : E) (r : ℝ) :
591
622
ball (p ⊔ q) e r = ball p e r ∩ ball q e r :=
592
623
by simp_rw [ball, ←set.set_of_and, coe_sup, pi.sup_apply, sup_lt_iff]
@@ -642,16 +673,16 @@ begin
642
673
... < r : by rwa mem_ball_zero at hy,
643
674
end
644
675
645
- lemma ball_finset_sup_eq_Inter (p : ι → seminorm 𝕜 E) (s : finset ι) (e : E) {r : ℝ} (hr : 0 < r) :
646
- ball (s.sup p) e r = ⋂ (i ∈ s), ball (p i) e r :=
676
+ lemma ball_finset_sup_eq_Inter (p : ι → seminorm 𝕜 E) (s : finset ι) (x : E) {r : ℝ} (hr : 0 < r) :
677
+ ball (s.sup p) x r = ⋂ (i ∈ s), ball (p i) x r :=
647
678
begin
648
679
lift r to nnreal using hr.le,
649
680
simp_rw [ball, Inter_set_of, finset_sup_apply, nnreal.coe_lt_coe,
650
681
finset.sup_lt_iff (show ⊥ < r, from hr), ←nnreal.coe_lt_coe, subtype.coe_mk],
651
682
end
652
683
653
- lemma ball_finset_sup (p : ι → seminorm 𝕜 E) (s : finset ι) (e : E) {r : ℝ}
654
- (hr : 0 < r) : ball (s.sup p) e r = s.inf (λ i, ball (p i) e r) :=
684
+ lemma ball_finset_sup (p : ι → seminorm 𝕜 E) (s : finset ι) (x : E) {r : ℝ}
685
+ (hr : 0 < r) : ball (s.sup p) x r = s.inf (λ i, ball (p i) x r) :=
655
686
begin
656
687
rw finset.inf_eq_infi,
657
688
exact ball_finset_sup_eq_Inter _ _ _ hr,
@@ -1212,4 +1243,279 @@ end
1212
1243
end norm
1213
1244
end gauge
1214
1245
1215
- -- TODO: topology induced by family of seminorms, local convexity.
1246
+ /-! ### Topology induced by a family of seminorms -/
1247
+
1248
+ namespace seminorm
1249
+
1250
+ section filter_basis
1251
+
1252
+ variables [normed_field 𝕜] [add_comm_group E] [module 𝕜 E]
1253
+
1254
+ /-- A filter basis for the neighborhood filter of 0. -/
1255
+ def seminorm_basis_zero (p : ι → seminorm 𝕜 E) : set (set E) :=
1256
+ ⋃ (s : finset ι) r (hr : 0 < r), singleton $ ball (s.sup p) (0 : E) r
1257
+
1258
+ lemma seminorm_basis_zero_iff (p : ι → seminorm 𝕜 E) (U : set E) :
1259
+ U ∈ seminorm_basis_zero p ↔ ∃ (i : finset ι) r (hr : 0 < r), U = ball (i.sup p) 0 r :=
1260
+ by simp only [seminorm_basis_zero, mem_Union, mem_singleton_iff]
1261
+
1262
+ lemma seminorm_basis_zero_mem (p : ι → seminorm 𝕜 E) (i : finset ι) {r : ℝ} (hr : 0 < r) :
1263
+ (i.sup p).ball 0 r ∈ seminorm_basis_zero p :=
1264
+ (seminorm_basis_zero_iff _ _).mpr ⟨i,_,hr,rfl⟩
1265
+
1266
+ lemma seminorm_basis_zero_singleton_mem (p : ι → seminorm 𝕜 E) (i : ι) {r : ℝ} (hr : 0 < r) :
1267
+ (p i).ball 0 r ∈ seminorm_basis_zero p :=
1268
+ (seminorm_basis_zero_iff _ _).mpr ⟨{i},_,hr, by rw finset.sup_singleton⟩
1269
+
1270
+ lemma seminorm_basis_zero_nonempty (p : ι → seminorm 𝕜 E) [nonempty ι] :
1271
+ (seminorm_basis_zero p).nonempty :=
1272
+ begin
1273
+ let i := classical.arbitrary ι,
1274
+ refine set.nonempty_def.mpr ⟨ball (p i) 0 1 , _⟩,
1275
+ exact seminorm_basis_zero_singleton_mem _ i zero_lt_one,
1276
+ end
1277
+
1278
+ lemma seminorm_basis_zero_intersect (p : ι → seminorm 𝕜 E)
1279
+ (U V : set E) (hU : U ∈ seminorm_basis_zero p) (hV : V ∈ seminorm_basis_zero p) :
1280
+ ∃ (z : set E) (H : z ∈ (seminorm_basis_zero p)), z ⊆ U ∩ V :=
1281
+ begin
1282
+ classical,
1283
+ rcases (seminorm_basis_zero_iff p U).mp hU with ⟨s, r₁, hr₁, hU⟩,
1284
+ rcases (seminorm_basis_zero_iff p V).mp hV with ⟨t, r₂, hr₂, hV⟩,
1285
+ use ((s ∪ t).sup p).ball 0 (min r₁ r₂),
1286
+ refine ⟨seminorm_basis_zero_mem p (s ∪ t) (lt_min_iff.mpr ⟨hr₁, hr₂⟩), _⟩,
1287
+ rw [hU, hV, ball_finset_sup_eq_Inter _ _ _ (lt_min_iff.mpr ⟨hr₁, hr₂⟩),
1288
+ ball_finset_sup_eq_Inter _ _ _ hr₁, ball_finset_sup_eq_Inter _ _ _ hr₂],
1289
+ exact set.subset_inter
1290
+ (set.Inter₂_mono' $ λ i hi, ⟨i, finset.subset_union_left _ _ hi, ball_mono $ min_le_left _ _⟩)
1291
+ (set.Inter₂_mono' $ λ i hi, ⟨i, finset.subset_union_right _ _ hi, ball_mono $
1292
+ min_le_right _ _⟩),
1293
+ end
1294
+
1295
+ lemma seminorm_basis_zero_zero (p : ι → seminorm 𝕜 E) (U) (hU : U ∈ seminorm_basis_zero p) :
1296
+ (0 : E) ∈ U :=
1297
+ begin
1298
+ rcases (seminorm_basis_zero_iff p U).mp hU with ⟨ι', r, hr, hU⟩,
1299
+ rw [hU, mem_ball_zero, (ι'.sup p).zero],
1300
+ exact hr,
1301
+ end
1302
+
1303
+ lemma seminorm_basis_zero_add (p : ι → seminorm 𝕜 E) (U) (hU : U ∈ seminorm_basis_zero p) :
1304
+ ∃ (V : set E) (H : V ∈ (seminorm_basis_zero p)), V + V ⊆ U :=
1305
+ begin
1306
+ rcases (seminorm_basis_zero_iff p U).mp hU with ⟨s, r, hr, hU⟩,
1307
+ use (s.sup p).ball 0 (r/2 ),
1308
+ refine ⟨seminorm_basis_zero_mem p s (div_pos hr zero_lt_two), _⟩,
1309
+ refine set.subset.trans (ball_add_ball_subset (s.sup p) (r/2 ) (r/2 ) 0 0 ) _,
1310
+ rw [hU, add_zero, add_halves'],
1311
+ end
1312
+
1313
+ lemma seminorm_basis_zero_neg (p : ι → seminorm 𝕜 E) (U) (hU' : U ∈ seminorm_basis_zero p) :
1314
+ ∃ (V : set E) (H : V ∈ (seminorm_basis_zero p)), V ⊆ (λ (x : E), -x) ⁻¹' U :=
1315
+ begin
1316
+ rcases (seminorm_basis_zero_iff p U).mp hU' with ⟨s, r, hr, hU⟩,
1317
+ rw [hU, neg_preimage, neg_ball (s.sup p), neg_zero],
1318
+ exact ⟨U, hU', eq.subset hU⟩,
1319
+ end
1320
+
1321
+ /-- The `add_group_filter_basis` induced by the filter basis `seminorm_basis_zero`. -/
1322
+ def seminorm_add_group_filter_basis [nonempty ι]
1323
+ (p : ι → seminorm 𝕜 E) : add_group_filter_basis E :=
1324
+ add_group_filter_basis_of_comm (seminorm_basis_zero p)
1325
+ (seminorm_basis_zero_nonempty p)
1326
+ (seminorm_basis_zero_intersect p)
1327
+ (seminorm_basis_zero_zero p)
1328
+ (seminorm_basis_zero_add p)
1329
+ (seminorm_basis_zero_neg p)
1330
+
1331
+ lemma seminorm_basis_zero_smul_right (p : ι → seminorm 𝕜 E) (v : E) (U : set E)
1332
+ (hU : U ∈ seminorm_basis_zero p) : ∀ᶠ (x : 𝕜) in 𝓝 0 , x • v ∈ U :=
1333
+ begin
1334
+ rcases (seminorm_basis_zero_iff p U).mp hU with ⟨s, r, hr, hU⟩,
1335
+ rw [hU, filter.eventually_iff],
1336
+ simp_rw [(s.sup p).mem_ball_zero, (s.sup p).smul],
1337
+ by_cases h : 0 < (s.sup p) v,
1338
+ { simp_rw (lt_div_iff h).symm,
1339
+ rw ←_root_.ball_zero_eq,
1340
+ exact metric.ball_mem_nhds 0 (div_pos hr h) },
1341
+ simp_rw [le_antisymm (not_lt.mp h) ((s.sup p).nonneg v), mul_zero, hr],
1342
+ exact is_open.mem_nhds is_open_univ (mem_univ 0 ),
1343
+ end
1344
+
1345
+ variables [nonempty ι]
1346
+
1347
+ lemma seminorm_basis_zero_smul (p : ι → seminorm 𝕜 E) (U) (hU : U ∈ seminorm_basis_zero p) :
1348
+ ∃ (V : set 𝕜) (H : V ∈ 𝓝 (0 : 𝕜)) (W : set E)
1349
+ (H : W ∈ (seminorm_add_group_filter_basis p).sets), V • W ⊆ U :=
1350
+ begin
1351
+ rcases (seminorm_basis_zero_iff p U).mp hU with ⟨s, r, hr, hU⟩,
1352
+ refine ⟨metric.ball 0 r.sqrt, metric.ball_mem_nhds 0 (real.sqrt_pos.mpr hr), _⟩,
1353
+ refine ⟨(s.sup p).ball 0 r.sqrt, seminorm_basis_zero_mem p s (real.sqrt_pos.mpr hr), _⟩,
1354
+ refine set.subset.trans (ball_smul_ball (s.sup p) r.sqrt r.sqrt) _,
1355
+ rw [hU, real.mul_self_sqrt (le_of_lt hr)],
1356
+ end
1357
+
1358
+ lemma seminorm_basis_zero_smul_left (p : ι → seminorm 𝕜 E) (x : 𝕜) (U : set E)
1359
+ (hU : U ∈ seminorm_basis_zero p) : ∃ (V : set E)
1360
+ (H : V ∈ (seminorm_add_group_filter_basis p).sets), V ⊆ (λ (y : E), x • y) ⁻¹' U :=
1361
+ begin
1362
+ rcases (seminorm_basis_zero_iff p U).mp hU with ⟨s, r, hr, hU⟩,
1363
+ rw hU,
1364
+ by_cases h : x ≠ 0 ,
1365
+ { rw [(s.sup p).smul_ball_preimage 0 r x h, smul_zero],
1366
+ use (s.sup p).ball 0 (r / ∥x∥),
1367
+ exact ⟨seminorm_basis_zero_mem p s (div_pos hr (norm_pos_iff.mpr h)), subset.rfl⟩ },
1368
+ refine ⟨(s.sup p).ball 0 r, seminorm_basis_zero_mem p s hr, _⟩,
1369
+ simp only [not_ne_iff.mp h, subset_def, mem_ball_zero, hr, mem_univ, seminorm.zero,
1370
+ implies_true_iff, preimage_const_of_mem, zero_smul],
1371
+ end
1372
+
1373
+ /-- The `module_filter_basis` induced by the filter basis `seminorm_basis_zero`. -/
1374
+ def seminorm_module_filter_basis (p : ι → seminorm 𝕜 E) : module_filter_basis 𝕜 E :=
1375
+ { to_add_group_filter_basis := seminorm_add_group_filter_basis p,
1376
+ smul' := seminorm_basis_zero_smul p,
1377
+ smul_left' := seminorm_basis_zero_smul_left p,
1378
+ smul_right' := seminorm_basis_zero_smul_right p }
1379
+
1380
+ end filter_basis
1381
+
1382
+ section bounded
1383
+
1384
+ variables [normed_field 𝕜] [add_comm_group E] [module 𝕜 E] [add_comm_group F] [module 𝕜 F]
1385
+
1386
+ /-- The proposition that a linear map is bounded between spaces with families of seminorms. -/
1387
+ def is_bounded (p : ι → seminorm 𝕜 E) (q : ι' → seminorm 𝕜 F) (f : E →ₗ[𝕜] F) : Prop :=
1388
+ ∀ i, ∃ s : finset ι, ∃ C : ℝ≥0 , C ≠ 0 ∧ (q i).comp f ≤ C • s.sup p
1389
+
1390
+ lemma is_bounded_const (ι' : Type *) [nonempty ι']
1391
+ {p : ι → seminorm 𝕜 E} {q : seminorm 𝕜 F} (f : E →ₗ[𝕜] F) :
1392
+ is_bounded p (λ _ : ι', q) f ↔ ∃ (s : finset ι) C : ℝ≥0 , C ≠ 0 ∧ q.comp f ≤ C • s.sup p :=
1393
+ by simp only [is_bounded, forall_const]
1394
+
1395
+ lemma const_is_bounded (ι : Type *) [nonempty ι]
1396
+ {p : seminorm 𝕜 E} {q : ι' → seminorm 𝕜 F} (f : E →ₗ[𝕜] F) :
1397
+ is_bounded (λ _ : ι, p) q f ↔ ∀ i, ∃ C : ℝ≥0 , C ≠ 0 ∧ (q i).comp f ≤ C • p :=
1398
+ begin
1399
+ dunfold is_bounded,
1400
+ split,
1401
+ { intros h i,
1402
+ rcases h i with ⟨s, C, hC, h⟩,
1403
+ exact ⟨C, hC, le_trans h (smul_le_smul (finset.sup_le (λ _ _, le_rfl)) le_rfl)⟩ },
1404
+ intros h i,
1405
+ use [{classical.arbitrary ι}],
1406
+ simp only [h, finset.sup_singleton],
1407
+ end
1408
+
1409
+ lemma is_bounded_sup {p : ι → seminorm 𝕜 E} {q : ι' → seminorm 𝕜 F}
1410
+ {f : E →ₗ[𝕜] F} (hf : is_bounded p q f) (s' : finset ι') :
1411
+ ∃ (C : ℝ≥0 ) (s : finset ι), 0 < C ∧ (s'.sup q).comp f ≤ C • (s.sup p) :=
1412
+ begin
1413
+ classical,
1414
+ by_cases hs' : ¬s'.nonempty,
1415
+ { refine ⟨1 , ∅, zero_lt_one, _⟩,
1416
+ rw [finset.not_nonempty_iff_eq_empty.mp hs', finset.sup_empty, bot_eq_zero, zero_comp],
1417
+ exact seminorm.nonneg _ },
1418
+ rw not_not at hs',
1419
+ choose fₛ fC hf using hf,
1420
+ use [s'.card • s'.sup fC, finset.bUnion s' fₛ],
1421
+ split,
1422
+ { refine nsmul_pos _ (ne_of_gt (finset.nonempty.card_pos hs')),
1423
+ cases finset.nonempty.bex hs' with j hj,
1424
+ exact lt_of_lt_of_le (zero_lt_iff.mpr (and.elim_left (hf j))) (finset.le_sup hj) },
1425
+ have hs : ∀ i : ι', i ∈ s' → (q i).comp f ≤ s'.sup fC • ((finset.bUnion s' fₛ).sup p) :=
1426
+ begin
1427
+ intros i hi,
1428
+ refine le_trans (and.elim_right (hf i)) (smul_le_smul _ (finset.le_sup hi)),
1429
+ exact finset.sup_mono (finset.subset_bUnion_of_mem fₛ hi),
1430
+ end ,
1431
+ refine le_trans (comp_mono f (finset_sup_le_sum q s')) _,
1432
+ simp_rw [←pullback_apply, add_monoid_hom.map_sum, pullback_apply], -- improve this
1433
+ refine le_trans (finset.sum_le_sum hs) _,
1434
+ rw [finset.sum_const, smul_assoc],
1435
+ exact le_rfl,
1436
+ end
1437
+
1438
+ end bounded
1439
+
1440
+ section topology
1441
+
1442
+ variables [normed_field 𝕜] [add_comm_group E] [module 𝕜 E] [add_comm_group F] [module 𝕜 F]
1443
+ variables [nonempty ι] [nonempty ι']
1444
+
1445
+ /-- The proposition that the topology of `E` is induced by a family of seminorms `p`. -/
1446
+ class with_seminorms (p : ι → seminorm 𝕜 E) [t : topological_space E] : Prop :=
1447
+ (topology_eq_with_seminorms : t = (seminorm_module_filter_basis p).topology)
1448
+
1449
+ lemma with_seminorms_eq (p : ι → seminorm 𝕜 E) [t : topological_space E] [with_seminorms p] :
1450
+ t = ((seminorm_module_filter_basis p).topology) := with_seminorms.topology_eq_with_seminorms
1451
+
1452
+ /-- The topology of a `normed_space 𝕜 E` is induced by the seminorm `norm_seminorm 𝕜 E`. -/
1453
+ instance norm_with_seminorms (𝕜 E) [normed_field 𝕜] [semi_normed_group E] [normed_space 𝕜 E] :
1454
+ with_seminorms (λ (_ : fin 1 ), norm_seminorm 𝕜 E) :=
1455
+ begin
1456
+ let p := λ _ : fin 1 , norm_seminorm 𝕜 E,
1457
+ refine ⟨topological_add_group.ext normed_top_group
1458
+ ((seminorm_add_group_filter_basis _).is_topological_add_group) _⟩,
1459
+ refine filter.has_basis.eq_of_same_basis metric.nhds_basis_ball _,
1460
+ rw ←ball_norm_seminorm 𝕜 E,
1461
+ refine filter.has_basis.to_has_basis (seminorm_add_group_filter_basis p).nhds_zero_has_basis _
1462
+ (λ r hr, ⟨(norm_seminorm 𝕜 E).ball 0 r, seminorm_basis_zero_singleton_mem p 0 hr, rfl.subset⟩),
1463
+ rintros U (hU : U ∈ seminorm_basis_zero p),
1464
+ rcases (seminorm_basis_zero_iff p U).mp hU with ⟨s, r, hr, hU⟩,
1465
+ use [r, hr],
1466
+ rw [hU, id.def],
1467
+ by_cases h : s.nonempty,
1468
+ { rw finset.sup_const h },
1469
+ rw [finset.not_nonempty_iff_eq_empty.mp h, finset.sup_empty, ball_bot _ hr],
1470
+ exact set.subset_univ _,
1471
+ end
1472
+
1473
+ lemma continuous_from_bounded (p : ι → seminorm 𝕜 E) (q : ι' → seminorm 𝕜 F)
1474
+ [uniform_space E] [uniform_add_group E] [with_seminorms p]
1475
+ [uniform_space F] [uniform_add_group F] [with_seminorms q]
1476
+ (f : E →ₗ[𝕜] F) (hf : is_bounded p q f) : continuous f :=
1477
+ begin
1478
+ refine uniform_continuous.continuous _,
1479
+ refine add_monoid_hom.uniform_continuous_of_continuous_at_zero f.to_add_monoid_hom _,
1480
+ rw [f.to_add_monoid_hom_coe, continuous_at_def, f.map_zero, with_seminorms_eq p],
1481
+ intros U hU,
1482
+ rw [with_seminorms_eq q, add_group_filter_basis.nhds_zero_eq, filter_basis.mem_filter_iff] at hU,
1483
+ rcases hU with ⟨V, hV : V ∈ seminorm_basis_zero q, hU⟩,
1484
+ rcases (seminorm_basis_zero_iff q V).mp hV with ⟨s₂, r, hr, hV⟩,
1485
+ rw hV at hU,
1486
+ rw [(seminorm_add_group_filter_basis p).nhds_zero_eq, filter_basis.mem_filter_iff],
1487
+ rcases (is_bounded_sup hf s₂) with ⟨C, s₁, hC, hf⟩,
1488
+ refine ⟨(s₁.sup p).ball 0 (r/C),
1489
+ seminorm_basis_zero_mem p _ (div_pos hr (nnreal.coe_pos.mpr hC)), _⟩,
1490
+ refine subset.trans _ (preimage_mono hU),
1491
+ simp_rw [←linear_map.map_zero f, ←ball_comp],
1492
+ refine subset.trans _ (ball_antitone hf),
1493
+ rw ball_smul (s₁.sup p) hC,
1494
+ end
1495
+
1496
+ lemma cont_with_seminorms_normed_space (F) [semi_normed_group F] [normed_space 𝕜 F]
1497
+ [uniform_space E] [uniform_add_group E]
1498
+ (p : ι → seminorm 𝕜 E) [with_seminorms p] (f : E →ₗ[𝕜] F)
1499
+ (hf : ∃ (s : finset ι) C : ℝ≥0 , C ≠ 0 ∧ (norm_seminorm 𝕜 F).comp f ≤ C • s.sup p) :
1500
+ continuous f :=
1501
+ begin
1502
+ rw ←is_bounded_const (fin 1 ) at hf,
1503
+ exact continuous_from_bounded p (λ _ : fin 1 , norm_seminorm 𝕜 F) f hf,
1504
+ end
1505
+
1506
+ lemma cont_normed_space_to_with_seminorms (E) [semi_normed_group E] [normed_space 𝕜 E]
1507
+ [uniform_space F] [uniform_add_group F]
1508
+ (q : ι → seminorm 𝕜 F) [with_seminorms q] (f : E →ₗ[𝕜] F)
1509
+ (hf : ∀ i : ι, ∃ C : ℝ≥0 , C ≠ 0 ∧ (q i).comp f ≤ C • (norm_seminorm 𝕜 E)) : continuous f :=
1510
+ begin
1511
+ rw ←const_is_bounded (fin 1 ) at hf,
1512
+ exact continuous_from_bounded (λ _ : fin 1 , norm_seminorm 𝕜 E) q f hf,
1513
+ end
1514
+
1515
+ end topology
1516
+
1517
+ end seminorm
1518
+
1519
+
1520
+
1521
+ -- TODO: local convexity.
0 commit comments