@@ -3533,21 +3533,21 @@ move=> x0; apply/(iffP idP) => [xy r /andP[r0 r1]|h].
35333533 move: x0 xy; rewrite le_eqVlt => /predU1P[<-|x0 xy]; first by rewrite mule0.
35343534 by rewrite (le_trans _ xy)// gee_pMl// ltW.
35353535have h01 : (0 < (2^-1 : R) < 1)%R by rewrite invr_gt0 ?invf_lt1 ?ltr0n ?ltr1n.
3536- move: x y => [x||] [y||] // in x0 h *.
3537- - move: (x0); rewrite lee_fin le_eqVlt => /predU1P[<-|{}x0].
3538- by rewrite (le_trans _ (h _ h01))// mule_ge0// lee_fin.
3539- have y0 : (0 < y)%R.
3540- by rewrite -lte_fin (lt_le_trans _ (h _ h01))// mule_gt0// lte_fin.
3541- rewrite lee_fin leNgt; apply/negP => yx.
3542- have /h : (0 < (y + x) / (2 * x) < 1)%R.
3543- rewrite ltr_pdivlMr ?ltr_pdivrMr ?mulr_gt0// mul0r mul1r.
3544- by rewrite mulr_natl mulr2n ltrD2r yx addr_gt0.
3545- rewrite -(EFinM _ x) lee_fin invrM ?unitfE// ?gt_eqF// -mulrA mulrAC.
3546- by rewrite mulVr ?unitfE ?gt_eqF// mul1r; apply/negP; rewrite -ltNge midf_lt.
3536+ move: x y => [x||] [y||] // in x0 h *; last 4 first.
35473537- by rewrite leey.
35483538- by have := h _ h01.
35493539- by have := h _ h01; rewrite mulr_infty sgrV gtr0_sg // mul1e.
35503540- by have := h _ h01; rewrite mulr_infty sgrV gtr0_sg // mul1e.
3541+ move: (x0); rewrite lee_fin le_eqVlt => /predU1P[<-|{}x0].
3542+ by rewrite (le_trans _ (h _ h01))// mule_ge0// lee_fin.
3543+ have y0 : (0 < y)%R.
3544+ by rewrite -lte_fin (lt_le_trans _ (h _ h01))// mule_gt0// lte_fin.
3545+ rewrite lee_fin leNgt; apply/negP => yx.
3546+ have /h : (0 < (y + x) / (2 * x) < 1)%R.
3547+ apply/andP; split; first by rewrite divr_gt0 // ?addr_gt0// ?mulr_gt0.
3548+ by rewrite ltr_pdivrMr ?mulr_gt0// mul1r mulr_natl mulr2n ltrD2r.
3549+ rewrite -EFinM lee_fin invfM -mulrA divfK ?gt_eqF//.
3550+ by apply/negP; rewrite -ltNge midf_lt.
35513551Qed .
35523552
35533553Lemma lte_pdivrMl r x y : (0 < r)%R -> (r^-1%:E * y < x) = (y < r%:E * x).
@@ -3606,9 +3606,9 @@ Lemma lee_pdivrMl r x y : (0 < r)%R -> (r^-1%:E * y <= x) = (y <= r%:E * x).
36063606Proof .
36073607move=> r0; apply/idP/idP.
36083608- rewrite le_eqVlt => /predU1P[<-|]; last by rewrite lte_pdivrMl// => /ltW.
3609- by rewrite muleA -EFinM divrr ?mul1e// unitfE gt_eqF.
3609+ by rewrite muleA -EFinM divff ?mul1e// gt_eqF.
36103610- rewrite le_eqVlt => /predU1P[->|]; last by rewrite -lte_pdivrMl// => /ltW.
3611- by rewrite muleA -EFinM mulVr ?mul1e// unitfE gt_eqF.
3611+ by rewrite muleA -EFinM mulVf ?mul1e// gt_eqF.
36123612Qed .
36133613
36143614Lemma lee_pdivrMr r x y : (0 < r)%R -> (y * r^-1%:E <= x) = (y <= x * r%:E).
@@ -3618,9 +3618,9 @@ Lemma lee_pdivlMl r y x : (0 < r)%R -> (x <= r^-1%:E * y) = (r%:E * x <= y).
36183618Proof .
36193619move=> r0; apply/idP/idP.
36203620- rewrite le_eqVlt => /predU1P[->|]; last by rewrite lte_pdivlMl// => /ltW.
3621- by rewrite muleA -EFinM divrr ?mul1e// unitfE gt_eqF.
3621+ by rewrite muleA -EFinM divff ?mul1e// gt_eqF.
36223622- rewrite le_eqVlt => /predU1P[<-|]; last by rewrite -lte_pdivlMl// => /ltW.
3623- by rewrite muleA -EFinM mulVr ?mul1e// unitfE gt_eqF.
3623+ by rewrite muleA -EFinM mulVf ?mul1e// gt_eqF.
36243624Qed .
36253625
36263626Lemma lee_pdivlMr r x y : (0 < r)%R -> (x <= y * r^-1%:E) = (x * r%:E <= y).
@@ -4512,8 +4512,7 @@ Definition contract x : R :=
45124512
45134513Lemma contract_lt1 r : (`|contract r%:E| < 1)%R.
45144514Proof .
4515- rewrite normrM normrV ?unitfE //.
4516- rewrite ltr_pdivrMr // ?mul1r//; last by rewrite gtr0_norm.
4515+ rewrite normrM normfV// ltr_pdivrMr // ?mul1r//; last by rewrite gtr0_norm.
45174516by rewrite [ltRHS]gtr0_norm ?ltrDr// ltr_pwDl.
45184517Qed .
45194518
@@ -4561,25 +4560,23 @@ move=> r; rewrite inE le_eqVlt => /orP[|r1].
45614560 by [rewrite expand1|rewrite expandN1].
45624561rewrite /expand 2!leNgt ltrNl; case/ltr_normlP : (r1) => -> -> /=.
45634562have r_pneq0 : (1 + r / (1 - r) != 0)%R.
4564- rewrite -[X in (X + _)%R](@divrr _ (1 - r)%R) -?mulrDl; last first.
4565- by rewrite unitfE subr_eq0 eq_sym lt_eqF // ltr_normlW.
4563+ rewrite -[X in (X + _)%R](@divff _ (1 - r)%R) -?mulrDl; last first.
4564+ by rewrite subr_eq0 eq_sym lt_eqF // ltr_normlW.
45664565 by rewrite subrK mulf_neq0 // invr_eq0 subr_eq0 eq_sym lt_eqF // ltr_normlW.
45674566have r_nneq0 : (1 - r / (1 + r) != 0)%R.
4568- rewrite -[X in (X + _)%R](@divrr _ (1 + r)%R) -?mulrBl; last first.
4569- by rewrite unitfE addrC addr_eq0 gt_eqF // ltrNnormlW.
4570- rewrite addrK mulf_neq0 // invr_eq0 addr_eq0 -eqr_oppLR eq_sym gt_eqF //.
4571- exact: ltrNnormlW.
4567+ rewrite -[X in (X + _)%R](@divff _ (1 + r)%R) -?mulrBl; last first.
4568+ by rewrite addrC addr_eq0 gt_eqF // ltrNnormlW.
4569+ by rewrite addrK mulf_neq0// invr_eq0 addr_eq0 -eqr_oppLR lt_eqF// ltrNnormlW.
45724570wlog : r r1 r_pneq0 r_nneq0 / (0 <= r)%R => wlog_r0.
45734571 have [r0|r0] := lerP 0 r; first by rewrite wlog_r0.
45744572 move: (wlog_r0 (- r)%R).
45754573 rewrite !(normrN, opprK, mulNr) oppr_ge0 => /(_ r1 r_nneq0 r_pneq0 (ltW r0)).
4576- by move/eqP; rewrite eqr_opp => /eqP .
4574+ by move/oppr_inj .
45774575rewrite /contract !ger0_norm //; last first.
45784576 by rewrite divr_ge0 // subr_ge0 (le_trans _ (ltW r1)) // ler_norm.
4579- apply: (@mulIr _ (1 + r / (1 - r))%R); first by rewrite unitfE.
4580- rewrite -(mulrA (r / _)%R) mulVr ?unitfE // mulr1.
4581- rewrite -[X in (X + _ / _)%R](@divrr _ (1 - r)%R) -?mulrDl ?subrK ?div1r //.
4582- by rewrite unitfE subr_eq0 eq_sym lt_eqF // ltr_normlW.
4577+ apply: (@mulIf _ (1 + r / (1 - r))%R); rewrite // divfK//.
4578+ rewrite -[X in (X + _ / _)%R](@divff _ (1 - r)%R) -?mulrDl ?subrK ?div1r //.
4579+ by rewrite subr_eq0 eq_sym lt_eqF // ltr_normlW.
45834580Qed .
45844581
45854582Lemma le_contract : {mono contract : x y / (x <= y)%O}.
0 commit comments