@@ -346,7 +346,19 @@ Local Open Scope convex_scope.
346346Definition convex (R : numDomainType) (M : lmodType R)
347347 (A : set (convex_lmodType M))(* try to get rid of the convex_lmodType *) :=
348348 forall x y lambda, x \in A -> y \in A -> x <| lambda |> y \in A.
349- (* 0 < lambda -> lambda < 1 -> lambda *: x + (1 - lambda) *: y \in A *)
349+
350+ Lemma convexW (R : numDomainType) (M : lmodType R) (A : set (convex_lmodType M)) :
351+ convex A <->
352+ {in A &, forall x y (k : {i01 R}), 0 < k%:num -> k%:num < 1 -> x <| k |> y \in A}.
353+ Proof .
354+ split => [cA x y xA yA k k0 k1|cA x y l xA yA].
355+ by have /(_ k) := cA _ _ _ xA yA.
356+ have [->|l0] := eqVneq l 0%:i01; first by rewrite conv0.
357+ have [->|l1] := eqVneq l 1%:i01; first by rewrite conv1.
358+ apply: cA => //.
359+ - by rewrite lt_neqAle eq_sym l0 ge0.
360+ - by rewrite lt_neqAle l1 le1.
361+ Qed .
350362
351363(*TODO : name it convexTvs *)
352364HB.mixin Record Uniform_isConvexTvs (R : numDomainType) E
@@ -591,49 +603,29 @@ rewrite -mulrBl normrM (@le_lt_trans _ _ (`|k - z1| * M)) ?ler_wpM2l//.
591603by rewrite -ltr_pdivlMr ?(lt_le_trans k1r) ?normr_gt0.
592604Qed .
593605
594- Lemma le0i (l : {i01 R}) : (l <= 0%:i01) = (l == 0%:i01).
595- Proof .
596- apply/idP/idP.
597- rewrite eq_le => ->/=.
598- apply: ge0 => //=.
599- admit. (* ask Pierre *)
600- by rewrite eq_le => /andP[].
601- Admitted .
602-
603- Lemma le1i (l : {i01 R}) : (1%:i01 <= l) = (l == 1%:i01).
604- Proof .
605- apply/idP/idP.
606- rewrite eq_le => ->/=.
607- rewrite andbT.
608- apply: le1 => //=.
609- admit. (* ask Pierre *)
610- by rewrite eq_le => /andP[].
611- Admitted .
612-
613606Local Lemma standard_locally_convex :
614607 exists2 B : set (set R^o), (forall b, b \in B -> convex b) & basis B.
615608Proof .
616609(* NB(rei): almost the same code as in normedtype.v *)
617610exists [set B | exists x r, B = ball x r].
618- move=> b; rewrite inE /= => [[x]] [r] -> z y l.
619- rewrite !inE /ball /= => zx yx.
620- have [l0|] := ltP 0%:i01 l; last by rewrite le0i => /eqP ->; rewrite conv0.
621- have [l1|] := ltP l 1%:i01; last by rewrite le1i => /eqP ->; rewrite conv1.
611+ move=> b/= /[!inE]/= [[x]] [r] ->.
612+ apply/convexW => z y; rewrite /ball/= !inE/= => zx yx l /[!inE]/= l0 l1.
613+ (* conv lemma? *)
622614 have -> : x = x <| l |> x by rewrite convmm. (*TODO: this looks superfluous *)
623- rewrite [X in `|X|](_ : _ =
624- l%:num *: (x - z) + (l%:num.~) *: (x - y)); last first.
615+ rewrite [X in `|X|](_ : _ = (x - z) <| l |> (x - y)); last first.
625616 by rewrite opprD addrACA -mulrBr -mulrBr.
626- rewrite (@le_lt_trans _ _ (l%:num * `|x - z| + l%:num.~ * `|x - y|))//.
617+ rewrite (@le_lt_trans _ _ (( `|x - z| : R^o) <| l |> `|x - y|))//.
627618 rewrite -[in X in _ <= X + _](@ger0_norm _ l%:num)//.
628619 rewrite -[in X in _ <= _ + X](@ger0_norm _ l%:num.~) ?subr_ge0//.
629- rewrite -!normrM -mulr_algl.
630- rewrite /GRing.scale/= mulr1.
620+ rewrite [X in `|X| <= _](_ : _ = l%:num * (x - z) + l%:num.~ * (x - y))//.
621+ rewrite -[X in _ <= X + _]normrM.
622+ rewrite -[X in _ <= _ + X]normrM.
631623 by rewrite ler_normD.
632- rewrite (@lt_le_trans _ _ (l%:num * r + l%:num.~ * r ))//.
624+ rewrite (@lt_le_trans _ _ ((r : R^o) <| l |> r ))//.
633625 rewrite ltr_leD//.
634626 by rewrite ltr_pM2l// normr_gt0// gt_eqF.
635627 by rewrite ler_wpM2l// ?subr_ge0// ltW.
636- by rewrite -mulrDl subrKC mul1r .
628+ by rewrite convmm .
637629split.
638630 move=> B [x] [r] ->.
639631 rewrite openE/= /ball/= /interior => y /= bxy; rewrite -nbhs_ballE.
0 commit comments