Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 750f53c

Browse files
committed
feat(analysis/seminorm): define the topology induced by a family of seminorms (#11604)
Define the topology induced by a single seminorm and by a family of seminorms and show that boundedness of linear maps implies continuity.
1 parent ccbb848 commit 750f53c

File tree

1 file changed

+314
-8
lines changed

1 file changed

+314
-8
lines changed

src/analysis/seminorm.lean

Lines changed: 314 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ import analysis.convex.star
88
import analysis.normed_space.ordered
99
import analysis.normed_space.pointwise
1010
import data.real.pointwise
11+
import topology.algebra.filter_basis
12+
import topology.algebra.uniform_filter_basis
13+
import data.real.sqrt
1114

1215
/-!
1316
# Seminorms and Local Convexity
@@ -69,9 +72,9 @@ Absorbent and balanced sets in a vector space over a normed field.
6972
-/
7073

7174
open normed_field set
72-
open_locale pointwise topological_space nnreal
75+
open_locale pointwise topological_space nnreal big_operators
7376

74-
variables {R 𝕜 𝕝 E F G ι : Type*}
77+
variables {R 𝕜 𝕝 E F G ι ι' : Type*}
7578

7679
section semi_normed_ring
7780
variables [semi_normed_ring 𝕜]
@@ -502,6 +505,10 @@ ext $ λ _, rfl
502505
lemma comp_mono {p : seminorm 𝕜 F} {q : seminorm 𝕜 F} (f : E →ₗ[𝕜] F) (hp : p ≤ q) :
503506
p.comp f ≤ q.comp f := λ _, hp _
504507

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+
505512
section norm_one_class
506513
variables [norm_one_class 𝕜] (p : seminorm 𝕜 E) (x y : E) (r : ℝ)
507514

@@ -532,8 +539,17 @@ instance : order_bot (seminorm 𝕜 E) := ⟨0, nonneg⟩
532539

533540
lemma bot_eq_zero : (⊥ : seminorm 𝕜 E) = 0 := rfl
534541

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+
535551
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) :=
537553
begin
538554
induction s using finset.cons_induction_on with a s ha ih,
539555
{ rw [finset.sup_empty, finset.sup_empty, coe_bot, _root_.bot_eq_zero, pi.zero_apply,
@@ -542,6 +558,15 @@ begin
542558
nnreal.coe_max, subtype.coe_mk, ih] }
543559
end
544560

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+
545570
end norm_one_class
546571
end module
547572
end semi_normed_ring
@@ -587,6 +612,12 @@ begin
587612
rw [set.eq_univ_iff_forall, ball],
588613
simp [hr],
589614
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+
590621
lemma ball_sup (p : seminorm 𝕜 E) (q : seminorm 𝕜 E) (e : E) (r : ℝ) :
591622
ball (p ⊔ q) e r = ball p e r ∩ ball q e r :=
592623
by simp_rw [ball, ←set.set_of_and, coe_sup, pi.sup_apply, sup_lt_iff]
@@ -642,16 +673,16 @@ begin
642673
... < r : by rwa mem_ball_zero at hy,
643674
end
644675

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 :=
647678
begin
648679
lift r to nnreal using hr.le,
649680
simp_rw [ball, Inter_set_of, finset_sup_apply, nnreal.coe_lt_coe,
650681
finset.sup_lt_iff (show ⊥ < r, from hr), ←nnreal.coe_lt_coe, subtype.coe_mk],
651682
end
652683

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) :=
655686
begin
656687
rw finset.inf_eq_infi,
657688
exact ball_finset_sup_eq_Inter _ _ _ hr,
@@ -1212,4 +1243,279 @@ end
12121243
end norm
12131244
end gauge
12141245

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

Comments
 (0)