|
2 | 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 | +#[warning="-warn-library-file-internal-analysis"] |
| 6 | +From mathcomp Require Import unstable. |
5 | 7 | From mathcomp Require Import boolp classical_sets functions cardinality. |
6 | | -From mathcomp Require Import set_interval reals topology num_normedtype. |
| 8 | +From mathcomp Require Import convex set_interval reals topology num_normedtype. |
7 | 9 | From mathcomp Require Import pseudometric_normed_Zmodule. |
8 | 10 |
|
9 | 11 | (**md**************************************************************************) |
@@ -306,10 +308,6 @@ HB.instance Definition _ := |
306 | 308 |
|
307 | 309 | HB.end. |
308 | 310 |
|
309 | | -Definition convex (R : numDomainType) (M : lmodType R) (A : set M) := |
310 | | - forall x y (lambda : R), x \in A -> y \in A -> |
311 | | - 0 < lambda -> lambda < 1 -> lambda *: x + (1 - lambda) *: y \in A. |
312 | | - |
313 | 311 | HB.mixin Record Uniform_isTvs (R : numDomainType) E |
314 | 312 | & Uniform E & GRing.Lmodule R E := { |
315 | 313 | locally_convex : exists2 B : set (set E), |
@@ -511,20 +509,30 @@ rewrite (@le_lt_trans _ _ (`|k - l| * M)) ?ler_wpM2l -?ltr_pdivlMr//. |
511 | 509 | by near: l; apply: cvgr_dist_lt; rewrite // divr_gt0. |
512 | 510 | Unshelve. all: by end_near. Qed. |
513 | 511 |
|
| 512 | +Local Open Scope convex_scope. |
| 513 | + |
514 | 514 | Let standard_locally_convex : |
515 | 515 | exists2 B : set (set R^o), (forall b, b \in B -> convex b) & basis B. |
516 | 516 | Proof. |
517 | 517 | exists [set B | exists x r, B = ball x r]. |
518 | | - move=> b; rewrite inE /= => [[x]] [r] -> z y l. |
519 | | - rewrite !inE -!ball_normE /= => zx yx l0; rewrite -subr_gt0 => l1. |
520 | | - have -> : x = l *: x + (1 - l) *: x by rewrite addrC scalerBl subrK scale1r. |
521 | | - rewrite [X in `|X|](_ : _ = l *: (x - z) + (1 - l) *: (x - y)); last first. |
522 | | - by rewrite opprD addrACA -scalerBr -scalerBr. |
523 | | - rewrite (@le_lt_trans _ _ (`|l| * `|x - z| + `|1 - l| * `|x - y|))//. |
524 | | - by rewrite -!normrM ler_normD. |
525 | | - rewrite (@lt_le_trans _ _ (`|l| * r + `|1 - l| * r ))//. |
526 | | - by rewrite ltr_leD// lter_pM2l// ?normrE ?gt_eqF// ltW. |
527 | | - by rewrite !gtr0_norm// -mulrDl addrC subrK mul1r. |
| 518 | + move=> b/= /[!inE]/= [[x]] [r] ->. |
| 519 | + apply/convexW => z y; rewrite /ball/= !inE/= => zx yx l /[!inE]/= l0 l1. |
| 520 | + (* conv lemma? *) |
| 521 | + have -> : x = x <| l |> x by rewrite convmm. (*TODO: this looks superfluous *) |
| 522 | + rewrite [X in `|X|](_ : _ = (x - z) <| l |> (x - y)); last first. |
| 523 | + by rewrite opprD addrACA -mulrBr -mulrBr. |
| 524 | + rewrite (@le_lt_trans _ _ ((`|x - z| : R^o) <| l |> `|x - y|))//. |
| 525 | + rewrite -[in X in _ <= X + _](@ger0_norm _ l%:num)//. |
| 526 | + rewrite -[in X in _ <= _ + X](@ger0_norm _ l%:num.~) ?subr_ge0//. |
| 527 | + rewrite [X in `|X| <= _](_ : _ = l%:num * (x - z) + l%:num.~ * (x - y))//. |
| 528 | + rewrite -[X in _ <= X + _]normrM. |
| 529 | + rewrite -[X in _ <= _ + X]normrM. |
| 530 | + by rewrite ler_normD. |
| 531 | + rewrite (@lt_le_trans _ _ ((r : R^o) <| l |> r))//. |
| 532 | + rewrite ltr_leD//. |
| 533 | + by rewrite ltr_pM2l// normr_gt0// gt_eqF. |
| 534 | + by rewrite ler_wpM2l// ?subr_ge0// ltW. |
| 535 | + by rewrite convmm. |
528 | 536 | split. |
529 | 537 | move=> B [x] [r] ->. |
530 | 538 | rewrite openE/= -ball_normE/= /interior => y /= bxy; rewrite -nbhs_ballE. |
@@ -587,8 +595,10 @@ have : basis B. |
587 | 595 | rewrite !nbhsE /=; split; first by exists a => //; split => //; exact: Beo. |
588 | 596 | by exists b => //; split => // []; exact: Bfo. |
589 | 597 | exists B => // => b; rewrite inE /= => [[]] bo [] be [] bf Bee [] Bff <-. |
590 | | -move => [x1 y1] [x2 y2] l /[!inE] /= -[xe1 yf1] [xe2 yf2] l0 l1. |
591 | | -by split; rewrite -inE; [apply: Bcb; rewrite ?inE|apply: Bcf; rewrite ?inE]. |
| 598 | +move => [x1 y1] [x2 y2] l /[!inE] /= -[xe1 yf1] [xe2 yf2]. |
| 599 | +split. |
| 600 | + by apply/set_mem/Bcb; [exact/mem_set|exact/mem_set|exact/mem_set]. |
| 601 | +by apply/set_mem/Bcf; [exact/mem_set|exact/mem_set|exact/mem_set]. |
592 | 602 | Qed. |
593 | 603 |
|
594 | 604 | HB.instance Definition _ := PreTopologicalNmodule_isTopologicalNmodule.Build |
|
0 commit comments