|
1 | | -(* mathcomp analysis (c) 2026 Inria and AIST. License: CeCILL-C. *) |
2 | | -From HB Require Import structures. |
| 1 | +(* mathcomp analysis (c) 2026 Inria and AIST. License: CeCILL-C. *) |
| 2 | +From HB Require Import structures. |
3 | 3 | From mathcomp Require Import all_ssreflect_compat ssralg ssrnum vector. |
4 | 4 | From mathcomp Require Import interval_inference. |
5 | 5 | #[warning="-warn-library-file-internal-analysis"] |
@@ -387,7 +387,7 @@ HB.end. |
387 | 387 | HB.mixin Record Uniform_isConvexTvs (R : numDomainType) E |
388 | 388 | & Uniform E & GRing.Lmodule R E := { |
389 | 389 | locally_convex : exists2 B : set_system E, |
390 | | - (forall b, b \in B -> convex_set b) & basis B |
| 390 | + (forall b, b \in B -> absolutely_convex_set b) & (nbhs_basis 0) B |
391 | 391 | }. |
392 | 392 |
|
393 | 393 | #[short(type="convexTvsType")] |
@@ -435,7 +435,7 @@ HB.factory Record PreTopologicalLmod_isConvexTvs (R : numDomainType) E |
435 | 435 | add_continuous : continuous (fun x : E * E => x.1 + x.2) ; |
436 | 436 | scale_continuous : continuous (fun z : R^o * E => z.1 *: z.2) ; |
437 | 437 | locally_convex : exists2 B : set_system E, |
438 | | - (forall b, b \in B -> convex_set b) & basis B |
| 438 | + (forall b, b \in B -> absolutely_convex_set b) & nbhs_basis 0 B |
439 | 439 | }. |
440 | 440 |
|
441 | 441 | HB.builders Context R E & PreTopologicalLmod_isConvexTvs R E. |
@@ -608,14 +608,28 @@ rewrite -[ltRHS]mul1r -(add_onemK l%:num) [ltRHS]mulrDl. |
608 | 608 | by rewrite ltrD// ltr_pM2l// onem_gt0. |
609 | 609 | Qed. |
610 | 610 |
|
| 611 | +Let standard_ball_balanced_set (r : R) : balanced_set (ball (0 : R^o) r). |
| 612 | +Proof. |
| 613 | +move => t /= t1 z /= [y]. |
| 614 | +rewrite -ball_normE /= !sub0r !normrN => + <-. |
| 615 | +rewrite normrM. Search ( _ * _ < _ * _). |
| 616 | +case: (eqVneq `|t| (1 : R)). |
| 617 | + by move=> -> ; rewrite mul1r. |
| 618 | +move=> t11. |
| 619 | +have : (`|t| <1) by rewrite lt_neqAle; apply/andP; split. |
| 620 | +by move => lt1 yr; rewrite -[ltRHS]mul1r ltr_pM ?normr_ge0. |
| 621 | +Qed. |
| 622 | + |
611 | 623 | Let standard_locally_convex_set : |
612 | | - exists2 B : set_system R^o, (forall b, b \in B -> convex_set b) & basis B. |
| 624 | + exists2 B : set_system R^o, (forall b, b \in B -> absolutely_convex_set b) & nbhs_basis 0 B. |
613 | 625 | Proof. |
614 | | -exists [set B | exists x r, B = ball x r]. |
615 | | - by move=> B/= /[!inE]/= [[x]] [r] ->; exact: standard_ball_convex_set. |
616 | | -split; first by move=> B [x] [r] ->; exact: ball_open. |
617 | | -move=> x B; rewrite -nbhs_ballE/= => -[r] r0 Bxr /=. |
618 | | -by exists (ball x r) => //=; split; [exists x, r|exact: ballxx]. |
| 626 | +exists [set B | exists r, B = ball 0 r]. |
| 627 | + move=> B/= /[!inE]/= [] [r] ->; split; first by exact: standard_ball_convex_set. |
| 628 | + by exact: standard_ball_balanced_set. |
| 629 | +move=> B [] r /= r0 /= Br. |
| 630 | +exists (ball 0 r); last by exact: Br. |
| 631 | +split; last by apply: ballxx. |
| 632 | +by exists r. |
619 | 633 | Qed. |
620 | 634 |
|
621 | 635 | HB.instance Definition _ := |
@@ -655,28 +669,32 @@ by move=> [l [e f]] /= [] [Al Bl] [] Ae Be; apply: nU; split; |
655 | 669 | Qed. |
656 | 670 |
|
657 | 671 | Local Lemma prod_locally_convex : |
658 | | - exists2 B : set_system (E * F), (forall b, b \in B -> convex_set b) & basis B. |
| 672 | + exists2 B : set_system (E * F), (forall b, b \in B -> absolutely_convex_set b) & nbhs_basis (0,0) B. |
659 | 673 | Proof. |
660 | | -have [Be Bcb Beb] := @locally_convex K E. |
| 674 | +have [Be Bce Beb] := @locally_convex K E. |
661 | 675 | have [Bf Bcf Bfb] := @locally_convex K F. |
662 | | -pose B := [set ef : set (E * F) | open ef /\ |
| 676 | +pose B := [set ef : set (E * F) | |
663 | 677 | exists be, exists2 bf, Be be & Bf bf /\ be `*` bf = ef]. |
664 | | -have : basis B. |
665 | | - rewrite /basis/=; split; first by move=> b => [] []. |
666 | | - move=> /= [x y] ef [[ne nf]] /= [Ne Nf] Nef. |
667 | | - case: Beb => Beo /(_ x ne Ne) /= -[a] [] Bea ax ea. |
668 | | - case: Bfb => Bfo /(_ y nf Nf) /= -[b] [] Beb yb fb. |
669 | | - exists [set z | a z.1 /\ b z.2]; last first. |
670 | | - by apply: subset_trans Nef => -[zx zy] /= [] /ea + /fb. |
671 | | - split=> //=; split; last by exists a, b. |
672 | | - rewrite openE => [[z z'] /= [az bz]]; exists (a, b) => /=; last by []. |
673 | | - rewrite !nbhsE /=; split; first by exists a => //; split => //; exact: Beo. |
674 | | - by exists b => //; split => // []; exact: Bfo. |
675 | | -exists B => // => b; rewrite inE /= => [[]] bo [] be [] bf Bee [] Bff <-. |
676 | | -move => [x1 y1] [x2 y2] l /[!inE] /= -[xe1 yf1] [xe2 yf2]. |
| 678 | +have lem : nbhs_basis (0,0) B. |
| 679 | + move=> /= b [/= [be bf] [/= nbe nbf]] /= befb /=. |
| 680 | + have [/= be' [Beb' be'0] bbe] := Beb be nbe. |
| 681 | + have [/= bf' [Bfb' bf'0] bbf] := Bfb bf nbf. |
| 682 | + exists (be' `*` bf'). |
| 683 | + split; first by exists be'; exists bf'. |
| 684 | + split => //=. |
| 685 | + apply: subset_trans; last by exact: befb. |
| 686 | + move => t /= [bet bft]; split; first by apply: bbe. |
| 687 | + by apply: bbf. |
| 688 | +exists B => // => b; rewrite inE /= => [[]] be [] bf Bee [] Bff <-. |
| 689 | +have [convbe balbe] := Bce be (mem_set Bee). |
| 690 | +have [convbf balbf] := Bcf bf (mem_set Bff). |
677 | 691 | split. |
678 | | - by apply/set_mem/Bcb; [exact/mem_set|exact/mem_set|exact/mem_set]. |
679 | | -by apply/set_mem/Bcf; [exact/mem_set|exact/mem_set|exact/mem_set]. |
| 692 | + move => [x1 y1] [x2 y2] l /[!inE] /= -[xe1 yf1] [xe2 yf2];split. |
| 693 | + by apply/set_mem/convbe;[exact/mem_set|exact/mem_set]. |
| 694 | + by apply/set_mem/convbf;[exact/mem_set|exact/mem_set]. |
| 695 | +move=> r [r1 [x1 y1]] [[x2 y2]]/= [bex bfy] [] <- <-; split. |
| 696 | + by apply/balbe; [exact: r1|exists x2]. |
| 697 | + by apply/balbf; [exact: r1|exists y2]. |
680 | 698 | Qed. |
681 | 699 |
|
682 | 700 | HB.instance Definition _ := PreTopologicalNmodule_isTopologicalNmodule.Build |
|
0 commit comments