@@ -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
354352Hypothesis f_bounded_by_p : forall (z : F'), (f z <= p (\val z)).
355353
@@ -376,31 +374,100 @@ Qed.
376374
377375End HahnBanach.
378376
379-
380- (* To add once this is rebased over linear_continuous *)
381377Section Substructures.
382378Context (R: numFieldType) (V : normedModType R).
383- Variable (A : pred V).
379+ Variable (A : pred V) (A': subLmodType A) .
384380
385381HB.instance Definition _ := NormedModule.on (subspace A).
386382
387383Check {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
389388End Substructures.
390389
390+ (*
391391Section 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+
393451Variable (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
398456Theorem 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)).
401459Proof.
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 //=.
431498Qed.
432499
433- End HBGeom.
500+ End newHBGeom.
501+ *)
0 commit comments