@@ -7,6 +7,7 @@ From mathcomp Require Import archimedean.
77From mathcomp Require Import cardinality set_interval Rstruct.
88Require Import ereal reals signed topology prodnormedzmodule function_spaces.
99Require Export separation_axioms.
10+ Require Import tvs.
1011
1112(**md************************************************************************* *)
1213(* # Norm-related Notions *)
@@ -799,26 +800,122 @@ Lemma cvgenyP {R : realType} {T} {F : set_system T} {FF : Filter F} (f : T -> na
799800 (((f n)%:R : R)%:E @[n --> F] --> +oo%E) <-> (f @ F --> \oo).
800801Proof . by rewrite cvgeryP cvgrnyP. Qed .
801802
802- (** Modules with a norm *)
803+ (** Modules with a norm depending on a numDomain *)
803804
804- HB.mixin Record PseudoMetricNormedZmod_Lmodule_isNormedModule K V
805- of PseudoMetricNormedZmod K V & GRing.Lmodule K V := {
805+ HB.mixin Record PseudoMetricNormedZmod_Tvs_isNormedModule K V
806+ of PseudoMetricNormedZmod K V & Tvs K V := {
806807 normrZ : forall (l : K) (x : V), `| l *: x | = `| l | * `| x |;
807808}.
808809
809810#[short(type="normedModType")]
810811HB.structure Definition NormedModule (K : numDomainType) :=
811- {T of PseudoMetricNormedZmod K T & GRing.Lmodule K T
812- & PseudoMetricNormedZmod_Lmodule_isNormedModule K T}.
812+ {T of PseudoMetricNormedZmod K T & Tvs K T
813+ & PseudoMetricNormedZmod_Tvs_isNormedModule K T}.
813814
814- Section regular_topology.
815+ HB.factory Record PseudoMetricNormedZmod_Lmodule_isNormedModule (K : numFieldType) V
816+ of PseudoMetricNormedZmod K V & GRing.Lmodule K V := {
817+ normrZ : forall (l : K) (x : V), `| l *: x | = `| l | * `| x |;
818+ }.
815819
816- Variable R : numFieldType.
820+ HB.builders Context K V of PseudoMetricNormedZmod_Lmodule_isNormedModule K V.
821+
822+ (* NB: These lemmas are done latter with more machinery. They should
823+ be be simplified once normedtype is split, and the present section can
824+ depend on near lemmas on pseudometricnormedzmodtype ? *)
825+ Lemma add_continuous : continuous (fun x : V * V => x.1 + x.2).
826+ Proof .
827+ move=> [/= x y]; apply/cvg_ballP => e e0 /=.
828+ rewrite nearE /= -nbhs_ballE /nbhs_ball /nbhs_ball_ //=.
829+ exists ((ball x (e/2)),(ball y (e/2))).
830+ rewrite !nbhs_simpl /=; split; by apply: nbhsx_ballx; rewrite ?divr_gt0.
831+ rewrite -ball_normE /= /ball_ /= => xy /= [nx ny].
832+ rewrite opprD addrACA (le_lt_trans (ler_normD _ _)) // (@splitr K (e)) ltrD //=.
833+ Qed .
834+
835+ Lemma scale_continuous : continuous (fun z : K^o * V => z.1 *: z.2).
836+ Proof .
837+ move=> [/= k x].
838+ apply/cvg_ballP => e e0 /=.
839+ rewrite nearE /= -nbhs_ballE /nbhs_ball /nbhs_ball_ !nbhs_simpl /=.
840+ near +oo_K=> M.
841+ pose r := (`|e|/2/M).
842+ exists ((ball k r),(ball x r)).
843+ split; apply: nbhsx_ballx; rewrite ?divr_gt0 ?normr_gt0 ?lt0r_neq0 //.
844+ rewrite -ball_normE /ball /= => lz /= [nk nx]; rewrite -?(scalerBr, scalerBl).
845+ have := @ball_split _ _ (k *: lz.2) (k*: x) (lz.1 *: lz.2) `|e|.
846+ rewrite -ball_normE /= real_lter_normr ?gtr0_real //.
847+ have -> : (normr (k *: x - lz.1 *: lz.2) < - e) = false
848+ by rewrite ltr_nnorml // oppr_le0 ltW.
849+ rewrite Bool.orb_false_r => T;apply: T; rewrite -?(scalerBr, scalerBl) normrZ.
850+ rewrite (@le_lt_trans _ _ (M * `|x - lz.2|)) ?ler_wpM2r -?ltr_pdivlMl //.
851+ rewrite mulrC //.
852+ rewrite (@le_lt_trans _ _ (`|k - lz.1| * M)) ?ler_wpM2l -?ltr_pdivlMr//.
853+ rewrite (@le_trans _ _ (normr (lz.2) + normr x)) // ?lerDl ?normr_ge0 //.
854+ move: nx; rewrite /r => nx.
855+ have H: normr lz.2 <= normr x + `|e|/2/M.
856+ have -> : lz.2 = x - (x -lz.2) by rewrite opprB addrCA subrr addr0.
857+ rewrite (@le_trans _ _ (normr (x) + normr (x - lz.2))) // ?ler_normB ?lerD // ltW //.
858+ rewrite (@le_trans _ _ ((normr x + `|e| / 2 / M) + (normr x))) ?lerD // addrC.
859+ (*rewrite addrAC.*)
860+ have H0: M = M^-1 * (M * M). rewrite mulrA mulVf ?mul1r // ?lt0r_neq0 //.
861+ rewrite [X in (_ <= X)]H0.
862+ have -> : (normr x + (normr x + `|e| / 2 / M)) =
863+ M^-1 * ( M * (normr x + normr x) + `|e| / 2).
864+ by rewrite mulrDr mulrA mulVf ?mul1r ?lt0r_neq0 // mulrC addrA.
865+ rewrite ler_wpM2l // ?invr_ge0 // ?ltW // -ltrBrDl -mulrBr.
866+ apply: ltr_pM; rewrite ?ltrBrDl //.
867+ Unshelve. all: by end_near.
868+ Qed .
869+
870+ Lemma locally_convex : exists2 B : set (set V), (forall b, b \in B -> convex b) & basis B.
871+ Proof .
872+ exists [set B | exists x, exists r, B = ball x r].
873+ move=> b; rewrite inE /= => [[x]] [r] -> z y l.
874+ rewrite !inE -!ball_normE /= => zx yx l0; rewrite -subr_gt0 => l1.
875+ have -> : x = l *: x + (1-l) *: x
876+ by rewrite scalerBl addrCA subrr addr0 scale1r.
877+ have -> : (l *: x + (1 - l) *: x) - (l *: z + (1 - l) *: y)
878+ = (l *: (x-z) + (1 - l) *: (x - y)).
879+ rewrite opprD addrCA addrA addrA -!scalerN -scalerDr [X in l*:X]addrC.
880+ by rewrite -addrA -scalerDr.
881+ rewrite (@le_lt_trans _ _ ( `|l| * `|x - z| + `|1 - l| * `|x - y|)) //.
882+ by rewrite -!normrZ ?ler_normD //.
883+ rewrite (@lt_le_trans _ _ ( `|l| * r + `|1 - l| * r )) //.
884+ rewrite ltr_leD //.
885+ rewrite -ltr_pdivlMl ?mulrA ?mulVf ?mul1r // ?normrE ?lt0r_neq0 //.
886+ rewrite -ler_pdivlMl ?mulrA ?mulVf ?mul1r ?ltW // ?normrE;
887+ by apply/eqP => H; move: l1; rewrite H // lt_def => /andP [] /eqP //=.
888+ have -> : normr (1 -l) = 1 - normr l.
889+ by move/ltW/normr_idP: l0 => ->; move/ltW/normr_idP: l1 => ->.
890+ by rewrite -mulrDl addrCA subrr addr0 mul1r.
891+ split => /=.
892+ move => B [x] [r] ->; rewrite openE -!ball_normE /interior=> y /= bxy.
893+ rewrite -nbhs_ballE /nbhs_ball /nbhs_ball_ /filter_from //=.
894+ exists (r - (normr (x - y) )); first by rewrite subr_gt0.
895+ move=> z; rewrite -ball_normE /= ltrBrDr addrC => H.
896+ rewrite /= (le_lt_trans (ler_distD y _ _)) //.
897+ rewrite /filter_from /= => x B.
898+ rewrite -nbhs_ballE /nbhs_ball /nbhs_ball_ /filter_from //=.
899+ move=> [r] r0 Bxr /=.
900+ rewrite nbhs_simpl /=; exists (ball x r) => //; split; last by apply: ballxx.
901+ by exists x; exists r.
902+ Qed .
903+
904+ HB.instance Definition _ :=
905+ Uniform_isTvs.Build K V add_continuous scale_continuous locally_convex.
906+
907+ HB.instance Definition _ :=
908+ PseudoMetricNormedZmod_Tvs_isNormedModule.Build K V normrZ.
909+
910+ HB.end .
817911
912+ Section regular_topology.
913+ Variable R : numFieldType.
818914HB.instance Definition _ := Num.NormedZmodule.on R^o.
915+
819916HB.instance Definition _ := NormedZmod_PseudoMetric_eq.Build R R^o erefl.
820917HB.instance Definition _ :=
821- PseudoMetricNormedZmod_Lmodule_isNormedModule .Build R R^o (@normrM _).
918+ PseudoMetricNormedZmod_Tvs_isNormedModule .Build R R^o (@normrM _).
822919
823920End regular_topology.
824921
@@ -2364,14 +2461,14 @@ HB.instance Definition _ := NormedZmod_PseudoMetric_eq.Build K (U * V)%type
23642461End prod_PseudoMetricNormedZmodule.
23652462
23662463Section prod_NormedModule.
2367- Context {K : numDomainType } {U V : normedModType K}.
2464+ Context {K : numFieldType } {U V : normedModType K}.
23682465
23692466Lemma prod_norm_scale (l : K) (x : U * V) : `| l *: x | = `|l| * `| x |.
23702467Proof . by rewrite prod_normE /= !normrZ maxr_pMr. Qed .
23712468
23722469HB.instance Definition _ :=
2373- PseudoMetricNormedZmod_Lmodule_isNormedModule .Build K (U * V)%type
2374- prod_norm_scale.
2470+ PseudoMetricNormedZmod_Tvs_isNormedModule .Build K (U * V)%type
2471+ prod_norm_scale.
23752472
23762473End prod_NormedModule.
23772474
0 commit comments