@@ -752,14 +752,11 @@ HB.instance Definition _ := Nbhs_isUniform_mixin.Build E
752752 entourage_inv entourage_split_ex
753753 nbhsE.
754754
755- (* TO BE DELETED once PR#1974 is merged *)
756-
757755HB.instance Definition _ := PreTopologicalNmodule_isTopologicalNmodule.Build E add_continuous.
758756
759757HB.instance Definition _ := TopologicalNmodule_isTopologicalLmodule.Build R E scale_continuous.
760758
761759HB.instance Definition _ := Uniform_isConvexTvs.Build R E locally_convex.
762- (* END TO BE DELETED *)
763760
764761HB.end .
765762
@@ -777,7 +774,7 @@ Lemma addset0 (E : zmodType) (A: set E):
777774 ([set 0] `+ A) = A.
778775Proof .
779776apply/seteqP; split => z /=.
780- by move=> [+ -> [y]]; rewrite add0r => + + <-.
777+ by move=> [+ -> [y]]; rewrite add0r => + + <-.
781778by move=> Az; exists 0 => //; exists z; rewrite ?add0r.
782779Qed .
783780
@@ -927,93 +924,60 @@ have [convV'' balV''] := (absconvex_nbhsbasisat0 fV0 ).
927924exists ((ball_ normr 0 (minr 1 s)) (*[set t | `|t| < r]*), [set x] `+ V0) => //=.
928925 split.
929926 exists (minr 1 s) => //=. rewrite /minr; case: ifPn => //.
930- by rewrite r0.
927+ by rewrite r0.
931928 by exists ([set x] `+ V0) => //; exists V0.
932- move => [z1 z2] /=.
933- rewrite sub0r normrN => -[z1s].
934- move=> [_ ->] [y] Vy <- {z2}.
935- apply: VA => /=.
936- rewrite r0; exists 0.
937- rewrite scale0r //.
929+ move => [z1 z2] /=; rewrite sub0r normrN => -[z1s].
930+ move=> [_ ->] [y] Vy <- {z2}; apply: VA => /=; rewrite r0; exists 0; rewrite ?scale0r //.
938931exists (z1 *: (x + y)); rewrite ?add0r //.
939- apply: rV0 => /=.
940- exists (z1 *: x).
941- apply: (balV'' (z1 * s^-1)).
942- rewrite normrM normfV ltW // ltr_pdivrMr ?normr_gt0 ?gt_eqF //.
943- rewrite mul1r.
944- rewrite [ltRHS]gtr0_norm //.
945- rewrite (lt_le_trans z1s) //.
946- by rewrite /minr; case: ifPn => // /ltW //.
947- exists (s *: x) => //.
948- by rewrite !scalerA divfK// gt_eqF //.
949- exists (z1 *: y) => //.
950- apply: (balV'' z1).
951- rewrite (le_trans (ltW z1s)) //.
952- rewrite /minr; case: real_ltP => //.
953- rewrite gtr0_real //.
954- by exists y.
955- by rewrite -scalerDr.
956-
932+ apply: rV0 => /=; exists (z1 *: x).
933+ apply: (balV'' (z1 * s^-1)).
934+ rewrite normrM normfV ltW // ltr_pdivrMr ?normr_gt0 ?gt_eqF //.
935+ rewrite mul1r [ltRHS]gtr0_norm // (lt_le_trans z1s) //.
936+ by rewrite /minr; case: ifPn => // /ltW //.
937+ by exists (s *: x) => //; rewrite !scalerA divfK// gt_eqF //.
938+ exists (z1 *: y) => //; last by rewrite -scalerDr.
939+ apply: (balV'' z1); last by exists y.
940+ rewrite (le_trans (ltW z1s)) // /minr; case: real_ltP => //;
941+ by rewrite gtr0_real.
957942have [V0 fV0 rV0] := (split_nbhsbasisat0 fV).
958943have [V' fV' rV'] := (split_nbhsbasisat0 fV0).
959- have [V'' fV'' rV''] := (expand_nbhsbasisat0 r fV').
960- have [/= s [s0 (*xV'' xx'*)]] := (absorbing_nbhsbasisat0 fV'' x).
944+ have [V'' fV'' rV''] := (expand_nbhsbasisat0 r fV').
945+ have [/= s [s0 (*xV'' xx'*)]] := (absorbing_nbhsbasisat0 fV'' x).
961946rewrite inE => xV''.
962- have [convV'' balV''] := (absconvex_nbhsbasisat0 fV'').
963- exists ([set r] `+ (ball_ normr 0 (Num.min `|r| (`|r * s|))) (*[set t | `|t| < r]*), [set x] `+ V'') => //=.
964- split.
965- exists ((Num.min `|r| (`|r * s|))) => //=.
966- rewrite /minr; case: ifPn. rewrite normr_gt0 //.
967- rewrite normr_gt0 => _.
968- by rewrite mulf_neq0 // gt_eqF.
969- move=> u/= rur.
970- exists r => //.
971- exists (u - r).
972- rewrite sub0r normrN distrC (lt_le_trans rur)//.
973- by rewrite subrKC.
974- by exists ([set x] `+ V'') => //; exists V''.
975- move => [z1 z2] /= => [] [[x0] -> {x0}] [y].
976- rewrite add0r normrN => yr.
977- move => <- [H ->] [t] Vt <-.
978- apply: VA => /=.
979- exists (r *: x) => //.
980- exists (r *: t + y *: x + y *: t) => //.
981- apply: rV0 => /=.
982- exists (r *:t) => //.
983- apply: rV'. exists 0. apply: mem0_nbhsbasisat0 =>//. exists (r *: t). apply: rV''. exists t => //.
984- by rewrite add0r.
985- exists (y *: x + y *: t)=> //.
986- apply: rV'.
987- exists (y *: x).
988- apply: rV''.
989- exists ((r^-1 * y) *: x).
990- apply: (balV'' (r^-1 * y * s^-1)).
991- rewrite -mulrA normrM normfV // ler_pdivrMl ?normr_gt0 // mulr1.
992- rewrite normrM -ler_pdivlMr ?normr_gt0 // ?gt_eqF // ?invr_gt0 //.
993- rewrite (le_trans (ltW yr)) //; rewrite /minr.
994- case: ifPn => //. move/ltW. rewrite normrM normfV //.
995- by rewrite invrK //.
996- by move=> _; rewrite normfV normrM invrK.
997- exists (s *: x) => //.
998- rewrite !scalerA divfK// gt_eqF //.
999- by rewrite scalerA mulrA divff// mul1r.
1000- exists (y *: t) => //.
1001- apply: rV''.
1002- exists ((r^-1 * y) *: t).
1003- apply: (balV'' (r^-1 * y)).
1004- rewrite normrM normfV// ler_pdivrMl ?normr_gt0// mulr1.
1005- apply: (le_trans (ltW yr)).
1006- rewrite /minr.
1007- case : real_ltP => //.
1008- by exists t.
1009- by rewrite scalerA mulrA divff// mul1r.
1010- by rewrite addrA.
1011- rewrite !addrA.
1012- rewrite -scalerDr.
1013- rewrite -addrA.
1014- rewrite -scalerDr.
1015- by rewrite scalerDl.
1016- Qed .
947+ have [convV'' balV''] := (absconvex_nbhsbasisat0 fV'').
948+ exists ([set r] `+ (ball_ normr 0 (Num.min `|r| (`|r * s|))) , [set x] `+ V'') => //=.
949+ split; last by exists ([set x] `+ V'') => //; exists V''.
950+ exists ((Num.min `|r| (`|r * s|))) => //=.
951+ rewrite /minr; case: ifPn; first by rewrite normr_gt0 //.
952+ by rewrite normr_gt0 => _ ; rewrite mulf_neq0 // gt_eqF.
953+ move=> u/= rur; exists r => //; exists (u - r); last by rewrite subrKC.
954+ by rewrite sub0r normrN distrC (lt_le_trans rur)//.
955+ move => [z1 z2] /= => [] [[x0] -> {x0}] [y]; rewrite add0r normrN => yr.
956+ move => <- [H ->] [t] Vt <-; apply: VA => /=.
957+ exists (r *: x) => //; exists (r *: t + y *: x + y *: t); last first.
958+ by rewrite !addrA -scalerDr -addrA -scalerDr scalerDl.
959+ apply: rV0; exists (r *:t) => //.
960+ apply: rV'; exists 0; first by apply: mem0_nbhsbasisat0.
961+ exists (r *: t); first by apply: rV''; exists t.
962+ by rewrite add0r.
963+ exists (y *: x + y *: t); last by rewrite addrA.
964+ apply: rV'; exists (y *: x).
965+ apply: rV''.
966+ exists ((r^-1 * y) *: x).
967+ apply: (balV'' (r^-1 * y * s^-1)).
968+ rewrite -mulrA normrM normfV // ler_pdivrMl ?normr_gt0 // mulr1.
969+ rewrite normrM -ler_pdivlMr ?normr_gt0 // ?gt_eqF // ?invr_gt0 //.
970+ rewrite (le_trans (ltW yr)) //; rewrite /minr.
971+ case: ifPn; last by move=> _; rewrite normfV normrM invrK.
972+ by move/ltW; rewrite normrM normfV invrK.
973+ exists (s *: x); rewrite // !scalerA divfK// gt_eqF //.
974+ by rewrite scalerA mulrA divff// mul1r.
975+ exists (y *: t) => //; apply: rV''; exists ((r^-1 * y) *: t); last first.
976+ by rewrite scalerA mulrA divff// mul1r.
977+ apply: (balV'' (r^-1 * y)); last by exists t.
978+ rewrite normrM normfV// ler_pdivrMl ?normr_gt0// mulr1.
979+ by apply: (le_trans (ltW yr)); rewrite /minr; case : real_ltP.
980+ Qed .
1017981
1018982#[local] Lemma locally_convex : exists2 B : set_system E,
1019983 (forall b, b \in B -> absolutely_convex_set b) & nbhs_basis 0 B.
@@ -1022,43 +986,12 @@ exists nbhsbasis_at0; first by move=> b; rewrite inE; apply: absconvex_nbhsbasis
1022986move => b [a] /= [a'] fa; rewrite addset0 => <- ab /=.
1023987by exists a' => //=; split => //; exact: mem0_nbhsbasisat0.
1024988Qed .
1025-
989+
1026990HB.instance Definition _ := @PreTopologicalLmod_isConvexTvs.Build R E add_continuous scale_continuous locally_convex.
1027991
1028992HB.end .
1029- (*
1030- nbhsbasis_at0 : set_system E ; (*TODO rename to filterbasis_at0 *)
1031- nonempty_nbhsbasisat0 : exists U, nbhsbasis_at0 U;
1032- nbhsbasis_at0I : forall U V, nbhsbasis_at0 U -> nbhsbasis_at0 V ->
1033- exists2 W, nbhsbasis_at0 W & W `<=` U `&` V ;
1034- mem0_nbhsbasisat0 : forall B, nbhsbasis_at0 B -> B 0 ;
1035- expand_nbhsbasisat0 : forall B r, nbhsbasis_at0 B -> (*0 <= r -> *)
1036- exists2 U, nbhsbasis_at0 U & r `*: U `<=` B ; (* implies circled *)
1037- absorbing_nbhsbasisat0 : forall B , nbhsbasis_at0 B -> pabsorbing_set B;
1038- absconvex_nbhsbasisat0 : forall B, nbhsbasis_at0 B -> absolutely_convex_set B }.
1039993
1040- *)
1041- (* TB renamed *)
1042- Lemma nbhsbasisat0_filter (R : numFieldType) (E : lmodType R)
1043- (nbhsbasis_at0 : set_system E) (x : E)
1044- (nonempty_nbhsbasisat0 : exists U, nbhsbasis_at0 U)
1045- ( nbhsbasis_at0I : forall U V, nbhsbasis_at0 U -> nbhsbasis_at0 V -> exists2 W, nbhsbasis_at0 W & W `<=` U `&` V )
1046- (mem0_nbhsbasisat0 : forall B, nbhsbasis_at0 B -> B 0) : ProperFilter (@nbhs_frombasis0 R E (nbhsbasis_at0) x).
1047- Proof .
1048- apply: filter_from_proper.
1049- apply: filter_from_filter => /=.
1050- have [U fU] := nonempty_nbhsbasisat0.
1051- by exists ([set x] `+ U) => //=; exists U.
1052- move=> _ _ /= [U0 FU <-] [V0 FV <-].
1053- have [W FW WUV] := nbhsbasis_at0I _ _ FU FV.
1054- exists ([set x] `+ W); first by exists W.
1055- rewrite -addsetI; exact: addsubset.
1056- move=> _ /= [V FV] <-.
1057- by exists x; exists x => //; exists 0; rewrite ?addr0//; exact: mem0_nbhsbasisat0.
1058- Qed .
1059-
1060-
1061- HB.factory Record Nbhssubbasis0_isConvexTvs (R: numFieldType) E & GRing.Lmodule R E (*& isConvexTvsat R E *) := {
994+ HB.factory Record Nbhssubbasis0_isConvexTvs (R: numFieldType) E & GRing.Lmodule R E := {
1062995 nbhssubbasis0 : set_system E ;
1063996 nonempty_nbhssubbasisat0 : exists U, nbhssubbasis0 U;
1064997 mem0_nbhssubbasisat0 : forall B, nbhssubbasis0 B -> B 0 ;
@@ -1071,11 +1004,9 @@ Definition nbhs_fromsubbasis0 (R : numFieldType) (E : zmodType)
10711004 (nbhssubbasis0 : set_system E) :=
10721005 finI_from nbhssubbasis0 id.
10731006
1074-
10751007HB.builders Context R E & Nbhssubbasis0_isConvexTvs R E.
10761008
10771009From mathcomp Require Import finmap.
1078- (*Open Scope fset_scope. *)
10791010
10801011Let nbhsbasis_at0 := @nbhs_fromsubbasis0 R E nbhssubbasis0.
10811012
@@ -1109,7 +1040,6 @@ Proof.
11091040by move => B [/= I fI <-] U /= /fI /=; rewrite asboolE /= => /mem0_nbhssubbasisat0.
11101041Qed .
11111042
1112-
11131043#[local] Lemma expand_nbhsbasisat0 : forall B r, nbhsbasis_at0 B ->
11141044 exists2 U, nbhsbasis_at0 U & r `*: U `<=` B.
11151045Proof .
0 commit comments