Skip to content

Commit 6be90c1

Browse files
committed
wip linear continuous
1 parent 542a778 commit 6be90c1

File tree

2 files changed

+98
-17
lines changed

2 files changed

+98
-17
lines changed

theories/hahn_banach_theorem.v

Lines changed: 83 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -340,16 +340,14 @@ Import Lingraph.
340340
(* We consider R a real (=ordered) field with supremum, and V a (left) module
341341
on R. We do not make use of the 'vector' interface as the latter enforces
342342
finite dimension. *)
343-
344-
Variables (R : realType) (V : lmodType R) (F : pred V).
345343

346-
Variables (F' : subLmodType F) (f : {linear F -> R}) (p : V -> R).
344+
(* DO NOT USE subLmodtype but the following *)
345+
346+
Variables (R : realType) (V : lmodType R) (F : pred V).
347347

348+
Variables (F' : subLmodType F) (f : {linear F' -> R}) (p : V -> R).
348349

349-
(* MathComp seems to lack of an interface for submodules of V, so for now
350-
we state "by hand" that F is closed under linear combinations. *)
351-
352-
Hypothesis p_cvx : (@convex_function R V [set: V] p).
350+
Hypothesis p_cvx : (@convex_function R V [set: V] p).
353351

354352
Hypothesis f_bounded_by_p : forall (z : F'), (f z <= p (\val z)).
355353

@@ -376,31 +374,100 @@ Qed.
376374

377375
End HahnBanach.
378376

379-
380-
(* To add once this is rebased over linear_continuous *)
381377
Section Substructures.
382378
Context (R: numFieldType) (V : normedModType R).
383-
Variable (A : pred V).
379+
Variable (A : pred V) (A': subLmodType A).
384380

385381
HB.instance Definition _ := NormedModule.on (subspace A).
386382

387383
Check {linear_continuous (subspace A) -> R^o}.
384+
(* NB : I'm afraid this describes a function continuous on A but linear on the whole V *)
385+
386+
Check ((subspace A : normedModType R)).
388387

389388
End Substructures.
390389

390+
(*
391391
Section HBGeom.
392392
393+
Variable (R : realType) (V : normedModType R) (F : pred V)
394+
(F' : subLmodType F) (f : {linear F' -> R}).
395+
396+
(* once this is rebased over linear_continuous
397+
Variable (R : realType) (V : normedModType R) (F : pred V)
398+
(f : {linear_continuous (subspace F) -> R}).
399+
*)
400+
401+
402+
Let setF := [set x : V | exists (z : F'), val z = x].
403+
404+
Theorem HB_geom_normed :
405+
(exists r , (r > 0 ) /\ (forall (z : F'), (`|f z| ) <= `|(val z)| * r)) ->
406+
(* hypothesis to delete once this is rebased over linear_continuous
407+
and obtain through continuous_linear_bounded *)
408+
exists g: {linear_continuous V -> R}, (forall x, (g (val x) = f x)).
409+
Proof.
410+
move=> [r [ltr0 fxrx]].
411+
pose p:= fun x : V => `|x|*r.
412+
have convp: (@convex_function _ _ [set: V] p).
413+
rewrite /convex_function /conv => l v1 v2 _ _ /=.
414+
rewrite [X in (_ <= X)]/conv /= /p.
415+
apply: le_trans.
416+
have H : `|l%:num *: v1 + (l%:num).~ *: v2| <= `|l%:num *: v1| + `|(l%:num).~ *: v2|.
417+
by apply: ler_normD.
418+
by apply: (@ler_pM _ _ _ r r _ _ H) => //; apply: ltW.
419+
rewrite mulrDl !normrZ -![_ *: _]/(_ * _).
420+
have -> : `|l%:num| = l%:num by apply/normr_idP.
421+
have -> : `|(l%:num).~| = (l%:num).~ by apply/normr_idP; apply: onem_ge0.
422+
by rewrite !mulrA.
423+
have majfp : forall z : F', f z <= p (\val z).
424+
move => z; rewrite /(p _) ; apply : le_trans; last by [].
425+
by apply : ler_norm.
426+
move: (HahnBanach convp majfp) => [ g [majgp F_eqgf] ] {majfp}.
427+
have cg: continuous g. admit.
428+
have lg: linear g by move => *; apply: linearP.
429+
pose glin := GRing.isLinear.Build _ _ _ _ g lg.
430+
Search "Continuous" "Build".
431+
pose (g' : {linear_continuous V -> R}) := HB.pack g glin
432+
exists g ; split; last by [].
433+
move=> x; rewrite /cvgP; apply: (continuousfor0_continuous).
434+
apply: bounded_linear_continuous.
435+
exists r.
436+
split; first by rewrite realE; apply/orP; left; apply: ltW. (* r is Numreal ... *)
437+
move => M m1; rewrite nbhs_ballP; exists 1 => /=; first by [].
438+
move => y; rewrite -ball_normE //= sub0r => y1.
439+
rewrite ler_norml; apply/andP. split.
440+
- rewrite lerNl -linearN; apply: (le_trans (majgp (-y))).
441+
by rewrite /p -[X in _ <= X]mul1r; apply: ler_pM; rewrite ?normr_ge0 ?ltW //=.
442+
- apply: (le_trans (majgp (y))); rewrite /p -[X in _ <= X]mul1r -normrN.
443+
apply: ler_pM; rewrite ?normr_ge0 ?ltW //=.
444+
Qed.
445+
446+
End HBGeom.
447+
448+
449+
Section newHBGeom.
450+
393451
Variable (R : realType) (V : normedModType R) (F : pred V)
394452
(f : {linear_continuous (subspace F) -> R}).
395453
396-
(* Let setF := [set x : V | exists (z : F'), val z = x]. *)
454+
(*Let setF := [set x : V | exists (z : F'), val z = x].*)
397455
398456
Theorem HB_geom_normed :
399457
(* exists r , (r > 0 ) /\ (forall (z : F'), (`|f z| ) <= `|(val z)| * r)) -> *)
400458
exists g: {linear_continuous V -> R}, (forall x : V, F x -> (g x = f x)).
401459
Proof.
402-
have [r [ltr0 fxrx]] : exists2 r , (r > 0 ) & (forall z, `|f z| <= `| z| * r). admit.
403-
pose p:= fun x : V => `|x|*r.
460+
have [r [ltr0 fxrx]] : exists2 r , (r > 0 ) & (forall z, `|f z| <= `| z| * r).
461+
have : bounded_near f (nbhs 0).
462+
Check (@continuous_linear_bounded _ _ _ 0 f).
463+
have H: { for 0, continuous f} by apply: cts_fun.
464+
Fail Check (@continuous_linear_bounded _ _ _ 0 f H).
465+
have H': { for (0 : subspace F), continuous f} by apply: cts_fun.
466+
Fail Check (@continuous_linear_bounded _ _ _ 0 f H').
467+
admit.
468+
Fail apply/linear_boundedP.
469+
(* Lemmas for normedspaces do not seem to work on subspace F *)
470+
pose p:= fun x : V => `|x|*r.
404471
have convp: (@convex_function _ _ [set: V] p).
405472
rewrite /convex_function /conv => l v1 v2 _ _ /=.
406473
rewrite [X in (_ <= X)]/conv /= /p.
@@ -412,7 +479,7 @@ Proof.
412479
have -> : `|l%:num| = l%:num by apply/normr_idP.
413480
have -> : `|(l%:num).~| = (l%:num).~ by apply/normr_idP; apply: onem_ge0.
414481
by rewrite !mulrA.
415-
have majfp : forall z, f z <= p ( z).
482+
have majfp : forall z, f z <= p ( z).
416483
move => z; rewrite /(p _) ; apply : le_trans; last by [].
417484
by apply : ler_norm.
418485
move: (HahnBanach convp majfp) => [ g [majgp F_eqgf] ] {majfp}.
@@ -430,4 +497,5 @@ Proof.
430497
apply: ler_pM; rewrite ?normr_ge0 ?ltW //=.
431498
Qed.
432499
433-
End HBGeom.
500+
End newHBGeom.
501+
*)

theories/normedtype_theory/tvs.v

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,7 @@ Context {R : numDomainType} {E F : NbhsLmodule.type R}
703703
Let lcfun_comp_subproof1 : linear_for s (g \o f).
704704
Proof. by move=> *; move=> *; rewrite !linearP. Qed.
705705

706-
Let lcfun_comp_subproof2 : continuous (g \o f).
706+
Let lcfun_comp_subproof2 : continuous (g \o f).
707707
Proof. by move=> x; apply: continuous_comp; exact/cts_fun. Qed.
708708

709709
HB.instance Definition _ := @isLinearContinuous.Build R E S s (g \o f)
@@ -731,7 +731,7 @@ HB.instance Definition _ := isContinuous.Build E F \0 null_fun_continuous.
731731
Lemma lcfun_cvgD (U : set_system E) {FF : Filter U} f g a b :
732732
f @ U --> a -> g @ U --> b -> (f \+ g) @ U --> a + b.
733733
Proof.
734-
move=> fa ga.
734+
move=> fa ga.
735735
by apply: continuous2_cvg; [exact: (add_continuous (a, b))|by []..].
736736
Qed.
737737

@@ -782,3 +782,16 @@ HB.instance Definition _ :=
782782
[SubChoice_isSubLmodule of {linear_continuous E -> F } by <:].
783783

784784
End lcfun_lmodtype.
785+
786+
787+
Section lcfunproperties.
788+
Context {R : numDomainType} {E F : NbhsLmodule.type R}
789+
(f : {linear_continuous E -> F}).
790+
791+
Lemma lcfun_continuous : continuous f.
792+
Proof. exact: cts_fun. Qed.
793+
794+
Lemma lcfun_linear : linear f.
795+
Proof. move => *; exact: linearP. Qed.
796+
797+
End lcfunproperties.

0 commit comments

Comments
 (0)