From 434bf998a7531e8a96e53c30ad7ae4a6afce8715 Mon Sep 17 00:00:00 2001 From: Pierre Roux Date: Wed, 25 Mar 2026 10:09:51 +0100 Subject: [PATCH] Port analysis to new rewrite goals order --- theories/borel_hierarchy.v | 2 +- theories/cantor.v | 4 +- theories/charge.v | 254 +++++---- theories/convex.v | 2 +- theories/derive.v | 54 +- theories/ereal.v | 40 +- theories/ess_sup_inf.v | 2 +- theories/esum.v | 98 ++-- theories/exp.v | 68 +-- theories/ftc.v | 490 +++++++++--------- theories/gauss_integral.v | 44 +- theories/hoelder.v | 170 +++--- theories/homotopy_theory/continuous_path.v | 2 +- theories/homotopy_theory/wedge_sigT.v | 12 +- theories/kernel.v | 144 ++--- theories/landau.v | 8 +- theories/lebesgue_integral_theory/giry.v | 38 +- .../lebesgue_Rintegral.v | 28 +- .../lebesgue_integrable.v | 174 +++---- .../lebesgue_integral_definition.v | 22 +- .../lebesgue_integral_differentiation.v | 193 +++---- .../lebesgue_integral_dominated_convergence.v | 62 +-- .../lebesgue_integral_fubini.v | 222 ++++---- .../lebesgue_integral_monotone_convergence.v | 10 +- .../lebesgue_integral_nonneg.v | 281 +++++----- .../lebesgue_integral_under.v | 22 +- .../measurable_fun_approximation.v | 52 +- .../simple_functions.v | 4 +- theories/lebesgue_measure.v | 110 ++-- theories/lebesgue_stieltjes_measure.v | 16 +- theories/measurable_realfun.v | 128 ++--- theories/measure_theory/counting_measure.v | 12 +- theories/measure_theory/dirac_measure.v | 16 +- theories/measure_theory/measurable_function.v | 30 +- .../measure_theory/measurable_structure.v | 49 +- theories/measure_theory/measure_extension.v | 50 +- theories/measure_theory/measure_function.v | 97 ++-- theories/measure_theory/measure_negligible.v | 12 +- theories/measure_theory/probability_measure.v | 8 +- .../complete_normed_module.v | 25 +- theories/normedtype_theory/ereal_normedtype.v | 14 +- .../normedtype_theory/matrix_normedtype.v | 12 +- theories/normedtype_theory/normed_module.v | 50 +- theories/normedtype_theory/num_normedtype.v | 36 +- .../pseudometric_normed_Zmodule.v | 28 +- theories/normedtype_theory/tvs.v | 12 +- theories/normedtype_theory/urysohn.v | 10 +- theories/normedtype_theory/vitali_lemma.v | 22 +- theories/numfun.v | 51 +- theories/pi_irrational.v | 64 +-- .../bernoulli_distribution.v | 20 +- .../probability_theory/beta_distribution.v | 91 ++-- .../binomial_distribution.v | 18 +- .../exponential_distribution.v | 14 +- .../probability_theory/normal_distribution.v | 14 +- .../probability_theory/poisson_distribution.v | 10 +- theories/probability_theory/random_variable.v | 136 ++--- .../probability_theory/uniform_distribution.v | 64 +-- theories/realfun.v | 223 ++++---- theories/sequences.v | 135 +++-- theories/showcase/pnt.v | 50 +- theories/showcase/summability.v | 2 +- theories/topology_theory/bool_topology.v | 2 +- theories/topology_theory/compact.v | 4 +- theories/topology_theory/connected.v | 4 +- theories/topology_theory/discrete_topology.v | 2 +- theories/topology_theory/function_spaces.v | 18 +- theories/topology_theory/initial_topology.v | 2 +- theories/topology_theory/matrix_topology.v | 2 +- theories/topology_theory/metric_structure.v | 2 +- theories/topology_theory/nat_topology.v | 2 +- theories/topology_theory/num_topology.v | 2 +- .../one_point_compactification.v | 2 +- theories/topology_theory/order_topology.v | 18 +- theories/topology_theory/product_topology.v | 2 +- .../topology_theory/pseudometric_structure.v | 2 +- theories/topology_theory/quotient_topology.v | 4 +- theories/topology_theory/separation_axioms.v | 8 +- theories/topology_theory/sigT_topology.v | 2 +- theories/topology_theory/subspace_topology.v | 17 +- theories/topology_theory/subtype_topology.v | 6 +- theories/topology_theory/supremum_topology.v | 2 +- theories/topology_theory/topology_structure.v | 2 +- theories/topology_theory/uniform_structure.v | 6 +- theories/trigo.v | 82 +-- 85 files changed, 2158 insertions(+), 2166 deletions(-) diff --git a/theories/borel_hierarchy.v b/theories/borel_hierarchy.v index d77658a42a..c7c116d498 100644 --- a/theories/borel_hierarchy.v +++ b/theories/borel_hierarchy.v @@ -15,7 +15,7 @@ From mathcomp Require Import measure lebesgue_measure measurable_realfun. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. diff --git a/theories/cantor.v b/theories/cantor.v index eee56e3f02..6a10eb7d40 100644 --- a/theories/cantor.v +++ b/theories/cantor.v @@ -33,7 +33,7 @@ From mathcomp Require Import cardinality reals topology. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -196,7 +196,7 @@ Unshelve. all: end_near. Qed. Let apx_prefix b c n : (forall i, (i < n)%N -> b i = c i) -> branch_apx b n = branch_apx c n. Proof. -elim: n => //= n IH inS; rewrite IH; first by rewrite inS. +elim: n => //= n IH inS; rewrite IH; last by rewrite inS. by move=> ? ?; exact/inS/ltnW. Qed. diff --git a/theories/charge.v b/theories/charge.v index 30e2018070..7dfca850c5 100644 --- a/theories/charge.v +++ b/theories/charge.v @@ -91,7 +91,7 @@ Reserved Notation "nu .-positive_set" (at level 2, format "nu .-positive_set"). Declare Scope charge_scope. -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -173,17 +173,17 @@ Lemma charge_semi_additiveW nu : nu set0 = 0 -> measure_function.semi_additive nu -> semi_additive2 nu. Proof. move=> nu0 anu A B mA mB + AB; rewrite -bigcup2inE bigcup_mkord. -move=> /(anu (bigcup2 A B)) ->. +move=> /(anu (bigcup2 A B)) ->; last 1 first. - by rewrite !(big_ord_recl, big_ord0)/= adde0. - by move=> [|[|[]]]//=. -- move=> [|[|i]] [|[|j]]/= _ _ //. - + by rewrite AB => -[]. - + by rewrite setI0 => -[]. - + by rewrite setIC AB => -[]. - + by rewrite setI0 => -[]. - + by rewrite set0I => -[]. - + by rewrite set0I => -[]. - + by rewrite setI0 => -[]. +move=> [|[|i]] [|[|j]]/= _ _ //. +- by rewrite AB => -[]. +- by rewrite setI0 => -[]. +- by rewrite setIC AB => -[]. +- by rewrite setI0 => -[]. +- by rewrite set0I => -[]. +- by rewrite set0I => -[]. +- by rewrite setI0 => -[]. Qed. Lemma charge_semi_additive2E nu : semi_additive2 nu = additive2 nu. @@ -203,11 +203,11 @@ Lemma chargeDI nu (A B : set T) : measurable A -> measurable B -> nu A = nu (A `\` B) + nu (A `&` B). Proof. move=> mA mB; rewrite -charge_semi_additive2. -- by rewrite -setDDr setDv setD0. - exact: measurableD. - exact: measurableI. - by apply: measurableU; [exact: measurableD |exact: measurableI]. - by rewrite setDE setIACA setICl setI0. +- by rewrite -setDDr setDv setD0. Qed. Lemma charge_partition nu S P N : @@ -277,8 +277,8 @@ Lemma chargeD nu (A B : set T) : measurable A -> measurable B -> Proof. move=> mA mB. rewrite (chargeDI nu mA mB) addeK// fin_numE 1?gt_eqF 1?lt_eqF//. -- by rewrite ltey_eq fin_num_measure//; exact:measurableI. - by rewrite ltNye_eq fin_num_measure//; exact:measurableI. +- by rewrite ltey_eq fin_num_measure//; exact:measurableI. Qed. End charge_lemmas_realFieldType. @@ -309,7 +309,7 @@ have tFD : trivIset setT FD. apply/trivIsetP => i j _ _ ij. move/trivIsetP : tF => /(_ i j Logic.I Logic.I ij). by rewrite /FD setIACA => ->; rewrite set0I. -rewrite -(charge_semi_additive _ _ mFD)//; last exact: bigsetU_measurable. +rewrite -(charge_semi_additive _ _ mFD)//; first exact: bigsetU_measurable. by rewrite /crestr /FD big_distrl. Qed. @@ -358,8 +358,8 @@ Let crestr0_sigma_additive : semi_sigma_additive restr. Proof. move=> F mF tF mU; rewrite /crestr0 mem_set//. rewrite [X in X @ _ --> _](_ : _ = (fun n => \sum_(0 <= i < n) crestr nu mD (F i))). - exact: charge_semi_sigma_additive. -by apply/funext => n; apply: eq_bigr => i _; rewrite mem_set. + by apply/funext => n; apply: eq_bigr => i _; rewrite mem_set. +exact: charge_semi_sigma_additive. Qed. HB.instance Definition _ := isCharge.Build _ _ _ @@ -380,7 +380,7 @@ Proof. by []. Qed. Let czero_sigma_additive : semi_sigma_additive czero. Proof. -move=> F mF tF mUF; rewrite [X in X @ _ --> _](_ : _ = cst 0); first exact: cvg_cst. +move=> F mF tF mUF; rewrite [X in X @ _ --> _](_ : _ = cst 0); last exact: cvg_cst. by apply/funext => n; rewrite big1. Qed. @@ -418,11 +418,11 @@ HB.instance Definition _ := Let cscale_sigma_additive : semi_sigma_additive cscale. Proof. move=> F mF tF mUF; rewrite /cscale; rewrite [X in X @ _ --> _](_ : _ = - (fun n => r%:E * \sum_(0 <= i < n) nu (F i))); last first. + (fun n => r%:E * \sum_(0 <= i < n) nu (F i))). apply/funext => k; rewrite fin_num_sume_distrr// => i j _ _. by rewrite fin_num_adde_defl// fin_num_measure. rewrite /mscale; have [->|r0] := eqVneq r 0%R. - rewrite mul0e [X in X @ _ --> _](_ : _ = (fun=> 0)); first exact: cvg_cst. + rewrite mul0e [X in X @ _ --> _](_ : _ = (fun=> 0)); last exact: cvg_cst. by under eq_fun do rewrite mul0e. by apply: cvgeZl => //; exact: charge_semi_sigma_additive. Qed. @@ -466,7 +466,7 @@ Proof. by move=> mA; rewrite fin_numN fin_num_measure. Qed. Let copp_sigma_additive : semi_sigma_additive copp. Proof. move=> F mF tF mUF; rewrite /copp; under eq_fun. - move=> n; rewrite sumeN; last first. + move=> n; rewrite sumeN. by move=> p q _ _; rewrite fin_num_adde_defl// fin_num_measure. over. exact/cvgeN/charge_semi_sigma_additive. @@ -694,7 +694,7 @@ have := d_ge0 A; rewrite le_eqVlt => /predU1P[<-|d_gt0]. have /ereal_sup_gt/cid2[_ [B/= [mB BDA <- mnuB]]] : m < d_ A. rewrite /m; have [->|dn1oo] := eqVneq (d_ A) +oo. by rewrite min_r ?ltey ?gt0_mulye ?leey. - rewrite -(@fineK _ (d_ A)); last by rewrite gt0_fin_numE// ltey. + rewrite -(@fineK _ (d_ A)); first by rewrite gt0_fin_numE// ltey. rewrite -EFinM -fine_min// lte_fin gt_min; apply/orP; left. by rewrite ltr_pdivrMr// ltr_pMr ?ltr1n// fine_gt0// d_gt0/= ltey. by exists B; split => //; rewrite (le_trans _ (ltW mnuB)). @@ -738,10 +738,10 @@ have nuAoo : 0 <= nu Aoo. move/cvg_lim : cvg_nuA => <-//=; apply: nneseries_ge0 => n _ _. exact: nuA_ge0. have A_cvg_0 : nu (A_ (v n)) @[n --> \oo] --> 0. - rewrite [X in X @ _ --> _](_ : _ = (fun n => (fine (nu (A_ (v n))))%:E)); last first. + rewrite [X in X @ _ --> _](_ : _ = (fun n => (fine (nu (A_ (v n))))%:E)). by apply/funext => n/=; rewrite fineK// fin_num_measure. apply: continuous_cvg => //; apply: cvg_series_cvg_0. - rewrite (_ : series _ = fine \o (fun n => \sum_(0 <= i < n) nu (A_ (v i)))); last first. + rewrite (_ : series _ = fine \o (fun n => \sum_(0 <= i < n) nu (A_ (v i)))). apply/funext => n /=. by rewrite /series/= sum_fine//= => i _; rewrite fin_num_measure. move: cvg_nuA; rewrite -(@fineK _ (nu Aoo)) ?fin_num_measure//. @@ -752,7 +752,7 @@ have mine_cvg_0 : (mine (g_ (v n) * 2^-1%:E) 1) @[n --> \oo] --> 0. by apply: nearW => n /=; rewrite nuA_g_ andbT le_min lee01 andbT mule_ge0. have g_cvg_0 : (g_ \o v) n @[n --> \oo] --> 0 by apply: mine2_cvg_0_cvg_0 => //=. have nuDAoo : nu D >= nu (D `\` Aoo). - rewrite -[in leRHS](@setDUK _ Aoo D); last first. + rewrite -[in leRHS](@setDUK _ Aoo D). by apply: bigcup_sub => i _; exact: A_D. by rewrite chargeU// ?leeDr// ?setDIK//; exact: measurableD. split; [by []| |by []]; split; [exact: measurableD | move=> E mE EDAoo]. @@ -829,7 +829,7 @@ have := s_le0 U; rewrite le_eqVlt => /predU1P[->|s_lt0]. have /ereal_inf_lt/cid2[_ [B/= [mB BU] <-] nuBm] : s_ U < m. rewrite /m; have [->|s0oo] := eqVneq (s_ U) -oo. by rewrite max_r ?ltNye// gt0_mulNye// leNye. - rewrite -(@fineK _ (s_ U)); last by rewrite lt0_fin_numE// ltNye. + rewrite -(@fineK _ (s_ U)); first by rewrite lt0_fin_numE// ltNye. rewrite -EFinM -fine_max// lte_fin lt_max; apply/orP; left. by rewrite ltr_pdivlMr// gtr_nMr ?ltr1n// fine_lt0// s_lt0/= ltNye andbT. have [C [CB nsC nuCB]] := hahn_decomposition_lemma nu mB. @@ -876,7 +876,7 @@ have not_s_cvg_0 : ~ (z_ \o v) n @[n --> \oo] --> 0. by rewrite normr_gt0// fine_eq0// ?lt_eqF// fin_num_measure. near \oo => n. have /hM : (M <= n)%N by near: n; exists M. - rewrite sub0r normrN /= ler0_norm ?fine_le0// ltr0_norm//; last first. + rewrite sub0r normrN /= ler0_norm ?fine_le0// ltr0_norm//. by rewrite fine_lt0// nuD0 andbT ltNye_eq fin_num_measure. rewrite ltrN2; apply/negP; rewrite -leNgt fine_le ?fin_num_measure//. by near: n; exact. @@ -900,13 +900,13 @@ have : cvg (series (fun n => fine (maxe (z_ (v n) * 2^-1%:E) (- 1%E))) n @[n --> rewrite (_ : _ \o _ = (fun n => \sum_(0 <= k < n) fine (maxe (z_ (v k) * 2^-1%:E)%E (- 1%E)%E))%R) //. apply/funext => n/=; rewrite sum_fine// => m _. - rewrite le0_fin_numE; first by rewrite lt_max ltNyr orbT. + rewrite le0_fin_numE; last by rewrite lt_max ltNyr orbT. by rewrite /maxe; case: ifPn => // _; rewrite mule_le0_ge0. move/cvg_series_cvg_0 => maxe_cvg_0. apply: not_s_cvg_0. -rewrite (_ : _ \o _ = (fun n => z_ (v n) * 2^-1%:E) \* cst 2%:E); last first. +rewrite (_ : _ \o _ = (fun n => z_ (v n) * 2^-1%:E) \* cst 2%:E). by apply/funext => n/=; rewrite -muleA -EFinM mulVf ?mule1. -rewrite (_ : 0 = 0 * 2%:E); last by rewrite mul0e. +rewrite (_ : 0 = 0 * 2%:E); first by rewrite mul0e. apply: cvgeM; [by rewrite mule_def_fin| |exact: cvg_cst]. apply/fine_cvgP; split. move/cvgrPdist_lt : maxe_cvg_0 => /(_ _ ltr01)[M _ hM]; near=> n. @@ -933,15 +933,15 @@ move=> [psP1 nsN1 PN1T PN10] [psP2 nsN2 PN2T PN20] S mS. move: (psP1) (nsN1) (psP2) (nsN2) => [mP1 _] [mN1 _] [mP2 _] [mN2 _]. split. - transitivity (nu (S `&` P1 `&` P2)). - + rewrite (charge_partition _ _ mP2 mN2)//; last exact: measurableI. + + rewrite (charge_partition _ _ mP2 mN2)//; first exact: measurableI. by rewrite (positive_negative0 psP1 nsN2 mS) adde0. - + rewrite [RHS](charge_partition _ _ mP1 mN1)//; last exact: measurableI. + + rewrite [RHS](charge_partition _ _ mP1 mN1)//; first exact: measurableI. by rewrite (positive_negative0 psP2 nsN1 mS) adde0 setIAC. - transitivity (nu (S `&` N1 `&` N2)). - + rewrite (charge_partition nu _ mP2 mN2)//; last exact: measurableI. + + rewrite (charge_partition nu _ mP2 mN2)//; first exact: measurableI. have := positive_negative0 psP2 nsN1 mS. by rewrite setIAC => ->; rewrite add0e. - + rewrite [RHS](charge_partition nu _ mP1 mN1)//; last exact: measurableI. + + rewrite [RHS](charge_partition nu _ mP1 mN1)//; first exact: measurableI. by rewrite (setIAC _ _ P1) (positive_negative0 psP1 nsN2 mS) add0e setIAC. Qed. @@ -1176,13 +1176,11 @@ have echarge n : e%:E <= charge_variation nuPN (\bigcup_(j >= n) F j). rewrite le_measure// ?inE//; first exact: bigcup_measurable. by apply: bigcup_sup => /=. have /(_ _ _)/cvg_lim <-// := lim_sup_set_cvg (charge_variation nuPN) F. - apply: lime_ge. - apply: ereal_nonincreasing_is_cvgn => a b ab. - rewrite le_measure ?inE//; [exact: bigcup_measurable| - exact: bigcup_measurable|]. - by apply: bigcup_subset => n/=; exact: leq_trans. - by apply: nearW => k; exact: echarge. -by rewrite -ge0_fin_numE// fin_num_measure//; exact: bigcup_measurable. + by rewrite -ge0_fin_numE// fin_num_measure//; exact: bigcup_measurable. +apply: lime_ge; last by apply: nearW => k; exact: echarge. +apply: ereal_nonincreasing_is_cvgn => a b ab. +rewrite le_measure ?inE//; [exact: bigcup_measurable|exact: bigcup_measurable|]. +by apply: bigcup_subset => n/=; exact: leq_trans. Qed. End charge_variation_continuous. @@ -1205,7 +1203,7 @@ Lemma semi_sigma_additive_nng_induced (f : T -> \bar R) : measurable_fun setT f -> (forall x, 0 <= f x) -> semi_sigma_additive (fun A => \int[mu]_(t in A) f t). Proof. -move=> mf f0 /= F mF tF mUF; rewrite ge0_integral_bigcup//=; last first. +move=> mf f0 /= F mF tF mUF; rewrite ge0_integral_bigcup//=. exact: measurable_funTS. by apply: is_cvg_ereal_nneg_natsum_cond => // n _ _; exact: integral_ge0. Qed. @@ -1227,7 +1225,7 @@ Proof. move=> /= F mF tF mUF; set SF := (f in f n @[n --> \oo] --> _). rewrite (_ : SF = fun n => \sum_(0 <= i < n) (\int[mu]_(x in F i) f^\+ x) - - \sum_(0 <= i < n) (\int[mu]_(x in F i) f^\- x)); last first. + \sum_(0 <= i < n) (\int[mu]_(x in F i) f^\- x)). apply/funext => n; rewrite /SF; under eq_bigr do rewrite /nu integralE. rewrite big_split/= sumeN//= => i j _ _. rewrite fin_num_adde_defl// integrable_fin_num//= integrable_funeneg//=. @@ -1289,15 +1287,15 @@ exists r; split => //= A mA Ad. have {re} := re _ mA Ad. rewrite -lte_fin; apply: le_lt_trans. rewrite /Rintegral fineK; last first. - have : mu.-integrable A (abse \o EFin \o f) by exact: integrableS intnf. - move/integrableP : intf => -[_ intfoo _]. - rewrite ge0_fin_numE//=; last exact: integral_ge0. - apply: le_lt_trans intfoo. - apply: ge0_subset_integral => //=. - apply: measurableT_comp => //. - by case/integrableP : intnf => /= /measurable_EFinP. -rewrite -[leLHS](gee0_abs)//; last exact: integral_ge0. -exact: (le_trans _ (abse_charge_variation _ _)). + rewrite -[leLHS](gee0_abs)//; first exact: integral_ge0. + exact: (le_trans _ (abse_charge_variation _ _)). +have : mu.-integrable A (abse \o EFin \o f) by exact: integrableS intnf. +move/integrableP : intf => -[_ intfoo _]. +rewrite ge0_fin_numE//=; first exact: integral_ge0. +apply: le_lt_trans intfoo. +apply: ge0_subset_integral => //=. +apply: measurableT_comp => //. +by case/integrableP : intnf => /= /measurable_EFinP. Qed. End integral_normr_continuous. @@ -1362,7 +1360,7 @@ Qed. Lemma sup_int_approxRN_fin_num : M \is a fin_num. Proof. -rewrite ge0_fin_numE; first exact: sup_int_approxRN_lty. +rewrite ge0_fin_numE; last exact: sup_int_approxRN_lty. exact: sup_int_approxRN_ge0. Qed. @@ -1473,7 +1471,7 @@ have j0max k : (k < j0)%N -> g_ k x < g_ j0 x. have := h k; rewrite -(eqP j'j) -gkj' eqxx andbT (ltn_trans kj' j'm). by move=> /(_ erefl); rewrite leqNgt kj'. exists j0 => //; split. - rewrite /F_ /max_approxRN_seq (bigmax_eq_arg _ ord0)//; last first. + rewrite /F_ /max_approxRN_seq (bigmax_eq_arg _ ord0)//. by move=> ? _; rewrite leNye. rewrite /j0/=; case: ex_minnP => //= j' /andP[j'm /eqP]. by rewrite /g_ => -> h. @@ -1516,10 +1514,10 @@ Definition fRN := fun x => lim (F ^~ x @ \oo). Lemma measurable_fun_fRN : measurable_fun [set: T] fRN. Proof. rewrite (_ : fRN = fun x => limn_esup (F ^~ x)). - apply: measurable_fun_limn_esup => // n. - exact: measurable_max_approxRN_seq. -apply/funext=> n; rewrite is_cvg_limn_esupE//. -exact: is_cvg_max_approxRN_seq. + apply/funext=> n; rewrite is_cvg_limn_esupE//. + exact: is_cvg_max_approxRN_seq. +apply: measurable_fun_limn_esup => // n. +exact: measurable_max_approxRN_seq. Qed. Lemma fRN_ge0 x : 0 <= fRN x. @@ -1542,7 +1540,7 @@ Let E m j := is_max_approxRN mu nu m j. Let int_F_nu m A (mA : measurable A) : \int[mu]_(x in A) F m x <= nu A. Proof. rewrite [leLHS](_ : _ = - \sum_(j < m.+1) \int[mu]_(x in (A `&` E m j)) F m x); last first. + \sum_(j < m.+1) \int[mu]_(x in (A `&` E m j)) F m x). rewrite -[in LHS](setIT A) -(bigsetU_is_max_approxRN mu nu m) big_distrr/=. rewrite -(@big_mkord _ _ _ m.+1 xpredT (fun i => A `&` is_max_approxRN mu nu m i)). rewrite ge0_integral_bigsetU ?big_mkord//. @@ -1553,16 +1551,16 @@ rewrite [leLHS](_ : _ = - by apply: measurable_funTS => //; exact: measurable_max_approxRN_seq. - by move=> ? ?; exact: max_approxRN_seq_ge0. rewrite [leLHS](_ : _ = - \sum_(j < m.+1) (\int[mu]_(x in (A `&` (E m j))) g j x)); last first. + \sum_(j < m.+1) (\int[mu]_(x in (A `&` (E m j))) g j x)). apply: eq_bigr => i _; apply:eq_integral => x; rewrite inE => -[?] [] Fmgi h. by apply/eqP; rewrite eq_le; rewrite /F Fmgi lexx. -rewrite [leRHS](_ : _ = \sum_(j < m.+1) (nu (A `&` E m j))); last first. +rewrite [leRHS](_ : _ = \sum_(j < m.+1) (nu (A `&` E m j))). rewrite -(@measure_semi_additive _ _ _ nu (fun i => A `&` E m i))//. - - by rewrite -big_distrr/= bigsetU_is_max_approxRN// setIT. - by move=> k; apply: measurableI => //; exact: measurable_is_max_approxRN. - by apply: trivIset_setIl => //; exact: trivIset_is_max_approxRN. - apply: bigsetU_measurable => /= i _; apply: measurableI => //. exact: measurable_is_max_approxRN. + - by rewrite -big_distrr/= bigsetU_is_max_approxRN// setIT. apply: lee_sum => //= i _. have [+ _] := approxRN_seq_prop mu nu i. rewrite inE /G/= => -[_ _]; apply. @@ -1575,7 +1573,7 @@ rewrite inE /G/=; split. - by move=> ?; exact: max_approxRN_seq_ge0. - apply/integrableP; split; first exact: measurable_max_approxRN_seq. under eq_integral. - by move=> x _; rewrite gee0_abs; last exact: max_approxRN_seq_ge0; over. + by move=> x _; rewrite gee0_abs; first exact: max_approxRN_seq_ge0; over. have /le_lt_trans := int_F_nu m measurableT; apply. by apply: fin_num_fun_lty; exact: fin_num_measure. - by move=> A; exact: int_F_nu. @@ -1598,7 +1596,7 @@ Lemma int_fRN_lty : \int[mu]_x `|fRN x| < +oo. Proof. rewrite (@le_lt_trans _ _ M)//; last exact: sup_int_approxRN_lty. under eq_integral. - by move=> x _; rewrite gee0_abs; last exact: fRN_ge0; over. + by move=> x _; rewrite gee0_abs; first exact: fRN_ge0; over. rewrite int_fRN_lim// lime_le//; first exact: is_cvg_int_max_approxRN_seq. by apply: nearW => n; have [_ /andP[_ ]] := M_g_F n. Qed. @@ -1624,7 +1622,7 @@ have cvgM : (M - m.+1%:R^-1%:E) @[m --> \oo] --> M. rewrite [X in X @ _ --> _](_ : _ = (fun x => x.+1%:R^-1)%R)//. apply/gtr0_cvgV0; first exact: nearW. apply/cvgrnyP. - rewrite [X in X @ _](_ : _ = fun n => n + 1)%N; first exact: cvg_addnr. + rewrite [X in X @ _](_ : _ = fun n => n + 1)%N; last exact: cvg_addnr. by apply/funext => n; rewrite addn1. apply: (@le_trans _ _ (lim (M - m.+1%:R^-1%:E @[m --> \oo]))). by move/cvg_lim : cvgM => ->. @@ -1642,12 +1640,12 @@ Proof. have [muA0|] := eqVneq (mu A) 0. exists (PosNum ltr01). under eq_integral. - move=> x _; rewrite -(@gee0_abs _ (_ + _)); last first. + move=> x _; rewrite -(@gee0_abs _ (_ + _)). by rewrite adde_ge0 ?fRN_ge0. over. rewrite integral_abs_eq0//. - by rewrite (le_lt_trans _ h)// integral_ge0// => x Ax; exact: fRN_ge0. - by apply: emeasurable_funD => //; exact: measurable_funS measurable_fun_fRN. + by apply: emeasurable_funD => //; exact: measurable_funS measurable_fun_fRN. + by rewrite (le_lt_trans _ h)// integral_ge0// => x Ax; exact: fRN_ge0. rewrite neq_lt ltNge measure_ge0//= => muA_gt0. pose mid := ((fine (nu A) - fine (\int[mu]_(x in A) fRN x)) / 2)%R. pose e := (mid / fine (mu A))%R. @@ -1658,13 +1656,13 @@ have e_gt0 : (0 < e)%R. rewrite /e divr_gt0//; last first. by rewrite fine_gt0// muA_gt0/= ltey_eq fin_num_measure. by rewrite divr_gt0// subr_gt0// fine_lt// fin_num_measure. -exists (PosNum e_gt0); rewrite ge0_integralD//; last 2 first. +exists (PosNum e_gt0); rewrite ge0_integralD//. by move=> x Ax; exact: fRN_ge0. exact: measurable_funS measurable_fun_fRN. -rewrite integral_cst// -lteBrDr//; last first. +rewrite integral_cst// -lteBrDr//. by rewrite fin_numM// fin_num_measure. rewrite -[X in _ * X](@fineK _ (mu A)) ?fin_num_measure//. -rewrite -EFinM divfK; last first. +rewrite -EFinM divfK. by rewrite gt_eqF// fine_gt0// muA_gt0/= ltey_eq fin_num_measure. rewrite lteBrDl// addeC -lteBrDl//; last first. rewrite -(@fineK _ (nu A))// ?fin_num_measure// -[X in _ - X](@fineK _)//. @@ -1684,15 +1682,15 @@ Qed. Let fin_num_int_fRN_eps B : measurable B -> \int[mu]_(x in B) (fRN x + epsRN%:num%:E) \is a fin_num. Proof. -move=> mB; rewrite ge0_integralD//; last 2 first. +move=> mB; rewrite ge0_integralD//. by move=> x Bx; exact: fRN_ge0. exact: measurable_funS measurable_fun_fRN. rewrite fin_numD integral_cst// fin_numM ?fin_num_measure// andbT. -rewrite ge0_fin_numE ?measure_ge0; last first. +rewrite ge0_fin_numE ?measure_ge0. by apply: integral_ge0 => x Bx; exact: fRN_ge0. rewrite (le_lt_trans _ int_fRN_lty)//. under [in leRHS]eq_integral. - move=> x _; rewrite gee0_abs; last first. + move=> x _; rewrite gee0_abs. exact: fRN_ge0. over. apply: ge0_subset_integral => //; first exact: measurable_fun_fRN. @@ -1709,21 +1707,21 @@ Let sigmaRN_sigma_additive : semi_sigma_additive sigmaRN. Proof. move=> H mH tH mUH. rewrite [X in X @ _ --> _](_ : _ = (fun n => \sum_(0 <= i < n) nu (H i) - - \sum_(0 <= i < n) \int[mu]_(x in H i) (fRN x + epsRN%:num%:E))); last first. + \sum_(0 <= i < n) \int[mu]_(x in H i) (fRN x + epsRN%:num%:E))). apply/funext => n; rewrite big_split/= fin_num_sumeN// => i _. by rewrite fin_num_int_fRN_eps. apply: cvgeB. - by rewrite adde_defC fin_num_adde_defl// fin_num_measure. - exact: measure_semi_sigma_additive. -- rewrite (ge0_integral_bigcup _ mH _ _ tH). - + have /cvg_ex[/= l hl] : cvg ((fun n => - \sum_(0 <= i < n) \int[mu]_(y in H i) (fRN y + epsRN%:num%:E)) @ \oo). - apply: is_cvg_ereal_nneg_natsum => n _. - by apply: integral_ge0 => x _; rewrite adde_ge0 ?fRN_ge0. - by rewrite (@cvg_lim _ _ _ _ _ _ l). - + apply: emeasurable_funD => //=; apply: measurable_funTS. - exact: measurable_fun_fRN. - + by move=> x _; rewrite adde_ge0 ?fRN_ge0. +rewrite (ge0_integral_bigcup _ mH _ _ tH). +- apply: emeasurable_funD => //=; apply: measurable_funTS. + exact: measurable_fun_fRN. +- by move=> x _; rewrite adde_ge0 ?fRN_ge0. +have /cvg_ex[/= l hl] : cvg ((fun n => + \sum_(0 <= i < n) \int[mu]_(y in H i) (fRN y + epsRN%:num%:E)) @ \oo). + apply: is_cvg_ereal_nneg_natsum => n _. + by apply: integral_ge0 => x _; rewrite adde_ge0 ?fRN_ge0. +by rewrite (@cvg_lim _ _ _ _ _ _ l). Qed. HB.instance Definition _ := @isCharge.Build _ _ _ sigmaRN @@ -1785,13 +1783,13 @@ have hnuP S : measurable S -> S `<=` AP -> \int[mu]_(x in S) h x <= nu S. move=> mS SAP. have : 0 <= sigma S. by apply: posP => //; apply: (subset_trans SAP); exact: subIsetr. - rewrite sube_ge0; last by rewrite fin_num_measure// orbT. + rewrite sube_ge0; first by rewrite fin_num_measure// orbT. apply: le_trans; rewrite le_eqVlt; apply/orP; left; apply/eqP. rewrite -{1}(setIid S) integral_mkcondr; apply/eq_integral => x /[!inE] Sx. by rewrite /restrict /h !ifT// inE//; exact: SAP. have hnuN S : measurable S -> S `<=` ~` AP -> \int[mu]_(x in S) h x <= nu S. move=> mS ScAP; rewrite /h; under eq_integral. - move=> x xS; rewrite ifF; last first. + move=> x xS; rewrite ifF. by apply/negbTE; rewrite notin_setE; apply: ScAP; apply: set_mem. over. exact: int_fRN_ub. @@ -1801,11 +1799,11 @@ have hnu S : measurable S -> \int[mu]_(x in S) h x <= nu S. have mSIAP : measurable (S `&` AP) by exact: measurableI. have mSDAP : measurable (S `\` AP) by exact: measurableD. rewrite ge0_integral_setU //. - - rewrite measureU//. - by apply: leeD; [exact: hnuN|exact: hnuP]. - by rewrite setDE setIACA setICl setI0. - exact: measurable_funTS. - by rewrite disj_set2E setDE setIACA setICl setI0. + rewrite measureU//. + by rewrite setDE setIACA setICl setI0. + by apply: leeD; [exact: hnuN|exact: hnuP]. have int_h_M : \int[mu]_x h x > M. have mCAP := measurableC mAP. have disj_AP : [disjoint AP & ~` AP] by exact/disj_set2P/setICr. @@ -1813,16 +1811,16 @@ have int_h_M : \int[mu]_x h x > M. under eq_integral do rewrite ifT//. under [X in _ < _ + X]eq_integral. by move=> x; rewrite inE /= => xE0p; rewrite memNset//; over. - rewrite ge0_integralD//; last 2 first. + rewrite ge0_integralD//. - by move=> x _; exact: f_ge0. - by apply: measurable_funTS; exact: mf. - rewrite integral_cst // addeAC -ge0_integral_setU//; last 2 first. + rewrite integral_cst // addeAC -ge0_integral_setU//. by rewrite setUv//; exact: mf. by move=> x _; exact: f_ge0. - rewrite setUv int_fRNE -lte_subel_addl; last first. + rewrite setUv int_fRNE -lte_subel_addl. rewrite ge0_fin_numE ?sup_int_approxRN_lty. - exact: approxRN_seq.sup_int_approxRN_lty. - exact: sup_int_approxRN_ge0. + exact: sup_int_approxRN_ge0. + exact: approxRN_seq.sup_int_approxRN_lty. by rewrite /M subee ?mule_gt0// approxRN_seq.sup_int_approxRN_fin_num. have Gh : G h. split=> //; apply/integrableP; split => //. @@ -1874,34 +1872,34 @@ have mf_ k : measurable_fun setT (f_ k). have if_T k : integrable mu setT (f_ k). apply/integrableP; split => //. under eq_integral do rewrite gee0_abs//. - rewrite -(setUv (E k)) ge0_integral_setU //; last 3 first. + rewrite -(setUv (E k)) ge0_integral_setU //. - exact: measurableC. - by rewrite setUv. - exact/disj_set2P/subsets_disjoint. rewrite /f_; under eq_integral do rewrite ifT//. - rewrite (@eq_measure_integral _ _ _ (E k) (mu_ k)); last first. + rewrite (@eq_measure_integral _ _ _ (E k) (mu_ k)). by move=> A mA AEj; rewrite /mu_ /= /mfrestr /mrestr setIidl. rewrite -int_gE ?inE//. under eq_integral. - move=> x /[!inE] /= Ekx; rewrite ifF; last by rewrite memNset. + move=> x /[!inE] /= Ekx; rewrite ifF; first by rewrite memNset. over. by rewrite integral0 ?adde0 ltey_eq fin_num_measure. have int_f_E j S : measurable S -> \int[mu]_(x in S) f_ j x = nu (S `&` E j). move=> mS. have mSIEj := measurableI _ _ mS (mE j). have mSDEj := measurableD mS (mE j). - rewrite -{1}(setUIDK S (E j)) (ge0_integral_setU _ mSIEj mSDEj)//; last 2 first. + rewrite -{1}(setUIDK S (E j)) (ge0_integral_setU _ mSIEj mSDEj)//. - by rewrite setUIDK; exact: (measurable_funS measurableT). - by apply/disj_set2P; rewrite setDE setIACA setICr setI0. - rewrite /f_ -(eq_integral _ (g_ j)); last first. + rewrite /f_ -(eq_integral _ (g_ j)). by move=> x /[!inE] SIEjx; rewrite /f_ ifT// inE; exact: (@subIsetr _ S). - rewrite (@eq_measure_integral _ _ _ (S `&` E j) (mu_ j)); last first. + rewrite (@eq_measure_integral _ _ _ (S `&` E j) (mu_ j)). move=> A mA; rewrite subsetI => -[_ ?]; rewrite /mu_ /=. by rewrite /mfrestr /mrestr setIidl. - rewrite -int_gE; last exact: measurableI. + rewrite -int_gE; first exact: measurableI. under eq_integral. move=> x; rewrite inE setDE /= => -[_ Ejx]. - rewrite ifF; last by rewrite memNset. + rewrite ifF; first by rewrite memNset. over. by rewrite integral0 adde0 /nu_/= /mfrestr /mrestr -setIA setIid. pose f x : \bar R := \sum_(j //. - under eq_integral do (rewrite gee0_abs; last exact: nneseries_ge0). + under eq_integral do (rewrite gee0_abs; first exact: nneseries_ge0). by rewrite int_f_nuT ltey_eq fin_num_measure. have ae_f := integrable_ae measurableT fi. pose f' x := if f x \is a fin_num then f x else 0. @@ -1932,18 +1930,18 @@ exists f'; split. move/ae_eq_integral : (ff') => /(_ measurableT mf) <-//. by apply/abse_integralP => //; move/integrableP : fi => []. have nuf A : d.-measurable A -> nu A = \int[mu]_(x in A) f x. - move=> mA; rewrite integral_nneseries//; last first. + move=> mA; rewrite integral_nneseries//. by move=> n; exact: measurable_funTS. - rewrite nneseries_esum; last by move=> m _; rewrite integral_ge0. + rewrite nneseries_esum; first by move=> m _; rewrite integral_ge0. under eq_esum do rewrite int_f_E//. - rewrite -nneseries_esum; last first. + rewrite -nneseries_esum. by move=> n; rewrite measure_ge0//; exact: measurableI. - rewrite (@eq_eseriesl _ _ (fun x => x \in [set: nat])); last first. + rewrite (@eq_eseriesl _ _ (fun x => x \in [set: nat])). by move=> x; rewrite in_setT. rewrite -measure_bigcup//. - - by rewrite -setI_bigcupr UET setIT. - by move=> i _; exact: measurableI. - exact: trivIset_setIl. + - by rewrite -setI_bigcupr UET setIT. move=> A mA; rewrite nuf ?inE//; apply: ae_eq_integral => //. - exact/measurable_funTS. - exact/measurable_funTS. @@ -2026,14 +2024,14 @@ transitivity (\int[nu]_(x in E) by apply: eq_integral => t tE; rewrite /= fimfunE -fsumEFin. have indich m r : measurable_fun E (fun x => (r * \1_(h m @^-1` [set r]) x)%:E). by apply: (measurable_comp measurableT) => //; exact: measurable_funM. -rewrite ge0_integral_fsum//; last by move=> m y Ey; exact: nnfun_muleindic_ge0. +rewrite ge0_integral_fsum//; first by move=> m y Ey; exact: nnfun_muleindic_ge0. transitivity (\int[mu]_(x in E) (\sum_(y \in range (h n)) (y * \1_(h n @^-1` [set y]) x)%:E * g x)). under [RHS]eq_integral => x xE. - rewrite -ge0_mule_fsuml => [|y]; last exact: nnfun_muleindic_ge0. + rewrite -ge0_mule_fsuml => [y|]; first exact: nnfun_muleindic_ge0. rewrite fsumEFin // -(fimfunE _ x); over. by []. -rewrite ge0_integral_fsum//; last 2 first. +rewrite ge0_integral_fsum//. - move=> y; apply: emeasurable_funM => //; apply: measurable_funTS. exact: measurable_int (f_integrable _). - by move=> m y Ey; rewrite mule_ge0 ?f_ge0// nnfun_muleindic_ge0. @@ -2042,14 +2040,14 @@ under [RHS]eq_integral do rewrite EFinM. rewrite integralZl_indic_nnsfun => //. under eq_integral do rewrite EFinM -muleA. rewrite ge0_integralZl//. -- under eq_integral do rewrite muleC. - rewrite (eq_integral (g \_ (h n @^-1` [set r]))); last first. - by move=> x xE; rewrite epatch_indic. - by rewrite -integral_mkcondr -f_integral// integral_indic// setIC. - apply: emeasurable_funM; first exact/measurable_EFinP. exact/measurable_funTS/(measurable_int _ (f_integrable _)). - by move=> t Et; rewrite mule_ge0 ?lee_fin ?f_ge0. - by move: rhn; rewrite inE => -[t _ <-]; rewrite lee_fin. +under eq_integral do rewrite muleC. +rewrite (eq_integral (g \_ (h n @^-1` [set r]))). + by move=> x xE; rewrite epatch_indic. +by rewrite -integral_mkcondr -f_integral// integral_indic// setIC. Qed. Lemma integrableM f E : (forall x, 0 <= f x) -> measurable E -> @@ -2059,10 +2057,10 @@ move=> f0 mE intEf; apply/integrableP; split. apply: emeasurable_funM; first exact: (measurable_int nu). exact/measurable_funTS/(measurable_int _ (f_integrable _)). under eq_integral. - move=> x _; rewrite gee0_abs; last first. + move=> x _; rewrite gee0_abs. by apply: mule_ge0=> //; exact: f_ge0. over. -rewrite change_of_variables//; last exact: (measurable_int nu). +rewrite change_of_variables//; first exact: (measurable_int nu). by move/integrableP : intEf=> [mf +]; under eq_integral do rewrite gee0_abs//. Qed. @@ -2087,10 +2085,10 @@ apply: integral_ae_eq => //. exact: null_dominates_trans numu mula. - apply: emeasurable_funM => //. exact/measurable_funTS/(measurable_int _ (f_integrable _)). -- move=> A AE mA; rewrite change_of_variables//. - + by rewrite -!f_integral//; exact: null_dominates_trans numu mula. - + exact: f_ge0. - + exact: measurable_funS mf. +move=> A AE mA; rewrite change_of_variables//. +- exact: f_ge0. +- exact: measurable_funS mf. +- by rewrite -!f_integral//; exact: null_dominates_trans numu mula. Qed. End chain_rule. @@ -2114,7 +2112,7 @@ have [fn [fn0 fnfin intfn fnE]] := @radon_nikodym_sigma_finite _ _ _ mu exists (fp \- fn); split; first by move=> x; rewrite fin_numB// fpfin fnfin. exact: integrableB. move=> E mE; rewrite [LHS](jordan_decomp nuPN mE)// integralB//; - [|exact: (integrableS measurableT)..]. + [exact: (integrableS measurableT)..|]. by rewrite -fpE ?inE// -fnE ?inE//= /cadd/= cscaleN1. Qed. @@ -2177,7 +2175,7 @@ Lemma Radon_Nikodym_change_of_variables f E : measurable E -> \int[mu]_(x in E) (f x * ('d (charge_of_finite_measure nu) '/d mu) x) = \int[nu]_(x in E) f x. Proof. -move=> mE mf; rewrite [in RHS](funeposneg f) integralB //; last 2 first. +move=> mE mf; rewrite [in RHS](funeposneg f) integralB //. - exact: integrable_funepos. - exact: integrable_funeneg. transitivity (\int[mu]_(x in E) (f x * Radon_Nikodym_SigmaFinite.f nu mu x)). @@ -2190,11 +2188,11 @@ transitivity (\int[mu]_(x in E) (f x * Radon_Nikodym_SigmaFinite.f nu mu x)). - apply: ae_eqe_mul2l. exact/ae_eq_sym/ae_eq_Radon_Nikodym_SigmaFinite. rewrite [in LHS](funeposneg f). -under [in LHS]eq_integral => x xE. rewrite muleBl; last 2 first. +under [in LHS]eq_integral => x xE. rewrite muleBl. - exact: Radon_Nikodym_SigmaFinite.f_fin_num. - exact: add_def_funeposneg. over. -rewrite [in LHS]integralB //; last 2 first. +rewrite [in LHS]integralB //. - apply: Radon_Nikodym_SigmaFinite.integrableM => //. exact: integrable_funepos. - apply: Radon_Nikodym_SigmaFinite.integrableM => //. @@ -2218,9 +2216,9 @@ move=> mE numu; apply: integral_ae_eq => [//| | |A AE mA]. - apply: (integrableS measurableT) => //. exact/Radon_Nikodym_integrable/dominates_cscalel. - exact/measurable_funTS/emeasurable_funM. -- rewrite integralZl//; last first. +- rewrite integralZl//. by apply: (integrableS measurableT) => //; exact: Radon_Nikodym_integrable. - rewrite -Radon_Nikodym_integral => //; last exact: dominates_cscalel. + rewrite -Radon_Nikodym_integral => //; first exact: dominates_cscalel. by rewrite -Radon_Nikodym_integral. Qed. @@ -2232,8 +2230,8 @@ move=> mE nu0mu nu1mu; apply: integral_ae_eq => [//| | |A AE mA]. - apply: (integrableS measurableT) => //. by apply: Radon_Nikodym_integrable => /=; exact: dominates_cadd. - by apply: measurable_funTS => //; exact: emeasurable_funD. -- rewrite integralD //; [|exact: integrableS (Radon_Nikodym_integrable _)..]. - rewrite -Radon_Nikodym_integral //=; last exact: dominates_cadd. +- rewrite integralD //; [exact: integrableS (Radon_Nikodym_integrable _)..|]. + rewrite -Radon_Nikodym_integral //=; first exact: dominates_cadd. by rewrite -Radon_Nikodym_integral // -Radon_Nikodym_integral. Qed. @@ -2255,8 +2253,8 @@ apply: integral_ae_eq; [exact: measurableT| |exact: emeasurable_funM|]. - exact: Radon_Nikodym_integrable. - move=> E _ mE. rewrite -Radon_Nikodym_integral// Radon_Nikodym_change_of_variables//. - + exact: Radon_Nikodym_integral. + by apply: (integrableS measurableT) => //; exact: Radon_Nikodym_integrable. + + exact: Radon_Nikodym_integral. Qed. End Radon_Nikodym_chain_rule. diff --git a/theories/convex.v b/theories/convex.v index e097302844..7f4e0c7299 100644 --- a/theories/convex.v +++ b/theories/convex.v @@ -39,7 +39,7 @@ From mathcomp Require Import reals topology. Reserved Notation "x <| p |> y" (format "x <| p |> y", at level 49). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. diff --git a/theories/derive.v b/theories/derive.v index a5dec76a8d..141c53c95d 100644 --- a/theories/derive.v +++ b/theories/derive.v @@ -43,7 +43,7 @@ From mathcomp Require Import prodnormedzmodule tvs normedtype landau. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -196,9 +196,9 @@ Lemma differentiable_continuous (x : V) (f : V -> W) : differentiable f x -> {for x, continuous f}. Proof. move=> /diff_locallyP [dfc]; rewrite -addrA. -rewrite (littleo_bigO_eqo (cst (1 : R))); last first. +rewrite (littleo_bigO_eqo (cst (1 : R))). by apply/eqOP; near=> k; rewrite /cst [`|1|]normr1 mulr1; near do by []. -rewrite addfo; first by move=> /eqolim; rewrite cvg_comp_shift add0r. +rewrite addfo; last by move=> /eqolim; rewrite cvg_comp_shift add0r. by apply/eqolim0P; apply: (cvg_trans (dfc 0)); rewrite linear0. Unshelve. all: by end_near. Qed. @@ -335,7 +335,7 @@ Lemma deriveE (f : V -> W) (a v : V) : differentiable f a -> 'D_v f a = 'd f a v. Proof. rewrite /derive => /diff_locally -> /=; set k := 'o _. -evar (g : R -> W); rewrite [X in X @ _](_ : _ = g) /=; last first. +evar (g : R -> W); rewrite [X in X @ _](_ : _ = g) /=. rewrite funeqE=> h. by rewrite -[_ - _]addrA addrC subrKA scalerDr addrC linearZ scalerA /g. apply: cvg_lim => //. @@ -348,7 +348,7 @@ rewrite (_ : g = g1 + g2) ?funeqE // -(addr0 (_ _ v)); apply: cvgD. by exists e => //= x _ x0; apply eX; rewrite mulVf//= subrr normr0. rewrite /g2. have [->|v0] := eqVneq v 0. - rewrite (_ : (fun _ => _) = cst 0); first exact: cvg_cst. + rewrite (_ : (fun _ => _) = cst 0); last exact: cvg_cst. by rewrite funeqE => ?; rewrite scaler0 /k littleo_lim0 // scaler0. apply/cvgrPdist_lt => e e0. rewrite nearE /=; apply/nbhs_ballP. @@ -361,7 +361,7 @@ rewrite add0r normrN normrZ -ltr_pdivlMl ?normr_gt0 ?invr_neq0 //. have /Hi/le_lt_trans -> // : ball 0 i (j *: v). by rewrite -ball_normE/= add0r normrN (le_lt_trans _ jvi) // normrZ. rewrite -(mulrC e) -mulrA -ltr_pdivlMl // mulKf ?gt_eqF// normfV invrK. -rewrite ltr_pdivrMl; last by rewrite pmulr_rgt0 // normr_gt0. +rewrite ltr_pdivrMl; first by rewrite pmulr_rgt0 // normr_gt0. rewrite normrZ mulrC -mulrA. by rewrite ltr_pMl ?ltr1n // pmulr_rgt0 ?normm_gt0 // normr_gt0. Qed. @@ -422,7 +422,7 @@ Fact dcst (V W : normedModType R) (a : W) (x : V) : continuous (0 : V -> W) /\ Proof. split; first exact: cst_continuous. apply/eqaddoE; rewrite addr0 funeqE => ? /=; rewrite -[LHS]addr0; congr (_ + _). -by rewrite littleoE; last exact: littleo0_subproof. +by rewrite littleoE; first exact: littleo0_subproof. Qed. Variables (V W : normedModType R). @@ -477,7 +477,7 @@ Fact dlin (V' W' : normedModType R) (f : {linear V' -> W'}) x : Proof. move=> df; apply: eqaddoE; rewrite funeqE => y /=. rewrite linearD addrC -[LHS]addr0; congr (_ + _). -by rewrite littleoE; last exact: littleo0_subproof. (*fixme*) +by rewrite littleoE; first exact: littleo0_subproof. (*fixme*) Qed. (* TODO: generalize *) @@ -529,7 +529,7 @@ apply/ler_gtP => _ /posnumP[e]; rewrite ler_pdivrMr //. have /oid /nbhs_ballP [_ /posnumP[d] dfe] := [elaborate gt0 e]. set k := ((d%:num / 2) / (PosNum xn0)%:num)^-1. rewrite -{1}(@scalerKV _ _ k _ x) /k // linearZZ normrZ. -rewrite -ler_pdivlMl; last by rewrite gtr0_norm. +rewrite -ler_pdivlMl; first by rewrite gtr0_norm. rewrite mulrCA (@le_trans _ _ (e%:num * `|k^-1 *: x|)) //; last first. by rewrite ler_pM // normrZ normfV. apply: dfe; rewrite -ball_normE /= sub0r normrN normrZ. @@ -592,7 +592,7 @@ Global Instance is_diffD (f g df dg : V -> W) x : is_diff x f df -> is_diff x g dg -> is_diff x (f + g) (df + dg). Proof. move=> dfx dgx; apply: DiffDef; first exact: differentiableD. -by rewrite diffD; first (congr (_ + _); apply: diff_val). +by rewrite diffD; last (congr (_ + _); apply: diff_val). Qed. Lemma differentiable_sum n (f : 'I_n -> V -> W) (x : V) : @@ -988,7 +988,7 @@ move=> /le_trans -> //; rewrite [leLHS]mulrC ler_pM ?mulr_ge0 //. near: h; exists (`|x| / 2); first by rewrite /= divr_gt0 ?normr_gt0. move=> h; rewrite /= distrC subr0 => lthhx; rewrite addrC -[h]opprK. apply: le_trans (@ler_dist_dist _ R _ _). -rewrite normrN [leRHS]ger0_norm; last first. +rewrite normrN [leRHS]ger0_norm. rewrite subr_ge0; apply: ltW; apply: lt_le_trans lthhx _. by rewrite ler_pdivrMr // -{1}(mulr1 `|x|) ler_pM // ler1n. rewrite lerBrDr -lerBrDl (splitr `|x|). @@ -1144,7 +1144,7 @@ Fact der_add f g (x v : V) : derivable f x v -> derivable g x v -> 0^' --> 'D_v f x + 'D_v g x. Proof. move=> df dg. -evar (fg : R -> W); rewrite [X in X @ _](_ : _ = fg) /=; last first. +evar (fg : R -> W); rewrite [X in X @ _](_ : _ = fg) /=. rewrite funeqE => h. by rewrite !scalerDr scalerN scalerDr opprD addrACA -!scalerBr /fg. exact: cvgD. @@ -1195,7 +1195,7 @@ Fact der_opp f (x v : V) : derivable f x v -> (fun h => h^-1 *: (((- f) \o shift x) (h *: v) - (- f) x)) @ 0^' --> - 'D_v f x. Proof. -move=> df; evar (g : R -> W); rewrite [X in X @ _](_ : _ = g) /=; last first. +move=> df; evar (g : R -> W); rewrite [X in X @ _](_ : _ = g) /=. by rewrite funeqE => h; rewrite !scalerDr !scalerN -opprD -scalerBr /g. exact: cvgN. Qed. @@ -1231,7 +1231,7 @@ Fact der_scal f (k : R) (x v : V) : derivable f x v -> (fun h => h^-1 *: ((k \*: f \o shift x) (h *: v) - (k \*: f) x)) @ 0^' --> k *: 'D_v f x. Proof. -move=> df; evar (h : R -> W); rewrite [X in X @ _](_ : _ = h) /=; last first. +move=> df; evar (h : R -> W); rewrite [X in X @ _](_ : _ = h) /=. rewrite funeqE => r. by rewrite scalerBr !scalerA mulrC -!scalerA -!scalerBr /h. exact: cvgZl_tmp. @@ -1296,7 +1296,7 @@ Fact der_mult f g x v : 0^' --> f x *: 'D_v g x + g x *: 'D_v f x. Proof. move=> df dg. -evar (fg : R -> R); rewrite [X in X @ _](_ : _ = fg) /=; last first. +evar (fg : R -> R); rewrite [X in X @ _](_ : _ = fg) /=. rewrite funeqE => h. have -> : (f * g) (h *: v + x) - (f * g) x = f (h *: v + x) *: (g (h *: v + x) - g x) + g x *: (f (h *: v + x) - f x). @@ -1428,7 +1428,7 @@ Lemma exprn_derivable {R : numFieldType} n (x : R) v : derivable (@GRing.exp R ^~ n) x v. Proof. elim: n => [/=|n ih]; first by rewrite (_ : _ ^~ _ = 1). -rewrite (_ : _ ^~ _ = (fun x => x * x ^+ n)); last first. +rewrite (_ : _ ^~ _ = (fun x => x * x ^+ n)). by apply/funext => y; rewrite exprS. by apply: derivableM; first exact: derivable_id. Qed. @@ -1471,7 +1471,7 @@ have [_ [t tA <-]] : exists2 y, (f @` A) y & sup (f @` A) - k^-1 < y. by apply: sup_adherent => //; rewrite invr_gt0. rewrite ltrBlDr -ltrBlDl. suff : sup (f @` A) - f t > k^-1 by move=> /ltW; rewrite leNgt => /negbTE ->. -rewrite invf_plt ?posrE ?subr_gt0 ?AfsupfA//; last exact/mem_set. +rewrite invf_plt ?posrE ?subr_gt0 ?AfsupfA//; first exact/mem_set. by rewrite (le_lt_trans (ler_norm _))// imVfltk//; exact: imageP. Qed. @@ -1540,7 +1540,7 @@ Lemma derive1_at_max (R : realFieldType) (f : R -> R) (a b c : R) : Proof. move=> leab fdrvbl cab cmax; apply: DeriveDef; first exact: fdrvbl. apply/eqP; rewrite eq_le; apply/andP; split. - rewrite ['D_1 f c]cvg_at_rightE; last exact: fdrvbl. + rewrite ['D_1 f c]cvg_at_rightE; first exact: fdrvbl. apply: limr_le. have /fdrvbl dfc := cab. rewrite -(cvg_at_rightE (fun h : R => h^-1 *: ((f \o shift c) _ - f c))) //. @@ -1554,7 +1554,7 @@ apply/eqP; rewrite eq_le; apply/andP; split. move=> h; rewrite /= distrC subr0 /= in_itv /= -ltrBrDr. move=> /(le_lt_trans (ler_norm _)) -> /ltr_pDl -> //. by rewrite (itvP cab). -rewrite ['D_1 f c]cvg_at_leftE; last exact: fdrvbl. +rewrite ['D_1 f c]cvg_at_leftE; first exact: fdrvbl. apply: limr_ge. have /fdrvbl dfc := cab; rewrite -(cvg_at_leftE (fun h => h^-1 *: ((f \o shift c) _ - f c))) //. apply: cvg_trans dfc; apply: cvg_app. @@ -1575,7 +1575,7 @@ Lemma derive1_at_min (R : realFieldType) (f : R -> R) (a b c : R) : Proof. move=> leab fdrvbl cab cmin; apply: DeriveDef; first exact: fdrvbl. apply/eqP; rewrite -oppr_eq0; apply/eqP. -rewrite -deriveN; last exact: fdrvbl. +rewrite -deriveN; first exact: fdrvbl. suff df : is_derive c 1 (- f) 0 by rewrite derive_val. apply: derive1_at_max leab _ (cab) _ => t tab; first exact/derivableN/fdrvbl. by rewrite lerN2; apply: cmin. @@ -1606,7 +1606,7 @@ exists ((a + b) / 2) => //; apply: derive1_at_max (ltW ltab) fdrvbl (midab) _. move=> t tab. suff fcst s : s \in `]a, b[%R -> f s = f cmax by rewrite !fcst. move=> sab. -apply/eqP; rewrite eq_le fcmax; last by rewrite in_itv /= !ltW ?(itvP sab). +apply/eqP; rewrite eq_le fcmax; first by rewrite in_itv /= !ltW ?(itvP sab). suff -> : f cmax = f cmin by rewrite fcmin // in_itv /= !ltW ?(itvP sab). by move: cmaxeaVb cmineaVb; rewrite 2!inE => -[|] -> [|] ->. Qed. @@ -1626,7 +1626,7 @@ have gcont : {within `[a, b], continuous g}. have gaegb : g a = g b. rewrite /g -![(_ - _ : _ -> _) _]/(_ - _). apply/eqP; rewrite -subr_eq /= opprK addrAC -addrA -scalerBl. - rewrite [_ *: _]mulrC divfK; first by rewrite addrC subrK. + rewrite [_ *: _]mulrC divfK; last by rewrite addrC subrK. by apply: lt0r_neq0; rewrite subr_gt0. have [c cab dgc0] := Rolle altb gdrvbl gcont gaegb. exists c; first exact: cab. @@ -1705,7 +1705,7 @@ suff : {in Interval (BSide sa a) (BSide sb b) &, {homo (- f) : x y / x <= y}}. by move=> h y x iy ix xy; move: (h x y ix iy xy); rewrite opprfctE lerNl opprK. apply: ger0_derive1_le. - move => x xab; exact/derivableN/df. -- move => x xab; rewrite derive1E deriveN; last exact: df. +- move => x xab; rewrite derive1E deriveN; first exact: df. by rewrite -derive1E oppr_ge0 dfle0. by move=> x; exact/continuousN/cf. Qed. @@ -1812,7 +1812,7 @@ suff : {in Interval (BSide sa a) (BSide sb b) &, {homo (- f) : x y / x < y}}. by move=> h x y ix iy xy; move: (h y x iy ix xy); rewrite opprfctE ltrNl opprK. apply: gtr0_derive1_lt. - move => x xab; exact/derivableN/df. -- move => x xab; rewrite derive1E deriveN; last exact: df. +- move => x xab; rewrite derive1E deriveN; first exact: df. by rewrite -derive1E oppr_gt0 dflt0. by move=> x; exact/continuousN/cf. Qed. @@ -2063,7 +2063,7 @@ Lemma derive1_comp (R : realFieldType) (f g : R -> R) x : (g \o f)^`() x = g^`()%classic (f x) * f^`()%classic x. Proof. move=> /derivable1_diffP df /derivable1_diffP dg. -rewrite derive1E'; last exact/differentiable_comp. +rewrite derive1E'; first exact/differentiable_comp. rewrite diff_comp // !derive1E' //= -[X in 'd _ _ X = _]mulr1. by rewrite [LHS]linearZ mulrC. Qed. @@ -2240,9 +2240,9 @@ Proof. apply/funext => x; elim/poly_ind: p => [|p r ih]. by rewrite deriv0 hornerC horner0_ext derive1_cst. rewrite derivD hornerD hornerD_ext. -rewrite derive1E deriveD//; [|exact: derivable_horner..]. +rewrite derive1E deriveD//; [exact: derivable_horner..|]. rewrite -!derive1E hornerC_ext derive1_cst addr0. -rewrite horner_scale_ext derive1E deriveM//; last exact: derivable_horner. +rewrite horner_scale_ext derive1E deriveM//; first exact: derivable_horner. rewrite derive_id -derive1E -ih derivC horner0 addr0 derivM hornerD !hornerE. by rewrite derivX hornerE mulr1 addrC mulrC scaler1. Qed. diff --git a/theories/ereal.v b/theories/ereal.v index ab7673fe8a..7b3a996e28 100644 --- a/theories/ereal.v +++ b/theories/ereal.v @@ -50,7 +50,7 @@ From mathcomp Require Export interval_inference topology constructive_ereal. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -323,7 +323,7 @@ Lemma le0_mule_dfsumr (T : choiceType) x (F : T -> \bar^d R) (P : set T) : (forall i : T, F i <= 0) -> x * (\sum_(i \in P) F i) = \sum_(i \in P) x * F i. Proof. move=> Fge0. -rewrite !dual_fsumeE muleN ge0_mule_fsumr; last by move=> ?; rewrite oppe_ge0. +rewrite !dual_fsumeE muleN ge0_mule_fsumr; first by move=> ?; rewrite oppe_ge0. rewrite (eq_bigr _ (fun _ _ => muleN _ _)). by rewrite (eq_finite_support _ (fun i _ => muleN _ _)). Qed. @@ -392,7 +392,7 @@ Qed. Lemma supremum_pinfty S x0 : S +oo -> supremum x0 S = +oo. Proof. -move=> Spoo; rewrite /supremum ifF; last by apply/eqP => S0; rewrite S0 in Spoo. +move=> Spoo; rewrite /supremum ifF; first by apply/eqP => S0; rewrite S0 in Spoo. have sSoo : supremums S +oo. split; first exact: ereal_ub_pinfty. by move=> /= y /(_ _ Spoo); rewrite leye_eq => /eqP ->. @@ -530,7 +530,7 @@ Qed. Lemma ereal_sup_ubound S : ubound S (ereal_sup S). Proof. -move=> y Sy; rewrite /ereal_sup /supremum ifF; last first. +move=> y Sy; rewrite /ereal_sup /supremum ifF. by apply/eqP; rewrite predeqE => /(_ y)[+ _]; exact. case: xgetP => /=; first by move=> _ -> -[] /ubP geS _; apply: geS. by case: (ereal_supremums_neq0 S) => /= x0 Sx0 /(_ x0). @@ -605,7 +605,7 @@ Lemma ereal_inf_EFin (A : set R) : has_lbound A -> A !=set0 -> ereal_inf (EFin @` A) = (inf A)%:E. Proof. move=> has_lbA A0; rewrite /ereal_inf /inf EFinN; congr (- _)%E. -rewrite -ereal_sup_EFin; [|exact/has_lb_ubN|exact/nonemptyN]. +rewrite -ereal_sup_EFin; [exact/has_lb_ubN|exact/nonemptyN|]. by rewrite !image_comp. Qed. @@ -667,10 +667,10 @@ Qed. Lemma ereal_inf_real : @ereal_inf R (range EFin) = -oo. Proof. rewrite /ereal_inf [X in ereal_sup X](_ : _ = range EFin); last first. - apply/seteqP; split => x/=[y]. - by move=> [z] _ <- <-; exists (-z)%R. - by move=> _ <-; exists (-y%:E); first (by exists (-y)%R); rewrite oppeK. -by rewrite ereal_sup_real. + by rewrite ereal_sup_real. +apply/seteqP; split => x/=[y]. + by move=> [z] _ <- <-; exists (-z)%R. +by move=> _ <-; exists (-y%:E); first (by exists (-y)%R); rewrite oppeK. Qed. End ereal_supremum_realType. @@ -971,7 +971,7 @@ move: p => -[p| [M [Mreal MA]] | [M [Mreal MA]]] //=. rewrite (le_trans _ (ltW x1y)) // distrC real_ler_norm // realB //. by rewrite num_real. (* where we really use realFieldType *) rewrite addrC -ltrBrDr in M'x. - rewrite -comparabler0 (@comparabler_trans _ (M - 1)%R) => [//||]. + rewrite -comparabler0 (@comparabler_trans _ (M - 1)%R) => [||//]. by rewrite /Order.comparable (ltW M'x). (* TODO: remove this line and the one below when requiring MathComp >= 2.5.0 and add a by at beginning of previous line *) by rewrite comparabler0 realB. Qed. @@ -1128,7 +1128,7 @@ Lemma contract_inf S : S !=set0 -> contract (ereal_inf S) = inf (contract @` S). Proof. move=> -[x Sx]; rewrite /ereal_inf /contract (contractN (ereal_sup (-%E @` S))). by rewrite -/contract contract_sup /inf; - [rewrite contract_imageN|exists (- x), x]. + [exists (- x), x|rewrite contract_imageN]. Qed. End contract_expand_realType. @@ -1143,7 +1143,7 @@ Proof. by move=> e e' ee' y; rewrite /ereal_ball => /lt_le_trans; exact. Qed. Lemma expand_ereal_ball_pinfty {e : {posnum R}} r : (e%:num <= 1)%R -> expand (1 - e%:num)%R < r%:E -> ereal_ball +oo e%:num r%:E. Proof. -move=> e1 er; rewrite /ereal_ball gtr0_norm ?subr_gt0; last first. +move=> e1 er; rewrite /ereal_ball gtr0_norm ?subr_gt0. by case/ltr_normlP : (contract_lt1 r). rewrite ltrBlDl addrC -ltrBlDl -[ltLHS]expandK ?lt_contract//. by rewrite inE ger0_norm ?lerBlDl ?lerDr // subr_ge0. @@ -1153,7 +1153,7 @@ Lemma contract_ereal_ball_fin_le r r' (e : {posnum R}) : (r <= r')%R -> (1 <= contract r%:E + e%:num)%R -> ereal_ball r%:E e%:num r'%:E. Proof. rewrite le_eqVlt => /predU1P[<-{r'} _|rr' re1]; first exact: ereal_ball_center. -rewrite /ereal_ball ltr0_norm; last by rewrite subr_lt0 lt_contract lte_fin. +rewrite /ereal_ball ltr0_norm; first by rewrite subr_lt0 lt_contract lte_fin. rewrite opprB ltrBlDl (lt_le_trans _ re1) //. by case/ltr_normlP : (contract_lt1 r'). Qed. @@ -1210,7 +1210,7 @@ Proof. move=> e1 ooeA. exists (fine (expand (1 - e%:num)%R)); rewrite num_real; split => //. case => [r | | //]. -- rewrite fine_expand; last first. +- rewrite fine_expand. by rewrite ger0_norm ?ltrBlDl ?ltrDr // subr_ge0. by move=> ?; exact/ooeA/expand_ereal_ball_pinfty. - by move=> _; exact/ooeA/ereal_ball_center. @@ -1397,7 +1397,7 @@ move: re1; rewrite le_eqVlt => /orP[re1|re1]. rewrite re1 addrAC ltrBlDl ltrD // (lt_trans _ e1) // ltrNl. by move: (contract_lt1 r'); rewrite ltr_norml => /andP[]. rewrite /ereal_ball. - rewrite [contract -oo]/= opprK gtr0_norm ?subr_gt0; last first. + rewrite [contract -oo]/= opprK gtr0_norm ?subr_gt0. rewrite -ltrBlDl add0r ltrNl. by move: (contract_lt1 r); rewrite ltr_norml => /andP[]. by rewrite re1 addrAC ltrBlDl ltrD. @@ -1446,18 +1446,18 @@ rewrite predeq2E => x A; split. * move=> /xsectionP/=; rewrite /ereal_ball [contract +oo]/=. rewrite lt_min => /andP[re'1 re'2]. have [cr0|cr0] := lerP 0 (contract r%:E). - move: re'2; rewrite ler0_norm; last first. + move: re'2; rewrite ler0_norm. by rewrite subr_le0; case/ler_normlP : (contract_le1 r%:E). rewrite opprB ltrBrDl addrC subrK ltNge; apply: contraNP => _. by rewrite (le_trans (ler_norm _))// contract_le1. - move: re'2; rewrite ler0_norm; last first. + move: re'2; rewrite ler0_norm. by rewrite subr_le0; case/ler_normlP : (contract_le1 r%:E). rewrite opprB ltrBrDl addrC subrK ltNge; apply: contraNP => _. by rewrite (le_trans (ler_norm _))// contract_le1. * move=> /xsectionP/=; rewrite /ereal_ball [contract -oo]/= opprK. rewrite lt_min => /andP[re'1 _]. move: re'1. - rewrite ger0_norm; last first. + rewrite ger0_norm. rewrite addrC -lerBlDl add0r. by move: (contract_le1 r%:E); rewrite ler_norml => /andP[]. rewrite ltrD2l ltNge; apply: contraNP => _. @@ -1466,7 +1466,7 @@ rewrite predeq2E => x A; split. exists (1 - contract M%:E)%R => //=. by rewrite subr_gt0 (le_lt_trans _ (contract_lt1 M)) // ler_norm. case=> [r| |]/= /xsectionP/=. - * rewrite /ereal_ball [_ +oo]/= ger0_norm; last first. + * rewrite /ereal_ball [_ +oo]/= ger0_norm. by rewrite subr_ge0 // (le_trans _ (contract_le1 r%:E)) // ler_norm. by rewrite ltrD2l ltrN2 => rM1; apply/MA; rewrite -lt_contract. * by rewrite /ereal_ball /= subrr normr0 => h; exact: MA. @@ -1479,7 +1479,7 @@ rewrite predeq2E => x A; split. case=> [r| |] /xsectionP/=. * rewrite /ereal_ball => /= rM1. apply: MA; rewrite lte_fin. - rewrite ler0_norm in rM1; last first. + rewrite ler0_norm in rM1. by rewrite subr_le0 -/(contract r%:E) lerNnormlW// contract_le1. move: rM1; rewrite opprB opprK -ltrBlDl addrK. by rewrite -!/(contract _%:E) lt_contract lte_fin. diff --git a/theories/ess_sup_inf.v b/theories/ess_sup_inf.v index b6d3354f61..88f2e0ebc2 100644 --- a/theories/ess_sup_inf.v +++ b/theories/ess_sup_inf.v @@ -16,7 +16,7 @@ From mathcomp Require Import measure lebesgue_measure measurable_realfun. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. diff --git a/theories/esum.v b/theories/esum.v index 970b57e3d9..9a2573441d 100644 --- a/theories/esum.v +++ b/theories/esum.v @@ -25,7 +25,7 @@ From mathcomp Require Import topology sequences normedtype numfun. Reserved Notation "\esum_ ( i 'in' P ) F" (at level 41, F at level 41, format "\esum_ ( i 'in' P ) F"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -170,12 +170,12 @@ Lemma esum_mkcond [R : realType] [T : choiceType] (I : set T) \esum_(i in I) a i = \esum_(i in [set: T]) if i \in I then a i else 0. Proof. apply/eqP; rewrite eq_le !ge_ereal_sup//= => _ [X [finX XI]] <-. - rewrite -big_mkcond/= big_fset_condE/=; set Y := [fset _ | _ in _ & _]%fset. - rewrite ereal_sup_ubound//=; exists [set` Y]. - by split => // i/=; rewrite !inE/= => /andP[_]; rewrite inE. - by rewrite fsbig_finite// set_fsetK. -rewrite ereal_sup_ubound//; exists X => //; apply: eq_fsbigr => x /[!inE] Xx. -by rewrite ifT// inE; exact: XI. + rewrite ereal_sup_ubound//; exists X => //; apply: eq_fsbigr => x /[!inE] Xx. + by rewrite ifT// inE; exact: XI. +rewrite -big_mkcond/= big_fset_condE/=; set Y := [fset _ | _ in _ & _]%fset. +rewrite ereal_sup_ubound//=; exists [set` Y]. + by split => // i/=; rewrite !inE/= => /andP[_]; rewrite inE. +by rewrite fsbig_finite// set_fsetK. Qed. Lemma esum_mkcondr [R : realType] [T : choiceType] (I J : set T) @@ -216,7 +216,7 @@ move=> a_ge0; elim: r => [|j r IHr]; rewrite ?(big_nil, big_cons)// -?IHr. case: ifPn => Pj; last first. by apply: eq_esum => i Ii; rewrite big_cons (negPf Pj). have aj_ge0 i : I i -> a i j >= 0 by move=> ?; apply: a_ge0. -rewrite -esumD//; last by move=> i Ii; apply: sume_ge0 => *; apply: a_ge0. +rewrite -esumD//; first by move=> i Ii; apply: sume_ge0 => *; apply: a_ge0. by apply: eq_esum => i Ii; rewrite big_cons Pj. Qed. @@ -228,7 +228,7 @@ Proof. move=> a_ge0; apply/eqP; rewrite eq_le; apply/andP; split. apply: ge_ereal_sup => /= _ [X [finX XI]] <-. under eq_fsbigr do rewrite esum_mkcond. - rewrite fsbig_finite//= big_seq -esum_sum; last first. + rewrite fsbig_finite//= big_seq -esum_sum. move=> i j _ /[!in_fset_set]// /[!inE] /XI Ij. by case: ifPn => // /[!inE] /a_ge0-/(_ Ij). under eq_esum do rewrite -big_seq -big_mkcond/=. @@ -252,24 +252,24 @@ apply: (@le_trans _ _ (\sum_(i <- fset_set X.`1) \sum_(j <- fset_set X.`2 | j \in J i) a i j)). rewrite pair_big_dep_cond//=; set Y := Imfset.imfset2 _ _ _ _. rewrite [leRHS](big_fsetID _ (mem X))/=. - rewrite (_ : [fset x | x in Y & x \in X] = Y `&` fset_set X)%fset; last first. + rewrite (_ : [fset x | x in Y & x \in X] = Y `&` fset_set X)%fset. by apply/fsetP => x; rewrite 2!inE/= in_fset_set. - rewrite (fsetIidPr _). + rewrite (fsetIidPr _); last first. rewrite fsbig_finite// leeDl// big_seq sume_ge0//=. move=> [x y] /imfsetP[[x1 y1]] /[!inE] /andP[] /imfset2P[x2]/= /[!inE]. - rewrite andbT in_fset_set; last exact: finite_set_fst. - move=> /[!inE] x2X [y2] /[!inE] /andP[] /[!in_fset_set]; last first. + rewrite andbT in_fset_set; first exact: finite_set_fst. + move=> /[!inE] x2X [y2] /[!inE] /andP[] /[!in_fset_set]. exact: finite_set_snd. move=> /[!inE] y2X y2J [-> ->] _ [-> ->]; rewrite a_ge0//. by move: x2X => [y3 /XIJ []]. apply/fsubsetP => -[i j]; rewrite in_fset_set// inE => Xij; apply/imfset2P. exists i => /=. - rewrite !inE/= in_fset_set//; last exact: finite_set_fst. + rewrite !inE/= in_fset_set//; first exact: finite_set_fst. by rewrite andbT mem_set//; move/fst_set_fst : Xij. - exists j => //; rewrite !inE/= in_fset_set; last exact: finite_set_snd. - rewrite mem_set/=; last by move/snd_set_snd : Xij. + exists j => //; rewrite !inE/= in_fset_set; first exact: finite_set_snd. + rewrite mem_set/=; first by move/snd_set_snd : Xij. by rewrite mem_set//; move/XIJ : Xij => []. -rewrite -fsbig_finite; last exact: finite_set_fst. +rewrite -fsbig_finite; first exact: finite_set_fst. apply lee_fsum=> [|i Xi]; first exact: finite_set_fst. rewrite ereal_sup_ubound //=; have ? : finite_set (X.`2 `&` J i). by apply: finite_setI; left; exact: finite_set_snd. @@ -317,11 +317,11 @@ move=> a0; apply/eqP; rewrite eq_le; apply/andP; split. apply: ereal_sup_ubound; exists [set` [fset val i | i in 'I_n & P i]%fset]. split; first exact: finite_fset. by move=> /= k /imfsetP[/= i]; rewrite inE => + ->. - rewrite fsbig_finite//= set_fsetK big_imfset/=; last first. + rewrite fsbig_finite//= set_fsetK big_imfset/=. by move=> ? ? ? ? /val_inj. by rewrite big_filter big_enum_cond/= big_mkord. apply: ge_ereal_sup => _ [/= F [finF PF] <-]. -rewrite fsbig_finite//= -(big_rmcond_in P)/=; first exact: lee_sum_fset_lim. +rewrite fsbig_finite//= -(big_rmcond_in P)/=; last exact: lee_sum_fset_lim. by move=> k; rewrite in_fset_set// inE => /PF ->. Qed. @@ -342,14 +342,14 @@ move=> /(@pPbij _ _ _)[{}e ->]. gen have le_esum : T T' a P Q e / \esum_(j in Q) a j <= \esum_(i in P) a (e i); last first. apply/eqP; rewrite eq_le le_esum//=. - rewrite [leRHS](_ : _ = \esum_(j in Q) a (e (e^-1%FUN j))); last first. + rewrite [leRHS](_ : _ = \esum_(j in Q) a (e (e^-1%FUN j))). by apply: eq_esum => i Qi; rewrite invK ?inE. by rewrite le_esum => //= i Qi; rewrite a_ge0//; exact: funS. rewrite ge_ereal_sup => //= _ [X [finX XQ] <-]; rewrite ereal_sup_ubound => //=. exists [set` (e^-1 @` (fset_set X))%fset]. split=> [|t /= /imfsetP[t'/=]]; first exact: finite_fset. by rewrite in_fset_set// inE => /XQ Qt' ->; exact: funS. -rewrite fsbig_finite//= set_fsetK big_imfset => //=; last first. +rewrite fsbig_finite//= set_fsetK big_imfset => //=. move=> x y; rewrite !in_fset_set// !inE => /XQ ? /XQ ? /(congr1 e). by rewrite !invK ?inE. by rewrite -fsbig_finite//; apply: eq_fsbigr=> x /[!inE]/XQ ?; rewrite invK ?inE. @@ -365,8 +365,8 @@ Let nneseries_esum_prod (R : realType) (a : nat -> nat -> \bar R) \esum_(i in P `*` Q) a i.1 i.2. Proof. move=> a0; rewrite -(@esum_esum _ _ _ P (fun=> Q))//. -rewrite nneseries_esum//; last by move=> n _; exact: nneseries_ge0. -rewrite (_ : [set x | P x] = P); last by apply/seteqP; split. +rewrite nneseries_esum//; first by move=> n _; exact: nneseries_ge0. +rewrite (_ : [set x | P x] = P); first by apply/seteqP; split. by apply eq_esum => i Pi; rewrite nneseries_esum. Qed. @@ -444,7 +444,7 @@ transitivity (\esum_(i in \bigcup_(k in K) J' k) a' i). move: Jx => [k kK Jkx]; exists k=> //; rewrite /J'/=; case: ifPn=> //=. move=> /eqP/(congr1 (@^~ (a x)))/=; rewrite propeqE => -[+ _]. by apply: contra_neq_not Nax; apply; exists x. -rewrite esum_bigcupT//; last first. +rewrite esum_bigcupT//. move=> i j _ _ [x []]; rewrite /J'/=. case: eqVneq => //= Ai0 Jix; case: eqVneq => //= Aj0 Jjx. by have := Jtriv i j Ai0 Aj0; apply; exists x. @@ -466,7 +466,7 @@ Lemma nneseries_sum_bigcup {R : realType} (T : choiceType) (F : (set T)^nat) (f : T -> \bar R) : trivIset [set: nat] F -> (forall i, 0 <= f i)%E -> (\esum_(i in \bigcup_n F n) f i = \sum_(0 <= i tF f0; rewrite esum_bigcupT// nneseries_esum//; last first. +move=> tF f0; rewrite esum_bigcupT// nneseries_esum//. by move=> k _; exact: esum_ge0. by rewrite fun_true; apply: eq_esum => /= i _. Qed. @@ -544,9 +544,9 @@ Proof. move=> f0 Pf; apply: nondecreasing_is_cvgn. by apply: nondecreasing_series => n _ Pn; exact/fine_ge0/f0. exists (fine (\sum_(i x /= [n _ <-]. -rewrite summable_fine_sum// -lee_fin fineK//; last first. +rewrite summable_fine_sum// -lee_fin fineK//. by apply/sum_fin_numP => i ni Pi; rewrite fin_num_abs (summable_pinfty Pf). -rewrite fineK//; last first. +rewrite fineK//. rewrite nneseries_esum// fin_numElt; apply/andP; split. by rewrite (@lt_le_trans _ _ 0)// ?lte_ninfty//; exact: esum_ge0. by apply: le_lt_trans Pf; apply le_esum. @@ -579,8 +579,8 @@ pose A := lim (A_ @ \oo). pose B := lim (B_ @ \oo). suff: ((fun n => C_ n - (A - B)) @ \oo --> (0 : R^o))%R. move=> CAB. - rewrite [X in X - _]summable_nneseries_lim//; last exact/summable_funepos. - rewrite [X in _ - X]summable_nneseries_lim//; last exact/summable_funeneg. + rewrite [X in X - _]summable_nneseries_lim//; first exact/summable_funepos. + rewrite [X in _ - X]summable_nneseries_lim//; first exact/summable_funeneg. rewrite -EFinB; apply/cvg_lim => //; apply/fine_cvgP; split; last first. by apply: (@cvg_sub0 _ _ _ _ _ _ (cst (A - B)%R) _ CAB) => //; exact: cvg_cst. apply: nearW => n; rewrite fin_num_abs; apply: le_lt_trans Pf => /=. @@ -597,9 +597,9 @@ have -> : (C_ = A_ \- B_)%R. apply/funext => k. rewrite /= /A_ /C_ /B_ -sumrN -big_split/= -summable_fine_sum//. apply eq_bigr => i Pi; rewrite -fineB//. - - by rewrite [in LHS](funeposneg f). - by rewrite fin_num_abs (@summable_pinfty _ _ P) //; exact/summable_funepos. - by rewrite fin_num_abs (@summable_pinfty _ _ P) //; exact/summable_funeneg. + - by rewrite [in LHS](funeposneg f). by rewrite distrC; apply: hN; near: n; exists N. Unshelve. all: by end_near. Qed. @@ -622,7 +622,7 @@ Let esum_posneg D f := esum D f^\+ - esum D f^\-. Let ge0_esum_posneg D f : (forall x, D x -> 0 <= f x) -> esum_posneg D f = \esum_(x in D) f x. Proof. -move=> Sa; rewrite /esum_posneg [X in _ - X](_ : _ = 0) ?sube0; last first. +move=> Sa; rewrite /esum_posneg [X in _ - X](_ : _ = 0) ?sube0. by rewrite esum1// => x Sx; rewrite -[LHS]/(f^\- x) (ge0_funenegE Sa)// inE. apply: eq_esum => t St; rewrite funeposE; apply/max_idPl; exact: Sa. Qed. @@ -640,27 +640,27 @@ have /eqP : esum D (f \- g)^\+ + esum_posneg D g = have [fg|fg] := leP 0 (f i - g i). rewrite max_r 1?leeNl ?oppe0// add0e subeK//. by rewrite fin_num_abs (summable_pinfty Dg). - rewrite add0e max_l; last by rewrite leeNr oppe0 ltW. - rewrite fin_num_oppeB//; last by rewrite fin_num_abs (summable_pinfty Dg). + rewrite add0e max_l; first by rewrite leeNr oppe0 ltW. + rewrite fin_num_oppeB//; first by rewrite fin_num_abs (summable_pinfty Dg). by rewrite -addeA addeCA addeA subeK// fin_num_abs (summable_pinfty Df). -rewrite [X in _ == X -> _]addeC -sube_eq; last 2 first. - - rewrite fin_numD; apply/andP; split. - rewrite (@eq_esum _ _ _ _ (abse \o (f \- g)^\+))//. - by rewrite -summableE; exact/summable_funepos/summableB. +rewrite [X in _ == X -> _]addeC -sube_eq. +- rewrite fin_numD; apply/andP; split. + rewrite (@eq_esum _ _ _ _ (abse \o (f \- g)^\+))//. by move=> t Dt; rewrite /= gee0_abs. - move: Dg; rewrite summableE (@eq_esum _ _ _ _ g)//. - by rewrite ge0_esum_posneg// => t Tt; rewrite gee0_abs// g0. + by rewrite -summableE; exact/summable_funepos/summableB. + move: Dg; rewrite summableE (@eq_esum _ _ _ _ g)//. by move=> t Tt; rewrite gee0_abs// g0. - - rewrite fin_num_adde_defr// ge0_esum_posneg//. - rewrite (@eq_esum _ _ _ _ (abse \o f))// -?summableE// => i Di. - by rewrite /= gee0_abs// f0. -rewrite -addeA addeCA eq_sym [X in _ == X -> _]addeC -sube_eq; last 2 first. - - rewrite ge0_esum_posneg//. - rewrite (@eq_esum _ _ _ _ (abse \o f))// -?summableE// => i Di. - by rewrite /= gee0_abs// f0. - - rewrite fin_num_adde_defl// ge0_esum_posneg//. - rewrite (@eq_esum _ _ _ _ (abse \o g))// -?summableE// => i Di. - by rewrite /= gee0_abs// g0. + by rewrite ge0_esum_posneg// => t Tt; rewrite gee0_abs// g0. +- rewrite fin_num_adde_defr// ge0_esum_posneg//. + rewrite (@eq_esum _ _ _ _ (abse \o f))// -?summableE// => i Di. + by rewrite /= gee0_abs// f0. +rewrite -addeA addeCA eq_sym [X in _ == X -> _]addeC -sube_eq. +- rewrite ge0_esum_posneg//. + rewrite (@eq_esum _ _ _ _ (abse \o f))// -?summableE// => i Di. + by rewrite /= gee0_abs// f0. +- rewrite fin_num_adde_defl// ge0_esum_posneg//. + rewrite (@eq_esum _ _ _ _ (abse \o g))// -?summableE// => i Di. + by rewrite /= gee0_abs// g0. by rewrite ge0_esum_posneg// ge0_esum_posneg// => /eqP ->. Qed. diff --git a/theories/exp.v b/theories/exp.v index aac8fde852..9546f690e1 100644 --- a/theories/exp.v +++ b/theories/exp.v @@ -34,7 +34,7 @@ From mathcomp Require Import sequences derive realfun convex. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -68,14 +68,14 @@ move=> Cx zLx; have [K [Kreal Kf]] := cvg_series_bounded Cx. have Kzxn n : 0 <= `|K + 1| * `|z ^+ n| / `|x ^+ n| by rewrite !mulr_ge0. apply: normed_cvg. apply: series_le_cvg Kzxn _ _ => [//=| /= n|]. - rewrite (_ : `|_ * _| = `|f n * x ^+ n| * `|z ^+ n| / `|x ^+ n|); last first. + rewrite (_ : `|_ * _| = `|f n * x ^+ n| * `|z ^+ n| / `|x ^+ n|). rewrite !normrM normr_id mulrAC mulfK // normr_eq0 expf_eq0 andbC. by case: ltrgt0P zLx; rewrite //= normr_lt0. do! (apply: ler_pM || apply: mulr_ge0 || rewrite invr_ge0) => //. by apply Kf => //; rewrite (lt_le_trans _ (ler_norm _))// ltrDl. have F : `|z / x| < 1. by rewrite normrM normfV ltr_pdivrMr ?mul1r // (le_lt_trans _ zLx). -rewrite (_ : (fun _ => _) = geometric `|K + 1| `|z / x|); last first. +rewrite (_ : (fun _ => _) = geometric `|K + 1| `|z / x|). by apply/funext => i /=; rewrite normrM exprMn mulrA normfV !normrX exprVn. by apply: is_cvg_geometric_series; rewrite normr_id. Qed. @@ -85,7 +85,7 @@ Fact is_cvg_pseries_inside f (x z : R) : Proof. move=> Cx zLx. apply: normed_cvg; rewrite /normed_series_of /=. -rewrite (_ : (fun _ => _) = (fun i => `|f i| * `|z| ^+ i)); last first. +rewrite (_ : (fun _ => _) = (fun i => `|f i| * `|z| ^+ i)). by apply/funext => i; rewrite normrM normrX. by apply: is_cvg_pseries_inside_norm Cx _; rewrite normr_id. Qed. @@ -118,7 +118,7 @@ Proof. move=> s Cx; rewrite -[lim _]subr0. rewrite /pseries/= [X in X @ \oo --> _]/series /=. rewrite [X in X @ \oo --> _](_ : _ = (fun n => \sum_(0 <= i < n) - pseries_diffs f i * x ^+ i - n%:R * f n * x ^+ n.-1)); last first. + pseries_diffs f i * x ^+ i - n%:R * f n * x ^+ n.-1)). by rewrite funeqE => n; rewrite pseries_diffs_sumE addrK. by apply: cvgB => //; rewrite -cvg_shiftS; exact: cvg_series_cvg_0. Qed. @@ -172,7 +172,7 @@ case: n => //= n ni. rewrite normrM. pose d := (n.-1 - i)%N. rewrite -[(n - i)%N]prednK ?subn_gt0// predn_sub -/d. -rewrite -(subnK (_ : i <= n.-1)%N) -/d; last first. +rewrite -(subnK (_ : i <= n.-1)%N) -/d. by rewrite -ltnS prednK// (leq_ltn_trans _ ni). rewrite addnC exprD mulrAC -mulrA. apply: ler_pM => //. @@ -201,7 +201,7 @@ suff hfxs : h^-1 *: (f (h + x) - f x) @[h --> 0^'] --> limn (series s). have F : f^`() x = limn (series s) by apply: cvg_lim hfxs. have Df : derivable f x 1. move: hfxs; rewrite /derivable [X in X @ 0^'](_ : _ = - (fun h => h^-1 *: (f (h%:A + x) - f x))) /=; last first. + (fun h => h^-1 *: (f (h%:A + x) - f x))) /=. by apply/funext => i //=; rewrite [i%:A]mulr1. by move=> /(cvg_lim _) -> //. by constructor; [exact: Df|rewrite -derive1E]. @@ -214,17 +214,17 @@ suff Cc : limn (h^-1 *: (series (shx h - sx))) @[h --> 0^'] --> limn (series s). near=> h; rewrite sub0r normrN /=. rewrite (le_lt_trans _ eps_gt0)//. rewrite normr_le0 subr_eq0 -/sx -/(shx _); apply/eqP. - have Cshx' : cvgn (series (shx h)). - apply: is_cvg_pseries_inside Ck _. - rewrite (le_lt_trans (ler_normD _ _))// -(subrK `|x| `|K|) ltrD2r. - near: h. - apply/nbhs_ballP => /=; exists ((`|K| - `|x|) /2%:R) => /=. - by rewrite divr_gt0 // subr_gt0. - move=> t; rewrite /ball /= sub0r normrN => H tNZ. - rewrite (lt_le_trans H)// ler_pdivrMr // mulr2n mulrDr mulr1. - by rewrite ler_wpDr // subr_ge0 ltW. - rewrite limZl_tmp; last exact/is_cvg_seriesB/Csx. - by rewrite lim_seriesB; last exact: Csx. + suff Cshx' : cvgn (series (shx h)). + rewrite limZl_tmp; first exact/is_cvg_seriesB/Csx. + by rewrite lim_seriesB; [|exact: Csx|]. + apply: is_cvg_pseries_inside Ck _. + rewrite (le_lt_trans (ler_normD _ _))// -(subrK `|x| `|K|) ltrD2r. + near: h. + apply/nbhs_ballP => /=; exists ((`|K| - `|x|) /2%:R) => /=. + by rewrite divr_gt0 // subr_gt0. + move=> t; rewrite /ball /= sub0r normrN => H tNZ. + rewrite (lt_le_trans H)// ler_pdivrMr // mulr2n mulrDr mulr1. + by rewrite ler_wpDr // subr_ge0 ltW. apply: cvg_zero => /=. suff Cc : limn (series (fun n => c n * (((h + x) ^+ n - x ^+ n) / h - n%:R * x ^+ n.-1))) @@ -312,7 +312,7 @@ Implicit Types x : R. Lemma expR0 : expR 0 = 1 :> R. Proof. apply: lim_near_cst => //. -near=> m; rewrite -[m]prednK; last by near: m. +near=> m; rewrite -[m]prednK; first by near: m. rewrite -addn1 series_addn series_exp_coeff0 big_add1 big1 ?addr0//. by move=> i _; rewrite /exp_coeff /= expr0n mul0r. Unshelve. all: by end_near. Qed. @@ -325,13 +325,13 @@ have F m : (n.+1 < m)%N -> \sum_(0 <= i < m) (f n.+1 x i) = 1 + x ^+ n.+1 / n.+1`!%:R. move=> n1m. rewrite (@big_cat_nat _ _ _ n.+2)//= big_nat_recr// big_nat_recl//=. - rewrite big_nat_cond big1 ?addr0; last first. + rewrite big_nat_cond big1 ?addr0. by move=> i /[!andbT] /[!leq0n]/= ni; rewrite /f/= lt_eqF//= add0r. - rewrite big_nat_cond big1 ?addr0; last first. + rewrite big_nat_cond big1 ?addr0. move=> i /[!andbT] /andP[ni mi]; rewrite /f !gtn_eqF//= ?add0r//. exact: ltn_trans ni. by rewrite /f/= add0r mulr0n addr0 eqxx 2!mulr1n. -rewrite [leLHS](_ : _ = limn (series (f n.+1 x))); last first. +rewrite [leLHS](_ : _ = limn (series (f n.+1 x))). by apply/esym/(@lim_near_cst R^o) => //; near=> k; apply: F; near: k. apply: ler_lim; first by apply: is_cvg_near_cst; near=> k; apply: F; near: k. exact: is_cvg_series_exp_coeff. @@ -356,16 +356,16 @@ Proof. by apply/funext => x; rewrite /pseries -exp_coeffE. Qed. Global Instance is_derive_expR x : is_derive x 1 expR (expR x). Proof. pose s1 n := pseries_diffs (fun n => n`!%:R^-1) n * x ^+ n. -rewrite expRE /= /pseries (_ : (fun _ => _) = s1); last first. +rewrite expRE /= /pseries (_ : (fun _ => _) = s1). by apply/funext => i; rewrite /s1 pseries_diffs_inv_fact. apply: (@pseries_snd_diffs _ _ (`|x| + 1)); rewrite /pseries. - by rewrite -exp_coeffE; apply: is_cvg_series_exp_coeff. - rewrite (_ : (fun _ => _) = exp_coeff (`|x| + 1)). - exact: is_cvg_series_exp_coeff. - by apply/funext => i; rewrite pseries_diffs_inv_fact exp_coeffE. + by apply/funext => i; rewrite pseries_diffs_inv_fact exp_coeffE. + exact: is_cvg_series_exp_coeff. - rewrite (_ : (fun _ => _) = exp_coeff (`|x| + 1)). - exact: is_cvg_series_exp_coeff. - by apply/funext => i; rewrite !pseries_diffs_inv_fact exp_coeffE. + by apply/funext => i; rewrite !pseries_diffs_inv_fact exp_coeffE. + exact: is_cvg_series_exp_coeff. by rewrite [ltRHS]ger0_norm// addrC -subr_gt0 addrK. Qed. @@ -505,7 +505,7 @@ Qed. Lemma cvgr_expR : @expR R (- x) @[x --> +oo] --> 0. Proof. apply/cvgrPdist_le => e e0; near=> x. -rewrite sub0r normrN ger0_norm; last exact: expR_ge0. +rewrite sub0r normrN ger0_norm; first exact: expR_ge0. rewrite expRN -[leRHS]invrK lef_pV2 ?posrE ?expR_gt0 ?invr_gt0//. rewrite (le_trans _ (expR_ge1Dx _))// -lerBlDl. by near: x; apply: nbhs_pinfty_ge; exact: num_real. @@ -815,7 +815,7 @@ Local Close Scope convex_scope. Lemma lnNy : ln x @[x --> 0^'+] --> -oo. Proof. -apply/cvgrNyPle => y; near=> x; rewrite -ler_expR lnK; last by rewrite posrE. +apply/cvgrNyPle => y; near=> x; rewrite -ler_expR lnK; first by rewrite posrE. by near: x; apply: nbhs_right_le; exact: expR_gt0. Unshelve. end_near. Qed. @@ -1017,7 +1017,7 @@ Proof. rewrite le_eqVlt => /predU1P[<-|a0]. by rewrite powR0 ?invr_eq0 ?pnatr_eq0// sqrtr0. have /eqP : (a `^ (2^-1)) ^+ 2 = (Num.sqrt a) ^+ 2. - rewrite sqr_sqrtr; last exact: ltW. + rewrite sqr_sqrtr; first exact: ltW. by rewrite /powR gt_eqF// -expRM_natl mulVKf// lnK. rewrite eqf_sqr => /predU1P[//|/eqP h]. have : 0 < a `^ 2^-1 by exact: powR_gt0. @@ -1105,16 +1105,16 @@ Lemma powR_derive1 a : {in `]0, +oo[%R, Proof. move=> x; rewrite in_itv/= andbT => x0. rewrite derive1E. -rewrite (@near_eq_derive _ _ _ _ (fun x => expR (a * ln x)))//; last first. +rewrite (@near_eq_derive _ _ _ _ (fun x => expR (a * ln x)))//. by near=> z; rewrite /powR gt_eqF//; near: z; exact: lt_nbhsr. rewrite -derive1E. -rewrite derive1_comp//=; last first. +rewrite derive1_comp//=. by apply: derivableM => //; apply: ex_derive; exact: is_derive1_ln. rewrite 2!derive1E. -rewrite deriveM//; last by apply: ex_derive; exact: is_derive1_ln. +rewrite deriveM//; first by apply: ex_derive; exact: is_derive1_ln. rewrite !derive_val scaler0 addr0. have [_ ->] := (is_derive1_ln x0). -rewrite mulrC powRB; last by rewrite (@gt_eqF _ _ x)//; apply: implybT. +rewrite mulrC powRB; first by rewrite (@gt_eqF _ _ x)//; apply: implybT. by rewrite powRr1 ?ltW// mulrA [in RHS]mulrAC /powR gt_eqF. Unshelve. end_near. Qed. diff --git a/theories/ftc.v b/theories/ftc.v index 9f96378c0e..41133869e4 100644 --- a/theories/ftc.v +++ b/theories/ftc.v @@ -52,7 +52,7 @@ From mathcomp Require Import derive charge. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -110,32 +110,32 @@ apply: (@cvg_at_right_left_dnbhs _ R^o). have ixdf n : \int[mu]_(t in [set` Interval a (BRight (x + d n)%R)]) (f t)%:E - \int[mu]_(t in [set` Interval a (BRight x)]) (f t)%:E = \int[mu]_(y in E x n) (f y)%:E. - rewrite -[in X in X - _]integral_itv_bndo_bndc; last first. + rewrite -[in X in X - _]integral_itv_bndo_bndc. by case: locf => /measurable_EFinP + _ _; exact: measurable_funS. - rewrite (@itv_bndbnd_setU _ _ _ (BLeft x))//=; last 2 first. + rewrite (@itv_bndbnd_setU _ _ _ (BLeft x))//=. by case: a ax F => [[|] a|[|]]// /ltW. by rewrite bnd_simp lerDl ltW. rewrite integral_setU//=. - - rewrite addeAC -[X in _ - X]integral_itv_bndo_bndc; last first. - by case: locf => /measurable_EFinP + _ _; exact: measurable_funS. - rewrite subee ?add0e//. - by apply: integrable_fin_num => //; exact: integrableS intf. - by case: locf => /measurable_EFinP + _ _; exact: measurable_funS. - apply/disj_setPRL => z/= zxxdn. move: a ax {F} => [[|] t/=|[_ /=|//]]. - by rewrite lte_fin in_itv/= => tx; rewrite (itvP zxxdn) andbF. - by rewrite lte_fin in_itv/= => tx; rewrite (itvP zxxdn) andbF. - by rewrite in_itv/= (itvP zxxdn). + - rewrite addeAC -[X in _ - X]integral_itv_bndo_bndc. + by case: locf => /measurable_EFinP + _ _; exact: measurable_funS. + rewrite subee ?add0e//. + by apply: integrable_fin_num => //; exact: integrableS intf. rewrite [f in f n @[n --> _] --> _](_ : _ = - fun n => (d n)^-1 *: fine (\int[mu]_(t in E x n) (f t)%:E)); last first. + fun n => (d n)^-1 *: fine (\int[mu]_(t in E x n) (f t)%:E)). apply/funext => n; congr (_ *: _); rewrite -fineB/=. - by rewrite /= (addrC (d n) x) ixdf. by apply: integrable_fin_num => //; exact: integrableS intf. by apply: integrable_fin_num => //; exact: integrableS intf. + by rewrite /= (addrC (d n) x) ixdf. have := nice_lebesgue_differentiation nice_E locf fx. rewrite {ixdf} -/mu. rewrite [g in g n @[n --> _] --> _ -> _](_ : _ = - fun n => (d n)^-1%:E * \int[mu]_(y in E x n) (f y)%:E); last first. + fun n => (d n)^-1%:E * \int[mu]_(y in E x n) (f y)%:E). by apply/funext => n; rewrite muE inver// gt_eqF. move/fine_cvgP => [_ /=]. set g := _ \o _ => gf. @@ -159,7 +159,7 @@ apply: (@cvg_at_right_left_dnbhs _ R^o). rewrite /E/= in_itv/= /ball/= => /andP[yz zy]. by rewrite ltr_distlC opprK yz /= (le_lt_trans zy)// ltrDl. move=> n. - rewrite lebesgue_measure_ball//; last exact: ltW. + rewrite lebesgue_measure_ball//; first exact: ltW. by rewrite -/mu muE -EFinM lee_fin mulr_natl. have ixdf : {near \oo, (fun n => \int[mu]_(t in [set` Interval a (BRight (x + d n)%R)]) (f t)%:E - @@ -168,37 +168,37 @@ apply: (@cvg_at_right_left_dnbhs _ R^o). case: a ax {F}; last first. move=> [_|//]. apply: nearW => n. - rewrite -[in LHS]integral_itv_bndo_bndc; last first. + rewrite -[in LHS]integral_itv_bndo_bndc. by case: locf => /measurable_EFinP + _ _; exact: measurable_funS. rewrite -/mu -[LHS]oppeK; congr oppe. - rewrite oppeB; last first. + rewrite oppeB. rewrite fin_num_adde_defl// fin_numN//. by apply: integrable_fin_num => //; exact: integrableS intf. rewrite addeC. - rewrite (_ : `]-oo, x] = `]-oo, (x + d n)%R] `|` E x n)%classic; last first. + rewrite (_ : `]-oo, x] = `]-oo, (x + d n)%R] `|` E x n)%classic. by rewrite -itv_bndbnd_setU//= bnd_simp ler_wnDr// ltW. rewrite integral_setU//=. - - rewrite addeAC -[X in X - _]integral_itv_bndo_bndc; last first. - by case: locf => /measurable_EFinP + _ _; exact: measurable_funS. - rewrite subee ?add0e//. - by apply: integrable_fin_num => //; exact: integrableS intf. - exact: (nice_E _).1. - by case: locf => /measurable_EFinP + _ _; exact: measurable_funS. - apply/disj_setPLR => z/= zNyxdn. by rewrite /E /= !in_itv/= (itvP zNyxdn). + rewrite addeAC -[X in X - _]integral_itv_bndo_bndc. + by case: locf => /measurable_EFinP + _ _; exact: measurable_funS. + rewrite subee ?add0e//. + by apply: integrable_fin_num => //; exact: integrableS intf. move=> b a ax. move/cvgrPdist_le : d0. move/(_ (x - a)%R); rewrite subr_gt0 => /(_ ax)[m _ /=] h. near=> n. have mn : (m <= n)%N by near: n; exists m. - rewrite -[in X in X - _]integral_itv_bndo_bndc; last first. + rewrite -[in X in X - _]integral_itv_bndo_bndc. by case: locf => /measurable_EFinP + _ _; exact: measurable_funS. rewrite -/mu -[LHS]oppeK; congr oppe. - rewrite oppeB; last first. + rewrite oppeB. rewrite fin_num_adde_defl// fin_numN//. by apply: integrable_fin_num => //; exact: integrableS intf. rewrite addeC. - rewrite (@itv_bndbnd_setU _ _ _ (BRight (x - - d n)%R))//; last 2 first. + rewrite (@itv_bndbnd_setU _ _ _ (BRight (x - - d n)%R))//. case: b in ax * => /=; rewrite bnd_simp. rewrite lerBrDl addrC -lerBrDl. by have := h _ mn; rewrite sub0r gtr0_norm. @@ -206,18 +206,18 @@ apply: (@cvg_at_right_left_dnbhs _ R^o). by have := h _ mn; rewrite sub0r gtr0_norm. by rewrite opprK bnd_simp -lerBrDl subrr ltW. rewrite integral_setU//=. - - rewrite addeAC -[X in X - _]integral_itv_bndo_bndc; last first. - by case: locf => /measurable_EFinP + _ _; exact: measurable_funS. - rewrite opprK subee ?add0e//. - by apply: integrable_fin_num => //; exact: integrableS intf. - by case: locf => /measurable_EFinP + _ _; exact: measurable_funS. - apply/disj_setPLR => z/=. rewrite !in_itv/= => /andP[az zxdn]. by apply/negP; rewrite negb_and -leNgt zxdn. + rewrite addeAC -[X in X - _]integral_itv_bndo_bndc. + by case: locf => /measurable_EFinP + _ _; exact: measurable_funS. + rewrite opprK subee ?add0e//. + by apply: integrable_fin_num => //; exact: integrableS intf. suff: ((d n)^-1 * - fine (\int[mu]_(y in E x n) (f y)%:E))%R @[n --> \oo] --> f x. apply: cvg_trans; apply: near_eq_cvg; near=> n; congr (_ *: _). - rewrite /F -fineN -fineB; last 2 first. + rewrite /F -fineN -fineB. by apply: integrable_fin_num => //; exact: integrableS intf. by apply: integrable_fin_num => //; exact: integrableS intf. by congr fine => /=; apply/esym; rewrite (addrC _ x); near: n. @@ -226,10 +226,10 @@ apply: (@cvg_at_right_left_dnbhs _ R^o). move/fine_cvgP => [_ /=]. set g := _ \o _ => gf. rewrite (@eq_cvg _ _ _ _ g)// => n. - rewrite /g /= fineM//=; last first. - apply: integrable_fin_num => //; first exact: (nice_E _).1. + rewrite /g /= fineM//=. + - by rewrite muE inver oppr_eq0 lt_eqF. + - apply: integrable_fin_num => //; first exact: (nice_E _).1. by apply: integrableS intf => //; exact: (nice_E _).1. - by rewrite muE inver oppr_eq0 lt_eqF. by rewrite muE/= inver oppr_eq0 lt_eqF// invrN mulNr -mulrN. Unshelve. all: by end_near. Qed. @@ -243,7 +243,7 @@ move=> xu + F ax fx. rewrite integrable_mkcond//= (restrict_EFin f) => intf. have /(@FTC0 _ _ intf _ ax) : lebesgue_pt (f \_ [set` Interval a (BRight u)]) x. exact: lebesgue_pt_restrict. -rewrite patchE mem_set; last first. +rewrite patchE mem_set. rewrite /= in_itv/= (ltW xu) andbT. by move: a ax {F intf} => [[a|]|[]]//=; rewrite lte_fin => /ltW. apply: cvg_trans; apply: near_eq_cvg; near=> r; congr (_ *: (_ - _)). @@ -374,9 +374,9 @@ apply: le_lt_trans. have acbc : `[a, c] `<=` `[a, b]. apply: subset_itvl; rewrite bnd_simp; move: ac; near: c. exact: lt_nbhsl_le. -rewrite -lee_fin fineK; last first. +rewrite -lee_fin fineK. apply: integrable_fin_num => //=. - rewrite (_ : (fun _ => _) = abse \o ((EFin \o f) \_ `[a, b])); last first. + rewrite (_ : (fun _ => _) = abse \o ((EFin \o f) \_ `[a, b])). by apply/funext => x /=; rewrite restrict_EFin. apply/integrable_abse/integrable_restrict => //=. by rewrite setIidl//; exact: integrableS intf. @@ -386,7 +386,7 @@ under [in leRHS]eq_integral. rewrite -patch_setI setIid restrict_EFin/= restrict_normr/=. rewrite -patch_setI setIidl//. over. -rewrite /= [leRHS](_ : _ = \int[mu]_(x in `[a, c]) `| f x |%:E)%E; last first. +rewrite /= [leRHS](_ : _ = \int[mu]_(x in `[a, c]) `| f x |%:E)%E. rewrite [RHS]integralEpatch//=; apply: eq_integral => x xac/=. by rewrite restrict_EFin/= restrict_normr. rewrite /int /parameterized_integral /=. @@ -430,8 +430,8 @@ rewrite /int /parameterized_integral; apply/cvgrPdist_le => /= e e0. have [d [d0 /= {}int_normr_cont]] := int_normr_cont _ e0. near=> x. rewrite [in X in X - _](@itv_bndbnd_setU _ _ _ (BRight x))//; - [|by rewrite bnd_simp ltW..]. -rewrite Rintegral_setU//=; last 2 first. + [by rewrite bnd_simp ltW..|]. +rewrite Rintegral_setU//=. rewrite -itv_bndbnd_setU// ?bnd_simp; last 2 first. by near: x; exact: nbhs_left_ge. exact/ltW. @@ -441,7 +441,7 @@ have xbab : `]x, b] `<=` `[a, b]. by apply: subset_itvr; rewrite bnd_simp; near: x; exact: nbhs_left_ge. rewrite -addrA subrKC (le_trans (le_normr_Rintegral _ _))//. exact: integrableS intf. -rewrite [leLHS](_ : _ = (\int[mu]_(t in `]x, b]) `|fab t|))//; last first. +rewrite [leLHS](_ : _ = (\int[mu]_(t in `]x, b]) `|fab t|))//. apply: eq_Rintegral => //= z; rewrite inE/= => zxb. rewrite /fab patchE ifT// inE/=. by apply: subset_itv (zxb); rewrite bnd_simp// ltW// (itvP zxb). @@ -482,7 +482,7 @@ have [xz|xz|->] := ltgtP x z; last by rewrite subrr normr0 ltW. move=> y /= + yz. do 2 rewrite gtr0_norm ?subr_gt0//. by rewrite ltrBlDr -ltrBlDl opprB subrKC. - rewrite Rintegral_itvB//; last 3 first. + rewrite Rintegral_itvB//. by apply: integrableS intf => //; apply: subset_itvl; exact: ltW. by rewrite bnd_simp ltW. exact: ltW. @@ -504,11 +504,11 @@ have [xz|xz|->] := ltgtP x z; last by rewrite subrr normr0 ltW. exists `|b - z|; first by rewrite /= gtr0_norm ?subr_gt0. move=> y /= + yz. by rewrite ltr0_norm ?subr_lt0// gtr0_norm ?subr_gt0// opprB ltrBlDr subrK. - rewrite -opprB normrN Rintegral_itvB ?bnd_simp; [| |exact/ltW..]; last first. + rewrite -opprB normrN Rintegral_itvB ?bnd_simp; [|exact/ltW..|]. by apply: integrableS intf => //; apply: subset_itvl; exact: ltW. have zxab : `[z, x] `<=` `[a, b] by apply: subset_itvScc; exact/ltW. have intzxf : mu.-integrable `[z, x] (EFin \o f) by exact: integrableS intf. - rewrite Rintegral_itv_obnd_cbnd//; last first. + rewrite Rintegral_itv_obnd_cbnd//. by apply: (@integrableS _ _ _ mu `[z, x]) => //; exact: subset_itv_oc_cc. apply: (le_trans (le_normr_Rintegral _ _)) => //. rewrite -(setIidl zxab) Rintegral_mkcondr/=. @@ -537,7 +537,7 @@ Proof. move=> ab + x xab; move=> /(_ x). rewrite {1}/continuous_at => xf. rewrite /prop_for /continuous_at patchE. -rewrite mem_set ?mulr1 /=; last exact: subset_itv_oo_cc. +rewrite mem_set ?mulr1 /=; first exact: subset_itv_oo_cc. exact: cvg_patch. Qed. @@ -579,7 +579,7 @@ have [k FGk] : exists k : R, {in `]a, b[, (F - G =1 cst k)%R}. have Gz1 : derivable G z 1 by have [|] := G'f z. apply: DeriveDef. + by apply: derivableB; [exact: Fz1|exact: Gz1]. - + by rewrite deriveB -?derive1E; [by []|exact: Fz1|exact: Gz1]. + + by rewrite deriveB -?derive1E; [exact: Fz1|exact: Gz1|by []]. - apply: derivable_within_continuous => z zxy. apply: derivableB. + case: dF => /= + _ _; apply. @@ -589,7 +589,7 @@ have [k FGk] : exists k : R, {in `]a, b[, (F - G =1 cst k)%R}. + apply: (G'f _ _).2; apply: subset_itvSoo zxy => //; rewrite bnd_simp. by rewrite (itvP xab). by rewrite (itvP yab). - - move=> z zxy; rewrite F'G'0. + - move=> z zxy; rewrite F'G'0; last first. by rewrite /cst/= mul0r => /eqP; rewrite subr_eq0 => /eqP. apply: subset_itvSoo zxy => //=; rewrite bnd_simp. + by rewrite (itvP xab). @@ -604,7 +604,7 @@ have GacFa : G x @[x --> a^'+] --> (- c + F a)%R. have Fap : Filter a^'+ by exact: at_right_proper_filter. have GFac : (G x - F x)%R @[x --> a^'+] --> (- c)%R. apply/cvgrPdist_le => /= e e0; near=> t. - rewrite opprB GFc; last by rewrite in_itv/=; apply/andP. + rewrite opprB GFc; first by rewrite in_itv/=; apply/andP. by rewrite addNr normr0 ltW. have := @cvgD _ _ _ _ Fap _ _ _ _ GFac Fa. rewrite (_ : (G \- F) + F = G)%R//. @@ -613,7 +613,7 @@ have GbcFb : G x @[x --> b^'-] --> (- c + F b)%R. have Fbn : Filter b^'- by exact: at_left_proper_filter. have GFbc : (G x - F x)%R @[x --> b^'-] --> (- c)%R. apply/cvgrPdist_le => /= e e0; near=> t. - rewrite opprB GFc; last by rewrite in_itv/=; apply/andP. + rewrite opprB GFc; first by rewrite in_itv/=; apply/andP. by rewrite addNr normr0 ltW. have := @cvgD _ _ _ _ Fbn _ _ _ _ GFbc Fb. rewrite (_ : G \- F + F = G)%R //. @@ -627,8 +627,8 @@ have iabfab : mu.-integrable `[a, b] (EFin \o fab). have Ga : G x @[x --> a^'+] --> G a. have := parameterized_integral_cvg_left ab iabfab. rewrite (_ : 0 = G a)%R. - by move=> /left_right_continuousP[]. - by rewrite /G set_itv1 Rintegral_set1. + by rewrite /G set_itv1 Rintegral_set1. + by move=> /left_right_continuousP[]. have Gb : G x @[x --> b^'-] --> G b. exact: (parameterized_integral_cvg_at_left ab iabfab). have Ga0 : G a = 0%R by rewrite /G set_itv1// Rintegral_set1. @@ -638,9 +638,9 @@ have cE : c = F a. have GbFbc : G b = (F b - c)%R. by have := cvg_unique _ GbcFb Gb; rewrite addrC => ->. rewrite -EFinB -cE -GbFbc /G /Rintegral/= fineK//. - rewrite integralEpatch//=. - by under eq_integral do rewrite restrict_EFin. -exact: integrable_fin_num. + exact: integrable_fin_num. +rewrite integralEpatch//=. +by under eq_integral do rewrite restrict_EFin. Unshelve. all: by end_near. Qed. Lemma ge0_continuous_FTC2y (f F : R -> R) a (l : R) : @@ -655,9 +655,9 @@ move=> f_ge0 cf Fxl dF Fa dFE. have mf : measurable_fun `]a, +oo[ f. apply: open_continuous_measurable_fun => //. by move: cf => /continuous_within_itvcyP[/in_continuous_mksetP cf _]. -rewrite -integral_itv_obnd_cbnd//; last exact/measurable_EFinP. +rewrite -integral_itv_obnd_cbnd//; first exact/measurable_EFinP. rewrite itv_bndy_bigcup_BRight seqDU_bigcup_eq. -rewrite ge0_integral_bigcup//=; last 3 first. +rewrite ge0_integral_bigcup//=. - by move=> k; apply: measurableD => //; exact: bigsetU_measurable. - by rewrite -seqDU_bigcup_eq -itv_bndy_bigcup_BRight; exact: measurableT_comp. - move=> x/=; rewrite -seqDU_bigcup_eq -itv_bndy_bigcup_BRight/=. @@ -683,7 +683,7 @@ transitivity (\sum_(0 <= i x []; rewrite in_itv/= => /andP[/ltW + _] _. by rewrite lee_fin; exact: f_ge0. apply: eq_eseriesr => n _. - rewrite seqDUE/= integral_itv_obnd_cbnd; last first. + rewrite seqDUE/= integral_itv_obnd_cbnd. apply/measurable_EFinP/measurable_fun_itv_bndo_bndcP. apply: open_continuous_measurable_fun => //. move: cf => /continuous_within_itvcyP[cf _] x. @@ -714,29 +714,29 @@ transitivity (\sum_(0 <= i /[swap] /[apply] => -[]. by rewrite -[in ltRHS]natr1 addrA ltrD2l invf_lt1// ltr1n. -rewrite nondecreasing_telescope_sumey. +rewrite nondecreasing_telescope_sumey; last 1 first. - by rewrite addr0 EFinN; congr (_ - _). - by rewrite liml. -- apply/nondecreasing_seqP => n; rewrite -subr_ge0. - have isdF (x : R) : x \in `](a + n%:R)%R, (a + n.+1%:R)%R[ -> is_derive x 1%R F (f x). - rewrite in_itv/= => /andP[anx _]. - rewrite -dFE; last by rewrite in_itv/= andbT (le_lt_trans _ anx)// lerDl. - rewrite derive1E. - by apply/derivableP/dF; rewrite (le_lt_trans _ anx)// lerDl. - have [| |r ranaSn ->] := MVT _ isdF. - + by rewrite ltrD2l ltr_nat. - + move : n isdF => [_ |n _]. - + have : {within `[a, +oo[, continuous F}. - apply/continuous_within_itvcyP; split => // x. - rewrite in_itv/= andbT => ax. - by apply: differentiable_continuous; exact/derivable1_diffP/dF. - by apply: continuous_subspaceW; rewrite addr0; exact: subset_itvl. - + apply: @derivable_within_continuous => x. - rewrite in_itv/= => /andP[aSnx _]. - by apply: dF; rewrite (lt_le_trans _ aSnx)// ltrDl. - + move: ranaSn; rewrite in_itv/= => /andP[/ltW anr _]. - rewrite mulr_ge0//; last by rewrite subr_ge0 lerD2l ler_nat. - by rewrite f_ge0// (le_trans _ anr)// lerDl. +apply/nondecreasing_seqP => n; rewrite -subr_ge0. +have isdF (x : R) : x \in `](a + n%:R)%R, (a + n.+1%:R)%R[ -> is_derive x 1%R F (f x). + rewrite in_itv/= => /andP[anx _]. + rewrite -dFE; first by rewrite in_itv/= andbT (le_lt_trans _ anx)// lerDl. + rewrite derive1E. + by apply/derivableP/dF; rewrite (le_lt_trans _ anx)// lerDl. +have [| |r ranaSn ->] := MVT _ isdF. +- by rewrite ltrD2l ltr_nat. +- move : n isdF => [_ |n _]. + + have : {within `[a, +oo[, continuous F}. + apply/continuous_within_itvcyP; split => // x. + rewrite in_itv/= andbT => ax. + by apply: differentiable_continuous; exact/derivable1_diffP/dF. + by apply: continuous_subspaceW; rewrite addr0; exact: subset_itvl. + + apply: @derivable_within_continuous => x. + rewrite in_itv/= => /andP[aSnx _]. + by apply: dF; rewrite (lt_le_trans _ aSnx)// ltrDl. +- move: ranaSn; rewrite in_itv/= => /andP[/ltW anr _]. + rewrite mulr_ge0//; last by rewrite subr_ge0 lerD2l ler_nat. + by rewrite f_ge0// (le_trans _ anr)// lerDl. Unshelve. end_near. Qed. Lemma Rintegral_ge0_continuous_FTC2y (f F : R -> R) a (l : R) : @@ -760,7 +760,7 @@ Lemma le0_continuous_FTC2y (f F : R -> R) a (l : R) : {in `]a, +oo[, F^`() =1 f} -> \int[mu]_(x in `[a, +oo[) (f x)%:E = l%:E - (F a)%:E. Proof. -move=> f_ge0 cf Fl Fa dF dFE; rewrite -[LHS]oppeK -integralN/=; last first. +move=> f_ge0 cf Fl Fa dF dFE; rewrite -[LHS]oppeK -integralN/=. rewrite adde_defN ge0_adde_def => //=; rewrite inE. rewrite oppe_ge0 le_eqVlt; apply/predU1P; left. apply: integral0_eq => /= x; rewrite in_itv/= => /andP[ax _]. @@ -768,7 +768,6 @@ move=> f_ge0 cf Fl Fa dF dFE; rewrite -[LHS]oppeK -integralN/=; last first. apply: integral_ge0 => /= x; rewrite in_itv/= => /andP[ax _]. by rewrite funenegE -fine_max// lee_fin le_max lexx orbT. rewrite (@ge0_continuous_FTC2y (- f)%R (- F)%R _ (- l)%R). -- by rewrite oppeB// EFinN oppeK. - by move=> x ax; rewrite oppr_ge0 f_ge0. - move: cf => /continuous_within_itvcyP[cf fa]. rewrite continuous_within_itvcyP; split; last exact: cvgN. @@ -777,8 +776,9 @@ rewrite (@ge0_continuous_FTC2y (- f)%R (- F)%R _ (- l)%R). - by move=> x ax; exact/derivableN/dF. - exact: cvgN. - move=> x ax; rewrite derive1E deriveN. - by rewrite -derive1E dFE. - by apply: dF; rewrite (itvP ax). + by apply: dF; rewrite (itvP ax). + by rewrite -derive1E dFE. +- by rewrite oppeB// EFinN oppeK. Qed. End corollary_FTC1. @@ -815,7 +815,7 @@ have FGab : derivable_oo_LRcontinuous (F * G)%R a b. by move=> z zab; apply: derivableM; [exact: abF|exact: abG]. have FGfg : {in `]a, b[, (F * G)^`() =1 f * G + F * g}%R. move: Fab Gab => /= [abF FFa FFb] [abG GGa GGb] z zba. - rewrite derive1E deriveM; [|exact: abF|exact: abG]. + rewrite derive1E deriveM; [exact: abF|exact: abG|]. by rewrite -derive1E Gg// -derive1E Ff// addrC (mulrC f). have := continuous_FTC2 ab cfg FGab FGfg; rewrite -EFinB => <-. under [X in _ = X - _]eq_integral do rewrite EFinD. @@ -825,13 +825,13 @@ have ? : mu.-integrable `[a, b] (fun x => ((f * G) x)%:E). + by move/subspace_continuousP : cf; exact. + have := derivable_oo_LRcontinuous_within Gab. by move/subspace_continuousP; exact. -rewrite /= integralD//=. -- by rewrite addeAC subee ?add0e// integrable_fin_num. -- apply: continuous_compact_integrable => //; first exact: segment_compact. - apply/subspace_continuousP => x abx;apply: cvgM. - + have := derivable_oo_LRcontinuous_within Fab. - by move/subspace_continuousP; exact. - + by move/subspace_continuousP : cg; exact. +rewrite /= integralD//=; last first. + by rewrite addeAC subee ?add0e// integrable_fin_num. +apply: continuous_compact_integrable => //; first exact: segment_compact. +apply/subspace_continuousP => x abx;apply: cvgM. +- have := derivable_oo_LRcontinuous_within Fab. + by move/subspace_continuousP; exact. +- by move/subspace_continuousP : cg; exact. Qed. End integration_by_parts. @@ -1086,7 +1086,7 @@ have PGFbFa : derivable_oo_LRcontinuous PG (F b) (F a). - have := parameterized_integral_continuous (ltW FbFa) intG. by move=> /(continuous_within_itvP _ FbFa)[]. - exact: parameterized_integral_cvg_at_left. -rewrite (@continuous_FTC2 _ _ PG _ _ FbFa cG); last 2 first. +rewrite (@continuous_FTC2 _ _ PG _ _ FbFa cG). - split. + move=> x /[dup]xFbFa; rewrite in_itv/= => /andP[Fbx xFa]. apply: (continuous_FTC1 xFa intG Fbx _).1. @@ -1103,13 +1103,13 @@ set f := fun x => if x == a then r else if x == b then l else F^`() x. have fE : {in `]a, b[, F^`() =1 f}. by move=> x; rewrite in_itv/= => /andP[ax xb]; rewrite /f gt_eqF// lt_eqF. have DPGFE : {in `]a, b[, (- (PG \o F))%R^`() =1 ((G \o F) * (- f))%R}. - move=> x /[dup]xab /andP[ax xb]; rewrite derive1_comp //; last first. + move=> x /[dup]xab /andP[ax xb]; rewrite derive1_comp //. apply: diff_derivable; apply: differentiable_comp; apply/derivable1_diffP. by case: Fab => + _ _; exact. by case: PGFbFa => + _ _; apply; exact: decreasing_image_oo. have /(@derive_val _ _ _ _ _ -%R) := @is_deriveNid _ _ (PG (F x)) 1%R. rewrite fctE -derive1E => ->; rewrite mulN1r mulrN; congr -%R. - rewrite derive1_comp; last 2 first. + rewrite derive1_comp. - by case: Fab => + _ _; exact. - by case: PGFbFa => [+ _ _]; apply; exact: decreasing_image_oo. rewrite fE//; congr *%R. @@ -1119,7 +1119,7 @@ have DPGFE : {in `]a, b[, (- (PG \o F))%R^`() =1 ((G \o F) * (- f))%R}. exact: (within_continuous_continuous _ _ FxFbFa). rewrite -[LHS]oppeK oppeB// addrC. under eq_integral do rewrite mulrN EFinN. -rewrite oppeD//= -(continuous_FTC2 ab _ _ DPGFE); last 2 first. +rewrite oppeD//= -(continuous_FTC2 ab _ _ DPGFE). - apply/(continuous_within_itvP _ ab); split. + move=> x xab; apply: continuousM; first apply: continuous_comp. * by move: cF => /(continuous_within_itvP _ ab)[+ _ _]; exact. @@ -1188,8 +1188,6 @@ Proof. move=> ab cG; have Dopp: (@GRing.opp R)^`() = cst (-1)%R. by apply/funext => z; rewrite derive1E derive_val. rewrite (@integration_by_substitution_decreasing -%R)//. -- apply: eq_integral => //= x /[!inE] xab; congr (EFin _). - by rewrite !fctE -[RHS]mulr1 derive1E deriveN// opprK derive_val. - by move=> ? ? _ _; rewrite ltrN2. - by rewrite Dopp => ? _; exact: cvg_cst. - by rewrite Dopp; apply: is_cvgN; exact: is_cvg_cst. @@ -1197,6 +1195,8 @@ rewrite (@integration_by_substitution_decreasing -%R)//. - split => //. + by rewrite -at_leftN; exact: cvg_at_left_filter. + by rewrite -at_rightN; exact: cvg_at_right_filter. +- apply: eq_integral => //= x /[!inE] xab; congr (EFin _). + by rewrite !fctE -[RHS]mulr1 derive1E deriveN// opprK derive_val. Qed. Lemma integration_by_substitution_increasing F G a b : (a <= b)%R -> @@ -1225,26 +1225,26 @@ have cGN : {within `[- F b, - F a]%classic%R, continuous (G \o -%R)}. - move/(continuous_within_itvP _ FaFb) : cG => [_ + _]. by rewrite /= opprK => /cvg_at_rightNP. rewrite -(integration_by_substitution_oppr (ltW FaFb))//. -rewrite (@integration_by_substitution_decreasing (- F)%R); first last. -- exact: cGN. -- split; [|by apply: cvgN; case: Fab..]. - by move=> x xab; apply: derivableN; case: Fab => + _ _; exact. -- apply/cvg_ex; exists (- l)%R. - move/cvgN : F'bl; apply: cvg_trans; apply: near_eq_cvg. - near=> z; rewrite fctE !derive1E deriveN//. - by case: Fab => + _ _; apply; rewrite in_itv/=; apply/andP; split. -- apply/cvg_ex; exists (- r)%R. - move/cvgN : F'ar; apply: cvg_trans; apply: near_eq_cvg. - near=> z; rewrite fctE !derive1E deriveN//. - by case: Fab => + _ _; apply; rewrite in_itv/=; apply/andP; split. -- move=> x xab; rewrite /continuous_at derive1E deriveN; last first. +rewrite (@integration_by_substitution_decreasing (- F)%R). +- exact/ltW. +- by move=> x y xab yab yx; rewrite ltrN2 incrF. +- move=> x xab; rewrite /continuous_at derive1E deriveN. by case: Fab => + _ _; exact. rewrite -derive1E. have /cvgN := cF' _ xab; apply: cvg_trans; apply: near_eq_cvg. near=> y; rewrite fctE !derive1E deriveN//. by case: Fab => + _ _; apply; near: y; exact: near_in_itvoo. -- by move=> x y xab yab yx; rewrite ltrN2 incrF. -- exact/ltW. +- apply/cvg_ex; exists (- r)%R. + move/cvgN : F'ar; apply: cvg_trans; apply: near_eq_cvg. + near=> z; rewrite fctE !derive1E deriveN//. + by case: Fab => + _ _; apply; rewrite in_itv/=; apply/andP; split. +- apply/cvg_ex; exists (- l)%R. + move/cvgN : F'bl; apply: cvg_trans; apply: near_eq_cvg. + near=> z; rewrite fctE !derive1E deriveN//. + by case: Fab => + _ _; apply; rewrite in_itv/=; apply/andP; split. +- split; [|by apply: cvgN; case: Fab..]. + by move=> x xab; apply: derivableN; case: Fab => + _ _; exact. +- exact: cGN. have mGF : measurable_fun `]a, b[ (G \o F). apply: (@measurable_comp _ _ _ _ _ _ `]F a, F b[%classic) => //. - move=> /= _ [x] /[!in_itv]/= /andP[ax xb] <-. @@ -1256,19 +1256,19 @@ have mGF : measurable_fun `]a, b[ (G \o F). have mF' : measurable_fun `]a, b[ F^`(). apply: subspace_continuous_measurable_fun => //. by apply: continuous_in_subspaceT => x /[!inE] xab; exact: cF'. -rewrite integral_itv_bndoo; last first. +rewrite integral_itv_bndoo. apply/measurable_EFinP. - rewrite compA -(compA G -%R) (_ : -%R \o -%R = id); last first. + rewrite compA -(compA G -%R) (_ : -%R \o -%R = id). by apply/funext => y; rewrite /= opprK. apply: measurable_funM => //; apply: measurableT_comp => //. apply: (@eq_measurable_fun _ _ _ _ _ (- F^`())%R). move=> x /[!inE] xab; rewrite [in RHS]derive1E deriveN -?derive1E//. by case: Fab => + _ _; apply. exact: measurableT_comp. -rewrite [in RHS]integral_itv_bndoo; last exact/measurable_EFinP/measurable_funM. +rewrite [in RHS]integral_itv_bndoo; first exact/measurable_EFinP/measurable_funM. apply: eq_integral => x /[!inE] xab; rewrite !fctE !opprK derive1E deriveN. -- by rewrite opprK -derive1E. - by case: Fab => + _ _; exact. +- by rewrite opprK -derive1E. Unshelve. all: end_near. Qed. Lemma decreasing_ge0_integration_by_substitutiony F G a : @@ -1298,26 +1298,26 @@ have mGFNF' i : measurable_fun `[a, (a + i.+1%:R)%R[ ((G \o F) * - F^`())%R. by apply: cdF; rewrite in_itv/= andbT. apply: continuous_comp. have := derivable_within_continuous dF. - rewrite continuous_open_subspace; last exact: interval_open. + rewrite continuous_open_subspace; first exact: interval_open. by apply; rewrite inE/= in_itv/= andbT. by apply: cG; rewrite in_itv/=; apply: decrF; rewrite ?in_itv/= ?lexx ?ltW. -rewrite -integral_itv_bndo_bndc; last first. +rewrite -integral_itv_bndo_bndc. apply/measurable_EFinP; apply: open_continuous_measurable_fun => // x. by rewrite inE => /cG. transitivity (limn (fun n => \int[mu]_(x in `[F (a + n%:R)%R, F a[) (G x)%:E)). rewrite (decreasing_itvNyo_bigcup decrF Fny). rewrite seqDU_bigcup_eq. - rewrite ge0_integral_bigcup/=; first last. - - exact: trivIset_seqDU. - - rewrite -seqDU_bigcup_eq => x Fax; rewrite lee_fin G0//; move: x Fax. - by apply: bigcup_sub => i _; exact: subset_itvr. + rewrite ge0_integral_bigcup/=. + - by move=> n; apply: measurableD => //;exact: bigsetU_measurable. - rewrite -seqDU_bigcup_eq. apply/measurable_EFinP/measurable_fun_bigcup => //. by move=> i; apply: measurable_funS (mG i) => //; exact: subset_itvW. - - by move=> n; apply: measurableD => //;exact: bigsetU_measurable. + - rewrite -seqDU_bigcup_eq => x Fax; rewrite lee_fin G0//; move: x Fax. + by apply: bigcup_sub => i _; exact: subset_itvr. + - exact: trivIset_seqDU. apply: congr_lim; apply/funext => n. - rewrite -ge0_integral_bigsetU//=; last 5 first. - by move=> m; apply: measurableD => //; exact: bigsetU_measurable. + rewrite -ge0_integral_bigsetU//=. + - by move=> m; apply: measurableD => //; exact: bigsetU_measurable. exact: iota_uniq. exact: (@sub_trivIset _ _ _ [set: nat]). apply/measurable_EFinP. @@ -1333,7 +1333,7 @@ transitivity (limn (fun n => \int[mu]_(x in `[F (a + n%:R)%R, F a[) (G x)%:E)). rewrite big_mkord -bigsetU_seqDU. rewrite -(bigcup_mkord _ (fun k => `]F (a + k.+1%:R)%R, F a[%classic)). by move: x; apply: bigcup_sub => k/= nk; exact: subset_itvr. - rewrite -integral_itv_obnd_cbnd; last first. + rewrite -integral_itv_obnd_cbnd. apply/measurable_EFinP; case: n => [|n]. by rewrite addr0 set_itvoo0; exact: measurable_fun_set0. by apply: measurable_funS (mG n) => //; exact: subset_itvW. @@ -1343,7 +1343,7 @@ transitivity (limn (fun n => \int[mu]_(x in `[F (a + n%:R)%R, F a[) (G x)%:E)). exact/esym/decreasing_itvoo_bigcup. transitivity (limn (fun n => \int[mu]_(x in `]a, (a + n%:R)%R[) (((G \o F) * - F^`()) x)%:E)); last first. - rewrite -integral_itv_obnd_cbnd; last first. + rewrite -integral_itv_obnd_cbnd. apply/measurable_EFinP. rewrite (@itv_bndy_bigcup_BLeft_shift _ _ _ 1). under eq_bigcupr do rewrite addn1. @@ -1352,7 +1352,7 @@ transitivity (limn (fun n => exact: subset_itv_oo_co. rewrite (@itv_bndy_bigcup_BLeft_shift _ _ _ 1). under eq_bigcupr do rewrite addn1. - rewrite seqDU_bigcup_eq ge0_integral_bigcup/=; last 4 first. + rewrite seqDU_bigcup_eq ge0_integral_bigcup/=. - by move=> n; apply: measurableD => //; exact: bigsetU_measurable. - rewrite -seqDU_bigcup_eq; apply/measurable_fun_bigcup => // n. apply/measurable_EFinP; apply: measurable_funS (mGFNF' n) => //. @@ -1371,7 +1371,7 @@ transitivity (limn (fun n => * by rewrite interior_itv/= in_itv/= andbT. - exact: trivIset_seqDU. apply: congr_lim; apply/funext => n. - rewrite -integral_bigsetU_EFin/=; last 4 first. + rewrite -integral_bigsetU_EFin/=. - by move=> k; apply: measurableD => //; exact: bigsetU_measurable. - exact: iota_uniq. - exact: (@sub_trivIset _ _ _ [set: nat]). @@ -1392,16 +1392,11 @@ transitivity (limn (fun n => by rewrite bnd_simp/= lerD2l ler_nat. apply: congr_lim; apply/funext => -[|n]. by rewrite addr0 set_itvco0 set_itvoo0 !integral_set0. -rewrite integral_itv_bndo_bndc; last first. +rewrite integral_itv_bndo_bndc. apply/measurable_EFinP. apply/measurable_fun_itv_obnd_cbndP; apply: measurable_funS (mG n) => //. by apply: subset_itvl; rewrite bnd_simp. rewrite integration_by_substitution_decreasing. -- rewrite integral_itv_bndo_bndc; last first. - apply/measurable_EFinP. - by apply: measurable_funS (mGFNF' n) => //; exact: subset_itv_oo_co. - rewrite integral_itv_obnd_cbnd//. - by apply/measurable_EFinP; have /measurable_fun_itv_oc := mGFNF' n. - by rewrite lerDl. - move=> x y /= xaa yaa yx. by apply: decrF; rewrite ?in_itv ?andbT/= ?(itvP xaa) ?(itvP yaa). @@ -1421,6 +1416,11 @@ rewrite integration_by_substitution_decreasing. * apply/cvg_at_right_filter/cG. by rewrite in_itv/= decrF ?in_itv/= ?andbT ?lerDl// ltr_pwDr. * exact: cGFa. +- rewrite integral_itv_bndo_bndc. + apply/measurable_EFinP. + by apply: measurable_funS (mGFNF' n) => //; exact: subset_itv_oo_co. + rewrite integral_itv_obnd_cbnd//. + by apply/measurable_EFinP; have /measurable_fun_itv_oc := mGFNF' n. Qed. Lemma ge0_integration_by_substitutionNy G a : @@ -1432,16 +1432,16 @@ Proof. move=> /continuous_within_itvNycP[cG GNa] G0. have Dopp : (@GRing.opp R)^`() = cst (- 1)%R. by apply/funext => z; rewrite derive1E derive_val. -rewrite decreasing_ge0_integration_by_substitutiony//; last 7 first. - by move=> x y _ _; rewrite ltrN2. - by rewrite Dopp => ? _; exact: cst_continuous. - by rewrite Dopp; apply: is_cvgN; exact: is_cvg_cst. - by rewrite Dopp; apply: is_cvgN; exact: is_cvg_cst. - split. - - by []. - - by apply: cvgN; exact: cvg_at_right_filter. +rewrite decreasing_ge0_integration_by_substitutiony//. +- by move=> x y _ _; rewrite ltrN2. +- by rewrite Dopp => ? _; exact: cst_continuous. +- by rewrite Dopp; apply: is_cvgN; exact: is_cvg_cst. +- by rewrite Dopp; apply: is_cvgN; exact: is_cvg_cst. +- split. + + by []. + + by apply: cvgN; exact: cvg_at_right_filter. exact/cvgNrNy. - exact/continuous_within_itvNycP. +- exact/continuous_within_itvNycP. apply: eq_integral => x _; congr EFin. rewrite fctE -[RHS]mulr1; congr *%R. by rewrite fctE derive1E deriveN// opprK derive_id. @@ -1466,34 +1466,16 @@ have cGN : {in `]-oo, - F a[%R, continuous (G \o -%R)}. move=> x; rewrite in_itv/= ltrNr => FaNx. apply: continuous_comp; first exact: continuousN. by apply: cG; rewrite in_itv/= FaNx. -rewrite -ge0_integration_by_substitutionNy//; last 2 first. +rewrite -ge0_integration_by_substitutionNy//. apply/continuous_within_itvNycP; split => //. apply/cvg_at_rightNP. apply: cvg_toP; first by apply/cvg_ex; exists (G (F a)). by move/cvg_lim: cGFa => -> //; rewrite fctE opprK. by move=> x; rewrite in_itv/= ltrNr => FaNx; apply: G0; rewrite in_itv/= FaNx. -rewrite (@decreasing_ge0_integration_by_substitutiony (- F)%R); first last. -- move=> y; rewrite in_itv/= ltrNr => FaNy. - by apply: G0; rewrite in_itv/= FaNy. -- apply/continuous_within_itvNycP; split => //. - by rewrite fctE opprK; exact/cvg_at_rightNP. -- exact/cvgNrNy. -- split. - + by move=> x ax; apply: derivableN; exact: dF. - + exact: cvgN. -- apply/cvg_ex; exists (- l)%R. - have /(_ (@filter_filter R _ proper_pinfty_nbhs)) := cvgN F'ool. - apply: cvg_trans; apply: near_eq_cvg; near=> z. - rewrite derive1E deriveN -?derive1E//. - apply: dF; rewrite in_itv/= andbT. - by near: z; apply: nbhs_pinfty_gt; exact: num_real. -- apply/cvg_ex; exists (- r)%R. - have /(_ (@filter_filter R _ (at_right_proper_filter a))) := cvgN F'ar. - apply: cvg_trans; apply: near_eq_cvg; near=> z. - rewrite derive1E deriveN -?derive1E//. - by apply: dF; rewrite in_itv/= andbT. +rewrite (@decreasing_ge0_integration_by_substitutiony (- F)%R). +- by move=> x y ax ay yx; rewrite ltrN2; exact: incrF. - move=> x ax. - rewrite /continuous_at derive1E deriveN -?derive1E; last exact: dF. + rewrite /continuous_at derive1E deriveN -?derive1E; first exact: dF. have /(_ (nbhs_filter x)) := cvgN (cF' x ax). apply: cvg_trans; apply: near_eq_cvg; rewrite near_simpl/=; near=> z. rewrite derive1E deriveN -?derive1E//. @@ -1503,7 +1485,25 @@ rewrite (@decreasing_ge0_integration_by_substitutiony (- F)%R); first last. + exact: interval_open. + by move=> ?; rewrite inE. + by rewrite inE. -- by move=> x y ax ay yx; rewrite ltrN2; exact: incrF. +- apply/cvg_ex; exists (- r)%R. + have /(_ (@filter_filter R _ (at_right_proper_filter a))) := cvgN F'ar. + apply: cvg_trans; apply: near_eq_cvg; near=> z. + rewrite derive1E deriveN -?derive1E//. + by apply: dF; rewrite in_itv/= andbT. +- apply/cvg_ex; exists (- l)%R. + have /(_ (@filter_filter R _ proper_pinfty_nbhs)) := cvgN F'ool. + apply: cvg_trans; apply: near_eq_cvg; near=> z. + rewrite derive1E deriveN -?derive1E//. + apply: dF; rewrite in_itv/= andbT. + by near: z; apply: nbhs_pinfty_gt; exact: num_real. +- split. + + by move=> x ax; apply: derivableN; exact: dF. + + exact: cvgN. +- exact/cvgNrNy. +- apply/continuous_within_itvNycP; split => //. + by rewrite fctE opprK; exact/cvg_at_rightNP. +- move=> y; rewrite in_itv/= ltrNr => FaNy. + by apply: G0; rewrite in_itv/= FaNy. have mGF : measurable_fun `]a, +oo[ (G \o F). apply: (@measurable_comp _ _ _ _ _ _ `]F a, +oo[%classic) => //. - move=> /= _ [x] xab <-. @@ -1515,7 +1515,7 @@ have mGF : measurable_fun `]a, +oo[ (G \o F). have mF' : measurable_fun `]a, +oo[ (- F)%R^`(). apply: open_continuous_measurable_fun; first exact: interval_open. move=> x; rewrite inE/= => ax. - rewrite /continuous_at derive1E deriveN; last exact: dF. + rewrite /continuous_at derive1E deriveN; first exact: dF. rewrite -derive1E. under eq_cvg do rewrite -(opprK ((- F)%R^`() _)); apply: cvgN. apply: cvg_trans (cF' x ax). @@ -1525,11 +1525,8 @@ have mF' : measurable_fun `]a, +oo[ (- F)%R^`(). near: z. rewrite near_nbhs. exact: near_in_itvoy. -rewrite -!integral_itv_obnd_cbnd; last 2 first. - apply/measurable_EFinP; apply: measurable_funM => //. - apply: open_continuous_measurable_fun; first exact: interval_open. - by move=> x; rewrite inE/=; exact: cF'. - apply/measurable_EFinP; apply: measurable_funM; last exact: measurableT_comp. +rewrite -!integral_itv_obnd_cbnd. +- apply/measurable_EFinP; apply: measurable_funM; last exact: measurableT_comp. apply: (measurable_comp (measurable_itv `]-oo, (- F a)%R[)). - move=> _ /= [x + <-] => ax. by rewrite in_itv/= ltrN2 incrF ?in_itv/= ?lexx//= (itvP ax). @@ -1538,6 +1535,9 @@ rewrite -!integral_itv_obnd_cbnd; last 2 first. - apply: measurableT_comp => //. apply: subspace_continuous_measurable_fun => //. exact: derivable_within_continuous. +- apply/measurable_EFinP; apply: measurable_funM => //. + apply: open_continuous_measurable_fun; first exact: interval_open. + by move=> x; rewrite inE/=; exact: cF'. apply: eq_integral => x/=; rewrite inE/= => ax. congr EFin. rewrite !fctE/= opprK; congr (_ * _)%R. @@ -1559,7 +1559,7 @@ Proof. move=> ndF cdF cvgFNy cvgFb [dF Fb] FNyNy. move=> /continuous_within_itvNycP[cG cGFb] G0. rewrite -(@opprK _ (F b)). -rewrite (@ge0_integration_by_substitutionNy _ (- F b)%R); last 2 first. +rewrite (@ge0_integration_by_substitutionNy _ (- F b)%R). - apply/continuous_within_itvNycP; split; last by rewrite opprK. by rewrite opprK => x xFb; exact: cG. - by rewrite opprK. @@ -1569,7 +1569,7 @@ have dFN z : (- z < b)%R -> derivable F (- z) 1. have dFcompN z : (- z < b)%R -> derivable (F \o -%R) z 1. move=> zb; apply/diff_derivable/differentiable_comp => //. by apply/derivable1_diffP; exact: dFN. -rewrite (@increasing_ge0_integration_by_substitutiony (\- (F \o -%R))%R); last 8 first. +rewrite (@increasing_ge0_integration_by_substitutiony (\- (F \o -%R))%R). - move=> x y; rewrite !in_itv/= !andbT => xb yb. rewrite -ltrN2 => /ndF. by rewrite /= ltrN2; apply; rewrite !in_itv/= lerNl//. @@ -1577,59 +1577,59 @@ rewrite (@increasing_ge0_integration_by_substitutiony (\- (F \o -%R))%R); last 8 have := cdF (- x)%R. rewrite in_itv/= => /(_ xb) NxF. rewrite /continuous_at in NxF *. - rewrite derive1N/=; last exact: dFcompN. - rewrite [X in _ --> X](_ : _ = F^`() (- x))%R; last first. - rewrite derive1_comp; last 2 first. - exact: derivable_opp. - exact: dFN. + rewrite derive1N/=; first exact: dFcompN. + rewrite [X in _ --> X](_ : _ = F^`() (- x))%R. + rewrite derive1_comp. + - exact: derivable_opp. + - exact: dFN. rewrite [X in (_ * X)%R]derive1E. - rewrite deriveN; last exact: derivable_id. + rewrite deriveN; first exact: derivable_id. by rewrite derive_id mulrN1 opprK. move/(@cvg_compNP _ _ (F^`()) x (F^`() (- x))) : NxF. apply: cvg_trans. apply: near_eq_cvg; rewrite near_simpl; near=> z. - rewrite derive1N; last first. + rewrite derive1N. apply: dFcompN. by near: z; exact: Nlt_nbhsl. - rewrite [in RHS]derive1_comp; last 2 first. - exact: derivable_opp. - apply: dFN. + rewrite [in RHS]derive1_comp. + - exact: derivable_opp. + - apply: dFN. by near: z; exact: Nlt_nbhsl. - rewrite derive1N; last exact: derivable_id. + rewrite derive1N; first exact: derivable_id. by rewrite derive1_id mulrN1 opprK. - move: cvgFb => /cvg_at_leftNP cvgFbl. apply/cvg_ex; exists (F^`() b)%R. apply: cvg_trans cvgFbl. apply: near_eq_cvg; near=> z. - rewrite [RHS]derive1N; last first. + rewrite [RHS]derive1N. apply: dFcompN. rewrite ltrNl. by near: z; exact: nbhs_right_gt. - rewrite fctE [LHS]derive1_comp; last 2 first. - exact: derivable_id. - apply: dFN; rewrite ltrNl. + rewrite fctE [LHS]derive1_comp. + - exact: derivable_id. + - apply: dFN; rewrite ltrNl. by near: z; exact: nbhs_right_gt. - rewrite derive1_id mulr1 [in RHS]derive1_comp; last 2 first. - exact: derivable_opp. - apply: dFN; rewrite ltrNl. + rewrite derive1_id mulr1 [in RHS]derive1_comp. + - exact: derivable_opp. + - apply: dFN; rewrite ltrNl. by near: z; exact: nbhs_right_gt. - rewrite derive1N; last exact: derivable_id. + rewrite derive1N; first exact: derivable_id. by rewrite derive1_id mulrN1 opprK. - move/cvg_ex : cvgFNy => [/= l cvgFNy]. apply/cvg_ex; exists l. move/cvgNy_compNP : cvgFNy. apply: cvg_trans. apply: near_eq_cvg; near=> x. - rewrite derive1N; last first. + rewrite derive1N. apply: diff_derivable; apply: differentiable_comp; apply/derivable1_diffP. exact: derivable_opp. apply: dFN; rewrite ltrNl. by near: x; apply: nbhs_pinfty_gt; rewrite num_real. - rewrite /= [in RHS]derive1_comp; last 2 first. - exact: derivable_opp. - apply: dFN; rewrite ltrNl. + rewrite /= [in RHS]derive1_comp. + - exact: derivable_opp. + - apply: dFN; rewrite ltrNl. by near: x; apply: nbhs_pinfty_gt; rewrite num_real. - rewrite derive1N; last exact: derivable_id. + rewrite derive1N; first exact: derivable_id. by rewrite derive1_id mulrN1 opprK. - split => /=. + move=> z; rewrite in_itv/= andbT => bz. @@ -1653,13 +1653,13 @@ rewrite (@increasing_ge0_integration_by_substitutiony (\- (F \o -%R))%R); last 8 by rewrite /= !opprK; exact/cvg_at_leftNP. - move=> z; rewrite in_itv/= opprK andbT => Fbz. by apply: G0; rewrite in_itv/= ltrNl. -rewrite -[in RHS](opprK b) ge0_integration_by_substitutionNy; last 2 first. +rewrite -[in RHS](opprK b) ge0_integration_by_substitutionNy. apply/continuous_within_itvNycP; split. - move=> z; rewrite in_itv/= opprK => zb. apply: continuousM; last by apply: cdF; rewrite in_itv. apply: continuous_comp. move/derivable_within_continuous: dF. - rewrite continuous_open_subspace; last exact: interval_open. + rewrite continuous_open_subspace; first exact: interval_open. by apply; rewrite inE/= in_itv. by apply: cG; rewrite in_itv/= ndF ?in_itv//= ltW. - rewrite opprK; apply: cvgM => //. @@ -1677,8 +1677,8 @@ have mG : measurable_fun `]-oo, (F b)[ G. have mF : measurable_fun `]-oo, b[ F. apply: open_continuous_measurable_fun => // x xNyb. move/derivable_within_continuous : dF. - by rewrite continuous_open_subspace; [exact|exact: interval_open]. -rewrite -[RHS]integral_itv_obnd_cbnd; last first. + by rewrite continuous_open_subspace; [exact: interval_open|exact]. +rewrite -[RHS]integral_itv_obnd_cbnd. apply/measurable_EFinP/(@measurable_comp _ _ _ _ _ _ `]-oo, b]) => //=. rewrite opp_itv_bndy opprK/=. by apply: subset_itvl; rewrite bnd_simp. @@ -1688,7 +1688,7 @@ rewrite -[RHS]integral_itv_obnd_cbnd; last first. by rewrite in_itv/= ndF ?in_itv//= ltW. - apply: open_continuous_measurable_fun; first by []. by move=> x/=; rewrite inE => /cdF. -rewrite -[LHS]integral_itv_obnd_cbnd; last first. +rewrite -[LHS]integral_itv_obnd_cbnd. apply/measurable_EFinP/measurable_funM. apply: (@measurable_comp _ _ _ _ _ _ `](- F b)%R, +oo[) => //=. - move=> x/= [r]; rewrite in_itv/= andbT => br <-{x}. @@ -1700,14 +1700,14 @@ rewrite -[LHS]integral_itv_obnd_cbnd; last first. by rewrite opp_itv_bndy opprK/=. have : {in `](- b)%R, +oo[%classic, F^`() \o -%R =1 (\- (F \o -%R))%R^`()}. move=> z; rewrite inE/= in_itv/= andbT => zb. - rewrite derive1N; last first. + rewrite derive1N. apply: diff_derivable; apply: differentiable_comp; apply/derivable1_diffP. exact: derivable_opp. by apply: dFN; rewrite ltrNl. - rewrite [in RHS]derive1_comp; last 2 first. - exact: derivable_opp. - by apply: dFN; rewrite ltrNl. - rewrite derive1N; last exact: derivable_id. + rewrite [in RHS]derive1_comp. + - exact: derivable_opp. + - by apply: dFN; rewrite ltrNl. + rewrite derive1N; first exact: derivable_id. by rewrite derive1_id mulrN1 opprK. move/eq_measurable_fun; apply. apply: (@measurable_comp _ _ _ _ _ _ `]-oo, b[) => //=. @@ -1717,14 +1717,14 @@ rewrite -[LHS]integral_itv_obnd_cbnd; last first. apply: eq_integral => /= z; rewrite inE/= in_itv/= andbT => bz. congr EFin. rewrite !fctE/= opprK; congr *%R. -rewrite derive1N; last first. +rewrite derive1N. apply: diff_derivable; apply: differentiable_comp; apply/derivable1_diffP. exact: derivable_opp. by apply: dFN; rewrite ltrNl. -rewrite derive1_comp/=; last 2 first. - exact: derivable_opp. - by apply: dFN; rewrite ltrNl. -rewrite derive1N; last exact: derivable_id. +rewrite derive1_comp/=. +- exact: derivable_opp. +- by apply: dFN; rewrite ltrNl. +rewrite derive1N; first exact: derivable_id. by rewrite derive1_id mulrN1 opprK. Unshelve. all: end_near. Qed. @@ -1750,44 +1750,44 @@ have mGFF' : measurable_fun setT ((G \o F) * F^`())%R. exact: continuous_measurable_fun cdF. have cF : continuous F. by move=> x; exact/differentiable_continuous/derivable1_diffP/dF. -rewrite -{2}setC0 -(set_itvoc0 0%R) setCitv/= ge0_integral_setU//=; first last. - rewrite disj_set2E; apply/eqP; rewrite -subset0 => x []/= /[!in_itv]/=. - by rewrite leNgt andbT => /negP. +rewrite -{2}setC0 -(set_itvoc0 0%R) setCitv/= ge0_integral_setU//=. +- by apply/measurable_EFinP; rewrite -setCitvr setvU; exact: mGFF'. - move=> x _; apply: mulr_ge0; first exact: G0. apply: (@incr_derive1_ge0 _ _ setT). + by move=> ? _; exact: dF. + by move=> ? ? _ _; exact: ndF. + by rewrite interiorT. -- by apply/measurable_EFinP; rewrite -setCitvr setvU; exact: mGFF'. -rewrite integral_itv_obnd_cbnd; last first. +- rewrite disj_set2E; apply/eqP; rewrite -subset0 => x []/= /[!in_itv]/=. + by rewrite leNgt andbT => /negP. +rewrite integral_itv_obnd_cbnd. by apply/measurable_EFinP/measurable_funTS; exact: mGFF'. -rewrite -(increasing_ge0_integration_by_substitutiony _ _ _ cvgFy); first last. -- by move=> x; rewrite in_itv/= andbT => F0x; exact: G0. -- exact: continuous_subspaceT. -- exact: Fyy. -- split=> [x _|]; first exact: dF. - by apply: cvg_at_right_filter; exact: cF. +rewrite -(increasing_ge0_integration_by_substitutiony _ _ _ cvgFy). +- by move=> x y _ _; exact: ndF. +- by move=> x _; exact: cdF. - apply/cvg_ex; exists (F^`() 0). by apply: cvg_at_right_filter; exact: cdF. -- by move=> x _; exact: cdF. -- by move=> x y _ _; exact: ndF. -rewrite -(increasing_ge0_integration_by_substitutionNy _ _ cvgFNy); first last. -- by move=> x _; exact: G0. +- split=> [x _|]; first exact: dF. + by apply: cvg_at_right_filter; exact: cF. +- exact: Fyy. - exact: continuous_subspaceT. -- exact: FNyNy. +- by move=> x; rewrite in_itv/= andbT => F0x; exact: G0. +rewrite -(increasing_ge0_integration_by_substitutionNy _ _ cvgFNy). +- by move=> x y _ _; exact: ndF. +- by move=> x _; exact: cdF. +- by apply: cvg_at_left_filter; exact: cdF. - split=> [x _|]; first apply: dF. - by apply: cvg_at_left_filter; exact: cF. -- by apply: cvg_at_left_filter; exact: cdF. -- by move=> x _; exact: cdF. -- by move=> x y _ _; exact: ndF. -rewrite -integral_itv_obnd_cbnd; last first. +- exact: FNyNy. +- exact: continuous_subspaceT. +- by move=> x _; exact: G0. +rewrite -integral_itv_obnd_cbnd. by apply/measurable_EFinP/measurable_funTS; exact: continuous_measurable_fun. -rewrite -ge0_integral_setU//=; first last. -- rewrite disj_set2E; apply/eqP; rewrite -subset0 => x/=. - by rewrite !in_itv/= andbT ltNge => -[? /negP]. -- by move=> x _; rewrite lee_fin; exact: G0. +rewrite -ge0_integral_setU//=. - apply/measurable_EFinP; apply: measurable_funTS. exact: continuous_measurable_fun. +- by move=> x _; rewrite lee_fin; exact: G0. +- rewrite disj_set2E; apply/eqP; rewrite -subset0 => x/=. + by rewrite !in_itv/= andbT ltNge => -[? /negP]. by rewrite -setCitvr setvU. Qed. @@ -1807,20 +1807,20 @@ Proof. move=> /andP[]; rewrite le_eqVlt => /predU1P[<- *|r0 r1 cG]. by rewrite onem0 2!set_itv1 2!integral_set1. have := @integration_by_substitution_decreasing R onem G r.~ 1. -rewrite onemK onem1 => -> //. +rewrite onemK onem1 => -> //; last 1 first. - by apply: eq_integral => x xr; rewrite !fctE derive1_onem opprK mulr1. - by rewrite lerBlDl lerDr ltW. - by move=> x y _ _ xy; rewrite ler_ltB. - by rewrite derive1_onem; move=> ? ?; exact: cvg_cst. - by rewrite derive1_onem; exact: is_cvg_cst. - by rewrite derive1_onem; exact: is_cvg_cst. -- split => /=. - + by move=> x xr1; exact: derivableB. - + apply: cvg_at_right_filter; rewrite onemK. - apply: (@continuous_comp_cvg _ _ _ _ onem)=> //=. - by move=> x; apply: continuousB => //; exact: cvg_cst. - by under eq_fun do rewrite -/(onem _) onemK; exact: cvg_id. - + by apply: cvg_at_left_filter; apply: cvgB => //; exact: cvg_cst. +split => /=. +- by move=> x xr1; exact: derivableB. +- apply: cvg_at_right_filter; rewrite onemK. + apply: (@continuous_comp_cvg _ _ _ _ onem)=> //=. + by move=> x; apply: continuousB => //; exact: cvg_cst. + by under eq_fun do rewrite -/(onem _) onemK; exact: cvg_id. +- by apply: cvg_at_left_filter; apply: cvgB => //; exact: cvg_cst. Qed. Lemma Rintegration_by_substitution_onem (G : R -> R) (r : R) : @@ -1846,18 +1846,18 @@ Proof. move=> f0 cf evenf. have mf : measurable_fun [set: R] f by exact: continuous_measurable_fun. have mposnums : measurable [set x : R | 0 <= x]%R by rewrite -set_itvcy. -rewrite -(setUv [set x : R | 0 <= x]%R) ge0_integral_setU//= ; last 4 first. +rewrite -(setUv [set x : R | 0 <= x]%R) ge0_integral_setU//=. exact: measurableC. by apply/measurable_EFinP; rewrite setUv. by move=> x _; rewrite lee_fin. exact/disj_setPCl. rewrite mule_natl mule2n; congr +%E. rewrite -set_itvcy// setCitvr. -rewrite integral_itv_bndo_bndc; last exact/measurable_EFinP/measurable_funTS. +rewrite integral_itv_bndo_bndc; first exact/measurable_EFinP/measurable_funTS. rewrite -{1}oppr0 ge0_integration_by_substitutionNy//. -- apply: eq_integral => /= x; rewrite inE/= in_itv/= andbT => x0. - by rewrite (evenf x). -- exact: continuous_subspaceT. + exact: continuous_subspaceT. +apply: eq_integral => /= x; rewrite inE/= in_itv/= andbT => x0. +by rewrite (evenf x). Qed. End ge0_integralT_even. diff --git a/theories/gauss_integral.v b/theories/gauss_integral.v index a5ef8500ff..24f791266b 100644 --- a/theories/gauss_integral.v +++ b/theories/gauss_integral.v @@ -14,7 +14,7 @@ From mathcomp Require Import derive ftc. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -150,7 +150,7 @@ near (pinfty_nbhs R) => M. exists M => // x y. rewrite in_itv/= => /andP[cex xce]. rewrite partial1_u !mulNr normrN -!mulrA normrM ger0_norm//. -rewrite -expRD exprMn_comm; last by rewrite /GRing.comm mulrC. +rewrite -expRD exprMn_comm; first by rewrite /GRing.comm mulrC. rewrite -opprD. rewrite -{1}(mul1r (x ^+ 2)) -mulrDl. rewrite (@le_trans _ _ (2 * `|x * gauss_fun x|))//. @@ -181,8 +181,8 @@ have [c [e e0 cex]] : exists c : R, exists2 e : R, 0 < e & ball c e x. exact: ballxx. have [M M0 HM] := partial1_u_local_ub c e0. rewrite [X in _ --> X](_ : _ = - \int[mu]_(y in `[0, 1]) ('d1 u) x y)//; last first. - rewrite /= -RintegralZl//; last first. + \int[mu]_(y in `[0, 1]) ('d1 u) x y)//. + rewrite /= -RintegralZl//. apply: continuous_compact_integrable => /=; first exact: segment_compact. by apply/continuous_subspaceT => x0; exact: continuous_gaussM. by apply: eq_Rintegral => z z01; rewrite partial1_u. @@ -227,14 +227,14 @@ Definition h x := integral01_u x + (integral0_gauss x) ^+ 2. Let derive_h x : 0 < x -> h^`() x = 0. Proof. move=> x0. -rewrite /h derive1E deriveD//=; last first. +rewrite /h derive1E deriveD//=. apply/diff_derivable. apply: (@differentiable_comp _ _ _ _ integral0_gauss (fun x => x ^+ 2)). apply/derivable1_diffP. by have [] := derive_integral0_gauss x0. by apply/derivable1_diffP; exact: exprn_derivable. rewrite -derive1E derive_integral01_u -derive1E. -rewrite (@derive1_comp _ integral0_gauss (fun z => z ^+ 2))//; last first. +rewrite (@derive1_comp _ integral0_gauss (fun z => z ^+ 2))//. by have [] := derive_integral0_gauss x0. rewrite derive1E exp_derive. rewrite (derive_integral0_gauss _).2//. @@ -248,24 +248,24 @@ have derM : ( *%R^~ x)^`() = cst x. by apply/funext => z; rewrite derive1Mr// derive1_id mul1r. have := @integration_by_substitution_increasing R (fun t => t * x) gauss_fun _ _ ler01. -rewrite -/mu mul0r mul1r => ->//=; last 6 first. - - move=> a b; rewrite !in_itv/= => /andP[a0 a1] /andP[b0 b1] ab. +rewrite -/mu mul0r mul1r => ->//=. +- move=> a b; rewrite !in_itv/= => /andP[a0 a1] /andP[b0 b1] ab. by rewrite ltr_pM2r. - - by rewrite derM => z _; exact: cvg_cst. - - by rewrite derM; exact: is_cvg_cst. - - by rewrite derM; exact: is_cvg_cst. - - split => //. - + apply: cvg_at_right_filter. - by apply: cvgM => //; exact: cvg_cst. - + apply: cvg_at_left_filter. - by apply: cvgM => //; exact: cvg_cst. - - by apply: continuous_subspaceT; exact: continuous_gauss_fun. +- by rewrite derM => z _; exact: cvg_cst. +- by rewrite derM; exact: is_cvg_cst. +- by rewrite derM; exact: is_cvg_cst. +- split => //. + + apply: cvg_at_right_filter. + by apply: cvgM => //; exact: cvg_cst. + + apply: cvg_at_left_filter. + by apply: cvgM => //; exact: cvg_cst. +- by apply: continuous_subspaceT; exact: continuous_gauss_fun. rewrite derM. under eq_integral do rewrite fctE/= EFinM. have ? : mu.-integrable `[0, 1] (fun y => (gauss_fun (y * x))%:E). apply: continuous_compact_integrable => //; first exact: segment_compact. by apply: continuous_subspaceT => z; exact: continuous_gaussM. -rewrite integralZr//= fineM//=; last exact: integrable_fin_num. +rewrite integralZr//= fineM//=; first exact: integrable_fin_num. by rewrite mulrC. Qed. @@ -358,7 +358,7 @@ have cvg_Ig : @integral0_gauss R x @[x --> +oo] --> Num.sqrt pi / 2. --> Num.sqrt (pi / 4). apply: continuous_cvg => //; [exact: sqrt_continuous|exact: cvg_integral0_gauss_sqr]. - rewrite sqrtrM ?pi_ge0// sqrtrV// (_ : 4 = 2 ^+ 2); last first. + rewrite sqrtrM ?pi_ge0// sqrtrV// (_ : 4 = 2 ^+ 2). by rewrite expr2 -natrM. rewrite sqrtr_sqr ger0_norm//. rewrite (_ : (fun _ => Num.sqrt _) = integral0_gauss)//. @@ -378,12 +378,12 @@ Qed. Theorem integralT_gauss : (\int[mu]_x (gauss_fun x)%:E)%E = (Num.sqrt pi)%:E. Proof. rewrite ge0_symfun_integralT//=. -- rewrite (_ : [set x | _] = `[0, +oo[%classic); last first. - by apply/seteqP; split => x/=; rewrite in_itv/= andbT. - by rewrite integral0y_gauss -EFinM mulrCA divff// mulr1. - by move=> x; exact: gauss_fun_ge0. - exact: continuous_gauss_fun. - by move=> x/=; rewrite /gauss_fun sqrrN. +rewrite (_ : [set x | _] = `[0, +oo[%classic). + by apply/seteqP; split => x/=; rewrite in_itv/= andbT. +by rewrite integral0y_gauss -EFinM mulrCA divff// mulr1. Qed. Lemma integrableT_gauss : mu.-integrable [set: R] (EFin \o gauss_fun). diff --git a/theories/hoelder.v b/theories/hoelder.v index 16cfdc7419..aebb5ff8b8 100644 --- a/theories/hoelder.v +++ b/theories/hoelder.v @@ -44,7 +44,7 @@ From mathcomp Require Import lebesgue_integral numfun exp. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -141,7 +141,7 @@ rewrite unlock /Lnorm => mf; case: p => [r||//]. - rewrite lte_fin => r0 /poweR_eq0_eq0 => /(_ (integral_ge0 _ _)) h. have : \int[mu]_x `| `|f x| `^ r | = 0%R. under eq_integral. - move=> x _; rewrite gee0_abs; last by rewrite poweR_ge0. over. + move=> x _; rewrite gee0_abs; first by rewrite poweR_ge0. over. by apply: h => x _; rewrite poweR_ge0. have mp : measurable_fun [set: T] (fun x => `|f x| `^ r). apply: (@measurableT_comp _ _ _ _ _ _ (fun x => x `^ r)) => //=. @@ -250,7 +250,7 @@ move: p p0 py pNy => [p| |]//. rewrite eqe => p0 _ _. rewrite inver (negbTE p0) inver subr_eq0. case: ifPn => [/eqP ->|p1]; first by rewrite invr1 mul1e invey adde0. -rewrite inveM; last first. +rewrite inveM. rewrite inveM_defE eqe (negbTE p0)/= andbT eqe. rewrite invr_eq0 subr_eq0; apply/implyP => /eqP ->. by rewrite lee01/= ltry. @@ -281,7 +281,7 @@ have [->|qNy] := eqVneq q -oo. by rewrite (negbTE p0). split => [pq1|pq]; last by rewrite pq hoelder_conjugate_eq1. rewrite /hoelder_conjugate (negbTE py)//. -rewrite ifF//; last first. +rewrite ifF//. by apply/negbTE; move: pfin; rewrite fin_numE => /andP[]. by rewrite (negbTE p0); exact: Nyconjugate. Qed. @@ -310,13 +310,13 @@ rewrite gt_eqF// (negbTE p0). have [->|p1] := eqVneq p 1; first by rewrite subee// inve0 !mul1e. rewrite -[X in _ = X + _]mule1. have pfin : p \is a fin_num by rewrite fin_numE -ltNye pNy. -rewrite -[X in _ * X + _](@divee _ (p - 1)); last first. - by rewrite sube_eq ?add0e. - by rewrite fin_numB// pfin. -rewrite [in RHS]muleA -muleDl; last 2 first. - rewrite fin_numV//; first by rewrite sube_eq// add0e. +rewrite -[X in _ * X + _](@divee _ (p - 1)). +- by rewrite fin_numB// pfin. +- by rewrite sube_eq ?add0e. +rewrite [in RHS]muleA -muleDl. +- rewrite fin_numV//; first by rewrite sube_eq// add0e. by rewrite sube_eq// -ltNye. - by rewrite fin_num_adde_defl. +- by rewrite fin_num_adde_defl. by rewrite muleA muleBr ?fin_num_adde_defl// mule1 subeK. Qed. @@ -328,7 +328,7 @@ rewrite /hoelder_conjugate; case: ifPn => [/eqP->|py]. rewrite gt_eqF// (negbTE p0). have ? : p \is a fin_num by rewrite fin_numE py andbT -ltNye. have [->|p1] := eqVneq p 1; first by rewrite subee// inve0 !mul1e invey. -rewrite inveM. +rewrite inveM; last first. by rewrite inveK muleA divee// ?mul1e// gt_eqF// (lt_trans _ p1). apply: fin_inveM_def => //; first by rewrite inve_eq0 sube_eq. rewrite fin_numV//; first by rewrite sube_eq// add0e. @@ -344,13 +344,13 @@ rewrite gt_eqF// (negbTE p0). have ? : p \is a fin_num by rewrite fin_numE py andbT -ltNye. rewrite muleAC divee//. have [->|p1] := eqVneq p 1; first by rewrite subee// inve0 mul1e. -rewrite -[X in _ = _ - X](@divee _ (p - 1)); last first. - by rewrite sube_eq// add0e. - by rewrite fin_numB//; apply/andP. -rewrite -muleBl//; last 2 first. - rewrite fin_numV//; first by rewrite sube_eq// add0e. +rewrite -[X in _ = _ - X](@divee _ (p - 1)). +- by rewrite fin_numB//; apply/andP. +- by rewrite sube_eq// add0e. +rewrite -muleBl//. +- rewrite fin_numV//; first by rewrite sube_eq// add0e. by rewrite sube_eq// -ltNye. - by rewrite fin_num_adde_defr. +- by rewrite fin_num_adde_defr. by rewrite oppeB ?fin_num_adde_defl// addeA subee// add0e. Qed. @@ -387,11 +387,11 @@ Let hoelder0 f g p q : measurable_fun setT f -> measurable_fun setT g -> Proof. rewrite -lte_fin. move=> mf mg p0 q0 pq f0; rewrite f0 mul0e Lnorm1 [leLHS](_ : _ = 0)//. -rewrite (ae_eq_integral (cst 0)) => [|//||//|]; first by rewrite integral0. -- by do 2 apply: measurableT_comp => //; exact: measurable_funM. -- move/measurable_EFinP in mf. - apply: filterS (Lnorm_eq0_eq0 mf p0 f0) => x /(_ I) + _. - by rewrite /= normrM EFinM -abse_EFin => ->; rewrite abse0 mul0e. +rewrite (ae_eq_integral (cst 0)) => [//||//||]; last by rewrite integral0. + by do 2 apply: measurableT_comp => //; exact: measurable_funM. +move/measurable_EFinP in mf. +apply: filterS (Lnorm_eq0_eq0 mf p0 f0) => x /(_ I) + _. +by rewrite /= normrM EFinM -abse_EFin => ->; rewrite abse0 mul0e. Qed. Let normalized p f x := (`|f x| / fine 'N_p%:E[f])%R. @@ -410,8 +410,8 @@ Proof. move=> p0 fpos ifp. transitivity (\int[mu]_x (`|f x| `^ p / fine ('N_p%:E[f] `^ p))%:E). apply: eq_integral => t _. - rewrite powRM//; last by rewrite invr_ge0 fine_ge0// Lnorm_ge0. - rewrite -[in LHS]powR_inv1; last by rewrite fine_ge0 // Lnorm_ge0. + rewrite powRM//; first by rewrite invr_ge0 fine_ge0// Lnorm_ge0. + rewrite -[in LHS]powR_inv1; first by rewrite fine_ge0 // Lnorm_ge0. by rewrite fine_poweR powRAC -powR_inv1 // powR_ge0. have fp0 : 0 < \int[mu]_x (`|f x| `^ p)%:E. rewrite unlock in fpos. @@ -423,8 +423,8 @@ have foo : \int[mu]_x (`|f x| `^ p)%:E < +oo. move/integrableP: ifp => -[_]. by under eq_integral do rewrite gee0_abs// ?lee_fin ?powR_ge0//. rewrite integralZl//; apply/eqP; rewrite eqe_pdivrMl ?mule1. -- by rewrite fineK// gt0_fin_numE. - by rewrite gt_eqF// fine_gt0// foo andbT. +- by rewrite fineK// gt0_fin_numE. Qed. Lemma hoelder (f g : T -> R) p q : @@ -442,22 +442,22 @@ have {g0}gpos : 0 < 'N_q%:E[g] by rewrite lt0e g0 Lnorm_ge0. have [foo|foo] := eqVneq 'N_p%:E[f] +oo; first by rewrite foo gt0_mulye ?leey. have [goo|goo] := eqVneq 'N_q%:E[g] +oo; first by rewrite goo gt0_muley ?leey. pose F := normalized p f; pose G := normalized q g. -rewrite [leLHS](_ : _ = 'N_1[(F \* G)%R] * 'N_p%:E[f] * 'N_q%:E[g]); last first. +rewrite [leLHS](_ : _ = 'N_1[(F \* G)%R] * 'N_p%:E[f] * 'N_q%:E[g]). rewrite !Lnorm1; under [in RHS]eq_integral. move=> x _; rewrite /F /G /normalized/=. - rewrite ger0_norm; last by rewrite mulr_ge0 ?divr_ge0 ?fine_ge0 ?Lnorm_ge0. + rewrite ger0_norm; first by rewrite mulr_ge0 ?divr_ge0 ?fine_ge0 ?Lnorm_ge0. by rewrite mulrACA -normrM EFinM; over. - rewrite ge0_integralZr//; last 2 first. + rewrite ge0_integralZr//. - by do 2 apply: measurableT_comp => //; exact: measurable_funM. - by rewrite lee_fin mulr_ge0// invr_ge0 fine_ge0// Lnorm_ge0. rewrite -!muleA [X in _ * X](_ : _ = 1) ?mule1// EFinM muleACA. - rewrite (_ : _ * 'N_p%:E[f] = 1) ?mul1e; last first. - rewrite -[X in _ * X]fineK; last by rewrite ge0_fin_numE ?ltey// Lnorm_ge0. + rewrite (_ : _ * 'N_p%:E[f] = 1) ?mul1e. + rewrite -[X in _ * X]fineK; first by rewrite ge0_fin_numE ?ltey// Lnorm_ge0. by rewrite -EFinM mulVf ?gt_eqF// fine_gt0// fpos/= ltey. - rewrite -[X in _ * X]fineK; last by rewrite ge0_fin_numE ?ltey// Lnorm_ge0. + rewrite -[X in _ * X]fineK; first by rewrite ge0_fin_numE ?ltey// Lnorm_ge0. by rewrite -EFinM mulVf ?gt_eqF// fine_gt0// gpos/= ltey. rewrite -(mul1e ('N_p%:E[f] * _)) -muleA lee_pmul ?mule_ge0 ?Lnorm_ge0//. -rewrite [leRHS](_ : _ = \int[mu]_x (F x `^ p / p + G x `^ q / q)%:E). +rewrite [leRHS](_ : _ = \int[mu]_x (F x `^ p / p + G x `^ q / q)%:E); last first. rewrite Lnorm1 ae_ge0_le_integral //. - do 2 apply: measurableT_comp => //. by apply: measurable_funM => //; exact: measurable_normalized. @@ -468,7 +468,7 @@ rewrite [leRHS](_ : _ = \int[mu]_x (F x `^ p / p + G x `^ q / q)%:E). apply/aeW => x _; rewrite lee_fin ger0_norm ?conjugate_powR ?normalized_ge0//. by rewrite mulr_ge0// normalized_ge0. under eq_integral do rewrite EFinD. -rewrite ge0_integralD//; last 4 first. +rewrite ge0_integralD//. - by move=> x _; rewrite lee_fin mulr_ge0// ?invr_ge0 ?powR_ge0// ltW. - apply: measurableT_comp => //; apply: measurable_funM => //. by apply: measurableT_comp_powR => //; exact: measurable_normalized. @@ -476,19 +476,19 @@ rewrite ge0_integralD//; last 4 first. - apply: measurableT_comp => //; apply: measurable_funM => //. by apply: measurableT_comp_powR => //; exact: measurable_normalized. under eq_integral do rewrite EFinM. -rewrite [X in X + _]ge0_integralZr//; last 3 first. +rewrite [X in X + _]ge0_integralZr//. - apply: measurableT_comp => //. by apply: measurableT_comp_powR => //; exact: measurable_normalized. - by move=> x _; rewrite lee_fin powR_ge0. - by rewrite lee_fin invr_ge0 ltW. under [X in _ + X]eq_integral => x _ do rewrite EFinM. -rewrite ge0_integralZr//; last 3 first. +rewrite ge0_integralZr//. - apply: measurableT_comp => //. by apply: measurableT_comp_powR => //; exact: measurable_normalized. - by move=> x _; rewrite lee_fin powR_ge0. - by rewrite lee_fin invr_ge0 ltW. -rewrite integral_normalized//; last exact: integrable_powR. -rewrite integral_normalized//; last exact: integrable_powR. +rewrite integral_normalized//; first exact: integrable_powR. +rewrite integral_normalized//; first exact: integrable_powR. by rewrite 2!mul1e -EFinD pq. Qed. @@ -509,22 +509,22 @@ pose f a b n : R := match n with 0%nat => a | 1%nat => b | _ => 0 end. have mf a b : measurable_fun setT (f a b) by []. have := hoelder counting (mf a1 a2) (mf b1 b2) p0 q0 pq. rewrite !Lnorm_counting//. -rewrite (nneseries_split 0 2); last by move=> k; rewrite lee_fin powR_ge0. -rewrite add0n ereal_series_cond eseries0 ?adde0; last first. +rewrite (nneseries_split 0 2); first by move=> k; rewrite lee_fin powR_ge0. +rewrite add0n ereal_series_cond eseries0 ?adde0. by move=> [//|] [//|n _]; rewrite /f /= mulr0 normr0 powR0. rewrite big_mkord 2!big_ord_recr/= big_ord0 add0e. rewrite powRr1 ?normr_ge0 ?powRr1 ?normr_ge0//. -rewrite (nneseries_split 0 2); last by move=> k; rewrite lee_fin powR_ge0. -rewrite ereal_series_cond eseries0 ?adde0; last first. +rewrite (nneseries_split 0 2); first by move=> k; rewrite lee_fin powR_ge0. +rewrite ereal_series_cond eseries0 ?adde0. by move=> [//|] [//|n _]; rewrite /f /= normr0 powR0// gt_eqF. rewrite big_mkord 2!big_ord_recr /= big_ord0 add0e -EFinD poweR_EFin. -rewrite (nneseries_split 0 2); last by move=> k; rewrite lee_fin powR_ge0. -rewrite ereal_series_cond eseries0 ?adde0; last first. +rewrite (nneseries_split 0 2); first by move=> k; rewrite lee_fin powR_ge0. +rewrite ereal_series_cond eseries0 ?adde0. by move=> [//|] [//|n _]; rewrite /f /= normr0 powR0// gt_eqF. rewrite big_mkord 2!big_ord_recr /= big_ord0 add0e -EFinD poweR_EFin. -rewrite -EFinM invr1 powRr1; last by rewrite addr_ge0. -do 2 (rewrite ger0_norm; last by rewrite mulr_ge0). -by do 4 (rewrite ger0_norm; last by []). +rewrite -EFinM invr1 powRr1; first by rewrite addr_ge0. +do 2 (rewrite ger0_norm; first by rewrite mulr_ge0). +by do 4 (rewrite ger0_norm; first by []). Qed. End hoelder2. @@ -554,7 +554,7 @@ have q1 : 1 <= q by rewrite /q ler_pdivlMr// ?mul1r ?gerBl// subr_gt0. have q0 : 0 < q by rewrite (lt_le_trans _ q1). have pq1 : p^-1 + q^-1 = 1. by rewrite /q invf_div -{1}(div1r p) -mulrDl subrKC mulfV// gt_eqF. -rewrite -(@powRr1 _ (w1 * x `^ p + w2 * y `^ p)); last first. +rewrite -(@powRr1 _ (w1 * x `^ p + w2 * y `^ p)). by rewrite addr_ge0// mulr_ge0// ?powR_ge0// /w1 ?onem_ge0// itv_ge0. have -> : 1 = p^-1 * p by rewrite mulVf ?gt_eqF. rewrite powRrM (ge0_ler_powR (le_trans _ (ltW p1)))//. @@ -562,7 +562,7 @@ rewrite powRrM (ge0_ler_powR (le_trans _ (ltW p1)))//. - by rewrite nnegrE powR_ge0. have -> : w1 * x + w2 * y = w1 `^ (p^-1) * w1 `^ (q^-1) * x + w2 `^ (p^-1) * w2 `^ (q^-1) * y. - rewrite -!powRD pq1; [|exact/implyP..]. + rewrite -!powRD pq1; [exact/implyP..|]. by rewrite !powRr1// /w1 ?onem_ge0. apply: (@le_trans _ _ ((w1 * x `^ p + w2 * y `^ p) `^ (p^-1) * (w1 + w2) `^ q^-1)). @@ -590,7 +590,7 @@ Proof. move=> p1; rewrite (@le_trans _ _ ((2^-1 * `| f x | + 2^-1 * `| g x |) `^ p))//. rewrite ge0_ler_powR ?nnegrE ?(le_trans _ p1)//. by rewrite (le_trans (ler_normD _ _))// 2!normrM ger0_norm. -rewrite {2 4}(_ : 2^-1 = 1 - 2^-1); last by rewrite {2}(splitr 1) div1r addrK. +rewrite {2 4}(_ : 2^-1 = 1 - 2^-1); first by rewrite {2}(splitr 1) div1r addrK. by apply: (convex_powR p1 (Itv01 _ _)) => //=; rewrite ?inE/= ?in_itv/= ?normr_ge0// ?invr_ge0// invf_le1 ?ler1n. Qed. @@ -606,7 +606,7 @@ Let minkowski1 f g p : measurable_fun [set: T] f -> measurable_fun [set: T] g -> 'N_1[(f \+ g)%R] <= 'N_1[f] + 'N_1[g]. Proof. move=> mf mg. -rewrite !Lnorm1 -ge0_integralD//=; [|by do 2 apply: measurableT_comp..]. +rewrite !Lnorm1 -ge0_integralD//=; [by do 2 apply: measurableT_comp..|]. rewrite ge0_le_integral//. - by do 2 apply: measurableT_comp => //; exact: measurable_funD. - by apply/measurableT_comp/measurable_funD; exact/measurableT_comp. @@ -635,14 +635,14 @@ apply: (@le_lt_trans _ _ x). exact/measurableT_comp_powR/measurableT_comp. - by move=> ? _; rewrite lee_fin. rewrite {}/x; under eq_integral do rewrite EFinM. -rewrite ge0_integralZl_EFin ?powR_ge0//; last first. +rewrite ge0_integralZl_EFin ?powR_ge0//. by apply/measurable_EFinP/measurable_funD => //; exact/measurableT_comp_powR/measurableT_comp. rewrite lte_mul_pinfty ?lee_fin ?powR_ge0//. under eq_integral do rewrite EFinD. -rewrite ge0_integralD//; last 2 first. - - exact/measurable_EFinP/measurableT_comp_powR/measurableT_comp. - - exact/measurable_EFinP/measurableT_comp_powR/measurableT_comp. +rewrite ge0_integralD//. +- exact/measurable_EFinP/measurableT_comp_powR/measurableT_comp. +- exact/measurable_EFinP/measurableT_comp_powR/measurableT_comp. by rewrite lte_add_pinfty//; under eq_integral do rewrite -poweR_EFin -abse_EFin; rewrite -powR_Lnorm// poweR_lty. @@ -664,13 +664,13 @@ suff : 'N_p%:E[(f \+ g)%R] `^ p <= ('N_p%:E[f] + 'N_p%:E[g]) * have [-> _|Nfg0] := eqVneq 'N_p%:E[(f \+ g)%R] 0. by rewrite adde_ge0 ?Lnorm_ge0. rewrite lee_pdivlMr ?fine_gt0// ?lt0e ?Nfg0 ?Lnorm_ge0//. - rewrite -{1}(@fineK _ ('N_p%:E[(f \+ g)%R] `^ p)); last first. + rewrite -{1}(@fineK _ ('N_p%:E[(f \+ g)%R] `^ p)). by rewrite fin_num_poweR// ge0_fin_numE// Lnorm_ge0. - rewrite -(invrK (fine _)) lee_pdivrMl; last first. + rewrite -(invrK (fine _)) lee_pdivrMl. rewrite invr_gt0 fine_gt0// (poweR_lty _ Nfgoo) andbT poweR_gt0//. by rewrite lt0e Nfg0 Lnorm_ge0. rewrite fineK ?ge0_fin_numE ?Lnorm_ge0// => /le_trans; apply. - rewrite lee_pdivrMl; last first. + rewrite lee_pdivrMl. by rewrite fine_gt0// poweR_lty// andbT poweR_gt0// lt0e Nfg0 Lnorm_ge0. by rewrite fineK// 1?muleC// fin_num_poweR// ge0_fin_numE ?Lnorm_ge0. have p0 : (0 < p)%R by exact: (lt_trans _ p1). @@ -690,27 +690,27 @@ apply: (@le_trans _ _ exact/measurableT_comp_powR/measurableT_comp/measurable_funD. - by move=> ? _; rewrite lee_fin ler_wpM2r// ?powR_ge0// ler_normD. under eq_integral=> ? _ do rewrite mulrDl EFinD. -rewrite ge0_integralD//; last 2 first. - - apply: measurableT_comp => //; apply: measurable_funM. - exact: measurableT_comp. - exact/measurableT_comp_powR/measurableT_comp/measurable_funD. - - apply: measurableT_comp => //; apply: measurable_funM. - exact: measurableT_comp. - exact/measurableT_comp_powR/measurableT_comp/measurable_funD. +rewrite ge0_integralD//. +- apply: measurableT_comp => //; apply: measurable_funM. + exact: measurableT_comp. + exact/measurableT_comp_powR/measurableT_comp/measurable_funD. +- apply: measurableT_comp => //; apply: measurable_funM. + exact: measurableT_comp. + exact/measurableT_comp_powR/measurableT_comp/measurable_funD. rewrite [leRHS](_ : _ = ('N_p%:E[f] + 'N_p%:E[g]) * - (\int[mu]_x (`|f x + g x| `^ p)%:E) `^ p^-1.~). - rewrite muleDl; last 2 first. - - rewrite fin_num_poweR//. - under eq_integral do rewrite -poweR_EFin -abse_EFin. - rewrite -powR_Lnorm ?gt_eqF// fin_num_poweR//. - by rewrite ge0_fin_numE ?Lnorm_ge0. - - by rewrite ge0_adde_def// inE Lnorm_ge0. + (\int[mu]_x (`|f x + g x| `^ p)%:E) `^ p^-1.~); last first. + rewrite muleDl. + - rewrite fin_num_poweR//. + under eq_integral do rewrite -poweR_EFin -abse_EFin. + rewrite -powR_Lnorm ?gt_eqF// fin_num_poweR//. + by rewrite ge0_fin_numE ?Lnorm_ge0. + - by rewrite ge0_adde_def// inE Lnorm_ge0. apply: leeD. - pose h := (@powR R ^~ (p - 1) \o normr \o (f \+ g))%R; pose i := (f \* h)%R. - rewrite [leLHS](_ : _ = 'N_1[i]%R); last first. + rewrite [leLHS](_ : _ = 'N_1[i]%R). rewrite Lnorm1; apply: eq_integral => x _ /=. by rewrite normrM (ger0_norm (powR_ge0 _ _)). - rewrite [X in _ * X](_ : _ = 'N_(p / (p - 1))%:E[h]); last first. + rewrite [X in _ * X](_ : _ = 'N_(p / (p - 1))%:E[h]). rewrite unlock. rewrite onemV ?gt_eqF// invf_div; apply: congr2; last by []. apply: eq_integral => x _; congr EFin. @@ -720,10 +720,10 @@ rewrite [leRHS](_ : _ = ('N_p%:E[f] + 'N_p%:E[g]) * + by rewrite divr_gt0// subr_gt0. + by rewrite invf_div -onemV ?gt_eqF// subrKC. - pose h := (fun x => `|f x + g x| `^ (p - 1))%R; pose i := (g \* h)%R. - rewrite [leLHS](_ : _ = 'N_1[i]); last first. + rewrite [leLHS](_ : _ = 'N_1[i]). rewrite Lnorm1; apply: eq_integral => x _ /=. by rewrite normrM norm_powR// normr_id. - rewrite [X in _ * X](_ : _ = 'N_((1 - p^-1)^-1)%:E[h])//; last first. + rewrite [X in _ * X](_ : _ = 'N_((1 - p^-1)^-1)%:E[h])//. rewrite unlock. apply: congr2; last by rewrite invrK. apply: eq_integral => x _; congr EFin. @@ -735,12 +735,12 @@ rewrite [leRHS](_ : _ = ('N_p%:E[f] + 'N_p%:E[g]) * + by rewrite invrK subrKC. rewrite -muleA; congr (_ * _). under [X in X * _]eq_integral=> x _ do rewrite mulr_powRB1 ?subr_gt0//. -rewrite poweRD; last by rewrite poweRD_defE gt_eqF ?implyFb// subr_gt0 invf_lt1. -rewrite poweRe1; last by apply: integral_ge0 => x _; rewrite lee_fin powR_ge0. +rewrite poweRD; first by rewrite poweRD_defE gt_eqF ?implyFb// subr_gt0 invf_lt1. +rewrite poweRe1; first by apply: integral_ge0 => x _; rewrite lee_fin powR_ge0. congr (_ * _); rewrite poweRN. -- by rewrite unlock fine_poweR. - under eq_integral do rewrite -poweR_EFin -abse_EFin. by rewrite -powR_Lnorm ?gt_eqF// fin_num_poweR// ge0_fin_numE ?Lnorm_ge0. +- by rewrite unlock fine_poweR. Qed. Lemma lerB_DLnorm f g p : @@ -748,8 +748,8 @@ Lemma lerB_DLnorm f g p : 'N_p%:E[f] <= 'N_p%:E[(f \+ g)%R] + 'N_p%:E[g]. Proof. move=> mf mg p1. -rewrite [in leLHS](_ : f = ((f + g) + (-%R \o g))%R); last by rewrite addrK. -rewrite (_ : 'N__[g] = 'N_p%:E[-%R \o g]); last first. +rewrite [in leLHS](_ : f = ((f + g) + (-%R \o g))%R); first by rewrite addrK. +rewrite (_ : 'N__[g] = 'N_p%:E[-%R \o g]). rewrite (_ : EFin \o (-%R \o g) = \- (EFin \o g))//. apply: esym. exact: oppe_Lnorm. @@ -982,14 +982,14 @@ Proof. rewrite unlock /Lnorm. case: p p1 f => //[r r1 f|? f]. - under eq_integral do rewrite /= -mulr_algl scaler1 normrM powRM ?EFinM//. - rewrite integralZl//; last first. + rewrite integralZl//. apply/integrableP; split. apply: measurableT_comp => //. apply: (@measurableT_comp _ _ _ _ _ _ (@powR R ^~ r)) => //. exact: measurableT_comp. apply: (@lty_poweRy _ _ r^-1). by rewrite gt_eqF// invr_gt0 ?(lt_le_trans ltr01). - rewrite [ltLHS](_ : _ = 'N[mu]_r%:E[EFin \o f]%E). + rewrite [ltLHS](_ : _ = 'N[mu]_r%:E[EFin \o f]%E); last first. exact: Lfunction_finite. rewrite unlock /Lnorm. by under eq_integral do rewrite gee0_abs ?lee_fin ?powR_ge0//. @@ -1211,7 +1211,7 @@ rewrite le_eqVlt => /predU1P[mu0 p1 q1 muTfin pq f +|mu_pos]. rewrite /finite_norm unlock /Lnorm. move: p p1 {pq} => [r r1| |//]; last by rewrite -mu0 ltxx ltry. under eq_integral do rewrite /= -[(_ `^ _)%R]ger0_norm ?powR_ge0//=. - rewrite (@integral_abs_eq0 _ _ _ _ _ (fun x => (`|f x| `^ r)%:E))//. + rewrite (@integral_abs_eq0 _ _ _ _ _ (fun x => (`|f x| `^ r)%:E))//; last first. by rewrite poweR0r// invr_neq0// gt_eqF// -lte_fin (lt_le_trans _ r1). apply/measurable_EFinP/(@measurableT_comp _ _ _ _ _ _ (@powR R ^~ r)) => //. exact: measurableT_comp. @@ -1243,7 +1243,7 @@ move: p q => [p| |//] [q| |]// p1 q1. under [in leLHS] eq_integral do rewrite /= powRr1// norm_powR// normrE. under [in leRHS] eq_integral do rewrite /= norm_powR// normr_id -powRrM mulrCA divff// mulr1. - rewrite [X in X <= _]poweRe1; last + rewrite [X in X <= _]poweRe1. by apply: integral_ge0 => x _; rewrite lee_fin powR_ge0. move=> h1 /lty_poweRy h2. apply/poweR_lty/(le_lt_trans h1). @@ -1257,7 +1257,7 @@ move: p q => [p| |//] [q| |]// p1 q1. rewrite !inE/= /finite_norm unlock /Lnorm mu_pos => supf_lty. apply/andP; split; rewrite inE//= /finite_norm unlock /Lnorm. rewrite poweR_lty//; move: supf_lty => /ess_supr_bounded[M fM]. - rewrite (@le_lt_trans _ _ (\int[mu]_x (M `^ p)%:E)); [by []| |]; last first. + rewrite (@le_lt_trans _ _ (\int[mu]_x (M `^ p)%:E)); [| |by []]; last first. by rewrite integral_cst// ltey_eq fin_numM. apply: ae_ge0_le_integral => //. + by move=> x _; rewrite lee_fin powR_ge0. diff --git a/theories/homotopy_theory/continuous_path.v b/theories/homotopy_theory/continuous_path.v index 5cf26c8d56..367f927c4f 100644 --- a/theories/homotopy_theory/continuous_path.v +++ b/theories/homotopy_theory/continuous_path.v @@ -23,7 +23,7 @@ From mathcomp Require Import cardinality fsbigop reals topology wedge_sigT. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. diff --git a/theories/homotopy_theory/wedge_sigT.v b/theories/homotopy_theory/wedge_sigT.v index 1864434e50..f9eba3aec2 100644 --- a/theories/homotopy_theory/wedge_sigT.v +++ b/theories/homotopy_theory/wedge_sigT.v @@ -47,7 +47,7 @@ From mathcomp Require Import cardinality fsbigop reals topology. (* - bipointed *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -194,7 +194,7 @@ Lemma wedge_connected : (forall i, connected [set: X i]) -> Proof. move=> ctdX; rewrite -wedgeTE. have [I0|/set0P[i0 Ii0]] := eqVneq [set: I] set0. - rewrite [X in connected X](_ : _ = set0); first exact: connected0. + rewrite [X in connected X](_ : _ = set0); last exact: connected0. by rewrite I0 bigcup_set0. apply: bigcup_connected. exists (@wedge_lift i0 (p0 _)) => i Ii; exists (p0 i) => //. @@ -289,9 +289,9 @@ move=> fsetI clI; case: wedge_nbhs_specP => [//|i0 bcA|i z zNp0 /= wNz]. apply: filter_bigI => i _; rewrite /B_; apply: proj_continuous. have /bcA : [set: I] i by []. congr (nbhs _ _). - rewrite /proj /wedge_prod wedge_lift_funE; first by case: dfwithP. + rewrite /proj /wedge_prod wedge_lift_funE; last by case: dfwithP. exact: wedge_prod_pointE. -rewrite [x in nbhs x _]/wedge_prod /= wedge_lift_funE; first last. +rewrite [x in nbhs x _]/wedge_prod /= wedge_lift_funE. exact: wedge_prod_pointE. have : wedge_prod @` (A `&` (@wedge_lift i @` (~`[set p0 i]))) `<=` wedge_prod @` A. @@ -308,7 +308,7 @@ exists (proj i @^-1` (@wedge_lift i @^-1` rewrite eqEsubset; split => // prodX; case => /[swap] [][] r _ <- /=. case => _ /[swap] /wedge_prod_inj -> [+ [e /[swap]]] => /[swap]. move=> <- Awe eNpi; rewrite /proj /wedge_prod /=. - rewrite wedge_lift_funE; last exact: wedge_prod_pointE. + rewrite wedge_lift_funE; first exact: wedge_prod_pointE. rewrite dfwithin; split => //; first by split => //; exists e. exists (wedge_lift e) => //. by rewrite wedge_lift_funE //; exact: wedge_prod_pointE. @@ -316,7 +316,7 @@ case=> /[swap] [][y] yNpi E Ay. have [riE|R] := eqVneq i (projT1 (repr r)); last first. apply: absurd yNpi. move: E; rewrite /proj/wedge_prod /wedge_fun /=/sigT_fun /=. - rewrite dfwithout //; last by rewrite eq_sym. + rewrite dfwithout //; first by rewrite eq_sym. by case/eqmodP/orP => [/eqP E|/andP[/= /eqP//]]; exact: (existT_inj2 E). split; exists (wedge_lift y); [by split; [rewrite E | exists y]| |by []|]. - congr wedge_prod; rewrite E. diff --git a/theories/kernel.v b/theories/kernel.v index 777a5f90a3..f2f9c36a07 100644 --- a/theories/kernel.v +++ b/theories/kernel.v @@ -76,7 +76,7 @@ From mathcomp Require Import lebesgue_integral. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -119,7 +119,7 @@ Lemma kernel_measurable_eq_cst d d' (T : measurableType d) (T' : measurableType d') (R : realType) (f : R.-ker T ~> T') k : measurable [set t | f t [set: T'] == k]. Proof. -rewrite [X in measurable X](_ : _ = (f ^~ setT) @^-1` [set k]); last first. +rewrite [X in measurable X](_ : _ = (f ^~ setT) @^-1` [set k]). by apply/seteqP; split => t/= /eqP. have /(_ measurableT [set k]) := measurable_kernel f setT measurableT. by rewrite setTI; exact. @@ -129,7 +129,7 @@ Lemma kernel_measurable_neq_cst d d' (T : measurableType d) (T' : measurableType d') (R : realType) (f : R.-ker T ~> T') k : measurable [set t | f t [set: T'] != k]. Proof. -rewrite [X in measurable X](_ : _ = (f ^~ setT) @^-1` [set~ k]); last first. +rewrite [X in measurable X](_ : _ = (f ^~ setT) @^-1` [set~ k]). by apply/seteqP; split => t /eqP. have /(_ measurableT [set~ k]) := measurable_kernel f setT measurableT. by rewrite setTI; apply => //; exact: measurableC. @@ -142,7 +142,7 @@ Proof. move=> _ /= B mB; rewrite setTI. have [/eqP->|/eqP->|/eqP->|/eqP->] := set_bool B. - exact: kernel_measurable_eq_cst. -- rewrite (_ : _ @^-1` _ = [set b | f b setT != k]); last first. +- rewrite (_ : _ @^-1` _ = [set b | f b setT != k]). by apply/seteqP; split => [t /negbT//|t /negbTE]. exact: kernel_measurable_neq_cst. - by rewrite preimage_set0. @@ -335,7 +335,7 @@ exists (fun n => if n is O return R.-ker X ~> Y then k else @kzero _ _ X Y R). by case => [|_]; [exact: measure_uub|exact: kzero_uub]. move=> t U mU/=; rewrite /mseries. rewrite (nneseries_split _ 1%N)// big_mkord big_ord_recl/= big_ord0 adde0. -rewrite ereal_series (@eq_eseriesr _ _ (fun=> 0)); last by case. +rewrite ereal_series (@eq_eseriesr _ _ (fun=> 0)); first by case. by rewrite eseries0// adde0. Qed. @@ -448,11 +448,11 @@ move=> x U mU; rewrite /kseries /mseries/= /mseries/=. have kE i : k i x U = \sum_(j k_ ->. transitivity (\esum_(l in [set: nat] `*` [set: nat]) p l.1 l.2 x U). - rewrite (_ : _ `*` _ = setT `*`` (fun=> setT)); last by apply/seteqP; split. + rewrite (_ : _ `*` _ = setT `*`` (fun=> setT)); first by apply/seteqP; split. rewrite -(@esum_esum _ _ _ _ _ (fun i j => p i j x U))//. rewrite nneseries_esumT//; apply: eq_esum => i _. by rewrite kE// nneseries_esumT. -rewrite (reindex_esum [set: nat] _ f)//; last first. +rewrite (reindex_esum [set: nat] _ f)//. have := @bijTT _ _ f. by rewrite -setTT_bijective/= -[in X in set_bij _ X _ -> _](@setXTT nat nat). by rewrite nneseries_esumT//; exact: eq_esum. @@ -618,12 +618,12 @@ move=> A B BA [mA mphiA] [mB mphiB]; split; first exact: measurableD. suff : phi (A `\` B) = (fun x => phi A x - phi B x). by move=> ->; exact: emeasurable_funB. rewrite funeqE => x; rewrite /phi/= xsectionD// measureD. -- by rewrite setIidr//; exact: le_xsection. - exact: measurable_xsection. - exact: measurable_xsection. - have [M kM] := kD_ub x. rewrite (lt_le_trans (kM (xsection A x) _)) ?leey//. exact: measurable_xsection. +- by rewrite setIidr//; exact: le_xsection. Qed. End xsection_kernel. @@ -646,7 +646,7 @@ Lemma measurable_fun_xsection_finite_kernel A : Proof. move: A; suff : measurable `<=` XY by move=> + A; rewrite inE => /[apply] -[]. move=> /= A mA; rewrite /XY/=; split => //; rewrite (_ : phi _ = - (fun x => mrestr (k x) measurableT (xsection A x))); last first. + (fun x => mrestr (k x) measurableT (xsection A x))). by apply/funext => x//=; rewrite /mrestr setIT. apply measurable_prod_subset_xsection_kernel => // x. have [r hr] := measure_uub k; exists r => B mB. @@ -672,7 +672,7 @@ Lemma measurable_fun_xsection_integral Proof. move=> h. rewrite (_ : (fun x => _) = - (fun x => limn_esup (fun n => \int[l x]_y (k_ n (x, y))%:E))); last first. + (fun x => limn_esup (fun n => \int[l x]_y (k_ n (x, y))%:E))). apply/funext => x. transitivity (lim (\int[l x]_y (k_ n (x, y))%:E @[n --> \oo])); last first. rewrite is_cvg_limn_esupE//. @@ -683,41 +683,41 @@ rewrite (_ : (fun x => _) = - exact/measurable_EFinP/measurableT_comp. - by move=> y _; rewrite lee_fin; exact/lefP/ndk_. rewrite -monotone_convergence//. - - by apply: eq_integral => y _; apply/esym/cvg_lim => //; exact: k_k. - by move=> n; exact/measurable_EFinP/measurableT_comp. - by move=> n y _; rewrite lee_fin. - by move=> y _ m n mn; rewrite lee_fin; exact/lefP/ndk_. + - by apply: eq_integral => y _; apply/esym/cvg_lim => //; exact: k_k. apply: measurable_fun_limn_esup => n. rewrite [X in measurable_fun _ X](_ : _ = (fun x => \int[l x]_y (\sum_(r \in range (k_ n)) - r * \1_(k_ n @^-1` [set r]) (x, y))%:E)); last first. + r * \1_(k_ n @^-1` [set r]) (x, y))%:E)). by apply/funext => x; apply: eq_integral => y _; rewrite fimfunE. rewrite [X in measurable_fun _ X](_ : _ = (fun x => \sum_(r \in range (k_ n)) - (\int[l x]_y (r * \1_(k_ n @^-1` [set r]) (x, y))%:E))); last first. + (\int[l x]_y (r * \1_(k_ n @^-1` [set r]) (x, y))%:E))). apply/funext => x; rewrite -ge0_integral_fsum//. - - by apply: eq_integral => y _; rewrite -fsumEFin. - move=> r. apply/measurable_EFinP/measurableT_comp => [//|]. exact/measurableT_comp. - by move=> m y _; rewrite nnfun_muleindic_ge0. + - by apply: eq_integral => y _; rewrite -fsumEFin. apply: emeasurable_fsum => // r. rewrite [X in measurable_fun _ X](_ : _ = fun x => r%:E * - \int[l x]_y (\1_(k_ n @^-1` [set r]) (x, y))%:E); last first. + \int[l x]_y (\1_(k_ n @^-1` [set r]) (x, y))%:E). apply/funext => x; under eq_integral do rewrite EFinM. have [r0|r0] := leP 0%R r. by rewrite ge0_integralZl//; exact/measurable_EFinP/measurableT_comp. - rewrite integral0_eq; last first. + rewrite integral0_eq. by move=> y _; rewrite preimage_nnfun0// indic0 mule0. by rewrite integral0_eq ?mule0// => y _; rewrite preimage_nnfun0// indic0. apply/measurable_funeM. -rewrite (_ : (fun x => _) = (fun x => l x (xsection (k_ n @^-1` [set r]) x))). +rewrite (_ : (fun x => _) = (fun x => l x (xsection (k_ n @^-1` [set r]) x))); last first. exact/h. apply/funext => x; rewrite integral_indic//; last first. - rewrite (_ : (fun x => _) = xsection (k_ n @^-1` [set r]) x). - exact: measurable_xsection. - by rewrite /xsection; apply/seteqP; split=> y/= /[!inE]. -congr (l x _); apply/funext => y1/=; rewrite /xsection/= inE. -by apply/propext; tauto. + congr (l x _); apply/funext => y1/=; rewrite /xsection/= inE. + by apply/propext; tauto. +rewrite (_ : (fun x => _) = xsection (k_ n @^-1` [set r]) x); last first. + exact: measurable_xsection. +by rewrite /xsection; apply/seteqP; split=> y/= /[!inE]. Qed. Lemma measurable_fun_integral_finite_kernel (l : R.-fker X ~> Y) @@ -744,7 +744,7 @@ apply: (@measurable_fun_xsection_integral _ k_). - move => n r. have [l_ hl_] := sfinite_kernel l. rewrite (_ : (fun x => _) = (fun x => - mseries (l_ ^~ x) 0 (xsection (k_ n @^-1` [set r]) x))); last first. + mseries (l_ ^~ x) 0 (xsection (k_ n @^-1` [set r]) x))). by apply/funext => x; rewrite hl_//; exact/measurable_xsection. apply: ge0_emeasurable_sum => // m _. by apply: measurable_fun_xsection_finite_kernel => // /[!inE]. @@ -825,7 +825,7 @@ Definition kadd (x : X) : {measure set Y -> \bar R} := Let measurable_fun_kadd U : measurable U -> measurable_fun [set: X] (kadd ^~ U). Proof. move=> mU; rewrite /kadd. -rewrite (_ : (fun _ => _) = (fun x => k1 x U + k2 x U)); last first. +rewrite (_ : (fun _ => _) = (fun x => k1 x U + k2 x U)). by apply/funext => x; rewrite -measure_addE. by apply: emeasurable_funD; exact/measurable_kernel. Qed. @@ -892,14 +892,14 @@ Proof. move=> mU; rewrite /knormalize/= /mnormalize /=. rewrite (_ : (fun _ => _) = (fun x => if f x setT == 0 then P U else if f x setT == +oo then P U - else f x U * (fine (f x setT))^-1%:E)); last first. + else f x U * (fine (f x setT))^-1%:E)). apply/funext => x; case: ifPn => [/orP[->//|->]|]; first by case: ifPn. by rewrite negb_or=> /andP[/negbTE -> /negbTE ->]. apply: measurable_fun_if => //; [exact: kernel_measurable_fun_eq_cst|]. apply: measurable_fun_if => //. - rewrite setTI [X in measurable X](_ : _ = [set t | f t setT != 0]). - exact: kernel_measurable_neq_cst. - by apply/seteqP; split => [x /negbT//|x /negbTE]. + by apply/seteqP; split => [x /negbT//|x /negbTE]. + exact: kernel_measurable_neq_cst. - apply: (@measurable_funS _ _ _ _ setT) => //. exact: kernel_measurable_fun_eq_cst. - apply: emeasurable_funM. @@ -937,12 +937,12 @@ rewrite /mnormalize /mset /preimage/=. apply: emeasurable_fun_infty_o => //. rewrite /mnormalize/=. rewrite (_ : (fun x => _) = (fun x => if (k x setT == 0) || (k x setT == +oo) - then \d_point Ys else k x Ys * ((fine (k x setT))^-1)%:E)); last first. + then \d_point Ys else k x Ys * ((fine (k x setT))^-1)%:E)). by apply/funext => x/=; case: ifPn. apply: measurable_fun_if => //. - apply: (measurable_fun_bool true) => //. rewrite (_ : _ @^-1` _ = [set t | k t setT == 0] `|` - [set t | k t setT == +oo]); last first. + [set t | k t setT == +oo]). by apply/seteqP; split=> x /= /orP. by rewrite setTI; apply: measurableU; exact: kernel_measurable_eq_cst. - apply/emeasurable_funM; first exact/measurable_funTS/measurable_kernel. @@ -983,7 +983,7 @@ Let kcomp_ge0 x U : 0 <= kcomp l k x U. Proof. exact: integral_ge0. Qed. Let kcomp_sigma_additive x : semi_sigma_additive (kcomp l k x). Proof. move=> U mU tU mUU; rewrite [X in _ --> X](_ : _ = - \int[l x]_y (\sum_(n V _. by apply/esym/cvg_lim => //; exact/measure_semi_sigma_additive. apply/cvg_closeP; split. @@ -1064,18 +1064,18 @@ have [kl hkl] : exists kl : (R.-fker X ~> Z) ^nat, forall x U, by rewrite (reindex_esum [set: nat] _ f)// nneseries_esumT. exists kl => x U mU. transitivity ((kseries l_ \; kseries k_) x U). - rewrite /= /kcomp [in RHS](eq_measure_integral (l x)); last first. + rewrite /= /kcomp [in RHS](eq_measure_integral (l x)). by move=> *; rewrite hl_. by apply: eq_integral => y _; rewrite hk_. -rewrite /= /kcomp/= integral_nneseries//=; last first. +rewrite /= /kcomp/= integral_nneseries//=. by move=> n; exact: measurableT_comp (measurable_kernel (k_ n) _ mU) _. transitivity (\sum_(i i _; rewrite integral_kseries//. by exact: measurableT_comp (measurable_kernel (k_ i) _ mU) _. rewrite /mseries -hkl/=. -rewrite (_ : setT = setT `*`` (fun=> setT)); last by apply/seteqP; split. +rewrite (_ : setT = setT `*`` (fun=> setT)); first by apply/seteqP; split. rewrite -(@esum_esum _ _ _ _ _ (fun i j => (l_ j \; k_ i) x U))//. -rewrite nneseries_esumT; last by move=> *; exact: nneseries_ge0. +rewrite nneseries_esumT; first by move=> *; exact: nneseries_ge0. by apply: eq_esum => /= i _; rewrite nneseries_esumT. Qed. @@ -1189,40 +1189,40 @@ Let integral_kcomp_nnsfun x (f : {nnsfun Z >-> R}) : \int[kcomp l k x]_z (f z)%:E = \int[l x]_y (\int[k (x, y)]_z (f z)%:E). Proof. under [in LHS]eq_integral do rewrite fimfunE -fsumEFin//. -rewrite ge0_integral_fsum//; last 2 first. - - by move=> r; exact/measurable_EFinP/measurableT_comp. - - by move=> r z _; rewrite EFinM nnfun_muleindic_ge0. +rewrite ge0_integral_fsum//. +- by move=> r; exact/measurable_EFinP/measurableT_comp. +- by move=> r z _; rewrite EFinM nnfun_muleindic_ge0. under [in RHS]eq_integral. move=> y _. under eq_integral. by move=> z _; rewrite fimfunE -fsumEFin//; over. - rewrite /= ge0_integral_fsum//; last 2 first. - - by move=> r; exact/measurable_EFinP/measurableT_comp. - - by move=> r z _; rewrite EFinM nnfun_muleindic_ge0. + rewrite /= ge0_integral_fsum//. + - by move=> r; exact/measurable_EFinP/measurableT_comp. + - by move=> r z _; rewrite EFinM nnfun_muleindic_ge0. under eq_fsbigr. move=> r _. - rewrite (integralZl_indic _ (fun r => f @^-1` [set r]))//; last first. + rewrite (integralZl_indic _ (fun r => f @^-1` [set r]))//. by move=> r0; rewrite preimage_nnfun0. rewrite integral_indic// setIT. over. over. -rewrite /= ge0_integral_fsum//; last 2 first. +rewrite /= ge0_integral_fsum//. - move=> r; apply: measurable_funeM. exact: measurableT_comp (measurable_kernel k (f @^-1` [set r]) _) _. - move=> n y _. have := mulemu_ge0 (fun n => f @^-1` [set n]). by apply; exact: preimage_nnfun0. apply: eq_fsbigr => r _. -rewrite (integralZl_indic _ (fun r => f @^-1` [set r]))//; last first. +rewrite (integralZl_indic _ (fun r => f @^-1` [set r]))//. exact: preimage_nnfun0. rewrite /= integral_kcomp_indic//. have [r0|r0] := leP 0%R r. rewrite ge0_integralZl//. - by under eq_integral do rewrite integral_indic// setIT. - exact: measurableT_comp (measurable_kernel k (f @^-1` [set r]) _) _. + exact: measurableT_comp (measurable_kernel k (f @^-1` [set r]) _) _. + by under eq_integral do rewrite integral_indic// setIT. rewrite integral0_eq ?mule0. - by rewrite integral0_eq// => y _; rewrite preimage_nnfun0// measure0 mule0. -by move=> y _; rewrite integral0_eq// => z _; rewrite preimage_nnfun0// indic0. + by move=> y _; rewrite integral0_eq// => z _; rewrite preimage_nnfun0// indic0. +by rewrite integral0_eq// => y _; rewrite preimage_nnfun0// measure0 mule0. Qed. (* [Lemma 3, Staton 2017 ESOP] (4/4) *) @@ -1233,12 +1233,12 @@ move=> f0 mf. pose f_ := nnsfun_approx measurableT mf. transitivity (\int[kcomp l k x]_z (lim ((f_ n z)%:E @[n --> \oo]))). by apply/eq_integral => z _; apply/esym/cvg_lim => //=; exact: cvg_nnsfun_approx. -rewrite monotone_convergence//; last 3 first. +rewrite monotone_convergence//. by move=> n; exact/measurable_EFinP. by move=> n z _; rewrite lee_fin. by move=> z _ a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. rewrite (_ : (fun _ => _) = - (fun n => \int[l x]_y (\int[k (x, y)]_z (f_ n z)%:E)))//; last first. + (fun n => \int[l x]_y (\int[k (x, y)]_z (f_ n z)%:E)))//. by apply/funext => n; rewrite integral_kcomp_nnsfun. transitivity (\int[l x]_y lim ((\int[k (x, y)]_z (f_ n z)%:E) @[n --> \oo])). rewrite -monotone_convergence//; last 3 first. @@ -1252,7 +1252,7 @@ transitivity (\int[l x]_y lim ((\int[k (x, y)]_z (f_ n z)%:E) @[n --> \oo])). + exact/measurable_EFinP. + exact/measurable_EFinP. + by move=> z _; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. -apply: eq_integral => y _; rewrite -monotone_convergence//; last 3 first. +apply: eq_integral => y _; rewrite -monotone_convergence//. - by move=> n; exact/measurable_EFinP. - by move=> n z _; rewrite lee_fin. - by move=> z _ a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. @@ -1280,9 +1280,9 @@ Lemma kfcompkindic (k : T1 -> {measure set T2 -> \bar R}) A : measurable A -> kfcomp k (EFin \o \1_A) = (fun x => k x (xsection A x)). Proof. move=> mA; apply/funext=> x; rewrite /kfcomp /= integral_indic// ?setIT//. -- by rewrite -[X in k x X = _]/(_ @^-1` _) -xsectionE. - rewrite -[X in measurable X]/(_ @^-1` _) -xsectionE. exact: measurable_xsection. +- by rewrite -[X in k x X = _]/(_ @^-1` _) -xsectionE. Qed. End kfcomp. @@ -1324,8 +1324,8 @@ Let kfcompkg (A1 : set T1) (A2 : set T2) : measurable A1 -> measurable A2 -> kfcomp k (g A1 A2) = (fun x => (\1_A1 x)%:E * k x A2). Proof. move=> mA1 mA2; apply/funext => x. -rewrite /kfcomp /g/= integral_indic//; last first. - rewrite [X in measurable X](_ : _ = xsection (A1 `*` A2) x); last first. +rewrite /kfcomp /g/= integral_indic//. + rewrite [X in measurable X](_ : _ = xsection (A1 `*` A2) x). by rewrite xsectionE. by apply: measurable_xsection; exact: measurableX. have [xA1|xA1] := boolP (x \in A1). @@ -1351,7 +1351,7 @@ pose H3 := isSigmaFinite.Build _ _ _ _ (finite_measure_sigma_finite (@kernel_finite_transition _ _ _ _ R k x)). pose kx' := HB.pack_for (FiniteMeasure.type T2 R) (Measure.sort kx) H1 H2 H3. have kxE : kx = kx' by exact: eq_measure. -rewrite [in RHS]/kfcomp -integralB_EFin//; last 2 first. +rewrite [in RHS]/kfcomp -integralB_EFin//. - rewrite -/kx kxE; apply: integrable_indic => //. by rewrite -[X in measurable X]xsectionE; exact: measurable_xsection. - rewrite -/kx kxE; apply: integrable_indic => //. @@ -1386,7 +1386,7 @@ pose K := kfcomp k. have Kf_cvg x : K (EFin \o f_ n) x @[n --> \oo] --> K f x. pose g' n y := (EFin \o f_ n) (x, y). rewrite [X in _ --> X](_ : _ = - \int[k x]_y (fun t => limn (g' ^~ t)) y); last first. + \int[k x]_y (fun t => limn (g' ^~ t)) y). apply: eq_integral => y _. by apply/esym/cvg_lim => //; exact: cvg_nnsfun_approx. apply: cvg_monotone_convergence => //. @@ -1408,11 +1408,11 @@ have mK1 (A : set (T1 * T2)) : measurable A -> by rewrite -DE => -[]. rewrite [X in measurable_fun _ X](_ : _ = K (EFin \o (fun x => \sum_(y \in range (f_ m)) y * - \1_(f_ m @^-1` [set y]) x))%R); last first. + \1_(f_ m @^-1` [set y]) x))%R). by apply/funext => x/=; apply: eq_integral => y _ /=; rewrite fimfunE. rewrite /I/= [X in measurable_fun _ X](_ : _ = (fun x => \sum_(y \in range (f_ m)) - (\int[k x]_w2 (y * \1_(f_ m @^-1` [set y]) (x, w2))%:E))); last first. + (\int[k x]_w2 (y * \1_(f_ m @^-1` [set y]) (x, w2))%:E))). apply/funext => x; rewrite /K /kfcomp. under eq_integral do rewrite /= -fsumEFin//. rewrite /= ge0_integral_fsum//=. @@ -1423,7 +1423,7 @@ rewrite /I/= [X in measurable_fun _ X](_ : _ = (fun x => by move=> r y _; rewrite EFinM nnfun_muleindic_ge0. apply: emeasurable_fsum => // r. rewrite [X in measurable_fun _ X](_ : _ = (fun x => - (r%:E * \int[k x]_y (\1_(f_ m @^-1` [set r]) (x, y))%:E))); last first. + (r%:E * \int[k x]_y (\1_(f_ m @^-1` [set r]) (x, y))%:E))). apply/funext => x. under eq_integral do rewrite EFinM. rewrite integralZl//. @@ -1478,7 +1478,7 @@ Qed. Local Lemma intker_indicE A x y : measurable A -> intker_indic k A (x, y) = k (x, y) (xsection A y). Proof. -move=> mA; rewrite /intker_indic(*NB:lemma?*) integral_indic//; last first. +move=> mA; rewrite /intker_indic(*NB:lemma?*) integral_indic//. by rewrite -[X in measurable X]xsectionE; exact: measurable_xsection. by rewrite setIT xsectionE. Qed. @@ -1491,9 +1491,9 @@ Proof. move=> tA mA. rewrite /intker_indic -(@integral_nneseries _ _ R (k (x, y)) _ measurableT (fun i z => (\1_(A i) (y, z))%:E))//. -- by apply: eq_integral => z _ /=; rewrite indic_bigcup. - move=> n; apply/measurable_EFinP => //; apply: measurable_indic. by rewrite -[X in measurable X]xsectionE; exact: measurable_xsection. +- by apply: eq_integral => z _ /=; rewrite indic_bigcup. Qed. End intker_indic_lemmas. @@ -1528,12 +1528,12 @@ Theorem semi_sigma_additive_kproduct d0 d1 d2 (T0 : measurableType d0) Proof. move=> /= A mA tA mbigcup. rewrite (_ : (fun n => _) = (fun n => - \int[k1 x]_y (\sum_(0 <= i < n) intker_indic k2 (A i) (x, y)))); last first. + \int[k1 x]_y (\sum_(0 <= i < n) intker_indic k2 (A i) (x, y)))). apply/funext => n; rewrite ge0_integral_sum//. by move=> m; exact: measurable_fun_pair2 (measurable_intker_indic k2 _). by move=> m y _; rewrite intker_indicE. pose g n y := \sum_(0 <= i < n) intker_indic k2 (A i) (x, y). -rewrite [X in _ --> X](_ : _ = \int[k1 x]_y limn (g ^~ y)); last first. +rewrite [X in _ --> X](_ : _ = \int[k1 x]_y limn (g ^~ y)). by apply: eq_integral => y _; rewrite /g intker_indic_bigcup. apply: (@cvg_monotone_convergence _ _ _ (k1 x) _ measurableT g) => //. - move=> n; apply: (@emeasurable_sum _ _ R setT _ _ @@ -1603,9 +1603,9 @@ have bigcupA : \bigcup_n A n = setT. have lty n : kproduct k1 k2 x (A n `*` setT) < +oo. have fink1 : fin_num_fun (k1 x) by exact: kernel_finite_transition. apply: (@le_lt_trans _ _ (n%:R%:E * k1 x (A n))) => /=. - rewrite [leLHS](_ : _ = \int[k1 x]_(y in A n) k2 (x, y) setT); last first. + rewrite [leLHS](_ : _ = \int[k1 x]_(y in A n) k2 (x, y) setT). rewrite /kproduct [RHS]integral_mkcond; apply: eq_integral => y _. - rewrite intker_indicE//; last exact: measurableX. + rewrite intker_indicE//; first exact: measurableX. rewrite patchE; case: ifPn => [Anx|Anx]. by rewrite in_xsectionX. by rewrite notin_xsectionX// measure0. @@ -1686,7 +1686,7 @@ HB.instance Definition _ := isSubProbabilityKernel.Build _ _ _ _ _ Local Lemma intker_indic_snd (A : set T2) x y : measurable A -> intker_indic kernel_snd ([set: _] `*` A) (x, y) = k y A. Proof. -move=> mA; rewrite intker_indicE//=; last exact: measurableX. +move=> mA; rewrite intker_indicE//=; first exact: measurableX. by congr (k y _); rewrite xsectionE//= setTX. Qed. @@ -1720,7 +1720,7 @@ Let kcomp_noparam_additive x : semi_sigma_additive (kcomp_noparam k1 k2 x). Proof. move=> F mF tF mUF. rewrite kcomp_noparamE// (_ : (fun _ => _) = (fun n => - \sum_(0 <= i < n) kproduct_snd k1 k2 x (snd @^-1` F i))); last first. + \sum_(0 <= i < n) kproduct_snd k1 k2 x (snd @^-1` F i))). by apply/funext => n; apply: eq_bigr => k _; rewrite kcomp_noparamE. pose F' n := [set: T1] `*` F n. have kcomp_noparam_bigcup : kcomp_noparam k1 k2 x (\bigcup_n F n) = @@ -1728,7 +1728,7 @@ have kcomp_noparam_bigcup : kcomp_noparam k1 k2 x (\bigcup_n F n) = by apply: eq_integral => y _; rewrite -setX_bigcupr intker_indic_snd. rewrite -kcomp_noparamE// kcomp_noparam_bigcup. rewrite (_ : (fun n => _) = (fun n => - \sum_(0 <= i < n) kproduct k1 (kernel_snd k2) x (F' i))); last first. + \sum_(0 <= i < n) kproduct k1 (kernel_snd k2) x (F' i))). apply/funext => n; apply: eq_bigr => i _. apply: eq_integral => y _; apply: eq_integral => z _. by rewrite /F' setTX. @@ -1752,7 +1752,7 @@ Let measurable_kernel U : Proof. move=> mU. rewrite [X in measurable_fun _ X](_ : _ = - (kproduct k1 (kernel_snd k2))^~ ([set: T1] `*` U)); last first. + (kproduct k1 (kernel_snd k2))^~ ([set: T1] `*` U)). apply/funext => x. by apply: eq_integral => y _; rewrite intker_indic_snd. by apply: measurable_kproduct; exact: measurableX. @@ -1774,12 +1774,12 @@ Lemma sprob_mkcomp_noparam x : mkcomp_noparam k1 k2 x setT <= 1. Proof. rewrite /mkcomp_noparam [leLHS]kcomp_noparamE// preimage_setT. rewrite /kproduct_snd /kproduct. -rewrite [leLHS](_ : _ = \int[k1 x]_y k2 y setT); last first. +rewrite [leLHS](_ : _ = \int[k1 x]_y k2 y setT). apply: eq_integral => y _. - rewrite /intker_indic integral_indic//; last first. + rewrite /intker_indic integral_indic//. rewrite [X in measurable X](_ : _ = ysection setT y). - exact: measurable_ysection. - by rewrite ysectionE. + by rewrite ysectionE. + exact: measurable_ysection. by rewrite setIT. apply: (@le_trans _ _ (\int[k1 x]__ 1)); last first. by rewrite integral_cst// mul1e; exact: sprob_kernel_le1. diff --git a/theories/landau.v b/theories/landau.v index c97f7fb1cc..259f55d13e 100644 --- a/theories/landau.v +++ b/theories/landau.v @@ -97,7 +97,7 @@ From mathcomp Require Import prodnormedzmodule. (* transitivity, product of functions, etc. *) (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -891,7 +891,7 @@ have [->|a0] := eqVneq a 0. move=> _/posnumP[eps]. have ea : 0 < eps%:num / `| a | by rewrite divr_gt0 // normr_gt0. have [g /(_ _ ea) ?] := littleo; near=> y. -rewrite normrZ -ler_pdivlMr; first by rewrite mulrAC; near: y. +rewrite normrZ -ler_pdivlMr; last by rewrite mulrAC; near: y. by rewrite lt_def normr_eq0 a0 normr_ge0. Unshelve. all: by end_near. Qed. @@ -1121,7 +1121,7 @@ rewrite (near_shift 0) /= subr0; near=> y => /=. rewrite -linearB opprD addrC addrNK linearN normrN; near: y. suff flip : \forall k \near +oo, forall x, `|f x| <= k * `|x|. near +oo => k; near=> y. - rewrite (le_lt_trans (near flip k _ _)) // -ltr_pdivlMl; last first. + rewrite (le_lt_trans (near flip k _ _)) // -ltr_pdivlMl. by near: k; exists 0. near: y; apply/nbhs_normP. eexists; last by move=> ?; rewrite /= sub0r normrN; apply. @@ -1174,7 +1174,7 @@ Proof. move=> ->; apply/eqoP; move=> _/posnumP[eps]; near=> x. rewrite -ler_pdivrMl // -[X in g + X]opprK oppo. rewrite (le_trans _ (ler_dist_dist _ _)) //. -rewrite [leRHS]ger0_norm ?lerBrDr ?add0r; last first. +rewrite [leRHS]ger0_norm ?lerBrDr ?add0r. by rewrite -[leRHS]mul1r; near: x; apply: littleoP. rewrite [leRHS]splitr [_ / 2]mulrC. by rewrite lerD ?ler_pdivrMl ?mulrA //; near: x; apply: littleoP. diff --git a/theories/lebesgue_integral_theory/giry.v b/theories/lebesgue_integral_theory/giry.v index 99110edf39..24900099e9 100644 --- a/theories/lebesgue_integral_theory/giry.v +++ b/theories/lebesgue_integral_theory/giry.v @@ -31,7 +31,7 @@ From mathcomp Require Import lebesgue_measure lebesgue_integral. Reserved Notation "m >>= f" (at level 49). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -121,12 +121,12 @@ have mintgE n : measurable_fun [set: giry T R] (intEg n). by apply: measurable_funeM => //=; exact: measurable_giry_ev. apply: (emeasurable_fun_cvg _ (giry_int ^~ f) mintgE) => mu _. rewrite (_ : giry_int mu f = \int[mu]_x limn (Eg ^~ x)). - apply: cvg_monotone_convergence => //. - - by move=> n; exact/measurable_EFinP. - - by move=> n x _; rewrite lee_fin. - - by move=> t _ n m nm; apply/lefP/nd_nnsfun_approx. -apply: eq_integral => t _. -by apply/esym/cvg_lim => //; exact/cvg_nnsfun_approx. + apply: eq_integral => t _. + by apply/esym/cvg_lim => //; exact/cvg_nnsfun_approx. +apply: cvg_monotone_convergence => //. +- by move=> n; exact/measurable_EFinP. +- by move=> n x _; rewrite lee_fin. +- by move=> t _ n m nm; apply/lefP/nd_nnsfun_approx. Qed. End giry_integral. @@ -241,11 +241,11 @@ Let join_ge0 A : 0 <= join A. Proof. by rewrite /join integral_ge0. Qed. Let join_semi_sigma_additive : semi_sigma_additive join. Proof. move=> F mF tF _; rewrite [X in _ --> X](_ : _ = - giry_int M (fun x => \sum_(0 <= k \sum_(0 <= k mu _. by apply/esym/cvg_lim => //; exact: measure_sigma_additive. rewrite [X in X @ _](_ : _ = - (fun n => giry_int M (fun mu => \sum_(0 <= i < n) mu (F i)))); last first. + (fun n => giry_int M (fun mu => \sum_(0 <= i < n) mu (F i)))). apply/funext => n; rewrite -ge0_integral_sum//. by move=> ?; exact: measurable_giry_ev. apply: cvg_monotone_convergence => //. @@ -292,9 +292,9 @@ Lemma sintegral_giry_join (M : giry (giry T R) R) (h : {nnsfun T >-> R}) : sintegral (giry_join M) h = \int[M]_mu sintegral mu h. Proof. under eq_integral do rewrite sintegralE. -rewrite ge0_integral_fsum//; last 2 first. - by move=> r; apply: measurable_funeM; exact: measurable_giry_ev. - by move=> n x _; exact: nnsfun_mulemu_ge0. +rewrite ge0_integral_fsum//. +- by move=> r; apply: measurable_funeM; exact: measurable_giry_ev. +- by move=> n x _; exact: nnsfun_mulemu_ge0. rewrite sintegralE /=; apply: eq_fsbigr => // r rh. rewrite integralZl//. have := finite_measure_integrable_cst M 1 measurableT. @@ -323,10 +323,10 @@ transitivity (limn (fun n => \int[M]_mu \int[mu]_x gE n x)). apply: congr_lim; apply/funext => n. rewrite integralT_nnsfun sintegral_giry_join; apply: eq_integral => x _. by rewrite integralT_nnsfun. -rewrite -[LHS]monotone_convergence//; last 3 first. - by move=> n; exact: measurable_giry_int. - by move=> n x _; exact: integral_ge0. - by move=> x _ m n mn; apply: ge0_le_integral => // t _; exact: nd_gE. +rewrite -[LHS]monotone_convergence//. +- by move=> n; exact: measurable_giry_int. +- by move=> n x _; exact: integral_ge0. +- by move=> x _ m n mn; apply: ge0_le_integral => // t _; exact: nd_gE. apply: eq_integral => mu _. rewrite -monotone_convergence//. apply: eq_integral => t _. @@ -372,7 +372,7 @@ Lemma giry_joinA (x : giry (giry (giry T1 R) R) R) : (giry_join \o giry_join) x. Proof. move=> A mA/=. -rewrite giry_int_map//; last exact: measurable_giry_ev. +rewrite giry_int_map//; first exact: measurable_giry_ev. by rewrite giry_int_join//; exact: measurable_giry_ev. Qed. @@ -381,8 +381,8 @@ Lemma giry_join_id1 (x : giry T1 R) : (giry_join \o giry_ret) x. Proof. move=> A mA/=. -rewrite giry_int_map//; last exact: measurable_giry_ev. -rewrite giry_int_ret//; last exact: measurable_giry_ev. +rewrite giry_int_map//; first exact: measurable_giry_ev. +rewrite giry_int_ret//; first exact: measurable_giry_ev. by rewrite /giry_int /giry_ev /giry_ret/= /dirac integral_indic// setIT. Qed. diff --git a/theories/lebesgue_integral_theory/lebesgue_Rintegral.v b/theories/lebesgue_integral_theory/lebesgue_Rintegral.v index a01b70628f..c1becbbb88 100644 --- a/theories/lebesgue_integral_theory/lebesgue_Rintegral.v +++ b/theories/lebesgue_integral_theory/lebesgue_Rintegral.v @@ -25,7 +25,7 @@ From mathcomp Require Import lebesgue_integral_dominated_convergence. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -60,10 +60,10 @@ Lemma EFin_normr_Rintegral A f : measurable A -> `| \int[mu]_(x in A) f x |%:E = `| \int[mu]_(x in A) (f x)%:E |%E. Proof. move=> mA /integrableP[mf intfoo]; rewrite -[RHS]fineK. -- rewrite /= fine_abse// fin_num_abs. - exact: (le_lt_trans (le_abse_integral _ _ _)). - rewrite abse_fin_num fin_num_abs. exact: (le_lt_trans (le_abse_integral _ _ _)). +- rewrite /= fine_abse// fin_num_abs. + exact: (le_lt_trans (le_abse_integral _ _ _)). Qed. Lemma eq_Rintegral D g f : {in D, f =1 g} -> @@ -90,7 +90,7 @@ Proof. by rewrite setIC Rintegral_mkcondr. Qed. Lemma RintegralZl D f r : measurable D -> mu.-integrable D (EFin \o f) -> \int[mu]_(x in D) (r * f x) = r * \int[mu]_(x in D) f x. Proof. -move=> mD intf; rewrite (_ : r = fine r%:E)// -fineM//; last first. +move=> mD intf; rewrite (_ : r = fine r%:E)// -fineM//. exact: integrable_fin_num. by congr fine; under eq_integral do rewrite EFinM; exact: integralZl. Qed. @@ -117,7 +117,7 @@ rewrite -lee_fin; apply: le_trans. by rewrite fin_numEn => /orP[|] /eqP ->; rewrite leey. rewrite /Rintegral. move: ifoo. -rewrite -ge0_fin_numE; last exact: integral_ge0. +rewrite -ge0_fin_numE; first exact: integral_ge0. move/fineK ->. by apply: ge0_le_integral => //=; do 2 apply: measurableT_comp => //; exact/measurable_EFinP. @@ -128,7 +128,7 @@ Lemma Rintegral_setU (A B : set T) (f : T -> R) : mu.-integrable (A `|` B) (EFin \o f) -> [disjoint A & B] -> \int[mu]_(x in (A `|` B)) f x = \int[mu]_(x in A) f x + \int[mu]_(x in B) f x. Proof. -move=> mA mB mf AB; rewrite /Rintegral integral_setU_EFin//; last first. +move=> mA mB mf AB; rewrite /Rintegral integral_setU_EFin//. exact/measurable_EFinP/(measurable_int mu). have mAf : mu.-integrable A (EFin \o f). by apply: integrableS mf => //; exact: measurableU. @@ -163,9 +163,9 @@ Lemma le_Rintegral D f1 f2 : measurable D -> \int[mu]_(x in D) f1 x <= \int[mu]_(x in D) f2 x. Proof. move=> mD mf1 mf2 f12; rewrite /Rintegral fine_le//. -- rewrite -integral_fin_num_abs//; first by case/integrableP : mf1. +- rewrite -integral_fin_num_abs//; last by case/integrableP : mf1. by apply/measurable_EFinP; case/integrableP : mf1. -- rewrite -integral_fin_num_abs//; first by case/integrableP : mf2. +- rewrite -integral_fin_num_abs//; last by case/integrableP : mf2. by apply/measurable_EFinP; case/integrableP : mf2. - by apply/le_integral => // x xD; rewrite lee_fin f12//; exact/set_mem. Qed. @@ -230,18 +230,18 @@ Proof. move=> itf; rewrite le_eqVlt => /predU1P[ax|ax xb]. rewrite ax => _; rewrite [in X in _ - X]set_itv_ge ?bnd_simp//. by rewrite Rintegral_set0 subr0. -rewrite (@itv_bndbnd_setU _ _ _ (BLeft x)); last 2 first. +rewrite (@itv_bndbnd_setU _ _ _ (BLeft x)). by case: a ax {itf} => -[]. by rewrite (le_trans _ xb)// bnd_simp. rewrite Rintegral_setU//=. -- rewrite Rintegral_itv_bndo_bndc//; last first. - apply: integrableS itf => //; apply: subset_itvl. - by rewrite (le_trans _ xb)// bnd_simp. - rewrite addrC addKr Rintegral_itv_obnd_cbnd//. - by apply: integrableS itf => //; exact/subset_itvr/ltW. - by rewrite -itv_bndbnd_setU -?ltBRight_leBLeft// ltW. - apply/disj_setPS => y [/=]; rewrite 2!in_itv/= => /andP[_ yx] /andP[]. by rewrite leNgt yx. +rewrite Rintegral_itv_bndo_bndc//. + apply: integrableS itf => //; apply: subset_itvl. + by rewrite (le_trans _ xb)// bnd_simp. +rewrite addrC addKr Rintegral_itv_obnd_cbnd//. +by apply: integrableS itf => //; exact/subset_itvr/ltW. Qed. End Rintegral_lebesgue_measure. diff --git a/theories/lebesgue_integral_theory/lebesgue_integrable.v b/theories/lebesgue_integral_theory/lebesgue_integrable.v index d71971d6ca..6c62cd4611 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integrable.v +++ b/theories/lebesgue_integral_theory/lebesgue_integrable.v @@ -32,7 +32,7 @@ From mathcomp Require Import lebesgue_integral_nonneg. Reserved Notation "mu .-integrable" (at level 2, format "mu .-integrable"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -68,7 +68,7 @@ pose mCN := measurableC mN. have /integrableP intone : mu.-integrable D (f \_ N). apply/integrableP; split. by apply/measurable_restrict => //; exact: measurable_funS mf. - rewrite (eq_integral ((abse \o f) \_ N)); last first. + rewrite (eq_integral ((abse \o f) \_ N)). by move=> t _; rewrite restrict_abse. rewrite -integral_mkcondr integral_abs_eq0//. - exact: measurableI. @@ -78,7 +78,7 @@ have h1 : mu.-integrable D f <-> mu.-integrable D (f \_ (~` N)). split=> [/integrableP intf|/integrableP intCf]. apply/integrableP; split. by apply/measurable_restrict => //; exact: measurable_funS mf. - rewrite (eq_integral ((abse \o f) \_ (~` N))); last first. + rewrite (eq_integral ((abse \o f) \_ (~` N))). by move=> t _; rewrite restrict_abse. rewrite -integral_mkcondr; case: intf => _; apply: le_lt_trans. by apply: ge0_subset_integral => //=; [exact:measurableI| @@ -94,7 +94,7 @@ have h1 : mu.-integrable D f <-> mu.-integrable D (f \_ (~` N)). - by apply: measurableT_comp => //; exact: emeasurable_funD. - by apply: emeasurable_funD; exact: measurableT_comp. - by move=> *; rewrite lee_abs_add. - rewrite ge0_integralD//; [|exact: measurableT_comp..]. + rewrite ge0_integralD//; [exact: measurableT_comp..|]. by apply: lte_add_pinfty; [case: intCf|case: intone]. suff : mu.-integrable D (f \_ (~` N)) <-> mu.-integrable (D `\` N) f. exact: iff_trans. @@ -102,7 +102,7 @@ apply: iff_sym. split=> [/integrableP intCf|/integrableP intCf]; apply/integrableP. - split. + by apply/measurable_restrict => //; exact: measurable_funS mf. - + rewrite (eq_integral ((abse \o f) \_ (~` N))); last first. + + rewrite (eq_integral ((abse \o f) \_ (~` N))). by move=> t _; rewrite restrict_abse. rewrite -integral_mkcondr //; case: intCf => _; apply: le_lt_trans. apply: ge0_subset_integral => //=; [exact: measurableI|exact: measurableD|]. @@ -189,7 +189,7 @@ apply: (@le_lt_trans _ _ (\int[mu]_(x in D) (`|f x| + `|g x|))). - by apply: measurableT_comp => //; exact: emeasurable_funD. - by apply: emeasurable_funD; apply: measurableT_comp. - by move=> *; exact: lee_abs_add. -by rewrite ge0_integralD //; [exact: lte_add_pinfty| exact: measurableT_comp..]. +by rewrite ge0_integralD //; [exact: measurableT_comp..|exact: lte_add_pinfty]. Qed. Lemma integrable_sum I (s : seq I) (P : pred I) (h : I -> T -> \bar R) : @@ -210,7 +210,7 @@ Lemma integrable_add_def f : mu_int f -> \int[mu]_(x in D) f^\+ x +? - (\int[mu]_(x in D) f^\- x). Proof. move=> /integrableP[mf]; rewrite -[fun x => _]/(abse \o f) fune_abse => foo. -rewrite ge0_integralD // in foo; last 2 first. +rewrite ge0_integralD // in foo. - exact: measurable_funepos. - exact: measurable_funeneg. apply: ltpinfty_adde_def. @@ -294,7 +294,7 @@ move=> mh [M [Mreal Mh]] gi; apply/integrableP; split. exact: measurable_int gi]. under eq_integral do rewrite abseM. have: \int[mu]_(x in D) (`|M + 1|%:E * `|g x|) < +oo. - rewrite ge0_integralZl ?lte_mul_pinfty//; first by case/integrableP : gi. + rewrite ge0_integralZl ?lte_mul_pinfty//; last by case/integrableP : gi. by apply: measurableT_comp => //; exact: measurable_int gi. apply/le_lt_trans/ge0_le_integral => //. - apply/emeasurable_funM; last exact/measurableT_comp/(measurable_int _ gi). @@ -387,9 +387,9 @@ Lemma integrable_indic_itv {R : realType} (a b : R) (b0 b1 : bool) : mu.-integrable setT (EFin \o \1_[set` Interval (BSide b0 a) (BSide b1 b)]). Proof. have [ab|ba] := leP a b; last first. - rewrite set_itv_ge//; first by rewrite indic0//; exact: integrable0. + rewrite set_itv_ge//; last by rewrite indic0//; exact: integrable0. by rewrite -leNgt leBSide; move: b0 b1 => [] []//=; exact/ltW. -set i := [set` _]; rewrite (_ : _ \o _ = (cst 1%E) \_ i); last first. +set i := [set` _]; rewrite (_ : _ \o _ = (cst 1%E) \_ i). by apply/funext => r/=; rewrite indic_restrict restrict_EFin. rewrite {}/i; apply/integrable_restrict => //=. rewrite setTI; apply: measurable_bounded_integrable => //=. @@ -407,7 +407,7 @@ Lemma integrable_indic A : measurable A -> mu.-integrable [set: T] (fun x : T => (\1_A x)%:E). Proof. move=> mA; apply/integrableP; split; first exact/measurable_EFinP. -rewrite (eq_integral (fun x => (\1_A x)%:E)); last first. +rewrite (eq_integral (fun x => (\1_A x)%:E)). by move=> t _; rewrite gee0_abs// lee_fin. rewrite integral_indic// setIT. rewrite (@le_lt_trans _ _ (mu setT)) ?le_measure ?inE//. @@ -472,7 +472,7 @@ have [muD0|muD0] := eqVneq (mu D) 0. by exists D; split => // t /= /not_implyP[]. pose E := [set x | `|f x| = +oo /\ D x ]. have mE : measurable E. - rewrite (_ : E = D `&` f @^-1` [set -oo; +oo]). + rewrite (_ : E = D `&` f @^-1` [set -oo; +oo]); last first. by apply: (measurable_int _ fint) => //; exact: measurableU. rewrite /E predeqE => t; split=> [[/eqP]|[Dt [|]/= ->//]]. by rewrite eqe_absl leey andbT /preimage/= => /orP[|]/eqP; tauto. @@ -488,9 +488,9 @@ have [->|/set0P E0] := eqVneq E set0; first by rewrite measure0. have [M M0 muM] : exists2 M, (0 <= M)%R & forall n, n%:R%:E * mu (E `&` D) <= M%:E. exists (fine (\int[mu]_(x in D) `|f x|)); first exact/fine_ge0/integral_ge0. - move=> n; rewrite -integral_indic// -ge0_integralZl//; last first. + move=> n; rewrite -integral_indic// -ge0_integralZl//. exact: measurableT_comp. - rewrite fineK//; last first. + rewrite fineK//. case: (integrableP _ _ _ fint) => _ foo. by rewrite ge0_fin_numE// integral_ge0. apply: ge0_le_integral => //. @@ -504,14 +504,14 @@ have [muEDoo|] := ltP (mu (E `&` D)) +oo; last first. by rewrite leye_eq => /eqP ->; exists 1%N; rewrite mul1e leye_eq. exists (truncn (M * (fine (mu (E `&` D)))^-1)).+1. apply/negP; rewrite -ltNge. -rewrite -[X in _ * X](@fineK _ (mu (E `&` D))); last first. +rewrite -[X in _ * X](@fineK _ (mu (E `&` D))). by rewrite fin_numElt muEDoo (lt_le_trans _ (measure_ge0 _ _)). -rewrite lte_fin -ltr_pdivrMr; first by rewrite truncnS_gt. +rewrite lte_fin -ltr_pdivrMr; last by rewrite truncnS_gt. rewrite -lte_fin fineK. - rewrite lt0e measure_ge0 andbT. - suff: E `&` D = E by move=> ->; exact/eqP. - by rewrite predeqE => t; split=> -[]. -by rewrite ge0_fin_numE// measure_ge0//; exact: measurableI. + by rewrite ge0_fin_numE// measure_ge0//; exact: measurableI. +rewrite lt0e measure_ge0 andbT. +suff: E `&` D = E by move=> ->; exact/eqP. +by rewrite predeqE => t; split=> -[]. Qed. End integrable_ae. @@ -572,53 +572,53 @@ suff: \int[mu]_(x in D) ((g1 \+ g2)^\+ x) + \int[mu]_(x in D) (g1^\- x) + have g12pos : \int[mu]_(x in D) (g1^\+ x) + \int[mu]_(x in D) (g2^\+ x) \is a fin_num. rewrite ge0_fin_numE//. - by rewrite lte_add_pinfty//; exact: integral_funepos_lt_pinfty. - by rewrite adde_ge0// integral_ge0. + by rewrite adde_ge0// integral_ge0. + by rewrite lte_add_pinfty//; exact: integral_funepos_lt_pinfty. have g12neg : \int[mu]_(x in D) (g1^\- x) + \int[mu]_(x in D) (g2^\- x) \is a fin_num. rewrite ge0_fin_numE//. - by rewrite lte_add_pinfty// ; exact: integral_funeneg_lt_pinfty. - by rewrite adde_ge0// integral_ge0. - rewrite -sube_eq; last 2 first. - - rewrite ge0_fin_numE. - apply: lte_add_pinfty; last exact: integral_funeneg_lt_pinfty. - apply: lte_add_pinfty; last exact: integral_funeneg_lt_pinfty. - exact: integral_funepos_lt_pinfty (integrableD _ _ _). + by rewrite adde_ge0// integral_ge0. + by rewrite lte_add_pinfty// ; exact: integral_funeneg_lt_pinfty. + rewrite -sube_eq. + - rewrite ge0_fin_numE. apply: adde_ge0; last exact: integral_ge0. by apply: adde_ge0; apply: integral_ge0. - - exact/fin_num_adde_defr/g12pos. + apply: lte_add_pinfty; last exact: integral_funeneg_lt_pinfty. + apply: lte_add_pinfty; last exact: integral_funeneg_lt_pinfty. + exact: integral_funepos_lt_pinfty (integrableD _ _ _). + - exact/fin_num_adde_defr/g12pos. rewrite -[X in X - _ == _]addeA [X in X - _ == _]addeC -[eqbLHS]addeA. rewrite [eqbLHS]addeC eq_sym. rewrite -(sube_eq g12pos) ?fin_num_adde_defl// => /eqP g12E. rewrite -{}[LHS]g12E fin_num_oppeD; last first. - rewrite ge0_fin_numE; first exact: integral_funeneg_lt_pinfty if2. - exact: integral_ge0. - by rewrite addeACA (integralE _ _ g1) (integralE _ _ g2). + by rewrite addeACA (integralE _ _ g1) (integralE _ _ g2). + rewrite ge0_fin_numE; last exact: integral_funeneg_lt_pinfty if2. + exact: integral_ge0. have : (g1 \+ g2)^\+ \+ g1^\- \+ g2^\- = (g1 \+ g2)^\- \+ g1^\+ \+ g2^\+. rewrite funeqE => x. - apply/eqP; rewrite -2!addeA [in eqbRHS]addeC -sube_eq; last 2 first. - by rewrite funeposE !funenegE -!fine_max. - by rewrite !funeposE funenegE -!fine_max. - rewrite addeAC eq_sym -sube_eq; last 2 first. - by rewrite !funeposE -!fine_max. - by rewrite funeposE !funenegE -!fine_max. + apply/eqP; rewrite -2!addeA [in eqbRHS]addeC -sube_eq. + - by rewrite funeposE !funenegE -!fine_max. + - by rewrite !funeposE funenegE -!fine_max. + rewrite addeAC eq_sym -sube_eq. + - by rewrite !funeposE -!fine_max. + - by rewrite funeposE !funenegE -!fine_max. apply/eqP. rewrite -[LHS]/((g1^\+ \+ g2^\+ \- (g1^\- \+ g2^\-)) x) -funeD_posD. by rewrite -[RHS]/((_ \- _) x) -funeD_Dpos. move/(congr1 (fun y => \int[mu]_(x in D) (y x) )). -rewrite (ge0_integralD mu mD); last 4 first. +rewrite (ge0_integralD mu mD). - by move=> x _; rewrite adde_ge0. - apply: emeasurable_funD; last exact: measurable_funeneg. exact/measurable_funepos/emeasurable_funD. - by []. - exact: measurable_funeneg. -rewrite (ge0_integralD mu mD); last 4 first. +rewrite (ge0_integralD mu mD). - by []. - exact/measurable_funepos/emeasurable_funD. - by []. - exact/measurable_funeneg. move=> g12E; rewrite {}[LHS]g12E. -rewrite (ge0_integralD mu mD); last 4 first. +rewrite (ge0_integralD mu mD). - by move=> x _; exact: adde_ge0. - apply: emeasurable_funD; last exact: measurable_funepos. exact/measurable_funeneg/emeasurable_funD. @@ -637,8 +637,8 @@ Lemma integralB_EFin d (T : measurableType d) (R : realType) (\int[mu]_(x in D) ((f1 x)%:E - (f2 x)%:E) = (\int[mu]_(x in D) (f1 x)%:E - \int[mu]_(x in D) (f2 x)%:E))%E. Proof. -move=> if1 if2; rewrite (integralD_EFin mD if1); last first. - by rewrite (_ : _ \o _ = (fun x => - (f2 x)%:E))%E; [exact: integrableN|by []]. +move=> if1 if2; rewrite (integralD_EFin mD if1). + by rewrite (_ : _ \o _ = (fun x => - (f2 x)%:E))%E; [by []|exact: integrableN]. by rewrite -integralN//; exact: integrable_add_def. Qed. @@ -663,7 +663,7 @@ have mAB : measurable (A `&` B) by apply: measurableI. pose g1 := (fine \o f1 \_ (A `&` B))%R. pose g2 := (fine \o f2 \_ (A `&` B))%R. have ig1 : mu.-integrable D (EFin \o g1). - rewrite (_ : _ \o _ = f1 \_ (A `&` B)) //. + rewrite (_ : _ \o _ = f1 \_ (A `&` B)) //; last first. apply: (integrableS measurableT)=>//; apply/(integrable_mkcond _ _).1 => //. by apply: integrableS if1=>//; rewrite -setIAC -setIA; apply: subIset; left. rewrite /g1 funeqE => x //=; rewrite !/restrict; case: ifPn => //. @@ -671,7 +671,7 @@ have ig1 : mu.-integrable D (EFin \o g1). by rewrite fineK//; rewrite inE in f1xfin. have mg1 := measurable_int _ ig1. have ig2 : mu.-integrable D (EFin \o g2). - rewrite (_ : _ \o _ = f2 \_ (A `&` B)) //. + rewrite (_ : _ \o _ = f2 \_ (A `&` B)) //; last first. apply: (integrableS measurableT)=>//; apply/(integrable_mkcond _ _).1 => //. by apply: integrableS if2=>//; rewrite -setIAC -setIA; apply: subIset; left. rewrite /g2 funeqE => x //=; rewrite !/restrict; case: ifPn => //. @@ -719,7 +719,7 @@ Proof. elim: s => [|h t ih]. under eq_integral do rewrite big_nil. by rewrite integral0 big_nil. -rewrite big_cons -ih -integralD//; last exact: integrable_sum. +rewrite big_cons -ih -integralD//; first exact: integrable_sum. case: ifPn => Ph. by apply: eq_integral => x xD; rewrite big_cons Ph. by apply: eq_integral => x xD; rewrite big_cons/= (negbTE Ph). @@ -737,7 +737,7 @@ Hypotheses (if1 : mu.-integrable D f1) (if2 : mu.-integrable D f2). Lemma integralB : \int[mu]_(x in D) (f1 \- f2) x = \int[mu]_(x in D) f1 x - \int[mu]_(x in D) f2 x. Proof. -rewrite -[in RHS](@integralN _ _ _ _ _ f2); last exact: integrable_add_def. +rewrite -[in RHS](@integralN _ _ _ _ _ f2); first exact: integrable_add_def. by rewrite -[in RHS]integralD//; exact: integrableN. Qed. @@ -752,7 +752,7 @@ Lemma integrable_lty (f : T -> \bar R) : mu.-integrable D f -> \int[mu]_(x in D) f x < +oo. Proof. move=> intf; rewrite (funeposneg f) integralB//; - [|exact: integrable_funepos|exact: integrable_funeneg]. + [exact: integrable_funepos|exact: integrable_funeneg|]. rewrite lte_add_pinfty ?integral_funepos_lt_pinfty// lteNl ltNye_eq. by rewrite integrable_neg_fin_num. Qed. @@ -761,7 +761,7 @@ Lemma integrable_fin_num (f : T -> \bar R) : mu.-integrable D f -> \int[mu]_(x in D) f x \is a fin_num. Proof. move=> h; apply/fin_numPlt; rewrite integrable_lty// andbC/= -/(- +oo). -rewrite lteNl -integralN; first exact/integrable_lty/integrableN. +rewrite lteNl -integralN; last exact/integrable_lty/integrableN. by rewrite fin_num_adde_defl// fin_numN integrable_neg_fin_num. Qed. @@ -802,13 +802,13 @@ move=> mD. rewrite [RHS]integralE. under [X in X - _]eq_integral do rewrite funepos_comp/=. under [X in _ - X]eq_integral do rewrite funeneg_comp. -rewrite -[X in _ = X - _]ge0_integral_pushforward//; last first. +rewrite -[X in _ = X - _]ge0_integral_pushforward//. exact/measurable_funepos/measurable_funTS. -rewrite -[X in _ = _ - X]ge0_integral_pushforward//; last first. +rewrite -[X in _ = _ - X]ge0_integral_pushforward//. exact/measurable_funeneg/measurable_funTS. -rewrite -integralB//=; last first. -- by apply: integrable_funeneg => //=; exact: integrable_pushforward. +rewrite -integralB//=. - by apply: integrable_funepos => //=; exact: integrable_pushforward. +- by apply: integrable_funeneg => //=; exact: integrable_pushforward. - by apply/eq_integral=> // x _; rewrite /= [in LHS](funeposneg f). Qed. @@ -823,14 +823,14 @@ Lemma negligible_integral (D N : set T) (f : T -> \bar R) : measurable N -> measurable D -> mu.-integrable D f -> mu N = 0 -> \int[mu]_(x in D) f x = \int[mu]_(x in D `\` N) f x. Proof. -move=> mN mD mf muN0; rewrite [f]funeposneg ?integralB //; first last. -- exact: integrable_funeneg. +move=> mN mD mf muN0; rewrite [f]funeposneg ?integralB //. - exact: integrable_funepos. -- apply: (integrableS mD) => //; first exact: measurableD. - exact: integrable_funeneg. +- exact: integrable_funeneg. +- exact: measurableD. - apply: (integrableS mD) => //; first exact: measurableD. exact: integrable_funepos. -- exact: measurableD. +- apply: (integrableS mD) => //; first exact: measurableD. + exact: integrable_funeneg. congr (_ - _); apply: ge0_negligible_integral => //; apply: (measurable_int mu). exact: integrable_funepos. exact: integrable_funeneg. @@ -870,11 +870,11 @@ Proof. transitivity (\int[m1]_(x in D) (f^\+ \- f^\-) x + \int[m2]_(x in D) (f^\+ \- f^\-) x); last first. by congr +%E; apply: eq_integral => x _; rewrite [in RHS](funeposneg f). -rewrite integralB//; [|exact: integrable_funepos|exact: integrable_funeneg]. -rewrite integralB//; [|exact: integrable_funepos|exact: integrable_funeneg]. -rewrite addeACA -ge0_integral_measure_add//; last first. +rewrite integralB//; [exact: integrable_funepos|exact: integrable_funeneg|]. +rewrite integralB//; [exact: integrable_funepos|exact: integrable_funeneg|]. +rewrite addeACA -ge0_integral_measure_add//. by apply: measurable_funepos; exact: measurable_int intf1. -rewrite -oppeD; last by rewrite ge0_adde_def// inE integral_ge0. +rewrite -oppeD; first by rewrite ge0_adde_def// inE integral_ge0. rewrite -ge0_integral_measure_add// 1?integralE//. by apply: measurable_funeneg; exact: measurable_int intf1. Qed. @@ -892,10 +892,10 @@ Lemma integrable_summable (F : (set T)^nat) (g : T -> \bar R): summable [set: nat] (fun i => \int[mu]_(x in F i) g x). Proof. move=> tF mF fi. -rewrite /summable -(_ : [set _ | true] = setT); last exact/seteqP. +rewrite /summable -(_ : [set _ | true] = setT); first exact/seteqP. rewrite -nneseries_esum//. have [mf {fi}] := integrableP _ _ _ fi. -rewrite ge0_integral_bigcup//; last exact: measurableT_comp. +rewrite ge0_integral_bigcup//; first exact: measurableT_comp. apply: le_lt_trans; apply: lee_lim. - exact: is_cvg_ereal_nneg_natsum_cond. - by apply: is_cvg_ereal_nneg_natsum_cond => n _ _; exact: integral_ge0. @@ -918,29 +918,29 @@ have ? : \int[mu]_(x in \bigcup_i F i) g x \is a fin_num. transitivity (\int[mu]_(x in \bigcup_i F i) g^\+ x - \int[mu]_(x in \bigcup_i F i) g^\- x)%E. rewrite -integralB. - - by apply: eq_integral => t Ft; rewrite [in LHS](funeposneg g). - exact: bigcupT_measurable. - by apply: integrable_funepos => //; exact: bigcupT_measurable. - by apply: integrable_funeneg => //; exact: bigcupT_measurable. + - by apply: eq_integral => t Ft; rewrite [in LHS](funeposneg g). transitivity (\sum_(i // i; rewrite [RHS]integralE. transitivity ((\sum_(i n _; exact: integral_ge0. -rewrite [X in _ - X]nneseries_esum; last by move=> n _; exact: integral_ge0. -rewrite set_true -esumB//=; last 4 first. +rewrite [X in X - _]nneseries_esum; first by move=> n _; exact: integral_ge0. +rewrite [X in _ - X]nneseries_esum; first by move=> n _; exact: integral_ge0. +rewrite set_true -esumB//=. - apply: integrable_summable => //; apply: integrable_funepos => //. exact: bigcup_measurable. - apply: integrable_summable => //; apply: integrable_funeneg => //. exact: bigcup_measurable. - by move=> n _; exact: integral_ge0. - by move=> n _; exact: integral_ge0. -rewrite summable_eseries; last first. +rewrite summable_eseries. under [X in summable _ X]eq_fun do rewrite -integralE. by rewrite fun_true; exact: integrable_summable. by congr (_ - _)%E; rewrite nneseries_esum// set_true. @@ -962,8 +962,8 @@ Lemma integral_measure_series (D : set T) (mD : measurable D) (f : T -> \bar R) \int[m]_(x in D) f x = \sum_(n fi mf fmoo fpoo; rewrite integralE. -rewrite ge0_integral_measure_series//; last exact/measurable_funepos. -rewrite ge0_integral_measure_series//; last exact/measurable_funeneg. +rewrite ge0_integral_measure_series//; first exact/measurable_funepos. +rewrite ge0_integral_measure_series//; first exact/measurable_funeneg. transitivity (\sum_(n n _; rewrite fineK//; @@ -976,31 +976,31 @@ have fineKp : \sum_(n n _; congr abse; rewrite fineK//. exact: integrable_pos_fin_num. -rewrite nneseries_esum; last by move=> n _; exact/fine_ge0/integral_ge0. -rewrite nneseries_esum; last by move=> n _; exact/fine_ge0/integral_ge0. -rewrite -esumB//; last 4 first. +rewrite nneseries_esum; first by move=> n _; exact/fine_ge0/integral_ge0. +rewrite nneseries_esum; first by move=> n _; exact/fine_ge0/integral_ge0. +rewrite -esumB//. - by rewrite /= /summable -nneseries_esum// -fineKp. - by rewrite /summable /= -nneseries_esum// -fineKn; exact: fmoo. - by move=> n _; exact/fine_ge0/integral_ge0. - by move=> n _; exact/fine_ge0/integral_ge0. -rewrite -summable_eseries_esum; last first. +rewrite -summable_eseries_esum. apply: (@le_lt_trans _ _ (\esum_(i in (fun=> true)) `|(fine (\int[m_ i]_(x in D) f x))%:E|)). by apply: le_esum => k _; rewrite -EFinB -fineB// -?integralE//; [exact: integrable_pos_fin_num|exact: integrable_neg_fin_num]. - rewrite -nneseries_esum; last by []. + rewrite -nneseries_esum; first by []. apply: (@le_lt_trans _ _ (\sum_(n // n _. rewrite integralE fineB// ?EFinB. - - exact: (le_trans (lee_abs_sub _ _)). - exact: integrable_pos_fin_num. - exact: integrable_neg_fin_num. + - exact: (le_trans (lee_abs_sub _ _)). apply: lte_add_pinfty; first by rewrite -fineKp. by rewrite -fineKn; exact: fmoo. by apply: eq_eseriesr => k _; rewrite !fineK// -?integralE//; - [exact: integrable_neg_fin_num|exact: integrable_pos_fin_num]. + [exact: integrable_pos_fin_num|exact: integrable_neg_fin_num]. Qed. End sequence_of_measures. @@ -1017,11 +1017,11 @@ transitivity (\int[mseries (fun n => \d_ n) O]_t a t). congr (integral _ _ _); apply/funext => A. by rewrite /= counting_dirac. rewrite (@integral_measure_series _ _ R (fun n => \d_ n) setT)//=. -- by apply: eq_eseriesr=> i _; rewrite integral_dirac//= diracT mul1e. - move=> n; apply/integrableP; split=> [//|]. by rewrite integral_dirac//= diracT mul1e (summable_pinfty sa). - by apply: summable_integral_dirac => //; exact: summable_funeneg. - by apply: summable_integral_dirac => //; exact: summable_funepos. +- by apply: eq_eseriesr=> i _; rewrite integral_dirac//= diracT mul1e. Qed. End integral_counting. @@ -1045,10 +1045,10 @@ have mE j : measurable (E j). have muE j : mu (E j) = 0. apply/eqP; rewrite -measure_le0. have fg0 : \int[mu]_(x in E j) (f \- g) x = 0. - rewrite integralB//; last 2 first. - by apply: integrableS itf => //; exact: subIsetl. - by apply: integrableS itg => //; exact: subIsetl. - rewrite fg//; last apply: subIsetl. + rewrite integralB//. + - by apply: integrableS itf => //; exact: subIsetl. + - by apply: integrableS itg => //; exact: subIsetl. + rewrite fg//; first apply: subIsetl. rewrite subee// fin_num_abs (le_lt_trans (le_abse_integral _ _ _))//. by apply: measurable_funS msg => //; first exact: subIsetl. apply: le_lt_trans (integrableP _ _ _ itg).2. @@ -1089,10 +1089,10 @@ have h : ~` [set x | D x -> f x = g x] = D `&` [set x | f x != g x]. apply/seteqP; split => [x/= /not_implyP[? /eqP]//|x/= [Dx fgx]]. by apply/not_implyP; split => //; exact/eqP. apply/negligibleP; first by rewrite h; apply: measurable_neqe. -rewrite h set_neq_lt setIUr measureU//; [|exact: measurable_lte..|]. -- by rewrite [X in X + _]mufg add0e [LHS]mugf. +rewrite h set_neq_lt setIUr measureU//; [exact: measurable_lte..| |]. - apply/seteqP; split => [x [[Dx/= + [_]]]|//]. by move=> /lt_trans => /[apply]; rewrite ltxx. +- by rewrite [X in X + _]mufg add0e [LHS]mugf. Qed. End integral_ae_eq. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_definition.v b/theories/lebesgue_integral_theory/lebesgue_integral_definition.v index 4ac6ad27de..d4395d5ee9 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_definition.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_definition.v @@ -37,7 +37,7 @@ From mathcomp Require Import measurable_realfun. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -94,11 +94,11 @@ Proof. by rewrite sintegralE fsume_ge0// => r _; exact: nnsfun_mulemu_ge0. Qed. Lemma sintegral_indic (A : set T) : sintegral mu \1_A = mu A. Proof. -rewrite sintegralE (fsbig_widen _ [set 0%R; 1%R]) => //=; last 2 first. +rewrite sintegralE (fsbig_widen _ [set 0%R; 1%R]) => //=. - exact: image_indic_sub. - by move=> t [[] -> /= /preimage10->]; rewrite measure0 mule0. have N01 : (0 <> 1:> R)%R by apply/eqP; rewrite eq_sym oner_eq0. -rewrite fsbigU//=; last by move=> t [->]. +rewrite fsbigU//=; first by move=> t [->]. rewrite !fsbig_set1 mul0e add0e mul1e. by rewrite preimage_indic ifT ?inE// ifN ?notin_setE. Qed. @@ -148,8 +148,8 @@ Lemma sintegralrM : sintegral m (cst r \* f)%R = r%:E * sintegral m f. Proof. have [->|r0] := eqVneq r 0%R. by rewrite mul0e (eq_sintegral (cst 0%R)) ?sintegral0// => x/=; rewrite mul0r. -rewrite !sintegralET ge0_mule_fsumr; last exact: nnsfun_mulemu_ge0. -rewrite (reindex_fsbigT ( *%R r))/=; last first. +rewrite !sintegralET ge0_mule_fsumr; first exact: nnsfun_mulemu_ge0. +rewrite (reindex_fsbigT ( *%R r))/=. by exists ( *%R r^-1); [exact: mulKf|exact: mulVKf]. by apply: eq_fsbigr => x; rewrite preimage_cstM// [(_ / r)%R]mulrC mulKf// muleA. Qed. @@ -174,9 +174,9 @@ transitivity (\sum_(z \in FG) z%:E * \sum_(a \in F) m (pf a `&` pg (z - a)%R)). exact/trivIset_setIr/trivIset_preimage1. under eq_fsbigr do rewrite ge0_mule_fsumr//; rewrite exchange_fsbig//=. transitivity (\sum_(x \in F) \sum_(y \in G) (x + y)%:E * m (pf x `&` pg y)). - apply: eq_fsbigr => x _; rewrite /pf /pg (fsbig_widen G setT)//=; last first. + apply: eq_fsbigr => x _; rewrite /pf /pg (fsbig_widen G setT)//=. by move=> y [_ /= /preimage10->]; rewrite setI0 measure0 mule0. - rewrite (fsbig_widen FG setT)//=; last first. + rewrite (fsbig_widen FG setT)//=. move=> z [_ /= FGz]; rewrite [X in m X](_ : _ = set0) ?measure0 ?mule0//. rewrite -subset0 => //= {x}i /= [<-] /(canLR (@addrNK _ _)). by apply: contra_not FGz => <-; exists i; rewrite //= addrC. @@ -248,7 +248,7 @@ Let mfleg c n : measurable (fleg c n). Proof. rewrite /fleg [X in _ X](_ : _ = \big[setU/set0]_(y <- fset_set (range f)) \big[setU/set0]_(x <- fset_set (range (g n)) | c * y <= x) - (f @^-1` [set y] `&` (g n @^-1` [set x]))). + (f @^-1` [set y] `&` (g n @^-1` [set x]))); last first. apply: bigsetU_measurable => r _; apply: bigsetU_measurable => r' crr'. exact/measurableI. rewrite predeqE => t; split => [/= cfgn|]. @@ -306,11 +306,11 @@ suff {cg1g}<- : limn (fun n => sintegral mu (g1 c n)) = sintegral mu f. - exact/nearW/cg1g. suff : sintegral mu (g1 c n) @[n \oo] --> sintegral mu f by apply/cvg_lim. rewrite [X in X @ \oo --> _](_ : _ = fun n => \sum_(x <- fset_set (range f)) - x%:E * mu (f @^-1` [set x] `&` fleg c n)); last first. + x%:E * mu (f @^-1` [set x] `&` fleg c n)). rewrite funeqE => n; rewrite sintegralE. transitivity (\sum_(x \in range f) x%:E * mu (g1 c n @^-1` [set x])). apply: eq_fbigl => r. - do 2 (rewrite in_finite_support; last exact/finite_setIl). + do 2 (rewrite in_finite_support; first exact/finite_setIl). apply/idP/idP. rewrite in_setI => /andP[]; rewrite inE/= => -[x _]; rewrite mindicE. have [_|xcn] := boolP (_ \in _). @@ -334,7 +334,7 @@ apply: cvg_nnesum=> [r _|r _]. near=> A; apply: (mulemu_ge0 (fun x => f @^-1` [set x] `&` fleg c A)) => r0. by rewrite preimage_nnfun0// set0I. apply: cvgeZl => //=; rewrite [X in _ --> X](_ : _ = - mu (\bigcup_n (f @^-1` [set r] `&` fleg c n))); last first. + mu (\bigcup_n (f @^-1` [set r] `&` fleg c n))). by rewrite -setI_bigcupr bigcup_fleg// setIT. have ? k i : measurable (f @^-1` [set k] `&` fleg c i) by exact: measurableI. apply: nondecreasing_cvg_mu; [by []|exact: bigcupT_measurable|]. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v b/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v index 082f4bc99b..4536324d23 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v @@ -44,7 +44,7 @@ From mathcomp Require Import lebesgue_Rintegral. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -101,7 +101,7 @@ suff apxf eps : exists h : rT -> rT, (eps > 0)%R -> have /cvg_ballP/(_ eps epspos)[N _ Nball] := @cvge_harmonic rT. exists N => //; apply: (subset_trans Nball) => n. rewrite /ball /= /ereal_ball contract0 !sub0r !normrN => /(lt_trans _); apply. - rewrite ?ger0_norm; first last. + rewrite ?ger0_norm. - by rewrite -le_expandLR // ?inE ?normr0// expand0 integral_ge0. - by rewrite -le_expandLR // ?inE ?normr0// expand0. have [] := projT2 (cid (apxf n.+1%:R^-1%R)) => // _ _ ipaxfn. @@ -149,18 +149,18 @@ exists h; split => //; rewrite [eps%:num]splitr; apply: le_lt_trans. exact: measurable_funB. - move=> x _; rewrite -(subrK (g x) (f x)) -(addrA (_ + _)%R) lee_fin. by rewrite ler_normD. -rewrite integralD//; first last. +rewrite integralD//. - by apply: integrable_abse; under eq_fun do rewrite EFinB; apply: integrableB. - by apply: integrable_abse; under eq_fun do rewrite EFinB; apply: integrableB. -rewrite EFinD lteD// -(setDKU AE) ge0_integral_setU => //; first last. -- by rewrite /disj_set setDKI. +rewrite EFinD lteD// -(setDKU AE) ge0_integral_setU => //. +- exact: measurableD. - rewrite setDKU //; do 2 apply: measurableT_comp => //. exact: measurable_funB. -- exact: measurableD. -rewrite (@ae_eq_integral _ _ _ mu A (cst 0)) //; first last. -- by apply: aeW => z Az; rewrite (gh z) ?inE// subrr abse0. +- by rewrite /disj_set setDKI. +rewrite (@ae_eq_integral _ _ _ mu A (cst 0)) //. - apply: (measurable_funS mE) => //; do 2 apply: measurableT_comp => //. exact: measurable_funB. +- by apply: aeW => z Az; rewrite (gh z) ?inE// subrr abse0. rewrite integral0 adde0. apply: (le_lt_trans (integral_le_bound (M *+ 2)%:E _ _ _ _)) => //. - exact: measurableD. @@ -220,18 +220,18 @@ have -> : f x = (r *+ 2)^-1 * \int[mu]_(z in `[x - r, x + r]) cst (f x) z. by rewrite Rintegral_cst// ritv//= mulrC mulfK// mulrn_eq0/=. have intRf : mu.-integrable `[x - r, x + r] (EFin \o f). exact: (@integrableS _ _ _ mu _ _ _ _ _ xrA intf). -rewrite /= -mulrBr -fineB; first last. +rewrite /= -mulrBr -fineB. +- by rewrite integrable_fin_num. - rewrite integrable_fin_num// continuous_compact_integrable// => ?. exact: cvg_cst. -- by rewrite integrable_fin_num. -rewrite -integralB_EFin //; first last. +rewrite -integralB_EFin //. by apply: continuous_compact_integrable => // ?; exact: cvg_cst. under [fun _ => _ + _ ]eq_fun => ? do rewrite -EFinD. have int_fx : mu.-integrable `[x - r, x + r] (fun z => (f z - f x)%:E). under [fun z => (f z - _)%:E]eq_fun => ? do rewrite EFinB. rewrite integrableB// continuous_compact_integrable// => ?. exact: cvg_cst. -rewrite normrM ger0_norm // -fine_abse //; first last. +rewrite normrM ger0_norm // -fine_abse //. by rewrite integrable_fin_num. suff : (\int[mu]_(z in `[(x - r)%R, (x + r)%R]) `|f z - f x|%:E <= (r *+ 2 * eps)%:E)%E. @@ -314,8 +314,8 @@ apply: (@le_lt_trans _ _ (\int[mu]_(x in K) cst 1 x)). - by do 2 apply: measurableT_comp => //. - move=> y Kx; rewrite indicE. by case: (y \in A) => /=; rewrite ?(normr1,normr0,lexx,lee01). -by rewrite integral_cst//= ?mul1e; [exact: compact_finite_measure| - exact: compact_measurable]. +by rewrite integral_cst//= ?mul1e; [exact: compact_measurable| + exact: compact_finite_measure]. Qed. Lemma locally_integrableS (A B : set R) f : @@ -386,19 +386,19 @@ Lemma iavgD f g A : measurable A -> mu A < +oo -> iavg (f \+ g)%R A <= iavg f A + iavg g A. Proof. move=> mA Aoo mf mg; have [r0|r0] := eqVneq (mu A) 0. - rewrite /iavg integral_abs_eq0//= ?mule0; last first. + rewrite /iavg integral_abs_eq0//= ?mule0. exact/measurable_EFinP/measurable_funD. - rewrite (@integral_abs_eq0 _ _ _ mu _ (EFin \o f))//= ?mule0; last first. + rewrite (@integral_abs_eq0 _ _ _ mu _ (EFin \o f))//= ?mule0. exact/measurable_EFinP. rewrite (@integral_abs_eq0 _ _ _ mu _ (EFin \o g))//= ?mule0 ?adde0//. exact: measurableT_comp. -rewrite -muleDr//=; last 2 first. +rewrite -muleDr//=. by rewrite fin_numV// -ltNye// (@lt_le_trans _ _ 0). by rewrite ge0_adde_def// inE integral_ge0. -rewrite lee_pmul2l//; last 2 first. - by rewrite fin_numV// -ltNye// (@lt_le_trans _ _ 0). - by rewrite inve_gt0 -?ltey// measure_gt0. -rewrite -ge0_integralD//=; [|by do 2 apply: measurableT_comp..]. +rewrite lee_pmul2l//. +- by rewrite fin_numV// -ltNye// (@lt_le_trans _ _ 0). +- by rewrite inve_gt0 -?ltey// measure_gt0. +rewrite -ge0_integralD//=; [by do 2 apply: measurableT_comp..|]. apply: ge0_le_integral => //=. - by do 2 apply: measurableT_comp => //; exact: measurable_funD. - by apply: measurableT_comp => //; apply: measurable_funD => //; @@ -452,7 +452,7 @@ Lemma lower_semicontinuous_HL_maximal f : Proof. move=> [mf ? locf]; apply/lower_semicontinuousP => a. have [a0|a0] := lerP 0 a; last first. - rewrite [X in open X](_ : _ = setT); first exact: openT. + rewrite [X in open X](_ : _ = setT); last exact: openT. by apply/seteqP; split=> // x _; exact: (lt_le_trans _ (HL_maximalT_ge0 _ _)). rewrite openE /= => x /= /ereal_sup_gt[_ [r r0] <-] afxr. rewrite /= in_itv /= andbT in r0. @@ -465,8 +465,8 @@ move: a0; rewrite le_eqVlt => /predU1P[a0|a0]. move: afxr; rewrite -{a}a0 => xrk. near (0%R : R)^'+ => d. have xrdk : 0 < (mu (ball x (r + d)))^-1 * k. - rewrite mule_gt0// lebesgue_measure_ball; last by rewrite addr_ge0// ltW. - rewrite inver mulrn_eq0/= gt_eqF; last by rewrite addr_gt0. + rewrite mule_gt0// lebesgue_measure_ball; first by rewrite addr_ge0// ltW. + rewrite inver mulrn_eq0/= gt_eqF; first by rewrite addr_gt0. by rewrite lte_fin// invr_gt0// pmulrn_lgt0// addr_gt0. exists (ball x d); first by split; [exact: ball_open|exact: ballxx]. move=> y; rewrite /ball/= => xyd. @@ -481,14 +481,14 @@ move: a0; rewrite le_eqVlt => /predU1P[a0|a0]. apply: ereal_sup_ubound => /=; exists (r + d)%R => //. by rewrite in_itv/= andbT addr_gt0. apply/lt_le_trans/(lt_le_trans xrdk); rewrite /iavg. - do 2 (rewrite lebesgue_measure_ball; last by rewrite addr_ge0// ltW). + do 2 (rewrite lebesgue_measure_ball; first by rewrite addr_ge0// ltW). by rewrite lee_wpmul2l// inve_ge0 lee_fin pmulrn_rge0// addr_gt0. have ka_pos : (fine k / a)%R \is Num.pos. by rewrite posrE divr_gt0// fine_gt0 // k_gt0/= locally_integrable_ltbally. have k_fin_num : k \is a fin_num. by rewrite ge0_fin_numE ?locally_integrable_ltbally ?integral_ge0. have kar : (0 < 2^-1 * (fine k / a) - r)%R. - move: afxr; rewrite -{1}(fineK k_fin_num) -lte_pdivrMr; last first. + move: afxr; rewrite -{1}(fineK k_fin_num) -lte_pdivrMr. by rewrite fine_gt0// k_gt0/= ltey_eq k_fin_num. rewrite (lebesgue_measure_ball _ (ltW r0))//. rewrite -!EFinM inver mulrn_eq0/= gt_eqF// lte_fin -invf_div. @@ -497,11 +497,11 @@ have kar : (0 < 2^-1 * (fine k / a) - r)%R. by rewrite -[in X in X -> _]subr_gt0. near (0%R : R)^'+ => d. have axrdk : a%:E < (mu (ball x (r + d)))^-1 * k. - rewrite lebesgue_measure_ball//; last by rewrite addr_ge0// ltW. + rewrite lebesgue_measure_ball//; first by rewrite addr_ge0// ltW. rewrite inver mulrn_eq0/= gt_eqF ?addr_gt0//. - rewrite -(fineK k_fin_num) -lte_pdivrMr; last first. + rewrite -(fineK k_fin_num) -lte_pdivrMr. by rewrite fine_gt0// k_gt0/= locally_integrable_ltbally. - rewrite -!EFinM !lte_fin -invf_div ltf_pV2//; last first. + rewrite -!EFinM !lte_fin -invf_div ltf_pV2//. by rewrite posrE// pmulrn_lgt0// addr_gt0. rewrite -mulr_natl -ltr_pdivlMl// -ltrBrDl. by near: d; exact: nbhs_right_lt. @@ -520,7 +520,7 @@ have afxrdi : a%:E < (mu (ball x (r + d)))^-1 * by apply/(lt_le_trans axrdk)/lee_wpmul2l => //; rewrite inve_ge0. have /lt_le_trans : a%:E < iavg f (ball y (r + d)). apply: (lt_le_trans afxrdi); rewrite /iavg. - do 2 (rewrite lebesgue_measure_ball; last by rewrite addr_ge0// ltW). + do 2 (rewrite lebesgue_measure_ball; first by rewrite addr_ge0// ltW). by rewrite inver. apply; apply: ereal_sup_ubound => /=. by exists (r + d)%R => //; rewrite in_itv/= andbT addr_gt0. @@ -540,7 +540,7 @@ Lemma maximal_inequality f c : mu [set x | HL f x > c%:E] <= (3 / c)%:E * norm1 setT f. Proof. move=> /= locf c0. -rewrite lebesgue_regularity_inner_sup//; last first. +rewrite lebesgue_regularity_inner_sup//. rewrite -[X in measurable X]setTI; apply: emeasurable_fun_o_infty => //. exact: measurable_HL_maximal. apply: ge_ereal_sup => /= x /= [K [cK Kcmf <-{x}]]. @@ -556,7 +556,7 @@ have cMfx_int x : c%:E < HL f x -> move=> cMfx; rewrite /r_; case: pselect => //= => {}cMfx. case: (r_proof _ cMfx) => /= r r0. rewrite /iavg (lebesgue_measure_ball _ (ltW r0)) inver mulrn_eq0//= gt_eqF//. - rewrite -(@lte_pmul2r _ (r *+ 2)%:E)//; last by rewrite lte_fin// mulrn_wgt0. + rewrite -(@lte_pmul2r _ (r *+ 2)%:E)//; first by rewrite lte_fin// mulrn_wgt0. by rewrite muleAC -[in X in _ < X]EFinM mulVf ?gt_eqF ?mulrn_wgt0// mul1e. set B := fun r => ball r (r_ r). have {}Kcmf : K `<=` cover [set i | HL f i > c%:E] (fun i => ball i (r_ i)). @@ -585,15 +585,15 @@ rewrite !EFinM -muleA lee_wpmul2l//=. apply: (@le_trans _ _ (\sum_(i <- E) c^-1%:E * \int[mu]_(y in B i) `|f y|%:E)). rewrite [in leLHS]big_seq [in leRHS]big_seq; apply: lee_sum => r /ED /Dsub /[!inE] rD. by rewrite -lee_pdivrMl ?invr_gt0// invrK /B/=; exact/ltW/cMfx_int. -rewrite -ge0_sume_distrr; last by move=> x _; rewrite integral_ge0. +rewrite -ge0_sume_distrr; first by move=> x _; rewrite integral_ge0. rewrite lee_wpmul2l//; first by rewrite lee_fin invr_ge0 ltW. rewrite -ge0_integral_bigsetU//=. -- apply/ge0_subset_integral => //. - + by apply/bigsetU_measurable => ? ?; exact: measurable_ball. - + by apply/measurableT_comp/measurableT_comp; last case: locf. - by move=> n; exact: measurable_ball. - apply: measurableT_comp => //; apply: measurable_funTS. by apply: measurableT_comp => //; case: locf. +apply/ge0_subset_integral => //. +- by apply/bigsetU_measurable => ? ?; exact: measurable_ball. +- by apply/measurableT_comp/measurableT_comp; last case: locf. Qed. End hardy_littlewood. @@ -671,7 +671,7 @@ near=> t; rewrite ge0_fin_numE ?integral_ge0//. have [t0|t0] := leP t 0%R; first by rewrite ((ball0 _ _).2 t0) integral_set0. have xtU : ball x t `<=` U by apply: dxU => //=. rewrite (@le_lt_trans _ _ (\int[mu]_(y in ball x t) e%:E))//; last first. - rewrite integral_cst//=; last exact: measurable_ball. + rewrite integral_cst//=; first exact: measurable_ball. by rewrite (lebesgue_measure_ball _ (ltW t0)) ltry. apply: ge0_le_integral => //=; first exact: measurable_ball. - by do 2 apply: measurableT_comp => //=; apply: measurable_funB; @@ -703,10 +703,10 @@ have [d /= d0 dfx] := continuous_davg_fin_num. have [l/= l0 lxU] := open_subball xU.1 xU.2. near=> t. have [t0|t0] := leP t 0%R; first by rewrite /= davg0//= subrr normr0 ltW. -rewrite sub0r normrN /= ger0_norm; last by rewrite fine_ge0// davg_ge0. -rewrite -lee_fin fineK//; last by rewrite dfx//= sub0r normrN gtr0_norm. +rewrite sub0r normrN /= ger0_norm; first by rewrite fine_ge0// davg_ge0. +rewrite -lee_fin fineK//; first by rewrite dfx//= sub0r normrN gtr0_norm. rewrite /davg/= /iavg/= (lebesgue_measure_ball _ (ltW t0))//. -rewrite inver mulrn_eq0/= gt_eqF// lee_pdivrMl//; last by rewrite mulrn_wgt0. +rewrite inver mulrn_eq0/= gt_eqF// lee_pdivrMl//; first by rewrite mulrn_wgt0. rewrite (@le_trans _ _ (\int[mu]_(y in ball x t) e%:E))//. apply: ge0_le_integral => //=. - exact: measurable_ball. @@ -714,7 +714,7 @@ rewrite (@le_trans _ _ (\int[mu]_(y in ball x t) e%:E))//. by apply: measurable_funS mUf => //; apply: lxU => //=. - move=> y xty; rewrite lee_fin distrC fx'//; apply: (lt_le_trans xty). by near: t; exact: nbhs0_ltW. -rewrite integral_cst//=; last exact: measurable_ball. +rewrite integral_cst//=; first exact: measurable_ball. by rewrite muleC (lebesgue_measure_ball _ (ltW t0)). Unshelve. all: by end_near. Qed. @@ -763,21 +763,22 @@ Lemma lim_sup_davgB f g x (U : set R) : open_nbhs x U -> measurable U -> locally_integrable [set: R] g -> (f \- g)%R^* x = f^* x. Proof. move=> xU mU mUf cg locg; apply/eqP; rewrite eq_le; apply/andP; split. -- rewrite [leRHS](_ : _ = f^* x + (\- g)%R^* x). +- rewrite [leRHS](_ : _ = f^* x + (\- g)%R^* x); last first. apply: (lim_sup_davg_le xU) => //. apply/(measurable_comp measurableT) => //. by case: locg => + _ _; exact: measurable_funS. - rewrite (@continuous_lim_sup_davg (- g)%R _ _ xU mU); first by rewrite adde0. - - apply/(measurable_comp measurableT) => //. + rewrite (@continuous_lim_sup_davg (- g)%R _ _ xU mU); last by rewrite adde0. + apply/(measurable_comp measurableT) => //. by case: locg => + _ _; apply: measurable_funS. - + by move=> y; exact/continuousN/cg. + by move=> y; exact/continuousN/cg. - rewrite [leRHS](_ : _ = ((f \- g)%R^* \+ g^*) x)//. - rewrite {1}(_ : f = f \- g + g)%R; last by apply/funext => y; rewrite subrK. - apply: (lim_sup_davg_le xU mU). - apply: measurable_funB; [exact: mUf|]. - by case: locg => + _ _; exact: measurable_funS. + rewrite [X in _ + X](@continuous_lim_sup_davg _ _ _ xU mU); + [|by[]|by rewrite adde0]. + by case: locg => + _ _; exact: measurable_funS. + rewrite {1}(_ : f = f \- g + g)%R; first by apply/funext => y; rewrite subrK. + apply: (lim_sup_davg_le xU mU). + apply: measurable_funB; [exact: mUf|]. by case: locg => + _ _; exact: measurable_funS. - rewrite [X in _ + X](@continuous_lim_sup_davg _ _ _ xU mU); [by rewrite adde0| |by[]]. by case: locg => + _ _; exact: measurable_funS. Qed. @@ -812,20 +813,20 @@ apply: (@le_trans _ _ ((mu (ball x r))^-1 * by move=> /= y xry; rewrite -EFinD lee_fin// ler_normB. rewrite [leLHS](_ : _ = (mu (ball x r))^-1 * (\int[mu]_(y in ball x r) `|(f y)%:E| + - \int[mu]_(y in ball x r) `|(f x)%:E|)); last first. + \int[mu]_(y in ball x r) `|(f x)%:E|)). congr *%E; rewrite ge0_integralD//=; first exact: measurable_ball. by do 2 apply: measurableT_comp => //; exact: measurable_funS mf. have [r0|r0] := lerP r 0. rewrite (ball0 _ _).2// !integral_set0 adde0 mule0 adde_ge0//. by apply: HL_maximalT_ge0; split => //; exact: openT. -rewrite muleDr//; last 2 first. +rewrite muleDr//. by rewrite (lebesgue_measure_ball _ (ltW r0)) inver mulrn_eq0//= gt_eqF. by rewrite ge0_adde_def// inE integral_ge0. rewrite leeD//. by apply: ereal_sup_ubound => /=; exists r => //; rewrite in_itv/= r0. under eq_integral do rewrite -(mule1 `| _ |). -rewrite ge0_integralZl//; last exact: measurable_ball. -rewrite integral_cst//=; last exact: measurable_ball. +rewrite ge0_integralZl//; first exact: measurable_ball. +rewrite integral_cst//=; first exact: measurable_ball. rewrite mul1e (lebesgue_measure_ball _ (ltW r0)). by rewrite inver mulrn_eq0 ?gt_eqF//= -!EFinM mulrC mulfK// mulrn_eq0/= gt_eqF. Unshelve. all: by end_near. Qed. @@ -875,11 +876,11 @@ move=> Ef; have {Ef} : mu.-negligible (E `&` [set x | 0 < f^* x]). by exists 1%N => //=; rewrite fxoo ltry. near \oo => m; exists m => //=. rewrite -(@fineK _ (f^* x)) ?gt0_fin_numE ?ltey// lte_fin. - rewrite invf_plt ?posrE//; last by rewrite fine_gt0// ltey fx0. + rewrite invf_plt ?posrE//; first by rewrite fine_gt0// ltey fx0. by rewrite -truncn_le_nat; near: m; exact: nbhs_infty_ge. apply: negligibleS => z /= /not_implyP[Ez H]; split => //. rewrite ltNge; apply: contra_notN H. -rewrite le_eqVlt ltNge limf_esup_ge0/= ?orbF//; last first. +rewrite le_eqVlt ltNge limf_esup_ge0/= ?orbF//. by move=> x; exact: iavg_ge0. move=> /eqP fz0. suff: lime_inf (davg f z) 0 = 0 by exact: lime_sup_inf_at_right. @@ -971,7 +972,7 @@ have davgfEe : B k `&` [set x | (f_ k)^* x > e%:E] `<=` Ee. B k `&` (HLf_g_Be n `|` f_g_Be n). by move=> suf r /= /suf hr n _; exact: hr. move=> n; rewrite [X in X `<=`_](_ : _ = - B k `&` [set x | e%:E < (f_ k \- g_B n)%R^* x]); last first. + B k `&` [set x | e%:E < (f_ k \- g_B n)%R^* x]). apply/seteqP; split => [x [Ex] /=|x [Ex] /=]. rewrite (@lim_sup_davgB _ _ _ _ (B k))//. by split; [exact: ball_open|exact: Ex]. @@ -992,7 +993,7 @@ have HL_null n : mu (HLf_g_Be n) <= (3 / (e / 2))%:E * n.+1%:R^-1%:E. rewrite (le_trans (maximal_inequality _ _ )) ?divr_gt0//. rewrite lee_pmul2l ?lte_fin ?divr_gt0//. set h := (fun x => `|(f_ k \- g_ n) x|%:E) \_ (B k). - rewrite (@eq_integral _ _ _ mu setT h)//=. + rewrite (@eq_integral _ _ _ mu setT h)//=; last first. by rewrite -integral_mkcond/=; exact: ifg_ub. move=> x _; rewrite /h restrict_EFin restrict_normr/= /g_B /f_ !patchE. by case: ifPn => /=; [rewrite patchE => ->|rewrite subrr]. @@ -1005,7 +1006,7 @@ have fgn_null n : mu [set x | `|(f_ k \- g_B n) x|%:E >= (e / 2)%:E] <= by apply: measurableT_comp => //; case: (locf_g_B n). by rewrite divr_gt0. set h := (fun x => `|(f_ k \- g_ n) x|%:E) \_ (B k). - rewrite (@eq_integral _ _ _ mu setT h)//=. + rewrite (@eq_integral _ _ _ mu setT h)//=; last first. by rewrite -integral_mkcond/=; exact: ifg_ub. move=> x _; rewrite /h restrict_EFin restrict_normr/= /g_B /f_ !patchE. by case: ifPn => /=; [rewrite patchE => ->|rewrite subrr]. @@ -1042,11 +1043,11 @@ have mfk k : mu.-integrable setT (EFin \o fk k). apply/integrableP; split => /=. by apply/measurable_EFinP/(measurable_restrictT _ _).1 => //=; [exact: measurable_ball|exact: measurable_funS mf]. - rewrite (_ : (fun x => _) = (EFin \o normr \o f) \_ (B k)); last first. + rewrite (_ : (fun x => _) = (EFin \o normr \o f) \_ (B k)). by apply/funext => x; rewrite restrict_EFin/= restrict_normr. rewrite -integral_mkcond/= -ge0_integral_closed_ball//. - by rewrite intf//; exact: closed_ballR_compact. - by apply: measurable_funTS; do 2 apply: measurableT_comp. + by apply: measurable_funTS; do 2 apply: measurableT_comp. + by rewrite intf//; exact: closed_ballR_compact. have suf k : {ae mu, forall x, B k x -> lebesgue_pt (fk k) x}. exact: lebesgue_differentiation_bounded. pose E k : set _ := sval (cid (suf k)). @@ -1081,7 +1082,7 @@ have f_fk_ceil : \forall t \near 0^'+, \int[mu]_(y in ball x t) `|fk (truncn `|x|) y - fk (truncn `|x|) x|%:E. near=> t. apply: eq_integral => /= y /[1!inE] xty. - rewrite -(fE x _ t)//; last first. + rewrite -(fE x _ t)//. by rewrite /ball/= sub0r normrN -truncn_le_nat. rewrite -(fE x _ t)//; last first. by apply: ballxx; near: t; exact: nbhs_right_gt. @@ -1115,7 +1116,7 @@ move: Ax; rewrite /lebesgue_pt /davg /= -/mu => Ax. have : (mu (ball x r))^-1 * `|\int[mu]_(y in ball x r) (\1_A y - \1_A x)%:E | @[r --> 0^'+] --> 0. apply: (@squeeze_cvge _ _ _ R (cst 0) _ _ _ _ _ Ax) => //; [|exact: cvg_cst]. - near=> a; rewrite mule_ge0 ?inve_ge0///= lee_pmul2l//; last 2 first. + near=> a; rewrite mule_ge0 ?inve_ge0///= lee_pmul2l//. by rewrite lebesgue_measure_ball// fin_numV// eqe mulrn_eq0/= gt_eqF. rewrite lebesgue_measure_ball// inver mulrn_eq0/= gt_eqF// lte_fin. by rewrite invr_gt0// mulrn_wgt0. @@ -1123,25 +1124,25 @@ have : (mu (ball x r))^-1 * exact/measurable_EFinP/measurable_funB. set f := (f in f r @[r --> 0^'+] --> _ -> _). rewrite (_ : f = fun r => (mu (ball x r))^-1 * - `|mu (A `&` ball x r) - (\1_A x)%:E * mu (ball x r)|); last first. - apply/funext => r; rewrite /f integralB_EFin//=; last 3 first. - - exact: measurable_ball. - - apply/integrableP; split. - exact/measurable_EFinP/measurable_indic. - under eq_integral do rewrite /= ger0_norm//=. - rewrite integral_indic//=; last exact: measurable_ball. - rewrite -/mu (@le_lt_trans _ _ (mu (ball x r)))// ?le_measure// ?inE. - + by apply: measurableI => //; exact: measurable_ball. - + exact: measurable_ball. - + have [r0|r0] := ltP r 0%R. - by rewrite ((ball0 _ _).2 (ltW r0))// /mu measure0. - by rewrite lebesgue_measure_ball//= ?ltry. - - apply/integrableP; split; first exact/measurable_EFinP/measurable_cst. - rewrite /= integral_cst//=; last exact: measurable_ball. - have [r0|r0] := ltP r 0%R. - by rewrite ((ball0 _ _).2 (ltW r0))// /mu measure0 mule0. + `|mu (A `&` ball x r) - (\1_A x)%:E * mu (ball x r)|). + apply/funext => r; rewrite /f integralB_EFin//=. + - exact: measurable_ball. + - apply/integrableP; split. + exact/measurable_EFinP/measurable_indic. + under eq_integral do rewrite /= ger0_norm//=. + rewrite integral_indic//=; first exact: measurable_ball. + rewrite -/mu (@le_lt_trans _ _ (mu (ball x r)))// ?le_measure// ?inE. + + by apply: measurableI => //; exact: measurable_ball. + + exact: measurable_ball. + + have [r0|r0] := ltP r 0%R. + by rewrite ((ball0 _ _).2 (ltW r0))// /mu measure0. by rewrite lebesgue_measure_ball//= ?ltry. - rewrite integral_indic//=; last exact: measurable_ball. + - apply/integrableP; split; first exact/measurable_EFinP/measurable_cst. + rewrite /= integral_cst//=; first exact: measurable_ball. + have [r0|r0] := ltP r 0%R. + by rewrite ((ball0 _ _).2 (ltW r0))// /mu measure0 mule0. + by rewrite lebesgue_measure_ball//= ?ltry. + rewrite integral_indic//=; first exact: measurable_ball. by rewrite -/mu integral_cst//; exact: measurable_ball. rewrite indicE; have [xA xrA0|xA] := boolP (x \in A); last first. apply: iffRL; apply/propeqP; apply: eq_cvg => r. @@ -1149,17 +1150,17 @@ rewrite indicE; have [xA xrA0|xA] := boolP (x \in A); last first. have {xrA0} /cvgeN : (mu (ball x r))^-1 * (mu (ball x r) - mu (A `&` ball x r)) @[r --> 0^'+] --> 0. move: xrA0; apply: cvg_trans; apply: near_eq_cvg; near=> r. - rewrite mul1e lee0_abs; last first. + rewrite mul1e lee0_abs. rewrite sube_le0 le_measure// ?inE/=; last exact: measurable_ball. by apply: measurableI => //; exact: measurable_ball. - rewrite oppeB//; first by rewrite addeC. + rewrite oppeB//; last by rewrite addeC. rewrite fin_num_adde_defl// fin_numN ge0_fin_numE//. by rewrite lebesgue_measure_ball// ltry. rewrite oppe0; apply: cvg_trans; apply: near_eq_cvg; near=> r. -rewrite -mulNrn mulr1n muleBr//; last 2 first. - by rewrite lebesgue_measure_ball// inver mulrn_eq0//= gt_eqF. - by rewrite fin_num_adde_defr// ge0_fin_numE// lebesgue_measure_ball//= ?ltry. -rewrite (_ : (mu (ball x r))^-1 * mu (ball x r) = 1); last first. +rewrite -mulNrn mulr1n muleBr//. +- by rewrite lebesgue_measure_ball// inver mulrn_eq0//= gt_eqF. +- by rewrite fin_num_adde_defr// ge0_fin_numE// lebesgue_measure_ball//= ?ltry. +rewrite (_ : (mu (ball x r))^-1 * mu (ball x r) = 1). rewrite lebesgue_measure_ball// inver mulrn_eq0//= gt_eqF//. by rewrite -EFinM mulVf// mulrn_eq0/= gt_eqF. by rewrite oppeB// addeC EFinN muleC. @@ -1238,16 +1239,16 @@ apply: (@le_trans _ _ ((mu (E x n))^-1 * `| \int[mu]_(y in E x n) ((f y)%:E + (- f x)%:E) |)). have fxE : (- f x)%:E = (mu (E x n))^-1 * \int[mu]_(y in E x n) (- f x)%:E. - rewrite integral_cst//=; last exact: (hE _).1. + rewrite integral_cst//=; first exact: (hE _).1. rewrite muleCA mulVe ?mule1 ?(nicely_shrinking_fin_num (hE x))//. by rewrite gt_eqF// (nicely_shrinking_gt0 (hE x)). - rewrite [in leLHS]fxE -muleDr//; last 2 first. + rewrite [in leLHS]fxE -muleDr//. rewrite fin_numV//. by rewrite -measure_gt0/= (nicely_shrinking_gt0 (hE x)). by rewrite -ltNye (@lt_le_trans _ _ 0). - rewrite integral_cst//=; last exact: (hE _).1. + rewrite integral_cst//=; first exact: (hE _).1. by rewrite fin_num_adde_defl// fin_numM// (nicely_shrinking_fin_num (hE x)). - rewrite abseM gee0_abs; last by rewrite inve_ge0. + rewrite abseM gee0_abs; first by rewrite inve_ge0. rewrite lee_pmul ?inve_ge0// integralD//=. - exact: (hE x).1. - apply/integrableP; split. @@ -1262,19 +1263,19 @@ apply: (@le_trans _ _ ((mu (E x n))^-1 * + by apply: (subset_trans (E_r_ n)) => //; exact: subset_closed_ball. by case: locf => _ _; apply => //; exact: closed_ballR_compact. apply/integrableP; split; first exact: measurable_cst. - rewrite integral_cst //=; last exact: (hE _).1. + rewrite integral_cst //=; first exact: (hE _).1. by rewrite lte_mul_pinfty// (nicely_shrinking_lty (hE x)). rewrite muleA lee_pmul//. - by rewrite inve_ge0. -- rewrite -(fineK (nicely_shrinking_fin_num (hE x) _)) inver gt_eqF; last first. +- rewrite -(fineK (nicely_shrinking_fin_num (hE x) _)) inver gt_eqF. rewrite fine_gt0// (nicely_shrinking_gt0 (hE x))//=. by rewrite (nicely_shrinking_lty (hE x)). rewrite lebesgue_measure_ball// inver mulrn_eq0/= gt_eqF// -EFinM. - rewrite -(@invrK _ C) -invfM lee_fin lef_pV2//; last 2 first. + rewrite -(@invrK _ C) -invfM lee_fin lef_pV2//. rewrite posrE fine_gt0// (nicely_shrinking_gt0 (hE x))//=. by rewrite (nicely_shrinking_lty (hE x)). by rewrite posrE mulr_gt0// ?invr_gt0// fine_gt0//. - rewrite lter_pdivrMl // -lee_fin EFinM fineK; last first. + rewrite lter_pdivrMl // -lee_fin EFinM fineK. by rewrite (nicely_shrinking_fin_num (hE x)). by have := muEr_ n; rewrite lebesgue_measure_ball. - apply: le_trans. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_dominated_convergence.v b/theories/lebesgue_integral_theory/lebesgue_integral_dominated_convergence.v index b261fbd1da..62b14bce10 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_dominated_convergence.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_dominated_convergence.v @@ -22,7 +22,7 @@ From mathcomp Require Import lebesgue_integral_nonneg lebesgue_integrable. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -83,7 +83,7 @@ Qed. Let gg_ n x : D x -> 0 <= 2%:E * g x - g_ n x. Proof. -move=> Dx; rewrite subre_ge0; last by rewrite fin_numM// fing. +move=> Dx; rewrite subre_ge0; first by rewrite fin_numM// fing. rewrite -(fineK (fing Dx)) -EFinM mulr_natl mulr2n /g_. rewrite (le_trans (lee_abs_sub _ _))// [in leRHS]EFinD leeD//. by rewrite fineK// ?fing// absfg. @@ -105,10 +105,10 @@ Proof. by move=> Dx; rewrite gg_. Qed. Local Lemma dominated_cvg0 : [sequence \int[mu]_(x in D) g_ n x]_n @ \oo --> 0. Proof. have := fatou mu mD mgg gg_ge0. -rewrite [X in X <= _ -> _](_ : _ = \int[mu]_(x in D) (2%:E * g x) ); last first. +rewrite [X in X <= _ -> _](_ : _ = \int[mu]_(x in D) (2%:E * g x) ). apply: eq_integral => t; rewrite inE => Dt. - rewrite limn_einf_shift//; last by rewrite fin_numM// fing. - rewrite is_cvg_limn_einfE//; last first. + rewrite limn_einf_shift//; first by rewrite fin_numM// fing. + rewrite is_cvg_limn_einfE//. by apply: is_cvgeN; apply/cvg_ex; eexists; exact: cvg_g_. rewrite [X in _ + X](_ : _ = 0) ?adde0//; apply/cvg_lim => //. by rewrite -oppe0; apply: cvgeN; exact: cvg_g_. @@ -120,27 +120,27 @@ have ? : \int[mu]_(x in D) (2%:E * g x) \is a fin_num. by rewrite ge0_fin_numE// integral_ge0// => ? ?; rewrite mule_ge0 ?lee_fin ?g0. rewrite [X in _ <= X -> _](_ : _ = \int[mu]_(x in D) (2%:E * g x) + - limn_esup (fun n => \int[mu]_(x in D) g_ n x)); last first. - rewrite (_ : (fun _ => _) = (fun n => \int[mu]_(x in D) (2%:E * g x) + - \int[mu]_(x in D) - g_ n x)); last first. - rewrite funeqE => n; rewrite integralB//. - - by rewrite -integral_ge0N// => x Dx//; rewrite /g_. - - exact: integrableZl. - - have integrable_normfn : mu.-integrable D (abse \o f_ n). - apply: le_integrable ig => //; first exact: measurableT_comp. - by move=> x Dx /=; rewrite abse_id (le_trans (absfg _ Dx))// lee_abs. - suff: mu.-integrable D (fun x => `|f_ n x| + `|f x|). - apply: le_integrable => //. - - by apply: measurableT_comp => //; exact: emeasurable_funB. - - move=> x Dx. - by rewrite /g_ abse_id (le_trans (lee_abs_sub _ _))// lee_abs. - apply: integrableD; [by []| by []|]. - apply: le_integrable dominated_integrable => //. - - exact: measurableT_comp. - - by move=> x Dx; rewrite /= abse_id. + rewrite addeC -leeBlDr// subee// leeNr oppe0 => lim_ge0. + by apply/limn_esup_le_cvg => // n; rewrite integral_ge0// => x _; rewrite /g_. +rewrite (_ : (fun _ => _) = (fun n => \int[mu]_(x in D) (2%:E * g x) + + \int[mu]_(x in D) - g_ n x)); last first. rewrite limn_einf_shift // -limn_einfN; congr (_ + limn_einf _). by rewrite funeqE => n /=; rewrite -integral_ge0N// => x Dx; rewrite /g_. -rewrite addeC -leeBlDr// subee// leeNr oppe0 => lim_ge0. -by apply/limn_esup_le_cvg => // n; rewrite integral_ge0// => x _; rewrite /g_. +rewrite funeqE => n; rewrite integralB//; last 1 first. +- by rewrite -integral_ge0N// => x Dx//; rewrite /g_. +- exact: integrableZl. +have integrable_normfn : mu.-integrable D (abse \o f_ n). + apply: le_integrable ig => //; first exact: measurableT_comp. + by move=> x Dx /=; rewrite abse_id (le_trans (absfg _ Dx))// lee_abs. +suff: mu.-integrable D (fun x => `|f_ n x| + `|f x|). + apply: le_integrable => //. + - by apply: measurableT_comp => //; exact: emeasurable_funB. + - move=> x Dx. + by rewrite /g_ abse_id (le_trans (lee_abs_sub _ _))// lee_abs. +apply: integrableD; [by []| by []|]. +apply: le_integrable dominated_integrable => //. +- exact: measurableT_comp. +- by move=> x Dx; rewrite /= abse_id. Qed. Lemma dominated_cvg : @@ -148,7 +148,7 @@ Lemma dominated_cvg : Proof. have h n : `| \int[mu]_(x in D) f_ n x - \int[mu]_(x in D) f x | <= \int[mu]_(x in D) g_ n x. - rewrite -(integralB _ _ dominated_integrable)//; last first. + rewrite -(integralB _ _ dominated_integrable)//. by apply: le_integrable ig => // x Dx /=; rewrite (gee0_abs (g0 Dx)) absfg. by apply: le_abse_integral => //; exact: emeasurable_funB. suff: `| \int[mu]_(x in D) f_ n x - \int[mu]_(x in D) f x | @[n \oo] --> 0. @@ -234,7 +234,7 @@ split. by rewrite /f_' /f' /restrict mem_set. - have := @dominated_cvg _ _ _ _ _ mD _ _ _ mu_ f_f' finv ig' f_g'. set X := (X in _ -> X @ \oo --> _). - rewrite [X in X @ \oo --> _ -> _](_ : _ = X) //; last first. + rewrite [X in X @ \oo --> _ -> _](_ : _ = X) //. apply/funext => n; apply: ae_eq_integral => //. exists N; split => //; rewrite -(setCK N); apply: subsetC => x /= Nx Dx. by rewrite /f_' /restrict mem_set. @@ -327,13 +327,13 @@ have mfn : mu.-integrable E (fun z => `|f^\- z - (n_ n z)%:E|). rewrite -[X in (_ <= `|X|)%R]fineD // -integralD //. move: finfn finfp => _ _. rewrite !ger0_norm ?fine_ge0 ?integral_ge0 ?fine_le//. +- by move=> x Ex; rewrite adde_ge0. - by apply: integrable_fin_num => //; exact/integrable_abse/mfpn. - by apply: integrable_fin_num => //; exact: integrableD. -- apply: ge0_le_integral => //. - + by apply: measurableT_comp => //; case/integrableP: (mfpn n). - + by apply: emeasurable_funD; [move: mfp | move: mfn]; case/integrableP. - + by move=> ? ?; rewrite fpn; exact: lee_abs_sub. - + by move=> x Ex; rewrite adde_ge0. +apply: ge0_le_integral => //. +- by apply: measurableT_comp => //; case/integrableP: (mfpn n). +- by apply: emeasurable_funD; [move: mfp | move: mfn]; case/integrableP. +- by move=> ? ?; rewrite fpn; exact: lee_abs_sub. Unshelve. all: by end_near. Qed. End simple_density_L1. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_fubini.v b/theories/lebesgue_integral_theory/lebesgue_integral_fubini.v index a6fa005408..fa7ea76a65 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_fubini.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_fubini.v @@ -36,7 +36,7 @@ From mathcomp Require Import lebesgue_integral_nonneg lebesgue_integrable. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -133,15 +133,15 @@ have CB : C `<=` B. suff lsystemB : lambda_system setT B by exact: lambda_system_subset. split => //; [exact: CB| |exact: xsection_ndseq_closed]. move=> X Y XY [mX mphiX] [mY mphiY]; split; first exact: measurableD. -have -> : phi (X `\` Y) = (fun x => phi X x - phi Y x)%E. - rewrite funeqE => x; rewrite /phi/= xsectionD// /m2D measureD. - - by rewrite setIidr//; exact: le_xsection. - - exact: measurable_xsection. - - exact: measurable_xsection. - - move: m2D_bounded => [M m2M]. - rewrite (lt_le_trans (m2M (xsection X x) _))// ?leey//. - exact: measurable_xsection. -exact: emeasurable_funB. +suff -> : phi (X `\` Y) = (fun x => phi X x - phi Y x)%E. + exact: emeasurable_funB. +rewrite funeqE => x; rewrite /phi/= xsectionD// /m2D measureD. +- exact: measurable_xsection. +- exact: measurable_xsection. +- move: m2D_bounded => [M m2M]. + rewrite (lt_le_trans (m2M (xsection X x) _))// ?leey//. + exact: measurable_xsection. +- by rewrite setIidr//; exact: le_xsection. Qed. End xsection. @@ -174,14 +174,14 @@ have CB : C `<=` B. suff lsystemB : lambda_system setT B by exact: lambda_system_subset. split => //; [exact: CB| |exact: ysection_ndseq_closed]. move=> X Y XY [mX mphiX] [mY mphiY]; split; first exact: measurableD. -rewrite (_ : psi _ = (psi X \- psi Y)%E); first exact: emeasurable_funB. +rewrite (_ : psi _ = (psi X \- psi Y)%E); last exact: emeasurable_funB. rewrite funeqE => y; rewrite /psi/= ysectionD// /m1D measureD. -- by rewrite setIidr//; exact: le_ysection. - exact: measurable_ysection. - exact: measurable_ysection. - have [M m1M] := m1_bounded. rewrite (lt_le_trans (m1M (ysection X y) _))// ?leey//. exact: measurable_ysection. +- by rewrite setIidr//; exact: le_ysection. Qed. End ysection. @@ -209,7 +209,7 @@ move=> n; rewrite -/B; have [? ?] := F_oo n. pose m2Fn := mrestr m2 (F_oo n).1. have m2Fn_bounded : exists M, forall X, measurable X -> (m2Fn X < M%:E)%E. exists (fine (m2Fn (F n)) + 1) => Y mY. - rewrite [in ltRHS]EFinD lte_spadder// fineK; last first. + rewrite [in ltRHS]EFinD lte_spadder// fineK. by rewrite ge0_fin_numE ?measure_ge0//= /m2Fn /mrestr setIid. by rewrite /m2Fn /mrestr/= setIid le_measure// inE//; exact: measurableI. pose phi' A := m2Fn \o xsection A. @@ -244,7 +244,7 @@ move=> n; have [? ?] := F_oo n; rewrite -/B. pose m1Fn := mrestr m1 (F_oo n).1. have m1Fn_bounded : exists M, forall X, measurable X -> (m1Fn X < M%:E)%E. exists (fine (m1Fn (F n)) + 1) => Y mY. - rewrite [in ltRHS]EFinD lte_spadder// fineK; last first. + rewrite [in ltRHS]EFinD lte_spadder// fineK. by rewrite ge0_fin_numE ?measure_ge0// /m1Fn/= /mrestr setIid. by rewrite /m1Fn/= /mrestr setIid le_measure// inE//=; exact: measurableI. pose psi' A := m1Fn \o ysection A. @@ -286,9 +286,9 @@ Proof. by apply: integral_ge0 => // *. Qed. Let pm1_sigma_additive : semi_sigma_additive (m1 \x m2). Proof. move=> F mF tF mUF. -rewrite [X in _ --> X](_ : _ = \sum_(n X](_ : _ = \sum_(n n; exact: measurable_fun_xsection. +rewrite -integral_nneseries//; first by move=> n; exact: measurable_fun_xsection. apply: eq_integral => x _; apply/esym/cvg_lim => //=; rewrite xsection_bigcup. apply: (measure_sigma_additive _ (trivIset_xsection tF)) => ?. exact: measurable_xsection. @@ -310,7 +310,7 @@ Lemma product_measure1E (A1 : set T1) (A2 : set T2) : measurable A1 -> measurable A2 -> (m1 \x m2) (A1 `*` A2) = m1 A1 * m2 A2. Proof. move=> mA1 mA2 /=; rewrite /product_measure1 /=. -rewrite (eq_integral (fun x => (\1_A1 x)%:E * m2 A2)); last first. +rewrite (eq_integral (fun x => (\1_A1 x)%:E * m2 A2)). by move=> x _; rewrite indicE; have [xA1|xA1] /= := boolP (x \in A1); [rewrite in_xsectionX// mul1e|rewrite mul0e notin_xsectionX]. rewrite ge0_integralZr ?integral_indic ?setIT//; exact: measurableT_comp. @@ -354,7 +354,7 @@ Lemma product_subprobability_setC (P : subprobability T1 R * subprobability T2 R (P.1 \x P.2) (~` A) = (P.1 \x P.2) [set: T1 * T2] - (P.1 \x P.2) A. Proof. move=> mA. -rewrite -(setvU A) measureU//=; [|exact: measurableC|exact: setICl]. +rewrite -(setvU A) measureU//=; [exact: measurableC|exact: setICl|]. by rewrite addeK// (_ : (_ \x _)%E = product_subprobability P)// fin_num_measure. Qed. @@ -438,10 +438,10 @@ Qed. Let pm2_sigma_additive : semi_sigma_additive (m1 \x^ m2). Proof. move=> F mF tF mUF. -rewrite [X in _ --> X](_ : _ = \sum_(n X](_ : _ = \sum_(n *; exact: integral_ge0. -rewrite -integral_nneseries//; last first. +rewrite -integral_nneseries//. by move=> n; apply: measurable_fun_ysection => //; rewrite inE. apply: eq_integral => y _; apply/esym/cvg_lim => //=; rewrite ysection_bigcup. apply: (measure_sigma_additive _ (trivIset_ysection tF)) => ?. @@ -465,7 +465,7 @@ Lemma product_measure2E (A1 : set T1) (A2 : set T2) Proof. have mA1A2 : measurable (A1 `*` A2) by apply: measurableX. transitivity (\int[m2]_y (m1 \o ysection (A1 `*` A2)) y) => //. -rewrite (_ : _ \o _ = fun y => m1 A1 * (\1_A2 y)%:E). +rewrite (_ : _ \o _ = fun y => m1 A1 * (\1_A2 y)%:E); last first. rewrite ge0_integralZl ?integral_indic ?setIT//; exact: measurableT_comp. rewrite funeqE => y; rewrite indicE. have [yA2|yA2] := boolP (y \in A2); first by rewrite mule1 /= in_ysectionX. @@ -535,7 +535,7 @@ Proof. by apply: integral_ge0 => // y _; rewrite lee_fin. Qed. Lemma indic_fubini_tonelli_FE : F = m2 \o xsection A. Proof. apply/funext => x/=. -rewrite -[RHS]mul1e -integral_cst//; last exact: measurable_xsection. +rewrite -[RHS]mul1e -integral_cst//; first exact: measurable_xsection. rewrite /F /fubini_F /f [in RHS]integral_mkcond. by apply: eq_integral => y _ /=; rewrite patchE mem_xsection indicE; case: ifPn. Qed. @@ -543,7 +543,7 @@ Qed. Lemma indic_fubini_tonelli_GE : G = m1 \o ysection A. Proof. apply/funext => x/=. -rewrite -[RHS]mul1e -integral_cst//; last exact: measurable_ysection. +rewrite -[RHS]mul1e -integral_cst//; first exact: measurable_ysection. rewrite /G /fubini_G /f [in RHS]integral_mkcond. by apply: eq_integral => y _ /=; rewrite patchE mem_ysection indicE; case: ifPn. Qed. @@ -586,15 +586,15 @@ Lemma sfun_fubini_tonelli_FE : F = fun x => Proof. rewrite funeqE => x; rewrite /F /fubini_F [in LHS]/=. under eq_fun do rewrite fimfunE -fsumEFin//. -rewrite ge0_integral_fsum //; last 2 first. - - move=> i; apply/measurable_EFinP/measurableT_comp => //=. - exact: measurableT_comp. - - by move=> r y _; rewrite EFinM nnfun_muleindic_ge0. +rewrite ge0_integral_fsum //. +- move=> i; apply/measurable_EFinP/measurableT_comp => //=. + exact: measurableT_comp. +- by move=> r y _; rewrite EFinM nnfun_muleindic_ge0. apply: eq_fsbigr => i; rewrite inE => -[/= t _ <-{i}]. under eq_fun do rewrite EFinM. -rewrite ge0_integralZl//; last by rewrite lee_fin. -- by rewrite -/((m2 \o xsection _) x) -indic_fubini_tonelli_FE. +rewrite ge0_integralZl//; [|by rewrite lee_fin|]. - exact/measurable_EFinP/measurableT_comp. +- by rewrite -/((m2 \o xsection _) x) -indic_fubini_tonelli_FE. Qed. Lemma sfun_measurable_fun_fubini_tonelli_F : measurable_fun [set: T1] F. @@ -608,15 +608,15 @@ Lemma sfun_fubini_tonelli_GE : G = fun y => Proof. rewrite funeqE => y; rewrite /G /fubini_G [in LHS]/=. under eq_fun do rewrite fimfunE -fsumEFin//. -rewrite ge0_integral_fsum //; last 2 first. - - move=> i; apply/measurable_EFinP/measurableT_comp => //=. - exact: measurableT_comp. - - by move=> r x _; rewrite EFinM nnfun_muleindic_ge0. +rewrite ge0_integral_fsum //. +- move=> i; apply/measurable_EFinP/measurableT_comp => //=. + exact: measurableT_comp. +- by move=> r x _; rewrite EFinM nnfun_muleindic_ge0. apply: eq_fsbigr => i; rewrite inE => -[/= t _ <-{i}]. under eq_fun do rewrite EFinM. -rewrite ge0_integralZl//; last by rewrite lee_fin. -- by rewrite -/((m1 \o ysection _) y) -indic_fubini_tonelli_GE. +rewrite ge0_integralZl//; [|by rewrite lee_fin|]. - exact/measurable_EFinP/measurableT_comp. +- by rewrite -/((m1 \o ysection _) y) -indic_fubini_tonelli_GE. Qed. Lemma sfun_measurable_fun_fubini_tonelli_G : measurable_fun setT G. @@ -632,23 +632,22 @@ Proof. by rewrite fsumEFin //= fimfunE. Qed. Lemma sfun_fubini_tonelli1 : \int[m1 \x m2]_z (f z)%:E = \int[m1]_x F x. Proof. under [LHS]eq_integral - do rewrite EFinf; rewrite ge0_integral_fsum //; last 2 first. + do rewrite EFinf; rewrite ge0_integral_fsum //. - by move=> r; exact/measurable_EFinP/measurableT_comp. - by move=> r /= z _; exact: nnfun_muleindic_ge0. transitivity (\sum_(k \in range f) \int[m1]_x (k%:E * fubini_F m2 (EFin \o \1_(f @^-1` [set k])) x)). apply: eq_fsbigr => i; rewrite inE => -[z _ <-{i}]. - rewrite ge0_integralZl//; last 2 first. - - exact/measurable_EFinP. - - by rewrite lee_fin. + rewrite ge0_integralZl//. + - exact/measurable_EFinP. + - by rewrite lee_fin. rewrite indic_fubini_tonelli1// -ge0_integralZl//; last by rewrite lee_fin. - exact: indic_measurable_fun_fubini_tonelli_F. - by move=> /= x _; exact: indic_fubini_tonelli_F_ge0. -rewrite -ge0_integral_fsum; last by []. - - apply: eq_integral => x _; rewrite sfun_fubini_tonelli_FE. - by under eq_fsbigr do rewrite indic_fubini_tonelli_FE//. - - by []. - - by move=> r; apply/measurable_funeM/indic_measurable_fun_fubini_tonelli_F. +rewrite -ge0_integral_fsum; [by []| | |by []|]; first 2 last. +- apply: eq_integral => x _; rewrite sfun_fubini_tonelli_FE. + by under eq_fsbigr do rewrite indic_fubini_tonelli_FE//. +- by move=> r; apply/measurable_funeM/indic_measurable_fun_fubini_tonelli_F. move=> r x _; rewrite /fubini_F. have [r0|r0] := leP 0%R r. by rewrite mule_ge0//; exact: indic_fubini_tonelli_F_ge0. @@ -659,23 +658,22 @@ Qed. Lemma sfun_fubini_tonelli2 : \int[m1 \x^ m2]_z (f z)%:E = \int[m2]_y G y. Proof. under [LHS]eq_integral - do rewrite EFinf; rewrite ge0_integral_fsum //; last 2 first. + do rewrite EFinf; rewrite ge0_integral_fsum //. - by move=> i; exact/measurable_EFinP/measurableT_comp. - by move=> r /= z _; exact: nnfun_muleindic_ge0. transitivity (\sum_(k \in range f) \int[m2]_x (k%:E * (fubini_G m1 (EFin \o \1_(f @^-1` [set k])) x))). apply: eq_fsbigr => i; rewrite inE => -[z _ <-{i}]. - rewrite ge0_integralZl//; last 2 first. - - exact/measurable_EFinP. - - by rewrite lee_fin. + rewrite ge0_integralZl//. + - exact/measurable_EFinP. + - by rewrite lee_fin. rewrite indic_fubini_tonelli2// -ge0_integralZl//; last by rewrite lee_fin. - exact: indic_measurable_fun_fubini_tonelli_G. - by move=> /= x _; exact: indic_fubini_tonelli_G_ge0. -rewrite -ge0_integral_fsum; last by []. - - apply: eq_integral => x _; rewrite sfun_fubini_tonelli_GE. - by under eq_fsbigr do rewrite indic_fubini_tonelli_GE//. - - by []. - - by move=> r; apply/measurable_funeM/indic_measurable_fun_fubini_tonelli_G. +rewrite -ge0_integral_fsum; [by []| | |by []|]; first 2 last. +- apply: eq_integral => x _; rewrite sfun_fubini_tonelli_GE. + by under eq_fsbigr do rewrite indic_fubini_tonelli_GE//. +- by move=> r; apply/measurable_funeM/indic_measurable_fun_fubini_tonelli_G. move=> r y _; rewrite /fubini_G. have [r0|r0] := leP 0%R r. by rewrite mule_ge0//; exact: indic_fubini_tonelli_G_ge0. @@ -710,29 +708,29 @@ Lemma measurable_fun_fubini_tonelli_F : measurable_fun setT F. Proof. pose g := nnsfun_approx measurableT mf. apply: (emeasurable_fun_cvg (F_ g)) => //. -- by move=> n; exact: sfun_measurable_fun_fubini_tonelli_F. -- move=> x _. - rewrite /F_ /F /fubini_F [in X in _ --> X](_ : (fun _ => _) = - fun y => limn (EFin \o g ^~ (x, y))); last first. - by rewrite funeqE => y; apply/esym/cvg_lim => //; exact: cvg_nnsfun_approx. - apply: cvg_monotone_convergence => //. - - by move=> n; apply/measurable_EFinP => //; exact/measurableT_comp. - - by move=> n y _; rewrite lee_fin//; exact: fun_ge0. - - by move=> y _ a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. + by move=> n; exact: sfun_measurable_fun_fubini_tonelli_F. +move=> x _. +rewrite /F_ /F /fubini_F [in X in _ --> X](_ : (fun _ => _) = + fun y => limn (EFin \o g ^~ (x, y))). + by rewrite funeqE => y; apply/esym/cvg_lim => //; exact: cvg_nnsfun_approx. +apply: cvg_monotone_convergence => //. +- by move=> n; apply/measurable_EFinP => //; exact/measurableT_comp. +- by move=> n y _; rewrite lee_fin//; exact: fun_ge0. +- by move=> y _ a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. Qed. Lemma measurable_fun_fubini_tonelli_G : measurable_fun setT G. Proof. pose g := nnsfun_approx measurableT mf. apply: (emeasurable_fun_cvg (G_ g)) => //. -- by move=> n; exact: sfun_measurable_fun_fubini_tonelli_G. -- move=> y _; rewrite /G_ /G /fubini_G [in X in _ --> X](_ : (fun _ => _) = - fun x => limn (EFin \o g ^~ (x, y))); last first. - by rewrite funeqE => x; apply/esym/cvg_lim => //; exact: cvg_nnsfun_approx. - apply: cvg_monotone_convergence => //. - - by move=> n; apply/measurable_EFinP => //; exact/measurableT_comp. - - by move=> n x _; rewrite lee_fin; exact: fun_ge0. - - by move=> x _ a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. + by move=> n; exact: sfun_measurable_fun_fubini_tonelli_G. +move=> y _; rewrite /G_ /G /fubini_G [in X in _ --> X](_ : (fun _ => _) = + fun x => limn (EFin \o g ^~ (x, y))). + by rewrite funeqE => x; apply/esym/cvg_lim => //; exact: cvg_nnsfun_approx. +apply: cvg_monotone_convergence => //. +- by move=> n; apply/measurable_EFinP => //; exact/measurableT_comp. +- by move=> n x _; rewrite lee_fin; exact: fun_ge0. +- by move=> x _ a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. Qed. Lemma fubini_tonelli1 : \int[m1 \x m2]_z f z = \int[m1]_x F x. @@ -740,31 +738,31 @@ Proof. pose g := nnsfun_approx measurableT mf. have F_F x : F x = limn (F_ g ^~ x). rewrite [RHS](_ : _ = limn (fun n => \int[m2]_y (EFin \o g n) (x, y)))//. - rewrite -monotone_convergence//; last 3 first. - - by move=> n; exact/measurable_EFinP/measurableT_comp. - - by move=> n /= y _; rewrite lee_fin; exact: fun_ge0. - - by move=> y /= _ a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. + rewrite -monotone_convergence//. + - by move=> n; exact/measurable_EFinP/measurableT_comp. + - by move=> n /= y _; rewrite lee_fin; exact: fun_ge0. + - by move=> y /= _ a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. by apply: eq_integral => y _; apply/esym/cvg_lim => //; exact: cvg_nnsfun_approx. -rewrite [RHS](_ : _ = limn (fun n => \int[m1 \x m2]_z (EFin \o g n) z)). - rewrite -monotone_convergence //; last 3 first. - - by move=> n; exact/measurable_EFinP. - - by move=> n /= x _; rewrite lee_fin; exact: fun_ge0. - - by move=> y /= _ a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. +rewrite [RHS](_ : _ = limn (fun n => \int[m1 \x m2]_z (EFin \o g n) z)); last first. + rewrite -monotone_convergence //. + - by move=> n; exact/measurable_EFinP. + - by move=> n /= x _; rewrite lee_fin; exact: fun_ge0. + - by move=> y /= _ a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. by apply: eq_integral => /= x _; apply/esym/cvg_lim => //; exact: cvg_nnsfun_approx. rewrite [LHS](_ : _ = - limn (fun n => \int[m1]_x (\int[m2]_y (EFin \o g n) (x, y)))). + limn (fun n => \int[m1]_x (\int[m2]_y (EFin \o g n) (x, y)))); last first. set r := fun _ => _; set l := fun _ => _; have -> // : l = r. by apply/funext => n; rewrite /l /r sfun_fubini_tonelli1. rewrite [RHS](_ : _ = limn (fun n => \int[m1]_x F_ g n x))//. -rewrite -monotone_convergence => [|//|||]; first exact: eq_integral. +rewrite -monotone_convergence => [//||||]; last exact: eq_integral. - by move=> n; exact: sfun_measurable_fun_fubini_tonelli_F. - move=> n x _; apply: integral_ge0 => // y _ /=; rewrite lee_fin. exact: fun_ge0. -- move=> x /= _ a b ab; apply: ge0_le_integral => //. - + by move=> y _; rewrite lee_fin; exact: fun_ge0. - + exact/measurable_EFinP/measurableT_comp. - + exact/measurable_EFinP/measurableT_comp. - + by move=> y _; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. +move=> x /= _ a b ab; apply: ge0_le_integral => //. +- by move=> y _; rewrite lee_fin; exact: fun_ge0. +- exact/measurable_EFinP/measurableT_comp. +- exact/measurable_EFinP/measurableT_comp. +- by move=> y _; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. Qed. Lemma fubini_tonelli2 : \int[m1 \x m2]_z f z = \int[m2]_y G y. @@ -773,30 +771,30 @@ pose g := nnsfun_approx measurableT mf. have G_G y : G y = limn (G_ g ^~ y). rewrite /G /fubini_G. rewrite [RHS](_ : _ = limn (fun n => \int[m1]_x (EFin \o g n) (x, y)))//. - rewrite -monotone_convergence//; last 3 first. - - by move=> n; exact/measurable_EFinP/measurableT_comp. - - by move=> n /= x _; rewrite lee_fin; exact: fun_ge0. - - by move=> x /= _ a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. + rewrite -monotone_convergence//. + - by move=> n; exact/measurable_EFinP/measurableT_comp. + - by move=> n /= x _; rewrite lee_fin; exact: fun_ge0. + - by move=> x /= _ a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. by apply: eq_integral => x _; apply/esym/cvg_lim => //; exact: cvg_nnsfun_approx. -rewrite [RHS](_ : _ = limn (fun n => \int[m1 \x m2]_z (EFin \o g n) z)). - rewrite -monotone_convergence //; last 3 first. - - by move=> n; exact/measurable_EFinP. - - by move=> n /= x _; rewrite lee_fin; exact: fun_ge0. - - by move=> y /= _ a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. +rewrite [RHS](_ : _ = limn (fun n => \int[m1 \x m2]_z (EFin \o g n) z)); last first. + rewrite -monotone_convergence //. + - by move=> n; exact/measurable_EFinP. + - by move=> n /= x _; rewrite lee_fin; exact: fun_ge0. + - by move=> y /= _ a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. by apply: eq_integral => /= x _; apply/esym/cvg_lim => //; exact: cvg_nnsfun_approx. rewrite [LHS](_ : _ = limn - (fun n => \int[m2]_y (\int[m1]_x (EFin \o g n) (x, y)))). + (fun n => \int[m2]_y (\int[m1]_x (EFin \o g n) (x, y)))); last first. set r := fun _ => _; set l := fun _ => _; have -> // : l = r. by apply/funext => n; rewrite /l /r sfun_fubini_tonelli sfun_fubini_tonelli2. rewrite [RHS](_ : _ = limn (fun n => \int[m2]_y G_ g n y))//. -rewrite -monotone_convergence => [|//|||]; first exact: eq_integral. +rewrite -monotone_convergence => [//||||]; last exact: eq_integral. - by move=> n; exact: sfun_measurable_fun_fubini_tonelli_G. - by move=> n y _; apply: integral_ge0 => // x _ /=; rewrite lee_fin fun_ge0. -- move=> y /= _ a b ab; apply: ge0_le_integral => //. - + by move=> x _; rewrite lee_fin fun_ge0. - + exact/measurable_EFinP/measurableT_comp. - + exact/measurable_EFinP/measurableT_comp. - + by move=> x _; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. +move=> y /= _ a b ab; apply: ge0_le_integral => //. +- by move=> x _; rewrite lee_fin fun_ge0. +- exact/measurable_EFinP/measurableT_comp. +- exact/measurable_EFinP/measurableT_comp. +- by move=> x _; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. Qed. Lemma fubini_tonelli : @@ -1002,16 +1000,16 @@ Qed. Lemma integral12_prod_meas1 : \int[m1]_x F x = \int[m1 \x m2]_z f z. Proof. -rewrite FE integralB; [|by[]|exact: integrable_Fplus|exact: integrable_Fminus]. +rewrite FE integralB; [by[]|exact: integrable_Fplus|exact: integrable_Fminus|]. by rewrite [in RHS]integralE ?fubini_tonelli1//; - [exact: measurable_funeneg|exact: measurable_funepos]. + [exact: measurable_funepos|exact: measurable_funeneg]. Qed. Lemma integral21_prod_meas1 : \int[m2]_x G x = \int[m1 \x m2]_z f z. Proof. -rewrite GE integralB; [|by[]|exact: integrable_Gplus|exact: integrable_Gminus]. +rewrite GE integralB; [by[]|exact: integrable_Gplus|exact: integrable_Gminus|]. by rewrite [in RHS]integralE ?fubini_tonelli2//; - [exact: measurable_funeneg|exact: measurable_funepos]. + [exact: measurable_funepos|exact: measurable_funeneg]. Qed. Lemma integral21_prod_meas2 : \int[m2]_x G x = \int[m1 \x^ m2]_z f z. @@ -1053,16 +1051,16 @@ Lemma sfinite_Fubini : Proof. pose s1 := sfinite_measure_seq m1. pose s2 := sfinite_measure_seq m2. -rewrite [LHS](eq_measure_integral (mseries s1 0)); last first. +rewrite [LHS](eq_measure_integral (mseries s1 0)). by move=> A mA _; rewrite /=; exact: sfinite_measure_seqP. transitivity (\int[mseries s1 0]_x \int[mseries s2 0]_y f (x, y)). apply: eq_integral => x _; apply: eq_measure_integral => ? ? _. exact: sfinite_measure_seqP. transitivity (\sum_(n t _; exact: integral_ge0. rewrite [X in measurable_fun _ X](_ : _ = - fun x => \sum_(n \sum_(n x. by rewrite ge0_integral_measure_series//; exact/measurableT_comp. apply: ge0_emeasurable_sum; first by move=> k x *; exact: integral_ge0. @@ -1070,18 +1068,18 @@ transitivity (\sum_(n n _; apply: eq_integral => x _. by rewrite ge0_integral_measure_series//; exact/measurableT_comp. transitivity (\sum_(n n _; rewrite integral_nneseries => [//|//||]. + apply: eq_eseriesr => n _; rewrite integral_nneseries => [//|||//]. by move=> m; exact: measurable_fun_fubini_tonelli_F. by move=> m x _; exact: integral_ge0. transitivity (\sum_(n n _; apply: eq_eseriesr => m _. by rewrite fubini_tonelli//; exact: finite_measure_sigma_finite. transitivity (\sum_(n n _; rewrite ge0_integral_measure_series => [//|//||]. + apply: eq_eseriesr => n _; rewrite ge0_integral_measure_series => [//|||//]. by move=> y _; exact: integral_ge0. exact: measurable_fun_fubini_tonelli_G. transitivity (\int[mseries s2 0]_y \sum_(n [//|//||]. + rewrite integral_nneseries => [//|||//]. by move=> n; apply: measurable_fun_fubini_tonelli_G. by move=> n y _; exact: integral_ge0. transitivity (\int[mseries s2 0]_y \int[mseries s1 0]_x f (x, y)). diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v b/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v index a6d8685ad7..32422123da 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_monotone_convergence.v @@ -18,7 +18,7 @@ From mathcomp Require Import lebesgue_integral_definition. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -105,7 +105,7 @@ have mh1 : measurable_fun setT h1 by exact/(measurable_restrictT _ _).1. have mh2 : measurable_fun setT h2 by exact/(measurable_restrictT _ _).1. have h12 x : h1 x <= h2 x by apply: lee_restrict. pose g1 := nnsfun_approx measurableT mh1. -rewrite (@nd_ge0_integral_lim _ _ _ _ _ g1)//; last 2 first. +rewrite (@nd_ge0_integral_lim _ _ _ _ _ g1)//. by move=> x m n mn; exact/lefP/nd_nnsfun_approx. by move=> x; exact: cvg_nnsfun_approx. apply: lime_le. @@ -179,7 +179,7 @@ rewrite (@le_trans _ _ (\big[maxr/0]_(i < n) g2 i n.+1 x)%R) //. apply: le_bigmax2 => i _; apply: (nondecreasing_seqP (g2 i ^~ x)).2 => a b ab. by rewrite !nnsfun_approxE; exact/lefP/nd_approx. rewrite (bigmaxD1 ord_max)// le_max; apply/orP; right. -rewrite [leRHS](eq_bigl (fun i => nat_of_ord i < n)%N). +rewrite [leRHS](eq_bigl (fun i => nat_of_ord i < n)%N); last first. by rewrite (big_ord_narrow (leqnSn n)). move=> i /=; rewrite neq_lt; apply/orP/idP => [[//|]|]; last by left. by move=> /(leq_trans (ltn_ord i)); rewrite ltnn. @@ -264,7 +264,7 @@ apply/eqP; rewrite eq_le; apply/andP; split; last first. near=> m; have nm : (n <= m)%N by near: m; exists n. exact/nd_g. by apply: lime_le => //; [exact:ereal_nondecreasing_is_cvgn|exact:nearW]. -rewrite (@nd_ge0_integral_lim _ _ _ mu _ max_g2) //; last 2 first. +rewrite (@nd_ge0_integral_lim _ _ _ mu _ max_g2) //. - move=> t; apply: lime_ge => //. by apply: nearW => n; exact: g0. - by move=> t m n mn; exact/lefP/nd_max_g2. @@ -301,7 +301,7 @@ have mg := measurable_fun_einfs mf. have g0 n x : D x -> 0 <= g n x. by move=> Dx; apply: le_ereal_inf_tmp => _ [m /= nm <-]; exact: f0. under eq_integral do rewrite limn_einf_lim. -rewrite limn_einf_lim monotone_convergence //; last first. +rewrite limn_einf_lim monotone_convergence //. move=> x Dx m n mn /=; apply: ereal_inf_le_tmp => _ /= [p /= np <-]. by exists p => //=; rewrite (leq_trans mn). apply: lee_lim. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v b/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v index 8a583075cc..5ea0de7094 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_nonneg.v @@ -30,7 +30,7 @@ From mathcomp Require Import lebesgue_integral_monotone_convergence. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -94,7 +94,7 @@ have h g : (forall x, 0 <= g x) -> [set sintegral mzero h | move=> g0; apply/seteqP; split => [_ [h/= Dt <-]|x -> /=]. by rewrite sintegral_measure_zero. by exists (cst_nnsfun _ (@NngNum _ 0 (lexx _))). -rewrite integralE !ge0_integralE//= h ?ereal_sup1; last first. +rewrite integralE !ge0_integralE//= h ?ereal_sup1. by move=> r; rewrite erestrict_ge0. by rewrite h ?ereal_sup1 ?subee// => r; rewrite erestrict_ge0. Qed. @@ -129,18 +129,18 @@ have mh1 : measurable_fun setT h1 by exact/(measurable_restrictT _ _).1. pose g := nnsfun_approx measurableT mh1. pose kg := fun n => scale_nnsfun (g n) k0. rewrite (@nd_ge0_integral_lim _ _ _ mu (fun x => k%:E * h1 x) kg). -- rewrite (_ : _ \o _ = fun n => sintegral mu (scale_nnsfun (g n) k0))//. - rewrite (_ : (fun _ => _) = (fun n => k%:E * sintegral mu (g n))). - rewrite limeMl //; last first. - by apply: is_cvg_sintegral => // x m n mn; exact/lefP/nd_nnsfun_approx. - by rewrite -(nd_ge0_integral_lim mu h10)// => [x m n mn|x]; - [exact/lefP/nd_nnsfun_approx|exact: cvg_nnsfun_approx]. - by under eq_fun do rewrite (sintegralrM mu k (g _)). - by move=> t; rewrite mule_ge0. - by move=> x m n mn; rewrite /kg ler_pM//; exact/lefP/nd_nnsfun_approx. - move=> x. rewrite [X in X @ \oo --> _](_ : _ = (fun n => k%:E * (g n x)%:E)) ?funeqE//. exact/cvgeZl/cvg_nnsfun_approx. +rewrite (_ : _ \o _ = fun n => sintegral mu (scale_nnsfun (g n) k0))//. +rewrite (_ : (fun _ => _) = (fun n => k%:E * sintegral mu (g n))). + by under eq_fun do rewrite (sintegralrM mu k (g _)). +rewrite limeMl //. + by apply: is_cvg_sintegral => // x m n mn; exact/lefP/nd_nnsfun_approx. +by rewrite -(nd_ge0_integral_lim mu h10)// => [x m n mn|x]; + [exact/lefP/nd_nnsfun_approx|exact: cvg_nnsfun_approx]. Qed. End ge0_integralZl_EFin. @@ -169,7 +169,7 @@ have mh2 : measurable_fun setT h2 by exact/(measurable_restrictT _ _).1. pose g1 := nnsfun_approx measurableT mh1. pose g2 := nnsfun_approx measurableT mh2. pose g12 := fun n => add_nnsfun (g1 n) (g2 n). -rewrite (@nd_ge0_integral_lim _ _ _ mu _ g12); last 3 first. +rewrite (@nd_ge0_integral_lim _ _ _ mu _ g12). - by move=> x; rewrite adde_ge0. - by apply: nondecreasing_seqD => // x m n mn; [exact/lefP/nd_nnsfun_approx|exact/lefP/nd_nnsfun_approx]. @@ -177,12 +177,12 @@ rewrite (@nd_ge0_integral_lim _ _ _ mu _ g12); last 3 first. apply: cvgeD => //; [|exact: cvg_nnsfun_approx..]. by apply: ge0_adde_def => //; rewrite !inE; [exact: h10|exact: h20]. under [_ \o _]eq_fun do rewrite sintegralD. -rewrite (@nd_ge0_integral_lim _ _ _ _ _ g1)//; last 2 first. - by move=> x m n mn; exact/lefP/nd_nnsfun_approx. - by move=> x; exact/cvg_nnsfun_approx. -rewrite (@nd_ge0_integral_lim _ _ _ _ _ g2)//; last 2 first. - by move=> x m n mn; exact/lefP/nd_nnsfun_approx. - by move=> x; exact/cvg_nnsfun_approx. +rewrite (@nd_ge0_integral_lim _ _ _ _ _ g1)//. +- by move=> x m n mn; exact/lefP/nd_nnsfun_approx. +- by move=> x; exact/cvg_nnsfun_approx. +rewrite (@nd_ge0_integral_lim _ _ _ _ _ g2)//. +- by move=> x m n mn; exact/lefP/nd_nnsfun_approx. +- by move=> x; exact/cvg_nnsfun_approx. rewrite limeD//; [ by apply: is_cvg_sintegral => // x m n mn; exact/lefP/nd_nnsfun_approx..|]. by rewrite ge0_adde_def => //; rewrite inE; apply: lime_ge; solve[ @@ -207,10 +207,10 @@ Proof. elim: s => [|h t ih]. by (under eq_fun do rewrite big_nil); rewrite big_nil integral0. rewrite big_cons /= -ih -ge0_integralD//. -- by apply: eq_integral => x Dx; rewrite big_cons. - by move=> *; exact: f0. - by move=> *; apply: sume_ge0 => // k _; exact: f0. - exact: emeasurable_sum. +- by apply: eq_integral => x Dx; rewrite big_cons. Qed. End ge0_integral_sum. @@ -245,10 +245,10 @@ Lemma integral_nneseries : \int[mu]_(x in D) (\sum_(n n; exact: emeasurable_sum. - by move=> n x Dx; apply: sume_ge0 => m _; exact: f0. - by move=> x Dx m n mn; apply: lee_sum_nneg_natr => // k _ _; exact: f0. +- by rewrite -lim_mkord; under eq_fun do rewrite ge0_integral_sum// big_mkord. Qed. End integral_nneseries. @@ -304,9 +304,9 @@ have M0 : (0 <= M)%R by []. near=> n; have [ifoo|] := ltP (\int[mu]_(x in D) f x) +oo; last first. rewrite leye_eq => /eqP ->; rewrite mulry muleC gt0_mulye ?leey//. by near: n; exists 1%N => // n /= n0; rewrite gtr0_sg// ?lte_fin// ltr0n. -rewrite -(@fineK _ (\int[mu]_(x in D) f x)); last first. +rewrite -(@fineK _ (\int[mu]_(x in D) f x)). by rewrite fin_numElt ifoo (le_lt_trans _ if_gt0). -rewrite -lee_pdivrMr//; last first. +rewrite -lee_pdivrMr//. by move: if_gt0 ifoo; case: (\int[mu]_(x in D) f x). near: n. exists (truncn (M * (fine (\int[mu]_(x in D) f x))^-1)).+1 => //. @@ -334,7 +334,7 @@ Lemma integralZl_indic (f : R -> set T) (k : R) : k%:E * \int[m]_(x in D) (\1_(f k) x)%:E. Proof. move=> fk0 mfk; have [k0|k0] := ltP k 0%R. - rewrite integral0_eq//; last by move=> x _; rewrite fk0// indic0 mulr0. + rewrite integral0_eq//; first by move=> x _; rewrite fk0// indic0 mulr0. by rewrite integral0_eq ?mule0// => x _; rewrite fk0// indic0. under eq_integral do rewrite EFinM. rewrite ge0_integralZl//; exact/measurable_EFinP. @@ -370,23 +370,23 @@ Let integral_mscale_nnsfun (h : {nnsfun T >-> R}) : \int[mscale k m]_(x in D) (h x)%:E = k%:num%:E * \int[m]_(x in D) (h x)%:E. Proof. under [LHS]eq_integral do rewrite fimfunE -fsumEFin//. -rewrite [LHS]ge0_integral_fsum//; last 2 first. +rewrite [LHS]ge0_integral_fsum//. - by move=> r; exact/measurable_EFinP/measurableT_comp. - by move=> n x _; rewrite EFinM nnfun_muleindic_ge0. -rewrite -[RHS]ge0_integralZl//; last 2 first. +rewrite -[RHS]ge0_integralZl//. - by apply: measurableT_comp => //; exact: measurable_funTS. - by move=> x _; rewrite lee_fin. under [RHS]eq_integral. - move=> x xD; rewrite fimfunE -fsumEFin// ge0_mule_fsumr; last first. + move=> x xD; rewrite fimfunE -fsumEFin// ge0_mule_fsumr. by move=> r; rewrite EFinM nnfun_muleindic_ge0. over. -rewrite [RHS]ge0_integral_fsum//; last 2 first. +rewrite [RHS]ge0_integral_fsum//. - by move=> r; apply/measurable_EFinP; do 2 apply/measurableT_comp => //. - by move=> n x _; rewrite EFinM mule_ge0// nnfun_muleindic_ge0. apply: eq_fsbigr => r _; rewrite ge0_integralZl//. -- by rewrite !integralZl_indic_nnsfun//= integral_mscale_indic// muleCA. - exact/measurable_EFinP/measurableT_comp. - by move=> t _; rewrite nnfun_muleindic_ge0. +- by rewrite !integralZl_indic_nnsfun//= integral_mscale_indic// muleCA. Qed. Lemma ge0_integral_mscale (mf : measurable_fun D f) : @@ -396,20 +396,20 @@ Proof. move=> f0; pose f_ := nnsfun_approx mD mf. transitivity (limn (fun n => \int[mscale k m]_(x in D) (f_ n x)%:E)). rewrite -monotone_convergence//=. - - apply: eq_integral => x /[!inE] xD; apply/esym/cvg_lim => //=. - exact: cvg_nnsfun_approx. - by move=> n; apply: measurableT_comp => //; exact: measurable_funTS. - by move=> n x _; rewrite lee_fin. - by move=> x _ a b ab; rewrite lee_fin//; exact/lefP/nd_nnsfun_approx. + apply: eq_integral => x /[!inE] xD; apply/esym/cvg_lim => //=. + exact: cvg_nnsfun_approx. rewrite (_ : \int[m]_(x in D) _ = - limn (fun n => \int[m]_(x in D) (f_ n x)%:E)); last first. + limn (fun n => \int[m]_(x in D) (f_ n x)%:E)). rewrite -monotone_convergence//=. - - apply: eq_integral => x /[!inE] xD; apply/esym/cvg_lim => //. - exact: cvg_nnsfun_approx. - by move=> n; exact/measurable_EFinP/measurable_funTS. - by move=> n x _; rewrite lee_fin. - by move=> x _ a b ab; rewrite lee_fin//; exact/lefP/nd_nnsfun_approx. -rewrite -limeMl//. + apply: eq_integral => x /[!inE] xD; apply/esym/cvg_lim => //. + exact: cvg_nnsfun_approx. +rewrite -limeMl//; last first. by congr (limn _); apply/funext => n /=; rewrite integral_mscale_nnsfun. apply/ereal_nondecreasing_is_cvgn => a b ab; apply: ge0_le_integral => //. - by move=> x _; rewrite lee_fin. @@ -461,12 +461,12 @@ Lemma sintegral_EFin_cst (x : {nonneg R}) : sintegral mu (cst x%:num \_ D) = x%:num%:E * mu D. Proof. rewrite sintegralE (fsbig_widen _ [set 0%R; x%:num])/=. -- have [->|x0] := eqVneq x%:num 0%R; first by rewrite setUid fsbig_set1 !mul0e. - rewrite fsbigU0//=; last by move=> y [->]/esym; apply/eqP. - rewrite !fsbig_set1 mul0e add0e preimage_restrict//. - by rewrite ifN ?set0U ?setIidl//= notin_setE => /esym; exact/eqP. - by move=> y [t _ <-] /=; rewrite /patch; case: ifPn; [right|left]. - by move=> y [_ /=/preimage10->]; rewrite measure0 mule0. +have [->|x0] := eqVneq x%:num 0%R; first by rewrite setUid fsbig_set1 !mul0e. +rewrite fsbigU0//=; first by move=> y [->]/esym; apply/eqP. +rewrite !fsbig_set1 mul0e add0e preimage_restrict//. +by rewrite ifN ?set0U ?setIidl//= notin_setE => /esym; exact/eqP. Qed. Import HBNNSimple. @@ -475,8 +475,8 @@ Local Lemma integral_cstr r : \int[mu]_(x in D) r%:E = r%:E * mu D. Proof. wlog r0 : r / (0 <= r)%R. move=> h; have [|r0] := leP 0%R r; first exact: h. - rewrite -[in RHS](opprK r) EFinN mulNe -h ?oppr_ge0; last exact: ltW. - rewrite -integral_ge0N//; last by move=> t ?; rewrite /= lee_fin oppr_ge0 ltW. + rewrite -[in RHS](opprK r) EFinN mulNe -h ?oppr_ge0; first exact: ltW. + rewrite -integral_ge0N//; first by move=> t ?; rewrite /= lee_fin oppr_ge0 ltW. by under [RHS]eq_integral do rewrite /= opprK. rewrite (eq_integral (EFin \o cst_nnsfun T (NngNum r0)))//. by rewrite integral_nnsfun// sintegral_EFin_cst. @@ -490,18 +490,18 @@ have <- : (fun t => limn (g^~ t)) = cst +oo. apply/cvgeryP/cvgryPge => M; exists (truncn M).+1 => //= m/= Mn. by rewrite (le_trans (ltW (truncnS_gt _)))// ler_nat. rewrite monotone_convergence //. -- under [in LHS]eq_fun do rewrite integral_cstr. - apply/cvg_lim => //; apply/cvgeyPge => M. - have [muDoo|muDoo] := ltP (mu D) +oo; last first. - exists 1%N => // m /= m0; move: muDoo; rewrite leye_eq => /eqP ->. - by rewrite mulry gtr0_sg ?mul1e ?leey// ltr0n. - exists (truncn (M / fine (mu D))).+1 => // m /=. - rewrite -lez_nat => MDm; rewrite -(@fineK _ (mu D)) ?ge0_fin_numE//. - rewrite -lee_pdivrMr; last by rewrite fine_gt0// lt0e muD0 measure_ge0. - by rewrite lee_fin (le_trans (ltW (truncnS_gt _)))// ler_nat. - by move=> n; exact: measurable_cst. - by move=> n x Dx; rewrite lee_fin. - by move=> t Dt n m nm; rewrite /g lee_fin ler_nat. +under [in LHS]eq_fun do rewrite integral_cstr. +apply/cvg_lim => //; apply/cvgeyPge => M. +have [muDoo|muDoo] := ltP (mu D) +oo; last first. + exists 1%N => // m /= m0; move: muDoo; rewrite leye_eq => /eqP ->. + by rewrite mulry gtr0_sg ?mul1e ?leey// ltr0n. +exists (truncn (M / fine (mu D))).+1 => // m /=. +rewrite -lez_nat => MDm; rewrite -(@fineK _ (mu D)) ?ge0_fin_numE//. +rewrite -lee_pdivrMr; first by rewrite fine_gt0// lt0e muD0 measure_ge0. +by rewrite lee_fin (le_trans (ltW (truncnS_gt _)))// ler_nat. Qed. Local Lemma integral_cstNy : mu D != 0 -> \int[mu]_(x in D) (cst -oo) x = -oo. @@ -532,18 +532,18 @@ have mphiD : measurable (phi @^-1` D). pose f_ := nnsfun_approx mD mf. transitivity (limn (fun n => \int[pushforward mu phi]_(x in D) (f_ n x)%:E)). rewrite -monotone_convergence//. - - apply: eq_integral => y /[!inE] yD; apply/esym/cvg_lim => //. - by apply: cvg_nnsfun_approx=> // *; apply: f0; rewrite inE. - by move=> n; exact/measurable_EFinP/measurable_funP. - by move=> n y _; rewrite lee_fin. - by move=> y _ m n mn; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. + apply: eq_integral => y /[!inE] yD; apply/esym/cvg_lim => //. + by apply: cvg_nnsfun_approx=> // *; apply: f0; rewrite inE. rewrite [X in limn X](_ : _ = - (fun n => \int[mu]_(x in phi @^-1` D) (EFin \o f_ n \o phi) x)). - rewrite -monotone_convergence//; last 3 first. - - move=> n /=; do 2 apply: measurableT_comp=> //. - exact: (measurable_funP mphi_pack). - - by move=> n x _ /=; rewrite lee_fin. - - by move=> x _ m n mn; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. + (fun n => \int[mu]_(x in phi @^-1` D) (EFin \o f_ n \o phi) x)); last first. + rewrite -monotone_convergence//. + - move=> n /=; do 2 apply: measurableT_comp=> //. + exact: (measurable_funP mphi_pack). + - by move=> n x _ /=; rewrite lee_fin. + - by move=> x _ m n mn; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. apply: eq_integral => x /[!inE] phiDx /=; apply/cvg_lim => //. by apply: cvg_nnsfun_approx=> // y Dy; apply: f0; rewrite inE. apply/funext => n. @@ -553,17 +553,17 @@ have mfnphi r : measurable (f_ n @^-1` [set r] \o phi). transitivity (\sum_(k \in range (f_ n)) \int[mu]_(x in phi @^-1` D) (k * \1_((f_ n @^-1` [set k]) \o phi) x)%:E). under eq_integral do rewrite fimfunE -fsumEFin//. - rewrite ge0_integral_fsum//; last 2 first. + rewrite ge0_integral_fsum//. - by move=> y; exact/measurable_EFinP/measurable_funM. - by move=> y x _; rewrite nnfun_muleindic_ge0. apply: eq_fsbigr => r _; rewrite integralZl_indic_nnsfun// integral_indic//=. rewrite (integralZl_indic _ (fun r => f_ n @^-1` [set r] \o phi))//. - by congr (_ * _); rewrite [RHS]integral_indic. - by move=> r0; rewrite preimage_nnfun0. + by move=> r0; rewrite preimage_nnfun0. + by congr (_ * _); rewrite [RHS]integral_indic. rewrite -ge0_integral_fsum//. -- by apply: eq_integral => x _; rewrite fsumEFin// -fimfunE. - by move=> r; exact/measurable_EFinP/measurable_funM. - by move=> r x _; rewrite nnfun_muleindic_ge0. +- by apply: eq_integral => x _; rewrite fsumEFin// -fimfunE. Qed. End ge0_transfer. @@ -587,9 +587,9 @@ Lemma ge0_integration_by_substitution0 (f : R -> \bar R) : \int[mu]_(r in `[0%R, +oo[) f r = \int[mu]_(r in `]-oo, 0%R]) f (- r)%R. Proof. move=> mf f0; rewrite (_ : `]-oo, 0%R]%classic = - (-%R : _ -> measurableTypeR R) @^-1` `[0%R, +oo[); last first. + (-%R : _ -> measurableTypeR R) @^-1` `[0%R, +oo[). by rewrite opp_preimage_itvbndy oppr0. -rewrite -ge0_integral_pushforward//=; last exact: measurable_funS mf. +rewrite -ge0_integral_pushforward//=; first exact: measurable_funS mf. by apply: eq_measure_integral => //= A mA AS; exact/esym/lebesgue_measureN. Qed. @@ -609,31 +609,32 @@ Proof. move=> Da; pose f_ := nnsfun_approx mD mf. transitivity (limn (fun n => \int[\d_ a]_(x in D) (f_ n x)%:E)). rewrite -monotone_convergence//. - - by apply: eq_integral => x /set_mem Dx; apply/esym/cvg_lim => //; apply: cvg_nnsfun_approx. - by move=> n; exact/measurable_EFinP/measurable_funTS. - by move=> *; rewrite lee_fin. - by move=> x _ m n mn; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. -rewrite (_ : (fun _ => _) = (fun n => (f_ n a)%:E)). + - by apply: eq_integral => x /set_mem Dx; apply/esym/cvg_lim => //; + apply: cvg_nnsfun_approx. +rewrite (_ : (fun _ => _) = (fun n => (f_ n a)%:E)); last first. by apply/cvg_lim => //; exact: cvg_nnsfun_approx. apply/funext => n. under eq_integral do rewrite fimfunE// -fsumEFin//. rewrite ge0_integral_fsum//. -- under eq_fsbigr do rewrite integralZl_indic_nnsfun//. - rewrite /= (fsbigD1 (f_ n a))//=; last by exists a. - rewrite integral_indic//= diracE mem_set// mule1. - rewrite fsbig1 ?adde0// => r /= [_ rfna]. - rewrite integral_indic//= diracE memNset ?mule0//=. - by apply/not_andP; left; exact/nesym. - by move=> r; exact/measurable_EFinP/measurableT_comp. - by move=> r x _; rewrite nnfun_muleindic_ge0. +under eq_fsbigr do rewrite integralZl_indic_nnsfun//. +rewrite /= (fsbigD1 (f_ n a))//=; first by exists a. +rewrite integral_indic//= diracE mem_set// mule1. +rewrite fsbig1 ?adde0// => r /= [_ rfna]. +rewrite integral_indic//= diracE memNset ?mule0//=. +by apply/not_andP; left; exact/nesym. Qed. Lemma integral_dirac (f : T -> \bar R) (mf : measurable_fun D f) : \int[\d_ a]_(x in D) f x = \d_a D * f a. Proof. have [/[!inE] aD|aD] := boolP (a \in D). - rewrite integralE ge0_integral_dirac//; last exact/measurable_funepos. - rewrite ge0_integral_dirac//; last exact/measurable_funeneg. + rewrite integralE ge0_integral_dirac//; first exact/measurable_funepos. + rewrite ge0_integral_dirac//; first exact/measurable_funeneg. by rewrite [in RHS](funeposneg f) diracE mem_set// mul1e. rewrite diracE (negbTE aD) mul0e -(integral_measure_zero D f)//. apply: eq_measure_integral => //= S mS DS; rewrite /dirac indicE memNset//. @@ -674,7 +675,7 @@ Let integralT_measure_sum (f : {nnsfun T >-> R}) : \int[m]_x (f x)%:E = \sum_(n < N) \int[m_ n]_x (f x)%:E. Proof. under eq_integral do rewrite fimfunE -fsumEFin//. -rewrite ge0_integral_fsum//; last 2 first. +rewrite ge0_integral_fsum//. - by move=> r /=; apply: measurableT_comp => //; exact: measurableT_comp. - by move=> r t _; rewrite EFinM nnfun_muleindic_ge0. transitivity (\sum_(i \in range f) @@ -733,7 +734,7 @@ Proof. move=> f0 mf; pose f_ := nnsfun_approx mD mf. elim => [|N ih]; first by rewrite big_ord0 msum_mzero integral_measure_zero. rewrite big_ord_recr/= -ih. -rewrite (_ : _ m_ N.+1 = measure_add (msum m_ N) (m_ N)); last first. +rewrite (_ : _ m_ N.+1 = measure_add (msum m_ N) (m_ N)). by apply/funext => A; rewrite measure_addE /msum/= big_ord_recr. have mf_ n : measurable_fun D (fun x => (f_ n x)%:E). exact/measurable_funTS/measurable_EFinP. @@ -745,18 +746,18 @@ have cvg_f_ (m : {measure set T -> \bar R}) : by move=> t Dt; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. transitivity (limn (fun n => \int[measure_add (msum m_ N) (m_ N)]_(x in D) (f_ n x)%:E)). - rewrite -monotone_convergence//; last first. + rewrite -monotone_convergence//. by move=> t Dt a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. by apply: eq_integral => t /[!inE] Dt; apply/esym/cvg_lim => //; exact: cvg_nnsfun_approx. transitivity (limn (fun n => \int[msum m_ N]_(x in D) (f_ n x)%:E + \int[m_ N]_(x in D) (f_ n x)%:E)). by congr (limn _); apply/funext => n; by rewrite integral_measure_add_nnsfun. -rewrite limeD//; do?[exact: cvg_f_]; last first. +rewrite limeD//; do?[exact: cvg_f_]. by apply: ge0_adde_def; rewrite inE; apply: lime_ge => //; do?[exact: cvg_f_]; apply: nearW => n; apply: integral_ge0 => //; exact: f_ge0. by congr (_ + _); (rewrite -monotone_convergence//; [ - apply: eq_integral => t /[!inE] Dt; apply/cvg_lim => //; exact: cvg_nnsfun_approx | - move=> t Dt a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx]). + move=> t Dt a b ab; rewrite lee_fin; exact/lefP/nd_nnsfun_approx| + apply: eq_integral => t /[!inE] Dt; apply/cvg_lim => //; exact: cvg_nnsfun_approx]). Qed. End integral_mfun_measure_sum. @@ -792,7 +793,7 @@ Lemma integral_measure_series_nnsfun (D : set T) (mD : measurable D) \int[m]_x (f x)%:E = \sum_(n r /=; apply: measurableT_comp => //; exact: measurableT_comp. - by move=> r t _; rewrite EFinM nnfun_muleindic_ge0. transitivity (\sum_(i \in range f) @@ -800,7 +801,7 @@ transitivity (\sum_(i \in range f) apply: eq_fsbigr => r _. rewrite integralZl_indic_nnsfun// integral_measure_series_indic// nneseriesZl//. by move=> n _; apply: integral_ge0 => t _; rewrite lee_fin. -rewrite fsbig_finite//= -nneseries_sum; last first. +rewrite fsbig_finite//= -nneseries_sum. move=> r j _. have [r0|r0] := leP 0%R r. by rewrite mule_ge0//; apply: integral_ge0 => // t _; rewrite lee_fin. @@ -834,7 +835,7 @@ apply/eqP; rewrite eq_le; apply/andP; split; last first. by apply: nearW => x; rewrite big_mkord. move=> n. rewrite [X in _ <= X](_ : _ = \sum_(k < n) \int[m_ k]_(x in D) f x + - \int[mseries m_ n]_(x in D) f x); last first. + \int[mseries m_ n]_(x in D) f x). transitivity (\int[measure_add (msum m_ n) (mseries m_ n)]_(x in D) f x). congr (\int[_]_(_ in D) _); apply/funext => A. rewrite measure_addE/= /msum -(big_mkord xpredT (m_ ^~ A)). @@ -870,14 +871,14 @@ transitivity (\int[mu]_(x in A `|` B) ((f \_ A) x + (f \_ B) x)). by move: AB; rewrite disj_set2E => /eqP; apply/eqP/set0P; exists x. rewrite /patch addeC mem_set// ifF ?adde0//; apply/negbTE/negP; rewrite inE => xA. by move: AB; rewrite disj_set2E => /eqP; apply/eqP/set0P; exists x. -rewrite ge0_integralD//; last 5 first. - - exact: measurableU. - - by move=> x _; apply: erestrict_ge0 => y Ay; apply: f0; left. - - apply/measurable_restrict => //; first exact: measurableU. - apply: measurable_funS mf; [exact: measurableU|exact: subIsetl]. - - by move=> x _; apply: erestrict_ge0 => y By; apply: f0; right. - - apply/measurable_restrict => //; first exact: measurableU. - apply: measurable_funS mf; [exact: measurableU|exact: subIsetl]. +rewrite ge0_integralD//. +- exact: measurableU. +- by move=> x _; apply: erestrict_ge0 => y Ay; apply: f0; left. +- apply/measurable_restrict => //; first exact: measurableU. + apply: measurable_funS mf; [exact: measurableU|exact: subIsetl]. +- by move=> x _; apply: erestrict_ge0 => y By; apply: f0; right. +- apply/measurable_restrict => //; first exact: measurableU. + apply: measurable_funS mf; [exact: measurableU|exact: subIsetl]. by rewrite -integral_mkcondl setIC setUK -integral_mkcondl setKU. Qed. @@ -885,11 +886,11 @@ Lemma ge0_subset_integral (A B : set T) (mA : measurable A) (mB : measurable B) (f : T -> \bar R) : measurable_fun B f -> (forall x, B x -> 0 <= f x) -> A `<=` B -> \int[mu]_(x in A) f x <= \int[mu]_(x in B) f x. Proof. -move=> mf f0 AB; rewrite -(setDUK AB) ge0_integral_setU//; last 4 first. - - exact: measurableD. - - by rewrite setDUK. - - by move=> x; rewrite setDUK//; exact: f0. - - by rewrite disj_set2E setDIK. +move=> mf f0 AB; rewrite -(setDUK AB) ge0_integral_setU//. +- exact: measurableD. +- by rewrite setDUK. +- by move=> x; rewrite setDUK//; exact: f0. +- by rewrite disj_set2E setDIK. by apply: leeDl; apply: integral_ge0 => x [Bx _]; exact: f0. Qed. @@ -904,12 +905,6 @@ Proof. move=> mF; elim: s => [|h t ih] us tF D mf f0. by rewrite /D 2!big_nil integral_set0. rewrite /D big_cons ge0_integral_setU//. -- rewrite big_cons ih//. - + by move: us => /= /andP[]. - + by apply: sub_trivIset tF => /= i /= it; rewrite inE it orbT. - + apply: measurable_funS mf => //; first exact: bigsetU_measurable. - by rewrite /D big_cons; exact: subsetUr. - + by move=> x UFx; apply: f0; rewrite /D big_cons; right. - exact: bigsetU_measurable. - by move: mf; rewrite /D big_cons. - by move: f0; rewrite /D big_cons. @@ -917,6 +912,12 @@ rewrite /D big_cons ge0_integral_setU//. move/trivIsetP : tF; apply => //=; rewrite ?mem_head//. + by rewrite inE it orbT. + by apply/eqP => hi; move: us => /=; rewrite hi it. +rewrite big_cons ih//. +- by move: us => /= /andP[]. +- by apply: sub_trivIset tF => /= i /= it; rewrite inE it orbT. +- apply: measurable_funS mf => //; first exact: bigsetU_measurable. + by rewrite /D big_cons; exact: subsetUr. +- by move=> x UFx; apply: f0; rewrite /D big_cons; right. Qed. Lemma le_integral_abse (D : set T) (mD : measurable D) (g : T -> \bar R) a : @@ -949,8 +950,8 @@ Lemma integral_setU (A B : set T) (f : T -> \bar R) : Proof. move=> mA mB ABf AB. rewrite integralE/=. -rewrite ge0_integral_setU//; last exact/measurable_funepos. -rewrite ge0_integral_setU//; last exact/measurable_funeneg. +rewrite ge0_integral_setU//; first exact/measurable_funepos. +rewrite ge0_integral_setU//; first exact/measurable_funeneg. rewrite [X in _ = X + _]integralE/=. rewrite [X in _ = _ + X]integralE/=. set ap : \bar R := \int[mu]_(x in A) _; set an : \bar R := \int[mu]_(x in A) _. @@ -980,17 +981,17 @@ Proof. move=> mF; elim: s => [|h t ih] us tF D mf. by rewrite /D 2!big_nil integral_set0. rewrite /D big_cons __deprecated__integral_setU_EFin//. -- rewrite big_cons ih//. - + by move: us => /= /andP[]. - + by apply: sub_trivIset tF => /= i /= it; rewrite inE it orbT. - + apply: measurable_funS mf => //; first exact: bigsetU_measurable. - by rewrite /D big_cons; exact: subsetUr. - exact: bigsetU_measurable. - by move/measurable_EFinP : mf; rewrite /D big_cons. - apply/eqP; rewrite big_distrr/= big_seq big1// => i it. move/trivIsetP : tF; apply => //=; rewrite ?mem_head//. + by rewrite inE it orbT. + by apply/eqP => hi; move: us => /=; rewrite hi it. +rewrite big_cons ih//. +- by move: us => /= /andP[]. +- by apply: sub_trivIset tF => /= i /= it; rewrite inE it orbT. +- apply: measurable_funS mf => //; first exact: bigsetU_measurable. + by rewrite /D big_cons; exact: subsetUr. Qed. End integral_setU_EFin. @@ -1013,7 +1014,7 @@ Proof. move=> mF D mf f0 tF. pose f_ N := f \_ (\big[setU/set0]_(0 <= i < N) F i). have lim_f_ t : f_ ^~ t @ \oo --> (f \_ D) t. - rewrite [X in _ --> X](_ : _ = ereal_sup (range (f_ ^~ t))); last first. + rewrite [X in _ --> X](_ : _ = ereal_sup (range (f_ ^~ t))). apply/eqP; rewrite eq_le; apply/andP; split. rewrite /restrict; case: ifPn => [|_]. rewrite in_setE => -[n _ Fnt]; apply: ereal_sup_ubound; exists n.+1=>//. @@ -1028,7 +1029,7 @@ have lim_f_ t : f_ ^~ t @ \oo --> (f \_ D) t. transitivity (\int[mu]_x limn (f_ ^~ x)). rewrite integral_mkcond; apply: eq_integral => x _. by apply/esym/cvg_lim => //; exact: lim_f_. -rewrite monotone_convergence//; last 3 first. +rewrite monotone_convergence//. - move=> n; apply/(measurable_restrictT f) => //. by apply: bigsetU_measurable => k _; exact: mF. move: mf; apply/measurable_funS =>//; first exact: bigcup_measurable. @@ -1093,7 +1094,7 @@ apply/eqP; rewrite eq_le; apply/andP; split; last first. - by move=> ? _; rewrite lee_fin f0. - exact: subset_itvl. rewrite itv0y_bigcup0S. -rewrite seqDU_bigcup_eq ge0_integral_bigcup//; last 3 first. +rewrite seqDU_bigcup_eq ge0_integral_bigcup//. - by move=> ?; apply: measurableD => //; exact: bigsetU_measurable. - exact/measurable_funTS/measurable_EFinP. - by move=> x; rewrite lee_fin f0. @@ -1101,19 +1102,19 @@ apply: lime_le => /=. apply: is_cvg_nneseries => n _ _. by apply: integral_ge0 => k _; exact: f0. apply: nearW => n. -rewrite -ge0_integral_bigsetU//=; first last. -- by move=> ? _; rewrite lee_fin ?expR_ge0. -- exact/measurable_EFinP/measurableT_comp. -- exact: (sub_trivIset (@subsetT _ _)). -- exact: iota_uniq. +rewrite -ge0_integral_bigsetU//=. - by move=> k; apply: measurableD => //; exact: bigsetU_measurable. +- exact: iota_uniq. +- exact: (sub_trivIset (@subsetT _ _)). +- exact/measurable_EFinP/measurableT_comp. +- by move=> ? _; rewrite lee_fin ?expR_ge0. rewrite big_mkord -bigsetU_seqDU. move: n => [|n]. rewrite big_ord0 integral_set0. apply: le_ereal_sup_tmp. exists (\int[mu]_(x in `[0%R, 1%:R]) (f x)%:E) => //. by apply: integral_ge0 => /= ? _; rewrite lee_fin f0. -rewrite [X in \int[_]_(_ in X) _](_ : _ = `[0%R, n.+1%:R]%classic); last first. +rewrite [X in \int[_]_(_ in X) _](_ : _ = `[0%R, n.+1%:R]%classic). rewrite eqEsubset; split => x/=; rewrite in_itv/=. rewrite -(bigcup_mkord _ (fun k => `[0%R, k.+1%:R]%classic)). move=> [k /= kSn]. @@ -1149,9 +1150,9 @@ Lemma le_abse_integral d (T : measurableType d) (R : realType) (`| \int[mu]_(x in D) (f x) | <= \int[mu]_(x in D) `|f x|)%E. Proof. move=> mf. -rewrite integralE (le_trans (lee_abs_sub _ _))// gee0_abs; last first. +rewrite integralE (le_trans (lee_abs_sub _ _))// gee0_abs. exact: integral_ge0. -rewrite gee0_abs; last exact: integral_ge0. +rewrite gee0_abs; first exact: integral_ge0. by rewrite -ge0_integralD // -?fune_abse//; [exact: measurable_funepos | exact: measurable_funeneg]. Qed. @@ -1164,7 +1165,7 @@ Proof. move=> mD mf; split => [|] foo; last first. exact: (le_lt_trans (le_abse_integral mu mD mf) foo). under eq_integral do rewrite -/((abse \o f) _) fune_abse. -rewrite ge0_integralD//;[|exact/measurable_funepos|exact/measurable_funeneg]. +rewrite ge0_integralD//;[exact/measurable_funepos|exact/measurable_funeneg|]. move: foo; rewrite integralE/= -fin_num_abs fin_numB => /andP[fpoo fnoo]. by rewrite lte_add_pinfty// ltey_eq ?fpoo ?fnoo. Qed. @@ -1194,7 +1195,7 @@ Proof. move=> [N [mN N0 subN]] mf B mB mD. apply: (measurability _ (ErealGenOInfty.measurableE R)) => // _ [_ [x ->] <-]. rewrite [X in measurable X](_ : _ = D `&` ~` N `&` (f @^-1` `]x%:E, +oo[) - `|` (D `&` N `&` g @^-1` `]x%:E, +oo[)); last first. + `|` (D `&` N `&` g @^-1` `]x%:E, +oo[)). apply/seteqP; split=> [y /= [Dy gyxoo]|y /= [[[Dy Ny] fyxoo]|]]. - have [->|fgy] := eqVneq (f y) (g y). have [yN|yN] := boolP (y \in N). @@ -1220,7 +1221,7 @@ Lemma counting_dirac (A : set nat) : counting A = \sum_(n \bar R. Proof. have -> : \sum_(n \bar R. - rewrite nneseries_esum// (_ : [set _ | _] = setT); last exact/seteqP. + rewrite nneseries_esum// (_ : [set _ | _] = setT); first exact/seteqP. rewrite [in LHS](esumID A)// !setTI [X in _ + X](_ : _ = 0) ?adde0//. by apply: esum1 => i Ai; rewrite /= /dirac indicE memNset. rewrite /counting/=; case: ifPn => /asboolP finA. @@ -1262,7 +1263,7 @@ have le_f_M t : D t -> `|f t| <= M%:E * (f' t)%:E. by rewrite notin_setE=> /not_andP[//|/negP/negPn/eqP ->]; rewrite abse0 mule0. have : 0 <= \int[mu]_(x in D) `|f x| <= `|M|%:E * mu Df_neq0. rewrite integral_ge0//= /Df_neq0 -{2}(setIid D) setIAC -integral_indic//. - rewrite -/Df_neq0 -ge0_integralZl//; last exact: measurableT_comp. + rewrite -/Df_neq0 -ge0_integralZl//; first exact: measurableT_comp. apply: ge0_le_integral => //. - exact: measurableT_comp. - by apply: emeasurable_funM => //; exact: measurableT_comp. @@ -1285,14 +1286,14 @@ move=> mf; split=> [iDf0|Df0]. move=> a0; apply/eqP; rewrite -measure_le0. by have := le_integral_abse mu mD mf a0; rewrite iDf0 pmule_rle0 ?lte_fin. rewrite [X in mu X](_ : _ = - \bigcup_n (D `&` [set x | `|f x| >= n.+1%:R^-1%:E])); last first. + \bigcup_n (D `&` [set x | `|f x| >= n.+1%:R^-1%:E])). rewrite predeqE => t; split=> [[Dt ft0]|[n _ /= [Dt nft]]]. have [ftoo|ftoo] := eqVneq `|f t| +oo. by exists 0%N => //; split => //=; rewrite ftoo /= leey. pose m := truncn (fine `|f t|)^-1. have ftfin : `|f t|%E \is a fin_num by rewrite ge0_fin_numE// ltey. exists m => //; split => //=. - rewrite -(@fineK _ `|f t|) // lee_fin invf_ple; last 2 first. + rewrite -(@fineK _ `|f t|) // lee_fin invf_ple. exact: ltr0n. by apply/fine_gt0; rewrite lt0e abse_ge0 abse_eq0 ft0 ltey. by rewrite (le_trans (ltW (truncnS_gt _))). @@ -1315,7 +1316,7 @@ have -> : (fun x => `|f x|) = (fun x => limn (f_^~ x)). rewrite (@ger0_norm _ n%:R)// nat1r -mulrBl -natrB// subSnn ger0_norm//. by rewrite div1r; near: n; exact: near_infty_natSinv_lt. have fxn : `|f x| <= n%:R%:E. - rewrite -(@fineK _ `|f x|); last by rewrite ge0_fin_numE// ltey. + rewrite -(@fineK _ `|f x|); first by rewrite ge0_fin_numE// ltey. rewrite lee_fin; near: n; exists (Num.bound (fine `|f x|)) => //= n/=. by rewrite -(ler_nat R); apply: le_trans; exact/ltW/archi_boundP. by rewrite min_l// subrr normr0. @@ -1350,7 +1351,7 @@ Lemma integral_abs_eq0 (N : set T) (f : T -> \bar R) : mu N = 0 -> \int[mu]_(x in N) `|f x| = 0. Proof. move=> mN mf muN0; rewrite integralEpatch//. -rewrite (eq_integral (abse \o (f \_ N))); last first. +rewrite (eq_integral (abse \o (f \_ N))). by move=> t _; rewrite restrict_abse. apply/ae_eq_integral_abs => //. by apply/measurable_restrict => //; rewrite setIidr. @@ -1364,14 +1365,14 @@ Lemma ge0_negligible_integral (D N : set T) (f : T -> \bar R) : mu N = 0 -> \int[mu]_(x in D) f x = \int[mu]_(x in D `\` N) f x. Proof. move=> mN mD mf f0 muN0. -rewrite {1}(funID N f) ge0_integralD//; last 4 first. +rewrite {1}(funID N f) ge0_integralD//. - by move=> x Dx; rewrite patchE; case: ifPn => // _; exact: f0. - apply/measurable_restrict => //; first exact/measurableC. exact: measurable_funS mf. - by move=> x Dx; rewrite patchE; case: ifPn => // _; exact: f0. - by apply/measurable_restrict => //; exact: measurable_funS mf. rewrite -integral_mkcondr [X in _ + X = _](_ : _ = 0) ?adde0//. -rewrite -integral_mkcondr (eq_integral (abse \o f)); last first. +rewrite -integral_mkcondr (eq_integral (abse \o f)). move=> x; rewrite in_setI => /andP[xD xN]. by rewrite /= gee0_abs// f0//; rewrite inE in xD. rewrite integral_abs_eq0//. @@ -1387,10 +1388,10 @@ Lemma ge0_ae_eq_integral (D : set T) (f g : T -> \bar R) : Proof. move=> mD mf mg f0 g0 [N [mN N0 subN]]. rewrite integralEpatch// [RHS]integralEpatch//. -rewrite (ge0_negligible_integral mN)//; last 2 first. +rewrite (ge0_negligible_integral mN)//. - by apply/measurable_restrict => //; rewrite setIidr. - by move=> x Dx; rewrite /= patchE (mem_set Dx) f0. -rewrite [RHS](ge0_negligible_integral mN)//; last 2 first. +rewrite [RHS](ge0_negligible_integral mN)//. - by apply/measurable_restrict => //; rewrite setIidr. - by move=> x Dx; rewrite /= patchE (mem_set Dx) g0. apply: eq_integral => x;rewrite in_setD => /andP[_ xN]. @@ -1501,7 +1502,7 @@ Lemma integral_Sset1 (f : R -> \bar R) A (r : R) : A `<=` [set r] -> (\int[mu]_(x in A) f x = 0)%E. Proof. move=> Ar; have [->|->] := subset_set1 Ar; first by rewrite integral_set0. -rewrite (eq_integral (cst (f r)))/=; last by move=> x; rewrite inE/= => ->. +rewrite (eq_integral (cst (f r)))/=; first by move=> x; rewrite inE/= => ->. by rewrite integral_cst//= lebesgue_measure_set1 mule0. Qed. @@ -1514,7 +1515,7 @@ Lemma ge0_integral_closed_ball c (r : R) (r0 : (0 < r)%R) (f : R -> \bar R) : \int[mu]_(x in closed_ball c r) f x = \int[mu]_(x in ball c r) f x. Proof. move=> mf f0. -rewrite closed_ball_ball//= ge0_integral_setU//=; last 4 first. +rewrite closed_ball_ball//= ge0_integral_setU//=. by apply: measurableU => //; exact: measurable_ball. by move: mf; rewrite closed_ball_ball. by move=> x xcr; rewrite f0// closed_ball_ball// inE. @@ -1522,12 +1523,12 @@ rewrite closed_ball_ball//= ge0_integral_setU//=; last 4 first. by move/addrI; apply/eqP; rewrite eqNr gt_eqF. by move=> /[swap] ->; rewrite opprD addNKr normrN gtr0_norm// ltxx. rewrite ge0_integral_setU//=. -- by rewrite !integral_set1//= add0e adde0. - exact: measurable_ball. - apply: measurable_funS mf; first exact: measurable_closed_ball. by move=> x; rewrite closed_ball_ball//; left. - by move=> x H; rewrite f0// closed_ball_ball// inE/=; left. - by apply/disj_setPRL => x /[swap] ->; rewrite /ball/= subKr gtr0_norm// ltxx. +- by rewrite !integral_set1//= add0e adde0. Qed. Lemma integral_setD1 (f : R -> \bar R) r (D : set R) : @@ -1536,9 +1537,9 @@ Lemma integral_setD1 (f : R -> \bar R) r (D : set R) : Proof. move=> mD mfl; have [Dr|NDr] := pselect (D r); last by rewrite not_setD1. rewrite -[in RHS](@setD1K _ r D)// integral_setU//=. -- by rewrite integral_set1// add0e. - by apply/measurable_funU => //; split => //; exact: measurable_fun_set1. - by rewrite disj_set2E setDIK. +- by rewrite integral_set1// add0e. Qed. Lemma integral_itv_bndo_bndc (a : itv_bound R) (r : R) (f : R -> \bar R) : @@ -1566,11 +1567,11 @@ Lemma integral_itv_bndoo (x y : R) (f : R -> \bar R) (b0 b1 : bool) : \int[mu]_(z in [set` Interval (BSide b0 x) (BSide b1 y)]) f z = \int[mu]_(z in `]x, y[) f z. Proof. -have [xy|yx _|-> _] := ltgtP x y; last 2 first. +have [xy|yx _|-> _] := ltgtP x y; first last. +- by move: b0 b1 => [|] [|]; rewrite !set_itvE ?integral_set0 ?integral_set1. - rewrite !set_itv_ge ?integral_set0//=. - + by rewrite bnd_simp le_gtF// ltW. + by move: b0 b1 => [|] [|]; rewrite bnd_simp ?lt_geF// le_gtF// ltW. -- by move: b0 b1 => [|] [|]; rewrite !set_itvE ?integral_set0 ?integral_set1. + + by rewrite bnd_simp le_gtF// ltW. move=> mf. transitivity (\int[mu]_(z in [set` Interval (BSide b0 x) (BLeft y)]) f z). case: b1 => //; rewrite -integral_itv_bndo_bndc//. @@ -1585,8 +1586,8 @@ Lemma eq_integral_itv_bounded (x y : R) (g f : R -> R) (b0 b1 : bool) : \int[mu]_(z in [set` Interval (BSide b0 x) (BSide b1 y)]) (g z)%:E. Proof. move=> mf mg fg. -rewrite integral_itv_bndoo//; last exact/measurable_EFinP. -rewrite (@integral_itv_bndoo _ _ (EFin \o g))//; last exact/measurable_EFinP. +rewrite integral_itv_bndoo//; first exact/measurable_EFinP. +rewrite (@integral_itv_bndoo _ _ (EFin \o g))//; first exact/measurable_EFinP. by apply: eq_integral => z; rewrite inE/= => zxy; congr EFin; exact: fg. Qed. @@ -1618,7 +1619,7 @@ apply: cvg_toP. apply: ereal_nondecreasing_is_cvgn. exact: ge0_nondecreasing_set_nondecreasing_integral. under eq_fun do rewrite integral_mkcond/=. -rewrite -monotone_convergence//=; last 3 first. +rewrite -monotone_convergence//=. - by move=> n; apply/(measurable_restrictT f). - by move=> n x _; apply: erestrict_ge0 => {}x; exact: f0. - move=> x _; apply/nondecreasing_seqP => n; apply: restrict_lee => //. @@ -1676,7 +1677,7 @@ Qed. Lemma le0_nondecreasing_set_cvg_integral : \int[mu]_(x in F i) f x @[i --> \oo] --> \int[mu]_(x in \bigcup_i F i) f x. Proof. -apply/cvgeNP; rewrite -integralN/=; last first. +apply/cvgeNP; rewrite -integralN/=. apply: fin_num_adde_defr; rewrite integral0_eq// => x [n _ Fnx]. by rewrite (le0_funeposE (@f0 n))// inE. under eq_cvg do rewrite intNS. diff --git a/theories/lebesgue_integral_theory/lebesgue_integral_under.v b/theories/lebesgue_integral_theory/lebesgue_integral_under.v index 7e4cd77b8e..036ecc5327 100644 --- a/theories/lebesgue_integral_theory/lebesgue_integral_under.v +++ b/theories/lebesgue_integral_theory/lebesgue_integral_under.v @@ -23,7 +23,7 @@ From mathcomp Require Import lebesgue_integral_dominated_convergence. Reserved Notation "'d1 f" (at level 10, f at next level, format "''d1' f"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -75,7 +75,7 @@ have mUU n : measurable (\big[setU/set0]_(k < n) U k). set UU := \bigcup_n U n. have mUUoo : measurable UU by exact: bigcup_measurable. have {U0}UU0 : mu UU = 0. - rewrite /UU seqDU_bigcup_eq measure_bigcup//; last first. + rewrite /UU seqDU_bigcup_eq measure_bigcup//. by move=> ? _; apply: measurableD => //; exact: bigsetU_measurable. apply: eseries0 => n _ _; apply/eqP; rewrite -measure_le0. rewrite -[leRHS](U0 n) le_measure ?inE//; first exact: measurableD. @@ -97,9 +97,9 @@ have : {near \oo, (fun n => \int[mu]_(x in B `\` ZUU) f (w n) x) =1 move/near_eq_cvg/cvg_trans; apply. rewrite -(cvg_shiftn N). apply: fine_cvg. -rewrite /Rintegral (negligible_integral mZUU)//; last exact: int_f. -rewrite fineK; last first. - rewrite fin_num_abs -(negligible_integral mZUU)//; last exact: int_f. +rewrite /Rintegral (negligible_integral mZUU)//; first exact: int_f. +rewrite fineK. + rewrite fin_num_abs -(negligible_integral mZUU)//; first exact: int_f. by have /integrableP[? ?] := int_f Ia; exact/abse_integralP. apply: (@dominated_cvg _ _ _ mu _ _ (fun n x => (f (w (n + N)) x)%:E) _ (EFin \o g)) => //=. @@ -185,7 +185,7 @@ suff: forall x_, (forall n : nat, x_ n != a) -> near=> M. have /suf : (n <= M - N)%N. by rewrite leq_subRL; near: M; exact: nbhs_infty_ge. - rewrite /x subnKC; last by near: M; exact: nbhs_infty_ge. + rewrite /x subnKC; first by near: M; exact: nbhs_infty_ge. by rewrite (addrC a) addrK. move=> {t t_neq0 t_cvg0} x_ x_neqa x_cvga Ix_. pose g_ n y : R := (f (x_ n) y - f a y) / (x_ n - a). @@ -256,15 +256,15 @@ have [intd1f g_d1f_0 _] := @dominated_convergence _ _ _ mu _ mB Bg_G. rewrite /= in g_d1f_0. rewrite [X in X @ _ --> _](_ : _ = - (fun h => \int[mu]_(z in B) g_ h z)); last first. - apply/funext => m; rewrite /F -RintegralB; [|by []|exact: intf..]. - rewrite -[LHS]RintegralZl; [|by []|]. - - by apply: eq_Rintegral => y _; rewrite mulrC. + (fun h => \int[mu]_(z in B) g_ h z)). + apply/funext => m; rewrite /F -RintegralB; [by []|exact: intf..|]. + rewrite -[LHS]RintegralZl; [by []| |]. - rewrite /comp; under eq_fun do rewrite EFinB. by apply: integrableB => //; exact: intf. + - by apply: eq_Rintegral => y _; rewrite mulrC. apply/subr_cvg0. rewrite [X in X @ _ --> _](_ : _ = - (fun x => \int[mu]_(z in B) (g_ x z - ('d1 f) a z)))%R; last first. + (fun x => \int[mu]_(z in B) (g_ x z - ('d1 f) a z)))%R. by apply/funext => n; rewrite RintegralB. apply: norm_cvg0. have {}g_d1f_0 : (\int[mu]_(y in B) `|g_ n y - ('d1 f) a y|) @[n --> \oo] --> 0. diff --git a/theories/lebesgue_integral_theory/measurable_fun_approximation.v b/theories/lebesgue_integral_theory/measurable_fun_approximation.v index a1754685ac..42db481528 100644 --- a/theories/lebesgue_integral_theory/measurable_fun_approximation.v +++ b/theories/lebesgue_integral_theory/measurable_fun_approximation.v @@ -31,7 +31,7 @@ From mathcomp Require Import measurable_realfun simple_functions. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -52,7 +52,7 @@ Local Notation I := dyadic_itv. Lemma dyadic_itv_subU n k : [set` I n k] `<=` [set` I n.+1 k.*2] `|` [set` I n.+1 k.*2.+1]. Proof. -move=> r Hr; apply/orP; rewrite -itv_splitU ?bnd_simp/=; last first. +move=> r Hr; apply/orP; rewrite -itv_splitU ?bnd_simp/=. by rewrite !ler_pM2r// !ler_nat leqW//=. move: Hr; apply/subitvP; rewrite {r}!subitvE !bnd_simp exprSr -muln2. rewrite ler_pdivrMr// mulrA divfK// -natrM lexx/=. @@ -189,10 +189,10 @@ apply/negP => /andP[/allP An0]; rewrite mulf_eq0 => /orP[|]. rewrite pnatr_eq0 eqb0 notin_setE /B => /not_andP[] // /negP. rewrite -ltNge => fxn. have K : (truncn (fine (f x) * 2 ^+ n) < n * 2 ^ n)%N. - rewrite truncn_lt_nat; last by rewrite mulr_ge0// ltW. + rewrite truncn_lt_nat; first by rewrite mulr_ge0// ltW. by rewrite natrM natrX ltr_pM2r// -lte_fin (fineK fxfin). have /[!mem_index_enum]/(_ isT) := An0 (Ordinal K). -rewrite implyTb indicE mem_set ?mulr1; last first. +rewrite implyTb indicE mem_set ?mulr1. rewrite /A K /= inE; split=> //=; exists (fine (f x)); last by rewrite fineK. by rewrite in_itv/= ler_pdivrMr// ltr_pdivlMr// truncn_itv// mulr_ge0// ltW. apply/negP; rewrite mulf_eq0 -exprVn negb_or expf_neq0//= andbT. @@ -208,11 +208,11 @@ Let f_ub_approx n x : (f x < n%:R%:E)%E -> Proof. move=> fxn; rewrite /approx fgtn_B0 // mulr0 addr0. set lhs := (X in X == 0); have [|] := eqVneq lhs 0; first by left. -rewrite {}/lhs psumr_eq0; last by move=> i _; rewrite mulr_ge0. +rewrite {}/lhs psumr_eq0; first by move=> i _; rewrite mulr_ge0. move=> /allPn[/= k _]. rewrite mulf_eq0 negb_or mulf_eq0 negb_or -andbA => /and3P[k_neq0 _]. rewrite pnatr_eq0 eqb0 negbK => xAnk; right. -rewrite (bigD1 k) //= indicE xAnk mulr1 big1 ?addr0; last first. +rewrite (bigD1 k) //= indicE xAnk mulr1 big1 ?addr0. by move=> i ik; rewrite (disj_A0 k)// mulr0. exists k; split => //; first by rewrite lt0n -(@pnatr_eq0 R) k_neq0/=. by move: xAnk; rewrite inE /A ltn_ord /= inE /= => -[/[swap] Dx]. @@ -220,7 +220,7 @@ Qed. Let notinD_approx0 x n : ~ D x -> approx n x = 0 :> R. Proof. -move=> Dx; rewrite /approx big1; last first. +move=> Dx; rewrite /approx big1. by move=> i _; rewrite indicE memNset ?mulr0// /A; case: ifPn => [? []|_]. by rewrite indicE memNset// ?mulr0 ?addr0// => -[]. Qed. @@ -230,7 +230,7 @@ Proof. apply/nondecreasing_seqP => n; apply/lefP => x. have [Dx|Dx] := pselect (D x); last by rewrite ?notinD_approx0. have [fxn|fxn] := ltP (f x) n%:R%:E. - rewrite {2}/approx fgtn_B0 ?mulr0 ?addr0; last first. + rewrite {2}/approx fgtn_B0 ?mulr0 ?addr0. by rewrite (lt_trans fxn) // lte_fin ltr_nat. have [/eqP ->|[k [/andP[k0 kn] xAnk -> _]]] := f_ub_approx fxn. by apply: sumr_ge0 => i _; rewrite mulr_ge0. @@ -242,7 +242,7 @@ have [fxn|fxn] := ltP (f x) n%:R%:E. rewrite (bigD1 (Ordinal k2n)) //= indicE. have xAn1k : x \in A n.+1 k.*2. by rewrite inE /A k2n; split => //=; rewrite inE; exists r. - rewrite xAn1k mulr1 big1 ?addr0; last first. + rewrite xAn1k mulr1 big1 ?addr0. by move=> i ik2n; rewrite (disj_A0 (Ordinal k2n)) ?mulr0. by rewrite exprS invfM mulrA -muln2 natrM mulfK. - have k2n : (k.*2.+1 < n.+1 * 2 ^ n.+1)%N. @@ -251,7 +251,7 @@ have [fxn|fxn] := ltP (f x) n%:R%:E. rewrite (bigD1 (Ordinal k2n)) //= indicE. have xAn1k : x \in A n.+1 k.*2.+1. by rewrite /A /= k2n inE; split => //=; rewrite inE/=; exists r. - rewrite xAn1k mulr1 big1 ?addr0; last first. + rewrite xAn1k mulr1 big1 ?addr0. by move=> i ik2n; rewrite (disj_A0 (Ordinal k2n)) // mulr0. by rewrite ler_pdivlMr// exprSr mulrA divfK// -natrM muln2 ler_nat. have /orP[{}fxn|{}fxn] : @@ -259,19 +259,19 @@ have /orP[{}fxn|{}fxn] : - by move: fxn; case: leP => /= [_ _|_ ->//]; rewrite orbT. - have [k [k1 k2]] := dyadic_itv_image fxn. have xBn : x \in B n by rewrite /B /= inE /=; case/andP : fxn => ->. - rewrite /approx indicE xBn mulr1 big1 ?add0r; last first. + rewrite /approx indicE xBn mulr1 big1 ?add0r. by move=> /= i _; rewrite fgen_A0 ?mulr0//; case/andP : fxn. - rewrite fgtn_B0 ?mulr0 ?addr0; last by case/andP : fxn. + rewrite fgtn_B0 ?mulr0 ?addr0; first by case/andP : fxn. have kn2 : (k < n.+1 * 2 ^ n.+1)%N by case/andP : k1 => _; rewrite mulnC. rewrite (bigD1 (Ordinal kn2)) //=. have xAn1k : x \in A n.+1 k by rewrite inE /A kn2. - rewrite indicE xAn1k mulr1 big1 ?addr0; last first. + rewrite indicE xAn1k mulr1 big1 ?addr0. by move=> i /= ikn2; rewrite (disj_A0 (Ordinal kn2)) // mulr0. by rewrite -natrX ler_pdivlMr// mulrC -natrM ler_nat; case/andP : k1. - have xBn : x \in B n by rewrite /B inE /= (le_trans _ fxn) // lee_fin ler_nat. rewrite /approx indicE xBn mulr1. have xBn1 : x \in B n.+1 by rewrite /B /= inE. - rewrite indicE xBn1 mulr1 big1 ?add0r. + rewrite indicE xBn1 mulr1 big1 ?add0r; last first. by rewrite big1 ?add0r ?ler_nat// => /= i _; rewrite fgen_A0// mulr0. by move=> /= i _; rewrite fgen_A0 ?mulr0// (le_trans _ fxn)// lee_fin ler_nat. Qed. @@ -313,7 +313,7 @@ have cvg_af := cvg_approx fi0 Dx fixoo. have is_cvg_af : cvgn (approx ^~ x) by apply/cvg_ex; eexists; exact: cvg_af. have {is_cvg_af} := nondecreasing_cvgn_le nd_ag is_cvg_af k. rewrite -lee_fin => /le_trans; apply. -rewrite -(@fineK _ (f x)); last by rewrite ge0_fin_numE// f0. +rewrite -(@fineK _ (f x)); first by rewrite ge0_fin_numE// f0. by move/(cvg_lim (@Rhausdorff R)) : cvg_af => ->. Qed. @@ -325,8 +325,8 @@ move=> Dx fxoo; have approx_x n : approx n x = n%:R. move=> /cvg_ex[/= l /cvgrPdist_lt/(_ _ ltr01) [n _]]. move=> /(_ ((truncn l).+2 + n) (leq_addl _ _)); apply/negP. rewrite -leNgt approx_x distrC natrD addrAC ger0_norm ler_wpDr//. - by rewrite lerBrDl -natr1 lerD// ltW// truncnS_gt. -by rewrite subr_ge0 -natr1 ler_wpDr// ltW// truncnS_gt. + by rewrite subr_ge0 -natr1 ler_wpDr// ltW// truncnS_gt. +by rewrite lerBrDl -natr1 lerD// ltW// truncnS_gt. Qed. Lemma ecvg_approx (f0 : forall x, D x -> (0 <= f x)%E) x : @@ -338,7 +338,7 @@ have dvg_approx := dvg_approx Dx fxoo. by move=> m n mn; have := nd_approx mn => /lefP; exact. move/nondecreasing_dvgn_lt => /(_ dvg_approx). by rewrite fxoo => ?; apply/cvgeryP. -rewrite -(@fineK _ (f x)); first exact: (cvg_comp _ _ (cvg_approx f0 Dx fxoo)). +rewrite -(@fineK _ (f x)); last exact: (cvg_comp _ _ (cvg_approx f0 Dx fxoo)). by rewrite ge0_fin_numE// f0. Qed. @@ -404,7 +404,7 @@ pose fp_ := nnsfun_approx mD (measurable_funepos mf). pose fn_ := nnsfun_approx mD (measurable_funeneg mf). exists (fun n => fp_ n \+ cst (-1) \* fn_ n) => x /=. rewrite [X in X @ \oo --> _](_ : _ = - EFin \o fp_^~ x \+ (-%E \o EFin \o fn_^~ x))%E; last first. + EFin \o fp_^~ x \+ (-%E \o EFin \o fn_^~ x))%E. by apply/funext => n/=; rewrite EFinD mulN1r. by move=> Dx; rewrite (funeposneg f); apply: cvgeD; [exact: add_def_funeposneg|apply: cvg_nnsfun_approx|apply:cvgeN; apply: cvg_nnsfun_approx]. @@ -490,11 +490,11 @@ Lemma ge0_emeasurable_sum D (h : nat -> (T -> \bar R)) (P : pred nat) : Proof. move=> h0 mh mD; move: (mD); apply/measurable_restrictT => //. rewrite [X in measurable_fun _ X](_ : _ = - (fun x => \sum_(0 <= i \sum_(0 <= i x/=; rewrite /patch; case: ifPn => // xD. by rewrite eseries0. rewrite [X in measurable_fun _ X](_ : _ = - (fun x => limn_esup (fun n => \sum_(0 <= i < n | P i) (h i) \_ D x))); last first. + (fun x => limn_esup (fun n => \sum_(0 <= i < n | P i) (h i) \_ D x))). apply/funext=> x; rewrite is_cvg_limn_esupE//. apply: is_cvg_nneseries_cond => n _ Pn; rewrite patchE. by case: ifPn => // xD; rewrite h0//; exact/set_mem. @@ -581,7 +581,7 @@ Lemma measurable_sum D I s (h : I -> T -> R) : measurable_fun D (fun x => \sum_(i <- s) h i x). Proof. move=> mh; apply/measurable_EFinP. -rewrite (_ : _ \o _ = (fun t => \sum_(i <- s) (h i t)%:E)); last first. +rewrite (_ : _ \o _ = (fun t => \sum_(i <- s) (h i t)%:E)). by apply/funext => t/=; rewrite -sumEFin. by apply/emeasurable_sum => i; exact/measurable_EFinP. Qed. @@ -667,8 +667,8 @@ Lemma measurable_fun_eqe D f g : measurable_fun D f -> measurable_fun D g -> Proof. move=> mf mg. rewrite (_ : (fun x => f x == g x) = (fun x => (f x <= g x) && (g x <= f x))). - by apply: measurable_and; exact: measurable_fun_lee. -by under eq_fun do rewrite eq_le. + by under eq_fun do rewrite eq_le. +by apply: measurable_and; exact: measurable_fun_lee. Qed. End emeasurable_fun_comparison. @@ -682,7 +682,7 @@ apply: measurable_fun_ifT => //=. apply/measurable_EFinP => //=. apply: measurable_fun_ifT => //=. apply: (measurable_fun_bool true). - rewrite setTI (_ : _ @^-1` _ = EFin @` setT). + rewrite setTI (_ : _ @^-1` _ = EFin @` setT); last first. by apply: measurable_image_EFin; exact: measurableT. apply/seteqP; split => [x finx|x [s sx <-//]]/=. by exists (fine x) => //; rewrite fineK. @@ -740,7 +740,7 @@ exists (\bigcup_(i in range f) dK i); split. - by rewrite -bigsetU_fset_set//; apply: bigsetU_compact=>// i _; case: (dkP i). - by move=> z [y _ dy]; have [_ /(_ _ dy) []] := dkP y. - have -> : A `\` \bigcup_(i in range f) dK i = \bigcup_(i in range f) J i. - rewrite -bigcupDr /= ?eqEsubset; last by exists (f point), point. + rewrite -bigcupDr /= ?eqEsubset; first by exists (f point), point. split => z; first by move=> /(_ (f z)) [//| ? ?]; exists (f z). case => ? [? _ <-] [[zab /= <- nfz]] ? [r _ <-]; split => //. by move: nfz; apply: contra_not => /[dup] /dKsub ->. diff --git a/theories/lebesgue_integral_theory/simple_functions.v b/theories/lebesgue_integral_theory/simple_functions.v index c40790c1fb..7b1f64d0ea 100644 --- a/theories/lebesgue_integral_theory/simple_functions.v +++ b/theories/lebesgue_integral_theory/simple_functions.v @@ -59,7 +59,7 @@ Reserved Notation "{ 'sfun' aT >-> T }" Reserved Notation "[ 'sfun' 'of' f ]" (at level 0, format "[ 'sfun' 'of' f ]"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -397,9 +397,9 @@ Lemma additive_nnsfunr (g f : {nnsfun T >-> R}) x : m (f @^-1` [set x] `&` \big[setU/set0]_(i \in range g) (g @^-1` [set i])). Proof. rewrite -?measure_fsbig//. -- by rewrite !fsbig_finite//= big_distrr. - by move=> i Ai; apply: measurableI. - exact/trivIset_setIl/trivIset_preimage1. +- by rewrite !fsbig_finite//= big_distrr. Qed. Lemma additive_nnsfunl (g f : {nnsfun T >-> R}) x : diff --git a/theories/lebesgue_measure.v b/theories/lebesgue_measure.v index e7f4a782d1..d2d53dd049 100644 --- a/theories/lebesgue_measure.v +++ b/theories/lebesgue_measure.v @@ -38,7 +38,7 @@ From mathcomp Require Export lebesgue_stieltjes_measure. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -250,7 +250,7 @@ have bbi2 j : P j -> (b j).1 < (b j).2 -> (b j).2 <= (b i).2. apply/IHp. - by rewrite lt_neqAle a1bi/= a1b. - rewrite (leq_trans _ cP)// -(cardID (pred1 i) P). - rewrite [X in (_ < X + _)%N](@eq_card _ _ (pred1 i)); last first. + rewrite [X in (_ < X + _)%N](@eq_card _ _ (pred1 i)). by move=> j; rewrite !inE andbC; case: eqVneq => // ->. rewrite ?card1 ?ltnS// subset_leq_card//. by apply/fintype.subsetP => j; rewrite -topredE/= !inE andbC. @@ -305,7 +305,7 @@ have /[apply] := @content_sub_fsum _ _ _ hlength _ [set` X]. move=> /(_ _ _ _)/Box[]//=; apply: le_le_trans. rewrite hlength_itv ?lte_fin -?EFinD/= -addrA -opprD. by case: ltP => //; rewrite lee_fin subr_le0. -rewrite nneseries_esum//; last by move=> *; rewrite adde_ge0//= ?lee_fin. +rewrite nneseries_esum//; first by move=> *; rewrite adde_ge0//= ?lee_fin. rewrite esum_ge//; exists [set` X] => //; rewrite fsbig_finite// ?set_fsetK//=. rewrite fsbig_finite//= set_fsetK//. rewrite lee_sum // => i _; rewrite ?AE// !hlength_itv/= ?lte_fin -?EFinD/=. @@ -456,9 +456,9 @@ have muG : mu G = 0. rewrite (le_trans (ltW (mG_ n)))// leeD// lee_fin ltW//. by near: n; apply: near_infty_natSinv_lt. rewrite measureD//=. - + by rewrite setIidr// muEF subee// ge0_fin_numE//; move: mEoo; rewrite muEF. + exact: sub_caratheodory. + by move: mEoo; rewrite muEF. + + by rewrite setIidr// muEF subee// ge0_fin_numE//; move: mEoo; rewrite muEF. apply: sub_sigma_algebra; exists (F `\` G); first exact: measurableD. exists (E `&` G). by apply: (@negligibleS _ _ _ mu G _ (@subIsetr _ E G)); exists G; split. @@ -550,7 +550,7 @@ Lemma semi_sigma_additive_elebesgue_measure : Proof. move=> /= F mF tF mUF; rewrite /elebesgue_measure. rewrite [X in lebesgue_measure X](_ : _ = - \bigcup_n (fine @` (F n `\` [set -oo; +oo]%E))); last first. + \bigcup_n (fine @` (F n `\` [set -oo; +oo]%E))). rewrite predeqE => r; split. by move=> [x [[n _ Fnx xoo <-]]]; exists n => //; exists x. by move=> [n _ [x [Fnx xoo <-{r}]]]; exists x => //; split => //; exists n. @@ -635,11 +635,11 @@ rewrite itv_bnd_open_bigcup//; transitivity (limn (lebesgue_measure \o - by apply: bigcup_measurable => k _; exact: measurable_itv. - move=> n m nm; apply/subsetPset => x /=; rewrite !in_itv/= => /andP[->/=]. by move/le_trans; apply; rewrite lerB// lef_pV2 ?ler_nat ?posrE. -rewrite (_ : _ \o _ = (fun n => (1 - n.+1%:R^-1)%:E)); last first. +rewrite (_ : _ \o _ = (fun n => (1 - n.+1%:R^-1)%:E)). apply/funext => n /=; rewrite lebesgue_measure_itvoc. have [->|n0] := eqVneq n 0%N. by rewrite invr1 subrr set_itvoc0 wlength0. - rewrite wlength_itv/= lte_fin ifT; last first. + rewrite wlength_itv/= lte_fin ifT. by rewrite ler_ltB// invf_lt1// ltr1n ltnS lt0n. by rewrite !(EFinB,EFinN) fin_num_oppeB// addeAC addeA subee// add0e. apply/cvg_lim => //=; apply/fine_cvgP; split => /=; first exact: nearW. @@ -657,7 +657,7 @@ suff : (lebesgue_measure (`]a - 1, a]%classic%R : set R) = rewrite wlength_itv lte_fin ltrBlDr ltrDl ltr01. rewrite [in X in X == _]/= EFinN EFinB fin_num_oppeB// addeA subee// add0e. by rewrite addeC -sube_eq ?fin_num_adde_defl// subee// => /eqP. -rewrite -(setUitv1 true) ?bnd_simp; last by rewrite ltrBlDr ltrDl. +rewrite -(setUitv1 true) ?bnd_simp; first by rewrite ltrBlDr ltrDl. by rewrite measureU// -(setDitv1r _ a true) setDKI. Qed. @@ -667,11 +667,11 @@ Proof. move/countable_injP => [f injf]. rewrite -(injpinv_image (fun=> 0) injf). rewrite [X in lebesgue_measure X](_ : _ = \bigcup_(x in f @` A) - [set 'pinv_(fun=> 0) A f x]); last first. + [set 'pinv_(fun=> 0) A f x]). rewrite eqEsubset; split => [r [n]|r [n]]. by move=> [t At ftn] Afnr; exists n => //=; exists t. by move=> [t At ftn] /= rAfn; exists n => //=; exists t. -rewrite measure_bigcup/=; last 2 first. +rewrite measure_bigcup/=. by move=> ? _; exact: measurable_set1. move=> i j [r Ar <-] [s As <-]. by rewrite !pinvKV ?inE// => -[x [/= <- <-]]. @@ -687,8 +687,8 @@ Proof. have [ab|ba] := ltP a b; last by rewrite set_itv_ge ?measure0// -leNgt. have := lebesgue_measure_itvoc a b. rewrite 2!wlength_itv => <-; rewrite -(setUitv1 true)// measureU//. -- by have /= -> := lebesgue_measure_set1 b; rewrite adde0. - by apply/seteqP; split => // x [/= + xb]; rewrite in_itv/= xb ltxx andbF. +- by have /= -> := lebesgue_measure_set1 b; rewrite adde0. Qed. Let lebesgue_measure_itvcc (a b : R) : @@ -697,8 +697,8 @@ Proof. have [ab|ba] := leP a b; last by rewrite set_itv_ge ?measure0// -leNgt. have := lebesgue_measure_itvoc a b. rewrite 2!wlength_itv => <-; rewrite -(setU1itv false)// measureU//. -- by have /= -> := lebesgue_measure_set1 a; rewrite add0e. - by apply/seteqP; split => // x [/= ->]; rewrite in_itv/= ltxx. +- by have /= -> := lebesgue_measure_set1 a; rewrite add0e. Qed. Let lebesgue_measure_itvco (a b : R) : @@ -707,8 +707,8 @@ Proof. have [ab|ba] := ltP a b; last by rewrite set_itv_ge ?measure0// -leNgt. have := lebesgue_measure_itvoo a b. rewrite 2!wlength_itv => <-; rewrite -(setU1itv false)// measureU//. -- by have /= -> := lebesgue_measure_set1 a; rewrite add0e. - by apply/seteqP; split => // x [/= ->]; rewrite in_itv/= ltxx. +- by have /= -> := lebesgue_measure_set1 a; rewrite add0e. Qed. Let lebesgue_measure_itv_bnd (x y : bool) (a b : R) : @@ -760,7 +760,7 @@ Let lebesgue_measure_itv_infty_infty : lebesgue_measure ([set` Interval -oo%O +oo%O] : set R) = +oo%E. Proof. rewrite set_itvNyy -(setUv (`]-oo, 0[)) setCitv. -rewrite [X in _ `|` (X `|` _) ]set_itvE set0U measureU//; last first. +rewrite [X in _ `|` (X `|` _) ]set_itvE set0U measureU//. apply/seteqP; split => //= x [] /= /[swap]. by rewrite !in_itv/= andbT ltNge => ->//. rewrite [X in (X + _)%E]lebesgue_measure_itv_infty_bnd. @@ -823,7 +823,7 @@ Lemma lebesgue_measure_rat (R : realType) : lebesgue_measure (range ratr : set R) = 0%E. Proof. have /pcard_eqP/bijPex[f bijf] := card_rat; set f1 := 'pinv_(fun=> 0) setT f. -rewrite (_ : range _ = \bigcup_n [set ratr (f1 n)]); last first. +rewrite (_ : range _ = \bigcup_n [set ratr (f1 n)]). apply/seteqP; split => [_ [q _ <-]|_ [n _ /= ->]]; last by exists (f1 n). exists (f q) => //=; rewrite /f1 pinvKV// ?in_setE// => x y _ _. by apply: bij_inj; rewrite -setTT_bijective. @@ -931,15 +931,15 @@ have muM n : mu (M n) <= mu (M' n) + (e2 n)%:E. rewrite inf_itv// sup_itv//. have -> : (`]a, (b + e2 n)%R[ = `]a, b] `|` `]b, (b + e2 n)%R[ )%classic. apply: funext=> r /=; rewrite (@itv_splitU _ _ (BRight b)). - by rewrite propeqE; split=> /orP. - by rewrite !bnd_simp (ltW alb)/= ltr_pwDr. + by rewrite !bnd_simp (ltW alb)/= ltr_pwDr. + by rewrite propeqE; split=> /orP. rewrite measureU/=. - - rewrite !lebesgue_measure_itv/= !lte_fin alb ltr_pwDr//=. - by rewrite -(EFinD (b + e2 n)) (addrC b) addrK. - by apply: sub_sigma_algebra; exact: is_ocitv. - by apply: open_measurable; exact: interval_open. - rewrite eqEsubset; split => // r []/andP [_ +] /andP[+ _] /=. by rewrite !bnd_simp => /le_lt_trans /[apply]; rewrite ltxx. + - rewrite !lebesgue_measure_itv/= !lte_fin alb ltr_pwDr//=. + by rewrite -(EFinD (b + e2 n)) (addrC b) addrK. pose U := \bigcup_n M n. exists U; have DU : D `<=` U. case: (covDM) => _ /subset_trans; apply; apply: subset_bigcup. @@ -969,9 +969,9 @@ split => //. apply: bigcup_open => n _. by rewrite /M; case: pselect => /= _; [exact: open0|exact: interval_open]. rewrite measureD//=. -- by rewrite setIidr// lte_subel_addl// ge0_fin_numE// (lt_le_trans muU)// leey. - by apply: bigcup_measurable => k _; exact: mM. - by rewrite (lt_le_trans muU)// leey. +- by rewrite setIidr// lte_subel_addl// ge0_fin_numE// (lt_le_trans muU)// leey. Qed. Lemma lebesgue_nearly_bounded (D : set R) (eps : R) : @@ -995,11 +995,11 @@ rewrite -[mu D]fineK// => /fine_cvg/(_ (interior (ball (fine (mu D)) eps)))[]. exact/nbhs_interior/nbhsx_ballx. move=> n _ /(_ _ (leqnn n))/interior_subset muDN. exists (-n%:R, n%:R)%R; rewrite measureD//=. -move: muDN; rewrite /ball/= /ereal_ball/= -fineB//=; last exact: finDn. +move: muDN; rewrite /ball/= /ereal_ball/= -fineB//=; first exact: finDn. rewrite -lte_fin; apply: le_lt_trans. have finDDn : mu D - mu (Dn n) \is a fin_num by rewrite ?fin_numB ?finD /= ?(finDn n). -rewrite -fine_abse // gee0_abs ?sube_ge0 ?finD ?(finDn _) //. +rewrite -fine_abse // gee0_abs ?sube_ge0 ?finD ?(finDn _) //; last first. by rewrite -[_ - _]fineK // lte_fin fine. by rewrite le_measure// ?inE//; [exact: measurableI |exact: subIsetl]. Qed. @@ -1022,7 +1022,7 @@ wlog : eps epspos D mD finD / exists ab : R * R, D `<=` `[ab.1, ab.2]%classic. by apply: compact_closed => //; exact: Rhausdorff. exact: interval_closed. - by move=> ? [/VDab []]. - rewrite setDIr (setU_id2r ((D `&` `[a, b]) `\` V)); last first. + rewrite setDIr (setU_id2r ((D `&` `[a, b]) `\` V)). move=> z ; rewrite setDE setCI setCK => -[?|?]; by apply/propext; split => [[]|[[]]]. have mV : measurable V. @@ -1090,7 +1090,7 @@ rewrite (@le_trans _ _ (mu V))//; last first. apply: ereal_sup_ubound; exists V => //=; split => //. exact: (subset_trans VFND (@subIsetr _ _ _)). rewrite -(@leeD2rE _ 1)// -EFinD (le_trans M1FD)//. -rewrite /mu (@measureDI _ _ _ _ (F N `&` D) _ _ mV)/=; last exact: measurableI. +rewrite /mu (@measureDI _ _ _ _ (F N `&` D) _ _ mV)/=; first exact: measurableI. by rewrite addeC leeD//; [rewrite measureIr//; exact: measurableI|exact/ltW]. Qed. @@ -1139,7 +1139,7 @@ suff: forall r : {posnum R}, mu (Z r%:num) = 0. set F := fun n => Z n%:R. have : mu (\bigcup_n F n) <= \sum_(i n _; rewrite /F Zr. + rewrite eseries0; first by move=> n _; rewrite /F Zr. by rewrite /F -setI_bigcupr bigcup_ballT setIT measure_le0 => /eqP. move=> r. pose E := [set i | D i /\ closure (B i) `&` ball (0%R:R) r%:num !=set0]. @@ -1161,7 +1161,7 @@ have measurable_closure (C : set R) : is_ball C -> measurable (closure C). move: ABV => [is_ballB ABV]. have {}EBr2 : \esum_(i in E) mu (closure (B i)) <= mu (ball (0:R) (r%:num + 2))%R. - rewrite -(set_mem_set E) -nneseries_esum// -measure_bigcup//; last 2 first. + rewrite -(set_mem_set E) -nneseries_esum// -measure_bigcup//. by move=> *; exact: measurable_closure. by apply: sub_trivIset tDB => ? []. apply/le_measure; rewrite ?inE; [|exact: measurable_ball|exact: bigcup_sub]. @@ -1172,7 +1172,7 @@ have finite_set_F i : finite_set (F i). move/(infinite_set_fset M) => [/= C CsubFi McardC]. have MC : (M%:R * (1 / (2 ^ i.+1)%:R))%:E <= mu (\bigcup_(j in [set` C]) closure (B j)). - rewrite (measure_bigcup _ [set` C])//; last 2 first. + rewrite (measure_bigcup _ [set` C])//. by move=> ? _; exact: measurable_closure. by apply: sub_trivIset tDB; by apply: (subset_trans CsubFi) => x [[]]. rewrite /= nneseries_esum//= set_mem_set// esum_fset// fsbig_finite//=. @@ -1197,7 +1197,7 @@ have finite_set_F i : finite_set (F i). have Fir2 : mu (\bigcup_(j in F i) closure (B j)) <= mu (ball (0:R) (r%:num + 2))%R. rewrite (le_trans _ EBr2)// -(set_mem_set E) -nneseries_esum//. - rewrite E_partition -measure_bigcup//=; last 2 first. + rewrite E_partition -measure_bigcup//=. by move=> ? _; exact: measurable_closure. apply: trivIset_bigcup => //. by move=> n; apply: sub_trivIset tDB => ? [[]]. @@ -1224,7 +1224,7 @@ have FE : \sum_(n k _. exact: measurable_closure. apply: (@eq_eseriesr _ (fun n => mu (\bigcup_(i in F n) closure (B i)))). - move=> i _; rewrite bigcup_mkcond measure_semi_bigcup//; last 3 first. + move=> i _; rewrite bigcup_mkcond measure_semi_bigcup//. by move=> j; case: ifPn => // _; exact: measurable_closure. by apply/(trivIset_mkcond _ _).1; apply: sub_trivIset tDB => x [[]]. rewrite -bigcup_mkcond; apply: bigcup_measurable => k _. @@ -1238,36 +1238,36 @@ have [N F5e] : exists N, \sum_(N <= n mu (\bigcup_(i in F k) closure (B i)))) => i _. rewrite measure_bigcup//=. - - by rewrite nneseries_esum// set_mem_set. - by move=> j D'ij; exact: measurable_closure. - by apply: sub_trivIset tDB => // x [[]]. + - by rewrite nneseries_esum// set_mem_set. rewrite FE (@le_lt_trans _ _ (mu (ball (0 : R) (r%:num + 2))%R))//. rewrite (le_trans _ EBr2)// measure_bigcup//=. - + by rewrite nneseries_esum// set_mem_set. + by move=> i _; exact: measurable_closure. + by apply: sub_trivIset tDB => // x []. + + by rewrite nneseries_esum// set_mem_set. have : \sum_(N <= k \oo] --> 0. exact: nneseries_tail_cvg. rewrite /f /= => /fine_fcvg /= /cvgrPdist_lt /=. have : (0 < 5%:R^-1 * e%:num)%R by rewrite mulr_gt0// invr_gt0// ltr0n. move=> /[swap] /[apply]. rewrite near_map => -[N _]/(_ _ (leqnn N)) h; exists N; move: h. - rewrite sub0r normrN ger0_norm//; last by rewrite fine_ge0// nneseries_ge0. + rewrite sub0r normrN ger0_norm//; first by rewrite fine_ge0// nneseries_ge0. rewrite -lte_fin; apply: le_lt_trans. set X : \bar R := (X in fine X). have Xoo : X < +oo. apply: le_lt_trans foo. by rewrite (nneseries_split _ N)// leeDr//; exact: sume_ge0. - rewrite fineK ?ge0_fin_numE//; last exact: nneseries_ge0. + rewrite fineK ?ge0_fin_numE//; first exact: nneseries_ge0. apply: lee_nneseries => //; first by move=> i *; exact: esum_ge0. move=> n Nn; rewrite measure_bigcup//=. - - by rewrite nneseries_esum// set_mem_set. - by move=> i _; exact: measurable_closure. - by apply: sub_trivIset tDB => x [[]]. + - by rewrite nneseries_esum// set_mem_set. pose K := \bigcup_(i in `I_N) \bigcup_(j in F i) closure (B j). have closedK : closed K. apply: closed_bigcup => //= i iN; apply: closed_bigcup => //. @@ -1341,7 +1341,7 @@ have {}ZNF5 : mu (Z r%:num) <= apply: lee_nneseries => // n _. rewrite -[in leRHS](set_mem_set (F n)) -nneseries_esum// bigcup_mkcond. rewrite eseries_mkcond [leRHS](_ : _ = \sum_(i x. by under [RHS]eq_bigr do rewrite (fun_if mu) measure0. apply: measure_sigma_subadditive => //. @@ -1351,7 +1351,7 @@ have {}ZNF5 : mu (Z r%:num) <= by apply: measurable_closure; exact: is_scale_ball. apply/(le_trans ZNF5). move/ltW: F5e; rewrite [in X in X -> _](@lee_pdivlMl R 5%:R) ?ltr0n//. -rewrite -nneseriesZl//; last by move=> *; exact: esum_ge0. +rewrite -nneseriesZl//; first by move=> *; exact: esum_ge0. apply: le_trans; apply: lee_nneseries => //; first by move=> *; exact: esum_ge0. move=> n _. rewrite -(set_mem_set (F n)) -nneseries_esum// -nneseries_esum// -nneseriesZl//. @@ -1447,17 +1447,17 @@ have muGSfin C : C `<=` G -> mu (\bigcup_(k in C) closure (B k)) \is a fin_num. by move: OAoo => /andP[OA]; exact: lt_trans. rewrite (@le_trans _ _ (mu (\bigcup_(k in G) B k)))//; last first. by rewrite le_outer_measure//; apply: bigcup_sub => i /GV'[]. - rewrite bigcup_mkcond [in leRHS]bigcup_mkcond measure_bigcup//=; last 2 first. + rewrite bigcup_mkcond [in leRHS]bigcup_mkcond measure_bigcup//=. by move=> i _; case: ifPn => // iG; exact: vitali_cover_mclosure ABF. by apply/(trivIset_mkcond _ _).1; apply: sub_trivIset tB. - rewrite measure_bigcup//=; last 2 first. + rewrite measure_bigcup//=. by move=> i _; case: ifPn => // _; exact: vitali_cover_measurable ABF. apply/(trivIset_mkcond _ _).1/trivIsetP => /= i j Gi Gj ij. move/trivIsetP : tB => /(_ _ _ Gi Gj ij). by apply: subsetI_eq0; exact: subset_closure. apply: lee_nneseries => // n _. case: ifPn => [/set_mem nC|]; last by rewrite measure0. - rewrite (vitali_cover_ballE _ ABF) ifT; last exact/mem_set/CG. + rewrite (vitali_cover_ballE _ ABF) ifT; first exact/mem_set/CG. by rewrite closure_ballE lebesgue_measure_closed_ball// lebesgue_measure_ball. have muGfin : mu (\bigcup_(k in G) closure (B k)) \is a fin_num. by rewrite -(bigB0 G) muGSfin. @@ -1479,7 +1479,7 @@ have [c Hc] : exists c : {posnum R}, by exists (widen_ord (@leqnSn _) (Ordinal kn)). exists c. suff: mu (\bigcup_(k in G `\` bigB G c%:num) closure (B k)) < e%:E. - rewrite EFinN lteBlDl// -lteBlDr//; last exact: muGSfin. + rewrite EFinN lteBlDl// -lteBlDr//; first exact: muGSfin. apply: le_lt_trans. pose setDbigB := (\bigcup_(k in G) closure (B k)) `\` (\bigcup_(k in bigB G c%:num) closure (B k)). @@ -1492,7 +1492,7 @@ have [c Hc] : exists c : {posnum R}, by apply: measurableD; apply: bigcup_measurable => k _; exact: vitali_cover_mclosure ABF. by apply: bigcup_measurable => k _; exact: vitali_cover_mclosure ABF. - rewrite measureD//=; last 3 first. + rewrite measureD//=. by apply: bigcup_measurable => k _; exact: vitali_cover_mclosure ABF. by apply: bigcup_measurable => k _; exact: vitali_cover_mclosure ABF. by rewrite -ge0_fin_numE. @@ -1503,14 +1503,14 @@ have [c Hc] : exists c : {posnum R}, apply: (@le_lt_trans _ _ (normr (0 - fine (\sum_(n <= k /=. - rewrite sub0r normrN ger0_norm/=; last by rewrite fine_ge0// nneseries_ge0. - rewrite fineK//; last first. - move: muGfin; rewrite measure_bigcup//=; last first. + rewrite sub0r normrN ger0_norm/=; first by rewrite fine_ge0// nneseries_ge0. + rewrite fineK//. + move: muGfin; rewrite measure_bigcup//=. by move=> i _; exact: vitali_cover_mclosure ABF. - do 2 (rewrite ge0_fin_numE//; last exact: nneseries_ge0). + do 2 (rewrite ge0_fin_numE//; first exact: nneseries_ge0). apply: le_lt_trans. by rewrite [leRHS](nneseries_split_cond 0%N n)// add0n leeDr// sume_ge0. - rewrite measure_bigcup//=; last 2 first. + rewrite measure_bigcup//=. by move=> i _; exact: vitali_cover_mclosure ABF. by apply: sub_trivIset tB; exact: subDsetl. rewrite [in leRHS]eseries_cond. @@ -1521,30 +1521,30 @@ have [c Hc] : exists c : {posnum R}, by move/set_mem: iGG' => [Gi] /not_andP[//|/negP]; rewrite -ltNge. have {}Hc : mu (\bigcup_(k in G) closure (B k) `\` \bigcup_(k in bigB G c%:num) closure (B k)) < e%:E. - rewrite measureD//=; first last. - - by rewrite -ge0_fin_numE. + rewrite measureD//=. - by apply: bigcup_measurable => k _; exact: vitali_cover_mclosure ABF. - by apply: bigcup_measurable => k _; exact: vitali_cover_mclosure ABF. - rewrite setIidr; last exact: bigcup_subset. + - by rewrite -ge0_fin_numE. + rewrite setIidr; first exact: bigcup_subset. by rewrite lteBlDr-?lteBlDl//; exact: muGSfin. have bigBG_fin (r : {posnum R}) : finite_set (bigB G r%:num). pose M := (truncn (fine (mu O) / r%:num)).+1. apply: contrapT => /infinite_set_fset /= /(_ M)[G0 G0G'r MG0]. have : mu O < mu (\bigcup_(k in bigB G r%:num) closure (B k)). apply: (@lt_le_trans _ _ (mu (\bigcup_(k in [set` G0]) closure (B k)))). - rewrite bigcup_fset measure_fbigsetU//=; last 2 first. + rewrite bigcup_fset measure_fbigsetU//=. by move=> k _; exact: vitali_cover_mclosure ABF. by apply: sub_trivIset tB => x /G0G'r[]. apply: (@lt_le_trans _ _ (\sum_(i <- G0) r%:num%:E)%R). rewrite sumEFin big_const_seq iter_addr addr0 -mulr_natr. apply: (@lt_le_trans _ _ (r%:num * M%:R)%:E); last first. by rewrite lee_fin ler_wpM2l// ler_nat count_predT. - rewrite EFinM -lte_pdivrMl// muleC -(@fineK _ (mu O)); last first. + rewrite EFinM -lte_pdivrMl// muleC -(@fineK _ (mu O)). by rewrite ge0_fin_numE//; case/andP: OAoo => ?; exact: lt_trans. by rewrite -EFinM /M lte_fin truncnS_gt. rewrite big_seq [in leRHS]big_seq. apply: lee_sum => //= i /G0G'r [iG rBi]. - rewrite -[leRHS]fineK//; last first. + rewrite -[leRHS]fineK//. rewrite (vitali_cover_ballE _ ABF). by rewrite closure_ballE lebesgue_measure_closed_ball. rewrite (vitali_cover_ballE _ ABF) closure_ballE. @@ -1554,10 +1554,10 @@ have bigBG_fin (r : {posnum R}) : finite_set (bigB G r%:num). - by apply: bigcup_measurable => k _; exact: vitali_cover_mclosure ABF. apply/negP; rewrite -leNgt. apply: (@le_trans _ _ (mu (\bigcup_(k in bigB G r%:num) B k))). - rewrite measure_bigcup//; last 2 first. + rewrite measure_bigcup//. by move=> k _; exact: vitali_cover_mclosure ABF. exact: sub_trivIset tB. - rewrite /= measure_bigcup//; last 2 first. + rewrite /= measure_bigcup//. by move=> k _; exact: vitali_cover_measurable ABF. apply/trivIsetP => /= i j [Gi ri] [Gj rj] ij. move/trivIsetP : tB => /(_ _ _ Gi Gj ij). diff --git a/theories/lebesgue_stieltjes_measure.v b/theories/lebesgue_stieltjes_measure.v index 65a6bd5478..897791da8c 100644 --- a/theories/lebesgue_stieltjes_measure.v +++ b/theories/lebesgue_stieltjes_measure.v @@ -44,7 +44,7 @@ From mathcomp Require Import realfun. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -88,7 +88,7 @@ exists (PosNum [gt0 of (d%:num / 2)]) => //=. move: h => /(_ (a + d%:num / 2)) /=. rewrite opprD addNKr normrN ger0_norm// ltr_pdivrMr// ltr_pMr// 2!ltrDl. rewrite ltr01 divr_gt0// => /(_ erefl erefl). -rewrite ler0_norm; last first. +rewrite ler0_norm. by rewrite subr_le0 (cumulative_is_nondecreasing f)// lerDl. by rewrite opprB ltrBlDl; exact: ltW. Qed. @@ -228,9 +228,9 @@ Lemma finite_wlength_itv i : neitv i -> wlength [set` i] < +oo -> wlength [set` i] = (fine (g i.2))%:E - (fine (g i.1))%:E. Proof. move=> i0 ioo; have [i1f i2f] := wlength_finite_fin_num i0 ioo. -rewrite fineK; last first. +rewrite fineK. by rewrite /g; move: i2f; case: (ereal_of_itv_bound i.2). -rewrite fineK; last first. +rewrite fineK. by rewrite /g; move: i1f; case: (ereal_of_itv_bound i.1). rewrite wlength_itv; case: ifPn => //; rewrite -leNgt le_eqVlt => /predU1P[->|]. by rewrite subee// /g; move: i1f; case: (ereal_of_itv_bound i.1). @@ -357,7 +357,7 @@ have bbi2 j : P j -> (b j).1 < (b j).2 -> (b j).2 <= (b i).2. apply/IHp. - by rewrite lt_neqAle a1bi/= a1b. - rewrite (leq_trans _ cP)// -(cardID (pred1 i) P). - rewrite [X in (_ < X + _)%N](@eq_card _ _ (pred1 i)); last first. + rewrite [X in (_ < X + _)%N](@eq_card _ _ (pred1 i)). by move=> j; rewrite !inE andbC; case: eqVneq => // ->. rewrite ?card1 ?ltnS// subset_leq_card//. by apply/fintype.subsetP => j; rewrite -topredE/= !inE andbC. @@ -419,7 +419,7 @@ wlog wlogh : b A AE lebig / forall n, (b n).1 <= (b n).2. move=> /= h. set A' := fun n => if (b n).1 >= (b n).2 then set0 else A n. set b' := fun n => if (b n).1 >= (b n).2 then (0, 0) else b n. - rewrite [leRHS](_ : _ = \sum_(n k. rewrite /= /A' AE; case: ifPn => // bn. by rewrite set_itv_ge//= bnd_simp -leNgt. @@ -472,7 +472,7 @@ apply: (@le_trans _ _ (\sum_(i <- X) (wlength f `](b i).1, (b i).2]%classic) + by move: x kx; exact: subset_itv_oo_oc. rewrite addeC -big_split/=; apply: lee_sum => k _. by rewrite !(EFinB, wlength_itv_bnd)// addeA subeK. -rewrite -big_split/= nneseries_esum//; last by move=> k _; rewrite adde_ge0. +rewrite -big_split/= nneseries_esum//; first by move=> k _; rewrite adde_ge0. rewrite esum_ge//; exists [set` X] => //; rewrite fsbig_finite//= set_fsetK. rewrite big_seq [in X in (_ <= X)%E]big_seq; apply: lee_sum => k kX. by rewrite AE leeD2l// lee_fin lerBlDl natrX De. @@ -639,7 +639,7 @@ pose I n : set R := `]- (n%:R), n%:R]%classic. have : (lsf \o I) n @[n --> \oo] --> 1%E. have -> : lsf \o I = (fun n => (f n%:R)%:E - (f (- n%:R))%:E)%E. apply/funext=> n; rewrite /= /lsf/= /lebesgue_stieltjes_measure. - rewrite /measure_extension measurable_mu_extE/=; last exact: is_ocitv. + rewrite /measure_extension measurable_mu_extE/=; first exact: is_ocitv. by rewrite wlength_itv_bnd// ge0_cp. rewrite -(sube0 1); apply: cvgeB => //. - by apply/cvg_EFin; [near=> F diff --git a/theories/measurable_realfun.v b/theories/measurable_realfun.v index 6c0f222599..a3895e5d8b 100644 --- a/theories/measurable_realfun.v +++ b/theories/measurable_realfun.v @@ -50,7 +50,7 @@ From mathcomp Require Import lebesgue_stieltjes_measure. (* ``` *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -112,10 +112,10 @@ exists (~` A); [exact: measurableC | exists ([set -oo%E; +oo%E] `&` ~` B) => //] case: PooB. - by rewrite setC0 setIT; constructor. - rewrite setIUl setICr set0U -setDE. - have [_ ->] := @setDidPl (\bar R) [set +oo%E] [set -oo%E]; first by constructor. + have [_ ->] := @setDidPl (\bar R) [set +oo%E] [set -oo%E]; last by constructor. by rewrite predeqE => x; split => // -[->]. - rewrite setIUl setICr setU0 -setDE. - have [_ ->] := @setDidPl (\bar R) [set -oo%E] [set +oo%E]; first by constructor. + have [_ ->] := @setDidPl (\bar R) [set -oo%E] [set +oo%E]; last by constructor. by rewrite predeqE => x; split => // -[->]. - by rewrite setICr; constructor. Qed. @@ -134,7 +134,7 @@ exists (\bigcup_i (f i).2). have /ps_inftyP : ps_infty(f n).2 by have [_ []] := fi n. exact. rewrite [RHS](@eq_bigcupr _ _ _ _ - (fun i => [set x%:E | x in (f i).1] `|` (f i).2)); last first. + (fun i => [set x%:E | x in (f i).1] `|` (f i).2)). by move=> i; have [_ []] := fi i. rewrite bigcupU; congr (_ `|` _). rewrite predeqE => i /=; split=> [[r [n _ fn1r <-{i}]]|[n _ [r fn1r <-{i}]]]; @@ -285,7 +285,7 @@ Lemma fine_measurable (R : realType) (D : set (\bar R)) : measurable D -> measurable_fun D fine. Proof. move=> mD _ /= B mB; rewrite [X in measurable X](_ : _ `&` _ = if 0%R \in B then - D `&` ((EFin @` B) `|` [set -oo; +oo]%E) else D `&` EFin @` B); last first. + D `&` ((EFin @` B) `|` [set -oo; +oo]%E) else D `&` EFin @` B). apply/seteqP; split=> [[r [Dr Br]|[Doo B0]|[Doo B0]]|[r| |]]. - by case: ifPn => _; split => //; left; exists r. - by rewrite mem_set//; split => //; right; right. @@ -320,8 +320,8 @@ Proof. by rewrite -preimage_itvNyc; exact/mf/emeasurable_itv. Qed. Lemma emeasurable_fin_num : measurable (D `&` [set x | f x \is a fin_num]). Proof. -rewrite [X in measurable X](_ : _ = - \bigcup_k (D `&` ([set x | - k%:R%:E <= f x] `&` [set x | f x <= k%:R%:E]))). +rewrite [X in measurable X](_ : _ = \bigcup_k (D `&` + ([set x | - k%:R%:E <= f x] `&` [set x | f x <= k%:R%:E]))); last first. apply: bigcupT_measurable => k; rewrite -(setIid D) setIACA. exact/measurableI/emeasurable_fun_infty_c/emeasurable_fun_c_infty. rewrite predeqE => t; split => [/= [Dt ft]|]. @@ -334,7 +334,7 @@ Qed. Lemma emeasurable_neq y : measurable (D `&` [set x | f x != y]). Proof. -rewrite (_ : [set x | f x != y] = f @^-1` (setT `\ y)). +rewrite (_ : [set x | f x != y] = f @^-1` (setT `\ y)); last first. exact/mf/measurableD. rewrite predeqE => t; split; last by rewrite /preimage /= => -[_ /eqP]. by rewrite /= => ft0; rewrite /preimage /=; split => //; exact/eqP. @@ -781,19 +781,19 @@ Lemma normr_measurable D : measurable_fun D (@normr _ R). Proof. move=> mD; apply: (measurability _ (RGenOInfty.measurableE R)) => //. move=> /= _ [_ [x ->] <-]; apply: measurableI => //. -have [x0|x0] := leP 0 x. - rewrite [X in measurable X](_ : _ = `]-oo, (- x)[ `|` `]x, +oo[)%classic. - by apply: measurableU; apply: measurable_itv. - rewrite predeqE => r; split => [|[|]]; rewrite preimage_itv ?in_itv ?andbT/=. - - have [r0|r0] := leP 0 r; [rewrite ger0_norm|rewrite ltr0_norm] => // xr; - rewrite 2!in_itv/=. - + by right; rewrite xr. - + by left; rewrite ltrNr. - - move=> rx /=. - by rewrite ler0_norm 1?ltrNr// (le_trans (ltW rx))// lerNl oppr0. - - by rewrite in_itv /= andbT => xr; rewrite (lt_le_trans _ (ler_norm _)). -rewrite [X in measurable X](_ : _ = setT)// predeqE => r. -by split => // _; rewrite /= in_itv /= andbT (lt_le_trans x0). +have [x0|x0] := leP 0 x; last first. + rewrite [X in measurable X](_ : _ = setT)// predeqE => r. + by split => // _; rewrite /= in_itv /= andbT (lt_le_trans x0). +rewrite [X in measurable X](_ : _ = `]-oo, (- x)[ `|` `]x, +oo[)%classic; last first. + by apply: measurableU; apply: measurable_itv. +rewrite predeqE => r; split => [|[|]]; rewrite preimage_itv ?in_itv ?andbT/=. +- have [r0|r0] := leP 0 r; [rewrite ger0_norm|rewrite ltr0_norm] => // xr; + rewrite 2!in_itv/=. + + by right; rewrite xr. + + by left; rewrite ltrNr. +- move=> rx /=. + by rewrite ler0_norm 1?ltrNr// (le_trans (ltW rx))// lerNl oppr0. +- by rewrite in_itv /= andbT => xr; rewrite (lt_le_trans _ (ler_norm _)). Qed. Lemma mulrl_measurable D (k : R) : measurable_fun D ( *%R k). @@ -840,8 +840,8 @@ Lemma measurable_funD D f g : Proof. move=> mf mg mD; apply: (measurability _ (RGenOInfty.measurableE R)) => //. move=> /= _ [_ [a ->] <-]; rewrite preimage_itvoy. -rewrite [X in measurable X](_ : _ = \bigcup_(q : rat) - ((D `&` [set x | ratr q < f x]) `&` (D `&` [set x | a - ratr q < g x]))). +rewrite [X in measurable X](_ : _ = \bigcup_(q : rat) ((D `&` + [set x | ratr q < f x]) `&` (D `&` [set x | a - ratr q < g x]))); last first. apply: bigcupT_measurable_rat => q; apply: measurableI. - by rewrite -preimage_itvoy; apply: mf => //; exact: measurable_itv. - by rewrite -preimage_itvoy; apply: mg => //; exact: measurable_itv. @@ -896,8 +896,8 @@ Lemma measurable_fun_eqr D f g : measurable_fun D f -> measurable_fun D g -> Proof. move=> mf mg. rewrite (_ : (fun x => f x == g x) = (fun x => (f x <= g x) && (g x <= f x))). - by apply: measurable_and; exact: measurable_fun_ler. -by under eq_fun do rewrite eq_le. + by under eq_fun do rewrite eq_le. +by apply: measurable_and; exact: measurable_fun_ler. Qed. Lemma measurable_maxr D f g : @@ -951,8 +951,8 @@ have : {in D, (fun x => inf [set sups (h ^~ x) n | n in [set n | 0 <= n]%N]) =1 (fun x => limn_sup (h^~ x))}. move=> t; rewrite inE => Dt; apply/esym/cvg_lim => //. rewrite [X in _ --> X](_ : _ = inf (range (sups (h^~t)))). - by apply: cvg_sups_inf; [exact: f_ub|exact: f_lb]. - by congr (inf [set _ | _ in _]); rewrite predeqE. + by congr (inf [set _ | _ in _]); rewrite predeqE. + by apply: cvg_sups_inf; [exact: f_ub|exact: f_lb]. move/eq_measurable_fun; apply; apply: measurable_fun_infs => //. move=> t Dt; have [M hM] := f_lb _ Dt; exists M => _ [m /= nm <-]. rewrite (@le_trans _ _ (h m t)) //; first by apply hM => /=; exists m. @@ -980,12 +980,12 @@ move=> mU mD /= Y mY. have [Y0|Y0] := pselect (Y 0%R); have [Y1|Y1] := pselect (Y 1%R). - rewrite [X in measurable X](_ : _ = D)//. by apply/seteqP; split => //= r Dr /=; rewrite indicE; case: (_ \in _). -- rewrite [X in measurable (_ `&` X)](_ : _ = ~` U)//. +- rewrite [X in measurable (_ `&` X)](_ : _ = ~` U)//; last first. by apply: measurableI => //; exact: measurableC. apply/seteqP; split => [//= r /= + Ur|r Ur]; rewrite /= indicE. by rewrite mem_set. by rewrite memNset. -- rewrite [X in measurable (_ `&` X)](_ : _ = U); first exact: measurableI. +- rewrite [X in measurable (_ `&` X)](_ : _ = U); last exact: measurableI. apply/seteqP; split => [//= r /=|r Ur]; rewrite /= indicE. by have [//|Ur] := pselect (U r); rewrite memNset. by rewrite mem_set. @@ -1049,7 +1049,7 @@ apply/measurable_funU => //; split. rewrite (_ : _ \_ _ = cst 0)//; apply/funext => y; rewrite patchE. by case: ifPn => //; rewrite inE/= in_itv/= => y0; rewrite ln0// ltW. - apply: subspace_continuous_measurable_fun => //. - rewrite continuous_open_subspace; last exact: interval_open. + rewrite continuous_open_subspace; first exact: interval_open. by move=> x; rewrite inE/= in_itv/= andbT => x0; exact: continuous_ln. Qed. #[global] Hint Extern 0 (measurable_fun _ (@ln _)) => @@ -1184,14 +1184,14 @@ Lemma measurable_itv_bnd_infty b x : Proof. case: b; first by apply: sub_sigma_algebra; exists x; rewrite set_itvcy. rewrite [X in measurable X](_ : _ = - \bigcup_(k in [set k | k >= x]%N) `[k.+1, +oo[%classic). + \bigcup_(k in [set k | k >= x]%N) `[k.+1, +oo[%classic); last first. rewrite bigcup_mkcond; apply: bigcupT_measurable => k. by case: ifPn => //= _; apply: sub_sigma_algebra; eexists; reflexivity. -apply/seteqP; split => [z /=|/= z [t/= xt]]. - rewrite in_itv/= andbT => xz; exists z.-1 => /=. - by rewrite -ltnS//=; case: z xz. - by case: z xz => //= z xz; rewrite in_itv/= lexx andbT. -by rewrite !in_itv/= !andbT; apply: lt_le_trans; rewrite ltEnat/= ltnS. +apply/seteqP; split => [z /=|/= z [t/= xt]]; last first. + by rewrite !in_itv/= !andbT; apply: lt_le_trans; rewrite ltEnat/= ltnS. +rewrite in_itv/= andbT => xz; exists z.-1 => /=. + by rewrite -ltnS//=; case: z xz. +by case: z xz => //= z xz; rewrite in_itv/= lexx andbT. Qed. Lemma measurable_itv_bounded a b y : a != +oo%O -> @@ -1205,7 +1205,7 @@ Qed. Lemma measurableE : @measurable _ nat = G.-sigma.-measurable. Proof. rewrite eqEsubset; split => [A mA|A]; last exact: smallest_sub. -rewrite (_ : A = \bigcup_(i in A) `[i, i.+1[%classic). +rewrite (_ : A = \bigcup_(i in A) `[i, i.+1[%classic); last first. by apply: bigcup_measurable => k Ak; exact: measurable_itv_bounded. apply/seteqP; split => [x Ax|x [k Ak]]. by exists x => //=; rewrite in_itv/= lexx/= ltEnat /= ltnS. @@ -1225,7 +1225,7 @@ Proof. move=> mf mg mD; apply: (measurability _ NGenCInfty.measurableE) => //. move=> /= _ [_ [a ->] <-]; rewrite preimage_itvcy. rewrite [X in measurable X](_ : _ = \bigcup_q - ((D `&` [set x | q <= f x]%O) `&` (D `&` [set x | (a - q)%N <= g x]%O))). + ((D `&` [set x | q <= f x]%O) `&` (D `&` [set x | (a - q)%N <= g x]%O))); last first. apply: bigcupT_measurable => q; apply: measurableI. - by rewrite -preimage_itvcy; exact: mf. - by rewrite -preimage_itvcy; exact: mg. @@ -1243,7 +1243,7 @@ Lemma measurable_fun_maxn D f g : measurable_fun D f -> measurable_fun D g -> Proof. move=> mf mg mD; apply: (measurability _ NGenCInfty.measurableE) => //. move=> /= _ [_ [a ->] <-]; rewrite [X in measurable X](_ : _ = - ((D `&` [set x | a <= f x]%O) `|` (D `&` [set x | a <= g x]%O))). + ((D `&` [set x | a <= f x]%O) `|` (D `&` [set x | a <= g x]%O))); last first. apply: measurableU. - by rewrite -preimage_itvcy; exact: mf. - by rewrite -preimage_itvcy; exact: mg. @@ -1264,7 +1264,7 @@ move=> gf mf mg mD; apply: (measurability _ NGenCInfty.measurableE) => //. move=> /= _ [_ [a ->] <-]; rewrite preimage_itvcy. rewrite [X in measurable X](_ : _ = \bigcup_q ((D `&` [set x | maxn a q <= f x]%O) `&` - (D `&` [set x | g x <= (q - a)%N]%O))). + (D `&` [set x | g x <= (q - a)%N]%O))); last first. apply: bigcupT_measurable => q; apply: measurableI. - by rewrite -preimage_itvcy; exact: mf. - by rewrite -preimage_itvNyc; exact: mg. @@ -1277,7 +1277,7 @@ rewrite predeqE => x; split => [|[r ?] []/= [Dx rfx]] /= => [[Dx]|[_]]. have [afx|afx] := leqP a (f x). rewrite -(@leq_sub2rE a)// addnC addnK (leq_trans gxra)// leq_sub2r//. by rewrite (leq_trans _ rfx)//; exact: leq_maxr. - move: gxra; rewrite -(leq_add2l a) subnKC//; last first. + move: gxra; rewrite -(leq_add2l a) subnKC//. by have := leq_ltn_trans rfx afx; rewrite ltnNge leq_maxl. by move=> /leq_trans; apply; rewrite (leq_trans _ rfx)//; exact: leq_maxr. Qed. @@ -1287,10 +1287,10 @@ Lemma measurable_fun_subn D f g : measurable_fun D f -> Proof. move=> mf mg. rewrite [X in measurable_fun _ X](_ : _ = fun x => (maxn (f x) (g x) - g x)%N). - apply: measurable_fun_subn' => //; last exact: measurable_fun_maxn. - by move=> t; rewrite leq_maxr. -apply/funext => x; have [//|gf] := leqP (g x) (f x). -by apply/eqP; rewrite subnn subn_eq0// ltnW. + apply/funext => x; have [//|gf] := leqP (g x) (f x). + by apply/eqP; rewrite subnn subn_eq0// ltnW. +apply: measurable_fun_subn' => //; last exact: measurable_fun_maxn. +by move=> t; rewrite leq_maxr. Qed. Lemma measurable_fun_ltn D f g : measurable_fun D f -> measurable_fun D g -> @@ -1305,7 +1305,7 @@ move=> mf mg mD Y mY; have [| | |] := set_bool Y => /eqP ->. - under eq_fun do rewrite ltnNge. rewrite preimage_false set_predC setCK. rewrite [X in _ `&` X](_ : _ = \bigcup_(i in range f) - ([set y | g y <= i]%O `&` [set t | i <= f t]%O)). + ([set y | g y <= i]%O `&` [set t | i <= f t]%O)); last first. rewrite setI_bigcupr; apply: bigcup_measurable => k fk. rewrite setIIr; apply: measurableI => //. + by rewrite -preimage_itvNyc; exact: mg. @@ -1326,7 +1326,7 @@ Lemma measurable_fun_leq D f g : measurable_fun D f -> measurable_fun D g -> Proof. move=> mf mg mD Y mY; have [| | |] := set_bool Y => /eqP ->. - rewrite preimage_true [X in _ `&` X](_ : _ = - \bigcup_(i in range g) ([set y | f y <= i]%O `&` [set t | i <= g t]%O)). + \bigcup_(i in range g) ([set y | f y <= i]%O `&` [set t | i <= g t]%O)); last first. rewrite setI_bigcupr; apply: bigcup_measurable => k fk. rewrite setIIr; apply: measurableI => //. + by rewrite -preimage_itvNyc; exact: mf. @@ -1349,8 +1349,8 @@ Lemma measurable_fun_eqn D f g : measurable_fun D f -> measurable_fun D g -> Proof. move=> mf mg. rewrite (_ : (fun x => f x == g x) = (fun x => (f x <= g x) && (g x <= f x))%N). - by apply: measurable_and; exact: measurable_fun_leq. -by under eq_fun do rewrite eq_le. + by under eq_fun do rewrite eq_le. +by apply: measurable_and; exact: measurable_fun_leq. Qed. End measurable_fun_nat. @@ -1386,8 +1386,8 @@ Lemma oppe_measurable (D : set (\bar R)) : Proof. move=> mD; apply: (measurability _ (ErealGenCInfty.measurableE R)) => //. move=> _ [_ [x ->] <-]; rewrite (_ : _ @^-1` _ = `]-oo, (- x)%:E]%classic). - by apply: measurableI => //; exact: emeasurable_itv. -by rewrite predeqE => y; rewrite preimage_itv !in_itv/= andbT in_itv leeNr. + by rewrite predeqE => y; rewrite preimage_itv !in_itv/= andbT in_itv leeNr. +by apply: measurableI => //; exact: emeasurable_itv. Qed. End standard_emeasurable_fun. @@ -1404,7 +1404,7 @@ Lemma measurable_EFinP d (T : measurableType d) (R : realType) (D : set T) measurable_fun D (EFin \o g) <-> measurable_fun D g. Proof. split=> [mf mD A mA|]; last by move=> mg; exact: measurableT_comp. -rewrite [X in measurable X](_ : _ = D `&` (EFin \o g) @^-1` (EFin @` A)). +rewrite [X in measurable X](_ : _ = D `&` (EFin \o g) @^-1` (EFin @` A)); last first. by apply: mf => //; exists A => //; exists set0; [constructor|rewrite setU0]. congr (_ `&` _);rewrite eqEsubset; split=> [|? []/= _ /[swap] -[->//]]. by move=> ? ?; exact: preimage_image. @@ -1503,7 +1503,7 @@ Lemma measurable_er_map d (T : measurableType d) (R : realType) (f : R -> R) : measurable_fun setT f -> measurable_fun [set: \bar R] (er_map f). Proof. move=> mf;rewrite (_ : er_map _ = - fun x => if x \is a fin_num then (f (fine x))%:E else x); last first. + fun x => if x \is a fin_num then (f (fine x))%:E else x). by apply: funext=> -[]. apply: measurable_fun_ifT => //=. + by apply: (measurable_fun_bool true); exact/emeasurable_fin_num. @@ -1521,7 +1521,7 @@ Lemma measurable_fun_einfs D (f : (T -> \bar R)^nat) : Proof. move=> mf n mD. apply: (measurability _ (ErealGenCInfty.measurableE R)) => //. -move=> _ [_ [x ->] <-]; rewrite einfs_preimage -bigcapIr; last by exists n =>/=. +move=> _ [_ [x ->] <-]; rewrite einfs_preimage -bigcapIr; first by exists n =>/=. by apply: bigcap_measurableType => ? ?; exact/mf/emeasurable_itv. Qed. @@ -1540,7 +1540,7 @@ Lemma measurable_maxe D (f g : T -> \bar R) : Proof. move=> mf mg mD; apply: (measurability _ (ErealGenCInfty.measurableE R)) => //. move=> _ [_ [x ->] <-]; rewrite [X in measurable X](_ : _ = - (D `&` f @^-1` `[x%:E, +oo[) `|` (D `&` g @^-1` `[x%:E, +oo[)); last first. + (D `&` f @^-1` `[x%:E, +oo[) `|` (D `&` g @^-1` `[x%:E, +oo[)). rewrite predeqE => t /=; split. by rewrite !/= /= !in_itv /= !andbT le_max => -[Dx /orP[|]]; tauto. @@ -1565,9 +1565,9 @@ Lemma measurable_mine D (f g : T -> \bar R) : measurable_fun D (fun x => mine (f x) (g x)). Proof. move=> mf mg; rewrite (_ : (fun _ => _) = (fun x => - maxe (- f x) (- g x))). - apply: measurableT_comp => //. - by apply: measurable_maxe; exact: measurableT_comp. -by rewrite funeqE => x; rewrite oppe_max !oppeK. + by rewrite funeqE => x; rewrite oppe_max !oppeK. +apply: measurableT_comp => //. +by apply: measurable_maxe; exact: measurableT_comp. Qed. Lemma measurable_fun_limn_esup D (f : (T -> \bar R)^nat) : @@ -1575,10 +1575,10 @@ Lemma measurable_fun_limn_esup D (f : (T -> \bar R)^nat) : measurable_fun D (fun x => limn_esup (f ^~ x)). Proof. move=> mf mD; rewrite (_ : (fun _ => _) = - (fun x => ereal_inf [set esups (f^~ x) n | n in [set n | n >= 0]%N])). + (fun x => ereal_inf [set esups (f^~ x) n | n in [set n | n >= 0]%N])); last first. by apply: measurable_fun_einfs => // k; exact: measurable_fun_esups. rewrite funeqE => t; rewrite limn_esup_lim; apply/cvg_lim => //. -rewrite [X in _ --> X](_ : _ = ereal_inf (range (esups (f^~t)))). +rewrite [X in _ --> X](_ : _ = ereal_inf (range (esups (f^~t)))); last first. exact: cvg_esups_inf. by congr (ereal_inf [set _ | _ in _]); rewrite predeqE. Qed. @@ -1637,8 +1637,8 @@ have Fcover n : exists2 B, F n `<=` B & split; first by exists (a, b + e / 2^+n.+2)%R. have [ab|ba] := ltP a b. rewrite /l -abFn !wlength_itv//= !lte_fin ifT. - by rewrite ab -!EFinD lee_fin addrAC. - by rewrite ltr_wpDr// divr_ge0// ltW. + by rewrite ltr_wpDr// divr_ge0// ltW. + by rewrite ab -!EFinD lee_fin addrAC. rewrite -abFn [in leRHS]set_itv_ge ?bnd_simp -?leNgt// /l wlength0 add0r. rewrite wlength_itv//=; case: ifPn => [abe|_]; last first. by rewrite lee_fin divr_ge0// ltW. @@ -1654,11 +1654,11 @@ apply: (@le_trans _ _ (\sum_(0 <= k /=; exists G. exact: lee_nneseries. -rewrite nneseriesD//; last first. +rewrite nneseriesD//. by move=> i _; rewrite lee_fin// divr_ge0// ltW. rewrite [in leRHS](splitr e) EFinD addeA leeD//; first exact/ltW. have := @cvg_geometric_eseries_half R e 1; rewrite expr1. -rewrite [X in eseries X](_ : _ = (fun k => (e / (2 ^+ (k.+2))%:R)%:E)); last first. +rewrite [X in eseries X](_ : _ = (fun k => (e / (2 ^+ (k.+2))%:R)%:E)). by apply/funext => n; rewrite addn2 natrX. move/cvg_lim => <-//; apply: lee_nneseries => //. - by move=> n _; rewrite lee_fin divr_ge0// ltW. diff --git a/theories/measure_theory/counting_measure.v b/theories/measure_theory/counting_measure.v index 206b832b27..65b1dbe0ff 100644 --- a/theories/measure_theory/counting_measure.v +++ b/theories/measure_theory/counting_measure.v @@ -13,7 +13,7 @@ From mathcomp Require Import sequences measurable_structure measure_function. (* ``` *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -59,22 +59,22 @@ have sumFE n : \sum_(i < n) counting (F i) = by apply: eq_bigr => // i _; rewrite /counting asboolT. have [cvg_u|dvg_u] := pselect (cvg (nseries u @ \oo)). have [N _ Nu] : \forall n \near \oo, u n = 0%N by apply: cvg_nseries_near. - rewrite [X in _ --> X](_ : _ = \sum_(i < N) counting (F i)); last first. + rewrite [X in _ --> X](_ : _ = \sum_(i < N) counting (F i)). have -> : \bigcup_i (F i) = \big[setU/set0]_(i < N) F i. rewrite (bigcupID (`I_N)) setTI bigcup_mkord. rewrite [X in _ `|` X](_ : _ = set0) ?setU0// bigcup0// => i [_ /negP]. by rewrite -leqNgt => /Nu/eqP/[!cardfs_eq0]/eqP/fset_set_set0 ->. by rewrite /counting /= asboolT ?sumFE// -bigcup_mkord; exact: bigcup_finite. rewrite -(cvg_shiftn N)/=. - rewrite (_ : (fun n => _) = (fun=> \sum_(i < N) counting (F i))). + rewrite (_ : (fun n => _) = (fun=> \sum_(i < N) counting (F i))); last first. exact: cvg_cst. apply/funext => n; rewrite /index_iota subn0 (addnC n) iotaD big_cat/=. - rewrite [X in _ + X](_ : _ = 0) ?adde0. + rewrite [X in _ + X](_ : _ = 0) ?adde0; last first. by rewrite -{1}(subn0 N) big_mkord. rewrite add0n big_seq big1// => i /[!mem_iota] => /andP[NI iNn]. by rewrite /counting asboolT//= -/(u _) Nu. have {dvg_u}cvg_F : (fun n => \sum_(i < n) counting (F i)) @ \oo --> +oo. - rewrite (_ : (fun n => _) = [sequence (\sum_(0 <= i < n) (u i))%:R%:E]_n). + rewrite (_ : (fun n => _) = [sequence (\sum_(0 <= i < n) (u i))%:R%:E]_n); last first. exact/cvgenyP/dvg_nseries. apply/funext => n /=; under eq_bigr. by rewrite /counting => i _; rewrite asboolT//; over. @@ -88,9 +88,9 @@ rewrite sumFE lte_fin ltr_nat ltnS. have -> : k = #|` fset_set (\bigcup_n F n) |. by apply/esym/card_eq_fsetP; rewrite fset_setK//; exists k. apply/fsubset_leq_card; rewrite -fset_set_sub //. -- by move=> /= t; rewrite -bigcup_mkord => -[m _ Fmt]; exists m. - by rewrite -bigcup_mkord; exact: bigcup_finite. - by exists k. +- by move=> /= t; rewrite -bigcup_mkord => -[m _ Fmt]; exists m. Unshelve. all: by end_near. Qed. HB.instance Definition _ := isMeasure.Build _ _ _ counting diff --git a/theories/measure_theory/dirac_measure.v b/theories/measure_theory/dirac_measure.v index 6d35745c7d..d2e8cea15a 100644 --- a/theories/measure_theory/dirac_measure.v +++ b/theories/measure_theory/dirac_measure.v @@ -18,7 +18,7 @@ From mathcomp Require Import measurable_structure measure_function. Reserved Notation "'\d_' a" (at level 8, a at level 2, format "'\d_' a"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -48,9 +48,9 @@ move=> F mF tF mUF; rewrite /dirac indicE; have [|aFn] /= := boolP (a \in _). apply/cvg_ballP => _/posnumP[e]; near=> m. have mn : (n < m)%N by near: m; exists n.+1. rewrite big_mkord (bigID (xpred1 (Ordinal mn)))//= big_pred1_eq/= big1/=. - by rewrite adde0 indicE mem_set//; exact: ballxx. - by move=> j ij; rewrite indicE (negbTE (naF _ _)). -rewrite [X in X @ \oo --> _](_ : _ = cst 0); first exact: cvg_cst. + by move=> j ij; rewrite indicE (negbTE (naF _ _)). + by rewrite adde0 indicE mem_set//; exact: ballxx. +rewrite [X in X @ \oo --> _](_ : _ = cst 0); last exact: cvg_cst. apply/funext => n; rewrite big1// => i _; rewrite indicE; apply/eqP. by rewrite eqe pnatr_eq0 eqb0; apply: contra aFn => /[!inE] aFn; exists i. Unshelve. all: by end_near. Qed. @@ -93,8 +93,8 @@ Lemma finite_card_dirac (A : set T) : finite_set A -> \esum_(i in A) \d_ i A = (#|` fset_set A|%:R)%:E :> \bar R. Proof. move=> finA; rewrite esum_fset// (eq_fsbigr (cst 1))//. - by rewrite card_fset_sum1// natr_sum -sumEFin fsbig_finite. -by move=> i iA; rewrite diracE iA. + by move=> i iA; rewrite diracE iA. +by rewrite card_fset_sum1// natr_sum -sumEFin fsbig_finite. Qed. Lemma infinite_card_dirac (A : set T) : infinite_set A -> @@ -107,8 +107,8 @@ apply: (@le_trans _ _ (Num.truncn r).+1%:R%:E). by rewrite lee_fin ltW// truncnS_gt. move: Br; rewrite -(@ler_nat R) -lee_fin => /le_trans; apply. rewrite (eq_fsbigr (cst 1))/=; last first. - by move=> i /[!inE] /BA /mem_set iA; rewrite diracE iA. -by rewrite fsbig_finite//= card_fset_sum1 sumEFin natr_sum// set_fsetK. + by rewrite fsbig_finite//= card_fset_sum1 sumEFin natr_sum// set_fsetK. +by move=> i /[!inE] /BA /mem_set iA; rewrite diracE iA. Qed. End dirac_lemmas. diff --git a/theories/measure_theory/measurable_function.v b/theories/measure_theory/measurable_function.v index 3f7c75e0ec..772e6d0a8e 100644 --- a/theories/measure_theory/measurable_function.v +++ b/theories/measure_theory/measurable_function.v @@ -24,7 +24,7 @@ Reserved Notation "{ 'mfun' aT >-> T }" Reserved Notation "[ 'mfun' 'of' f ]" (at level 0, format "[ 'mfun' 'of' f ]"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -89,7 +89,7 @@ Lemma measurable_comp F (f : T2 -> T3) E (g : T1 -> T2) : Proof. move=> mF FgE mf mg /= mE A mA. rewrite comp_preimage. -rewrite (_ : _ `&` _ = E `&` g @^-1` (F `&` f @^-1` A)); last first. +rewrite (_ : _ `&` _ = E `&` g @^-1` (F `&` f @^-1` A)). apply/seteqP; split=> [|? [?] []//]. by move=> x/= [Ex Afgx]; split => //; split => //; exact: FgE. by apply/mg => //; exact: mf. @@ -99,7 +99,7 @@ Lemma eq_measurable_fun D (f g : T1 -> T2) : {in D, f =1 g} -> measurable_fun D f -> measurable_fun D g. Proof. by move=> fg mf mD A mA; rewrite [X in measurable X](_ : _ = D `&` f @^-1` A); - [exact: mf|exact/esym/eq_preimage]. + [exact/esym/eq_preimage|exact: mf]. Qed. Lemma measurable_fun_eqP D (f g : T1 -> T2) : @@ -153,11 +153,11 @@ Proof. move=> mx my /= _ B mB; rewrite (_ : _ @^-1` B = ((f @^-1` [set true]) `&` (g @^-1` B)) `|` ((f @^-1` [set false]) `&` (h @^-1` B))). - rewrite setIUr; apply: measurableU. - - by rewrite setIA; apply: mx => //; exact: mf. - - by rewrite setIA; apply: my => //; exact: mf. -apply/seteqP; split=> [t /=| t /= [] [] ->//]. -by case: ifPn => ft; [left|right]. + apply/seteqP; split=> [t /=| t /= [] [] ->//]. + by case: ifPn => ft; [left|right]. +rewrite setIUr; apply: measurableU. +- by rewrite setIA; apply: mx => //; exact: mf. +- by rewrite setIA; apply: my => //; exact: mf. Qed. Lemma measurable_fun_set0 (f : T1 -> T2) : measurable_fun set0 f. @@ -274,7 +274,7 @@ Lemma measurable_fun_bool D f b : measurable (D `&` f @^-1` [set b]) -> measurable_fun D f. Proof. move=> mb mD; have mDb : measurable (D `&` f @^-1` [set ~~ b]). - rewrite (_ : [set ~~ b] = [set~ b]); last first. + rewrite (_ : [set ~~ b] = [set~ b]). by apply/seteqP; split=> -[] /=; case: b {mb}. by rewrite -preimage_setC; exact: measurableID. by case: b => /= in mb mDb *; exact: measurable_fun_TF. @@ -286,7 +286,7 @@ Lemma measurable_and D f g : measurable_fun D f -> measurable_fun D g -> Proof. move=> mf mg mD; apply: (measurable_fun_bool true) => //. rewrite [X in measurable X](_ : _ = D `&` f @^-1` [set true] `&` - (D `&` g @^-1` [set true])); last first. + (D `&` g @^-1` [set true])). by rewrite setIACA setIid; congr (_ `&` _); apply/seteqP; split => x /andP. by apply: measurableI; [exact: mf|exact: mg]. Qed. @@ -296,8 +296,8 @@ Lemma measurable_neg D f : Proof. move=> mf mD; apply: (measurable_fun_bool true) => //. rewrite [X in measurable X](_ : _ = (D `&` f @^-1` [set false])). - exact: mf. -by apply/seteqP; split => [x [Dx/= /negbTE]|x [Dx/= ->]]. + by apply/seteqP; split => [x [Dx/= /negbTE]|x [Dx/= ->]]. +exact: mf. Qed. Lemma measurable_or D f g : measurable_fun D f -> measurable_fun D g -> @@ -305,8 +305,8 @@ Lemma measurable_or D f g : measurable_fun D f -> measurable_fun D g -> Proof. move=> mf mg. rewrite [X in measurable_fun _ X](_ : _ = (fun x => ~~ (~~ f x && ~~ g x))). - by apply: measurable_neg; apply: measurable_and; exact: measurable_neg. -by apply/funext=> x; rewrite -negb_or negbK. + by apply/funext=> x; rewrite -negb_or negbK. +by apply: measurable_neg; apply: measurable_and; exact: measurable_neg. Qed. End measurable_fun_bool. @@ -470,7 +470,7 @@ move=> mf mg; apply/measurable_fun_tnthP => /= i. have [->//|i0] := eqVneq i ord0. have i1n : (i.-1 < n)%N by rewrite prednK ?lt0n// -ltnS. pose j := Ordinal i1n. -rewrite (_ : _ \o _ = fun x => tnth (g x) j)//. +rewrite (_ : _ \o _ = fun x => tnth (g x) j)//; last first. apply: (@measurableT_comp _ _ _ _ _ _ (fun x => tnth x j)) => //=. exact: measurable_tnth. apply/funext => x /=. diff --git a/theories/measure_theory/measurable_structure.v b/theories/measure_theory/measurable_structure.v index 06f7b4ec94..529dfffb1a 100644 --- a/theories/measure_theory/measurable_structure.v +++ b/theories/measure_theory/measurable_structure.v @@ -123,7 +123,7 @@ From mathcomp Require Import ereal topology normedtype sequences. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -322,12 +322,12 @@ Lemma sigma_algebraP T U (C : set (set T)) : Proof. move=> C_subU; split => [[C0 CD CU]|[DT DC DU DI]]; split. - by rewrite -(setD0 U); apply: CD. -- move=> A B BA CA CB; rewrite (_ : A `\` B = U `\` ((U `\` A) `|` B)). +- move=> A B BA CA CB; rewrite (_ : A `\` B = U `\` ((U `\` A) `|` B)); last first. by apply CD; rewrite -bigcup2E; apply: CU => -[|[|[|]]] //=; exact: CD. rewrite setDUr setDD [in RHS]setDE setIACA setIid -setDE setIidr//. by rewrite setDE; apply: subIset; left; apply: C_subU. - by move=> F ndF DF; exact: CU. -- move=> A B DA DB; rewrite (_ : A `&` B = U `\` ((U `\` A) `|` (U `\` B))). +- move=> A B DA DB; rewrite (_ : A `&` B = U `\` ((U `\` A) `|` (U `\` B))); last first. by apply CD; rewrite -bigcup2E; apply: CU => -[|[|[|]]] //; exact: CD. rewrite setDUr !setDD setIACA setIid (@setIidr _ U)//. by apply: subIset; left; exact: C_subU. @@ -335,17 +335,17 @@ move=> C_subU; split => [[C0 CD CU]|[DT DC DU DI]]; split. - by move=> A CA; apply: DC => //; exact: C_subU. - move=> F DF. rewrite [X in C X](_ : _ = \bigcup_i \big[setU/set0]_(j < i.+1) F j). - apply: DU; first by move=> *; exact/subsetPset/subset_bigsetU. - elim=> [|n ih]; first by rewrite big_ord_recr /= big_ord0 set0U; exact: DF. - have CU : setU_closed C. - move=> A B DA DB; rewrite (_ : A `|` B = U `\` ((U `\` A) `&` (U `\` B))). - apply DC => //; last by apply: DI; apply: DC => //; exact: C_subU. - by apply: subIset; left; apply: subIset; left. + rewrite predeqE => x; split => [[n _ Fnx]|[n _]]. + by exists n => //; rewrite big_ord_recr /=; right. + by rewrite -bigcup_mkord => -[m /=]; rewrite ltnS => _ Fmx; exists m. + apply: DU; first by move=> *; exact/subsetPset/subset_bigsetU. + elim=> [|n ih]; first by rewrite big_ord_recr /= big_ord0 set0U; exact: DF. + have CU : setU_closed C. + move=> A B DA DB; rewrite (_ : A `|` B = U `\` ((U `\` A) `&` (U `\` B))). by rewrite setDIr// !setDD (setIidr (C_subU _ DA)) (setIidr (C_subU _ _)). - by rewrite big_ord_recr; exact: CU. - rewrite predeqE => x; split => [[n _ Fnx]|[n _]]. - by exists n => //; rewrite big_ord_recr /=; right. - by rewrite -bigcup_mkord => -[m /=]; rewrite ltnS => _ Fmx; exists m. + apply DC => //; last by apply: DI; apply: DC => //; exact: C_subU. + by apply: subIset; left; apply: subIset; left. + by rewrite big_ord_recr; exact: CU. Qed. Section generated_sigma_algebra. @@ -556,7 +556,7 @@ pose H_ A := [set X | H X /\ H (X `&` A)]. have setDH_ A : setSD_closed (H_ A). move=> X Y XY [HX HXA] [HY HYA]; case: lambdaDG => h _ setDH _; split. exact: setDH. - rewrite (_ : _ `&` _ = (X `&` A) `\` (Y `&` A)); last first. + rewrite (_ : _ `&` _ = (X `&` A) `\` (Y `&` A)). rewrite predeqE => x; split=> [[[? ?] ?]|]; first by split => // -[]. by move=> [[? ?] YAx]; split => //; split => //; apply: contra_not YAx. by apply: setDH => //; exact: setSI. @@ -599,10 +599,9 @@ Lemma lambda_system_subset : (forall X, (<>) X -> X `<=` D) -> <> `<=` H. Proof. move=> sDGD; set M := <>. -rewrite -(@smallest_lambda_system _ _ setIG D) //. -- exact: smallest_sub. -- apply: lambda_system_smallest => A GA. - by apply: sDGD; exact: sub_sigma_algebra. +rewrite -(@smallest_lambda_system _ _ setIG D) //; last exact: smallest_sub. +apply: lambda_system_smallest => A GA. +by apply: sDGD; exact: sub_sigma_algebra. Qed. End lambda_system_subset. @@ -647,7 +646,7 @@ split => [[GT setCG trG]|[_ GT setDG ndG]]; split => //. elim=> /= => [|n ih]. by rewrite /A big_ord_recr /= big_ord0 set0U; exact: GF. rewrite /A /= big_ord_recr /= -/(A n). - rewrite (_ : _ `|` _ = ~` (~` A n `\` F n.+1)); last first. + rewrite (_ : _ `|` _ = ~` (~` A n `\` F n.+1)). by rewrite setDE setCI !setCK. rewrite -setTD; apply: (setDG) => //; apply: (setDG) => //; last first. by rewrite -setTD; apply: setDG. @@ -1194,9 +1193,9 @@ Proof. move=> m1; have [->//|/set0P[r Ar]/countable_injP[f injf]] := eqVneq A set0. rewrite -(injpinv_image (cst r) injf). rewrite [X in _ X](_ : _ = \bigcup_(x in f @` A) [set 'pinv_(cst r) A f x]). - by apply: bigcup_measurable => _ /= [s As <-]. -by rewrite eqEsubset; split=> [_ [_ [s As <-]] <-|_ [_ [s As <-]] ->]; - exists (f s). + by rewrite eqEsubset; split=> [_ [_ [s As <-]] <-|_ [_ [s As <-]] ->]; + exists (f s). +by apply: bigcup_measurable => _ /= [s As <-]. Qed. Section sigma_ring_lambda_system. Context d (T : sigmaRingType d). @@ -1222,7 +1221,7 @@ Lemma countable_bigcupT_measurable d (T : sigmaRingType d) U Proof. elim/Ppointed: U => U in F *; first by move=> *; rewrite empty_eq0 bigcup0. move=> /countable_bijP[B] /ppcard_eqP[f] Fm. -rewrite (reindex_bigcup f^-1%FUN setT)//=; first exact: bigcupT_measurable. +rewrite (reindex_bigcup f^-1%FUN setT)//=; last exact: bigcupT_measurable. exact: (@subl_surj _ _ B). Qed. @@ -1412,7 +1411,7 @@ Proof. move=> [G0 GC GU]; split; rewrite /image_set_system. - by rewrite /= preimage_set0 setI0. - move=> A /= GfAD; rewrite setTD -preimage_setC -setDE. - rewrite (_ : _ `\` _ = D `\` (D `&` f @^-1` A)); first exact: GC. + rewrite (_ : _ `\` _ = D `\` (D `&` f @^-1` A)); last exact: GC. rewrite predeqE => x; split=> [[Dx fAx]|[Dx fADx]]. by split => // -[] _ /fAx. by split => //; exact: contra_not fADx. @@ -1477,7 +1476,7 @@ transitivity (\big[op/idx]_(X <- (A @` D')%fset) F X). move=> Di XAi; exists i; rewrite // !(inE, in_fset_set)//=. by rewrite (mem_set Di)/= -XAi; apply: contra_neq FXNidx => ->. by move=> /andP[Di AiN0] XAi; exists i; rewrite ?in_fset_set. -rewrite big_imfset//=; last first. +rewrite big_imfset//=. move=> i j; rewrite !(inE, in_fset_set)//= => /andP[+ +] /andP[+ +]. rewrite !inE => Di /set0P[x Aix] Dj _ Aij. by apply: (Atriv _ _ Di Dj); exists x; split=> //; rewrite -Aij. diff --git a/theories/measure_theory/measure_extension.v b/theories/measure_theory/measure_extension.v index b3ffcce7b6..46efc68372 100644 --- a/theories/measure_theory/measure_extension.v +++ b/theories/measure_theory/measure_extension.v @@ -78,7 +78,7 @@ Reserved Notation "mu .-caratheodory" (format "mu .-caratheodory"). Reserved Notation "mu .-cara" (format "mu .-cara"). Reserved Notation "mu .-cara.-measurable" (format "mu .-cara.-measurable"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -129,7 +129,7 @@ Lemma le_outer_measure : {homo mu : A B / A `<=` B >-> A <= B}. Proof. move=> A B AB; pose B_ k := if k is 0%N then B else set0. have -> : mu B = \sum_(n *; rewrite outer_measure_ge0. + rewrite nneseries_recl//; first by move=> *; rewrite outer_measure_ge0. rewrite eseries_cond/= eseries0 ?adde0// => -[|]//= k _ _. by rewrite outer_measure0. apply: subset_outer_measure_sigma_subadditive => //. @@ -167,15 +167,15 @@ Lemma outer_measure_subadditive (F : (set T)^nat) n : mu (\big[setU/set0]_(i < n) F i) <= \sum_(i < n) mu (F i). Proof. pose F' := fun k => if (k < n)%N then F k else set0. -rewrite -(big_mkord xpredT F) big_nat (eq_bigr F')//; last first. +rewrite -(big_mkord xpredT F) big_nat (eq_bigr F')//. by move=> k /= kn; rewrite /F' kn. rewrite -big_nat big_mkord. have := outer_measure_sigma_subadditive mu F'. -rewrite (bigcup_splitn n) (_ : bigcup _ _ = set0) ?setU0; last first. +rewrite (bigcup_splitn n) (_ : bigcup _ _ = set0) ?setU0. by rewrite bigcup0 // => k _; rewrite /F' /= ltnNge leq_addr. move/le_trans; apply. -rewrite (nneseries_split _ n); last by move=> ? ?; exact: outer_measure_ge0. -rewrite [X in _ + X]eseries0 ?adde0; last first. +rewrite (nneseries_split _ n); first by move=> ? ?; exact: outer_measure_ge0. +rewrite [X in _ + X]eseries0 ?adde0. by move=> k nk _; rewrite /F' ltnNge nk/= outer_measure0. by rewrite big_mkord; apply: lee_sum => i _; rewrite /F' ltn_ord. Qed. @@ -196,7 +196,7 @@ Proof. pose B : (set T) ^nat := bigcup2 (X `&` A) (X `&` ~` A). have cvg_mu : (fun n => \sum_(i < n) mu (B i)) @ \oo --> mu (B 0%N) + mu (B 1%N). rewrite -2!cvg_shiftS /=. - rewrite [X in X @ \oo --> _](_ : _ = (fun=> mu (B 0%N) + mu (B 1%N))); last first. + rewrite [X in X @ \oo --> _](_ : _ = (fun=> mu (B 0%N) + mu (B 1%N))). rewrite funeqE => i; rewrite 2!big_ord_recl /= big1 ?adde0 // => j _. by rewrite /B /bigcup2 /=. exact: cvg_cst. @@ -314,7 +314,7 @@ Proof. rewrite caratheodory_decomp -!addeA; congr (mu _ + _). rewrite -!setIA; congr (_ `&` _). by rewrite setIC; apply/setIidPl; apply: subIset; left; exact: subsetUl. -rewrite addeA addeC [X in mu X + _](_ : _ = set0); last first. +rewrite addeA addeC [X in mu X + _](_ : _ = set0). by rewrite -setIA -setCU -setIA setICr setI0. rewrite outer_measure0 add0e addeC -!setIA; congr (mu (X `&` _) + mu (X `&` _)). by rewrite setIC; apply/setIidPl; apply: subIset; right; exact: subsetUr. @@ -353,7 +353,7 @@ move=> MA tA X. set A' := \bigcup_k A k; set B := fun n => \big[setU/set0]_(k < n) (A k). suff : forall n, \sum_(k < n) mu (X `&` A k) + mu (X `&` ~` A') <= mu X. move=> XA; rewrite (_ : limn _ = ereal_sup - ((fun n => \sum_(k < n) mu (X `&` A k)) @` setT)); last first. + ((fun n => \sum_(k < n) mu (X `&` A k)) @` setT)). under eq_fun do rewrite big_mkord. apply/cvg_lim => //; apply: ereal_nondecreasing_cvgn. apply: (lee_sum_nneg_ord (fun n => mu (X `&` A n)) xpredT) => n _. @@ -432,7 +432,7 @@ Proof. move=> A mA tA mbigcupA; set B := \bigcup_k A k. suff : forall X, mu X = \sum_(k _) = fun n => \sum_(k < n) mu (A k)); last first. + rewrite (_ : (fun n => _) = fun n => \sum_(k < n) mu (A k)). rewrite funeqE => n; rewrite big_mkord; apply: eq_bigr => i _; congr (mu _). by rewrite setIC; apply/setIidPl; exact: bigcup_sup. move=> ->. @@ -550,19 +550,19 @@ apply: (@le_trans _ _ (\esum_(i in setT) (mu \o uncurry G) i)). by rewrite invK ?inE. rewrite -(esum_pred_image (mu \o uncurry G) _ xpredT) ?[fun=> _]set_true//. by rewrite image_eq. -rewrite (_ : esum _ _ = \sum_(i set (nat * nat) := fun i => [set (i, j) | j in setT]. - rewrite (_ : setT = \bigcup_k J k); last first. + rewrite (_ : setT = \bigcup_k J k). by rewrite predeqE => -[a b]; split => // _; exists a => //; exists b. - rewrite esum_bigcupT /=; last 2 first. + rewrite esum_bigcupT /=. - apply/trivIsetP => i j _ _ ij. rewrite predeqE => -[n m] /=; split => //= -[] [_] _ [<-{n} _]. by move=> [m' _] [] /esym/eqP; rewrite (negbTE ij). - by move=> /= [n m]; apply: measure_ge0; exact: (cover_measurable (PG n).1). - rewrite -(image_id [set: nat]) -fun_true esum_pred_image//; last first. + rewrite -(image_id [set: nat]) -fun_true esum_pred_image//. by move=> n _; exact: esum_ge0. apply: eq_eseriesr => /= j _. - rewrite -(esum_pred_image (mu \o uncurry G) (pair j) predT)//=; last first. + rewrite -(esum_pred_image (mu \o uncurry G) (pair j) predT)//=. by move=> ? ? _ _; exact: (@can_inj _ _ _ snd). by congr esum; rewrite predeqE => -[a b]; split; move=> [i _ <-]; exists i. apply: lee_lim. @@ -600,7 +600,7 @@ Lemma Rmu_ext d (R : realType) (T : semiRingOfSetsType d) (measure mu)^* = mu^*. Proof. apply/funeqP => /= X; rewrite /mu_ext/=; apply/eqP; rewrite eq_le. -rewrite !le_ereal_inf_tmp// => _ [F [Fm XS] <-]; rewrite ereal_inf_lbound//; last first. +rewrite !le_ereal_inf_tmp// => _ [F [Fm XS] <-]; rewrite ereal_inf_lbound//. exists F; first by split=> // i; exact: sub_gen_smallest. by rewrite (eq_eseriesr (fun _ _ => RmuE _ (Fm _))). pose K := [set: nat] `*`` fun i => decomp (F i). @@ -615,7 +615,7 @@ pose g i := (f^-1%FUN i).2; exists g; first split. rewrite !nneseries_esumT//= /measure. transitivity (\esum_(i in setT) \sum_(X0 \in decomp (F i)) mu X0); last first. by apply: eq_esum => /= k _; rewrite fsbig_finite//; exact: decomp_finite_set. -rewrite -(eq_esum (fun _ _ => esum_fset _ _))//; last first. +rewrite -(eq_esum (fun _ _ => esum_fset _ _))//. by move=> ? _; exact: decomp_finite_set. rewrite esum_esum//= (reindex_esum K setT f) => //=. by apply: eq_esum => i Ki; rewrite /g funK ?inE. @@ -632,7 +632,7 @@ move=> mX; apply/eqP; rewrite eq_le; apply/andP; split. apply: ereal_inf_lbound; exists (fun n => if n is 0%N then X else set0). by split=> [[]// _|t Xt]; exists 0%N. apply/cvg_lim => //; rewrite -cvg_shiftS. - rewrite (_ : [sequence _]_n = cst (mu X)); first exact: cvg_cst. + rewrite (_ : [sequence _]_n = cst (mu X)); last exact: cvg_cst. by rewrite funeqE => n /=; rewrite big_nat_recl//= big1 ?adde0. apply/le_ereal_inf_tmp => x [A [mA XA] <-{x}]. have XUA : X = \bigcup_n (X `&` A n). @@ -673,13 +673,13 @@ have RmB i : measurable (B i : set rT) by exact: sub_gen_smallest. set BA := eseries (fun n => Rmu (B n `&` A)). set BNA := eseries (fun n => Rmu (B n `&` ~` A)). apply: (@le_trans _ _ (limn BA + limn BNA)); [apply: leeD|]. - - rewrite (_ : BA = eseries (fun n => mu_ext mu (B n `&` A))); last first. + - rewrite (_ : BA = eseries (fun n => mu_ext mu (B n `&` A))). rewrite funeqE => n; apply: eq_bigr => k _. by rewrite /= measurable_Rmu_extE //; exact: measurableI. apply: (@le_trans _ _ (mu_ext mu (\bigcup_k (B k `&` A)))). by apply: le_mu_ext; rewrite -setI_bigcupl; exact: setISS. exact: outer_measure_sigma_subadditive. - - rewrite (_ : BNA = eseries (fun n => mu_ext mu (B n `\` A))); last first. + - rewrite (_ : BNA = eseries (fun n => mu_ext mu (B n `\` A))). rewrite funeqE => n; apply: eq_bigr => k _. by rewrite /= measurable_Rmu_extE //; exact: measurableD. apply: (@le_trans _ _ (mu_ext mu (\bigcup_k (B k `\` A)))). @@ -699,17 +699,17 @@ have [def|] := boolP (lim (BA @ \oo) +? lim (BNA @ \oo)); last first. by near=> n; apply: lee_sum => m _; rewrite -setDE; apply: le_measure; rewrite /mkset ?inE//; apply: measurableD. rewrite -(limeD cBA cBNA) // (_ : (fun _ => _) = - eseries (fun k => Rmu (B k `&` A) + Rmu (B k `&` ~` A))); last first. + eseries (fun k => Rmu (B k `&` A) + Rmu (B k `&` ~` A))). by rewrite funeqE => n; rewrite -big_split /=; exact: eq_bigr. apply/lee_lim => //. by apply/is_cvg_nneseries => // n *; exact: adde_ge0. near=> n; apply: lee_sum => i _; rewrite -measure_semi_additive2. -- apply: le_measure; rewrite /mkset ?inE//; [|by rewrite -setIUr setUCr setIT]. - by apply: measurableU; [exact:measurableI|rewrite -setDE; exact:measurableD]. - exact: measurableI. - by rewrite -setDE; exact: measurableD. - by apply: measurableU; [exact:measurableI|rewrite -setDE; exact:measurableD]. - by rewrite setIACA setICr setI0. +- apply: le_measure; rewrite /mkset ?inE//; [|by rewrite -setIUr setUCr setIT]. + by apply: measurableU; [exact:measurableI|rewrite -setDE; exact:measurableD]. Unshelve. all: by end_near. Qed. Let I : measurableType _ := g_sigma_algebraType (@measurable _ T). @@ -740,7 +740,7 @@ Proof. move=> -[S setTS mS]; exists S => //; move=> i; split. by have := (mS i).1; exact: sub_sigma_algebra. by rewrite /measure_extension /= measurable_mu_extE //; - [exact: (mS i).2 | exact: (mS i).1]. + [exact: (mS i).1 | exact: (mS i).2]. Qed. Lemma measure_extension_unique : sigma_finite [set: T] mu -> @@ -801,7 +801,7 @@ move=> -[S setTS mS]; exists S => //; move=> i; split. - apply: sub_caratheodory; apply: sub_sigma_algebra. exact: (mS i).1. - by rewrite /completed_measure_extension /= measurable_mu_extE //; - [exact: (mS i).2 | exact: (mS i).1]. + [exact: (mS i).1 | exact: (mS i).2]. Qed. End completed_measure_extension. diff --git a/theories/measure_theory/measure_function.v b/theories/measure_theory/measure_function.v index 1f75a83aad..26f797a8cc 100644 --- a/theories/measure_theory/measure_function.v +++ b/theories/measure_theory/measure_function.v @@ -127,7 +127,7 @@ Reserved Notation "{ 'sigma_finite_measure' 'set' T '->' '\bar' R }" Reserved Notation "{ 'finite_measure' 'set' T '->' '\bar' R }" (T at level 37, format "{ 'finite_measure' 'set' T '->' '\bar' R }"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -181,9 +181,9 @@ Lemma semi_additiveW : mu set0 = 0 -> semi_additive -> semi_additive2. Proof. move=> mu0 amx A B mA mB + AB; rewrite -bigcup2inE bigcup_mkord. move=> /(amx (bigcup2 A B))->. -- by rewrite !(big_ord_recl, big_ord0)/= adde0. - by move=> [|[|[]]]//=. - by move=> [|[|i]] [|[|j]]/= _ _; rewrite ?(AB, setI0, set0I, setIC) => -[]. +- by rewrite !(big_ord_recl, big_ord0)/= adde0. Qed. End additivity. @@ -224,10 +224,10 @@ Lemma semi_sigma_additive_is_additive d (T : semiRingOfSetsType d) Proof. move=> mu0 samu A n Am Atriv UAm. have := samu (fun i => if (i < n)%N then A i else set0). -rewrite (bigcup_splitn n) bigcup0 ?setU0; last first. +rewrite (bigcup_splitn n) bigcup0 ?setU0. by move=> i _; rewrite -ltn_subRL subnn. under eq_bigr do rewrite ltn_ord. -move=> /(_ _ _ UAm)/(@cvg_lim _) <-//; last 2 first. +move=> /(_ _ _ UAm)/(@cvg_lim _) <-//. - by move=> i; case: ifP. - move=> i j _ _; do 2![case: ifP] => ? ?; do ?by rewrite (setI0, set0I) => -[]. by move=> /Atriv; apply. @@ -313,7 +313,7 @@ Lemma measure_semi_additive_ord n (F : 'I_n -> set T) : Proof. move=> mF tF mUF; pose F' (i : nat) := oapp F set0 (insub i). have FE (i : 'I_n) : F i = (F' \o val) i by rewrite /F'/= valK/=. -rewrite (eq_bigr (F' \o val))// (eq_bigr (mu \o F' \o val))//; last first. +rewrite (eq_bigr (F' \o val))// (eq_bigr (mu \o F' \o val))//. by move=> i _; rewrite FE. rewrite -measure_semi_additive//. - by move=> k; rewrite /F'; case: insubP => /=. @@ -397,10 +397,10 @@ Lemma measure_bigsetU_ord_cond n (P : {pred 'I_n}) (F : 'I_n -> set T) : mu (\big[setU/set0]_(i < n | P i) F i) = (\sum_(i < n | P i) mu (F i))%E. Proof. move=> mF tF; rewrite !(big_mkcond P)/= measure_semi_additive_ord//. -- by apply: eq_bigr => i _; rewrite (fun_if mu) measure0. - by move=> k; case: ifP => //; apply: mF. - by rewrite -patch_pred trivIset_restr setIT. - by apply: bigsetU_measurable=> k _; case: ifP => //; apply: mF. +- by apply: eq_bigr => i _; rewrite (fun_if mu) measure0. Qed. Lemma measure_bigsetU_ord n (P : {pred 'I_n}) (F : 'I_n -> set T) : @@ -510,10 +510,10 @@ Lemma measure_bigcup (D : set nat) F : (forall i, D i -> measurable (F i)) -> trivIset D F -> mu (\bigcup_(n in D) F n) = (\sum_(i mF tF; rewrite bigcup_mkcond measure_semi_bigcup. -- by rewrite [in RHS]eseries_mkcond; apply: eq_eseriesr => n _; case: ifPn. - by move=> i; case: ifPn => // /set_mem; exact: mF. - by move/trivIset_mkcond : tF. - by rewrite -bigcup_mkcond; exact: bigcup_measurable. +- by rewrite [in RHS]eseries_mkcond; apply: eq_eseriesr => n _; case: ifPn. Qed. End measure_lemmas. @@ -536,7 +536,7 @@ Let msum_ge0 B : 0 <= msum B. Proof. by rewrite /msum; apply: sume_ge0. Qed. Let msum_sigma_additive : semi_sigma_additive msum. Proof. move=> F mF tF mUF; rewrite [X in _ --> X](_ : _ = - lim ((fun n => \sum_(0 <= i < n) msum (F i)) @ \oo)). + lim ((fun n => \sum_(0 <= i < n) msum (F i)) @ \oo)); last first. by apply: is_cvg_ereal_nneg_natsum => k _; exact: sume_ge0. rewrite nneseries_sum//; apply: eq_bigr => /= i _. exact: measure_semi_bigcup. @@ -560,8 +560,9 @@ Let mzero_ge0 B : 0 <= mzero B. Proof. by []. Qed. Let mzero_sigma_additive : semi_sigma_additive mzero. Proof. -move=> F mF tF mUF; rewrite [X in X @ \oo--> _](_ : _ = cst 0); first exact: cvg_cst. -by apply/funext => n; rewrite big1. +move=> F mF tF mUF; rewrite [X in X @ \oo--> _](_ : _ = cst 0). + by apply/funext => n; rewrite big1. +exact: cvg_cst. Qed. HB.instance Definition _ := isMeasure.Build _ _ _ mzero @@ -602,10 +603,10 @@ Proof. by rewrite /mscale mule_ge0. Qed. Let mscale_sigma_additive : semi_sigma_additive mscale. Proof. move=> F mF tF mUF; rewrite [X in X @ \oo --> _](_ : _ = - (fun n => (r%:num)%:E * \sum_(0 <= i < n) m (F i))); last first. + (fun n => (r%:num)%:E * \sum_(0 <= i < n) m (F i))). by apply/funext => k; rewrite ge0_sume_distrr. rewrite /mscale; have [->|r0] := eqVneq r%:num 0%R. - rewrite mul0e [X in X @ \oo --> _](_ : _ = cst 0); first exact: cvg_cst. + rewrite mul0e [X in X @ \oo --> _](_ : _ = cst 0); last exact: cvg_cst. by under eq_fun do rewrite mul0e. by apply: cvgeZl => //; exact: measure_semi_sigma_additive. Qed. @@ -632,7 +633,7 @@ Proof. by rewrite /mseries ereal_series nneseries_esum//; exact: esum_ge0. Qed. Let mseries_sigma_additive : semi_sigma_additive mseries. Proof. move=> F mF tF mUF; rewrite [X in _ --> X](_ : _ = - lim ((fun n => \sum_(0 <= i < n) mseries (F i)) @ \oo)); last first. + lim ((fun n => \sum_(0 <= i < n) mseries (F i)) @ \oo)). rewrite [in LHS]/mseries. transitivity (\sum_(n <= k i /mem_set Di; apply: measurableI; [exact: Em|exact: Fm]. - by rewrite -XDF; exact: Em. -rewrite exchange_fsbig //; last exact: decomp_finite_set. +rewrite exchange_fsbig //; first exact: decomp_finite_set. apply: eq_fsbigr => i Di; have Feq : F i = \bigcup_(X in E) (X `&` F i). rewrite -setI_bigcupl setIidr// cover_decomp. by apply/bigcup_sup; exact: set_mem. @@ -904,9 +905,9 @@ have AUBtriv : trivIset (A `|` B) id. by move=> [u [Xu Yu]]; case: (coverAB0 u); split; [exists X|exists Y]. by move=> [u [Xu Yu]]; case: (coverAB0 u); split; [exists Y|exists X]. rewrite -bigcup_setU !Rmu_fin_bigcup//=. -- rewrite fsbigU//= => [X /= [XA XB]]; have [->//|/set0P[x Xx]] := eqVneq X set0. - by case: (coverAB0 x); split; exists X. -- by move=> X /set_mem [|] /mem_set ?; [exact: Am|exact: Bm]. + by move=> X /set_mem [|] /mem_set ?; [exact: Am|exact: Bm]. +rewrite fsbigU//= => [X /= [XA XB]]; have [->//|/set0P[x Xx]] := eqVneq X set0. +by case: (coverAB0 x); split; exists X. Qed. #[export] @@ -932,9 +933,9 @@ Proof. move=> A B; rewrite ?inE => mA mB AB; have [|muBfin] := leP +oo%E (mu B). by rewrite leye_eq => /eqP ->; rewrite leey. rewrite -[leRHS]SetRing.RmuE// -[B](setDUK AB) measureU/= ?setDIK//. -- by rewrite SetRing.RmuE ?leeDl. - exact: sub_gen_smallest. - by apply: measurableD; exact: sub_gen_smallest. +- by rewrite SetRing.RmuE ?leeDl. Qed. Lemma measure_le0 d (T : semiRingOfSetsType d) (R : realFieldType) @@ -967,7 +968,7 @@ have DU0 i : (i >= n)%N -> seqDU B i = set0. rewrite -SetRing.RmuE// XE bigsetU_seqDU measure_bigsetU//. rewrite [leRHS](big_ord_widen n (mu \o A))//= [leRHS]big_mkcond/=. rewrite lee_sum => // i _; case: ltnP => ltin; last by rewrite DU0 ?measure0. -rewrite -[leRHS]SetRing.RmuE; last exact: Am. +rewrite -[leRHS]SetRing.RmuE; first exact: Am. by rewrite le_measure ?inE//=; last by apply: sub_gen_smallest; apply: Am. Qed. @@ -1054,9 +1055,9 @@ Lemma ring_sigma_subadditive : measurable_subset_sigma_subadditive Rmu. Proof. move=> muS; move=> /= D A Am Dm Dsub. -rewrite /Rmu -(eq_eseriesr (fun _ _ => esum_fset _ _))//; last first. +rewrite /Rmu -(eq_eseriesr (fun _ _ => esum_fset _ _))//. by move=> *; exact: decomp_finite_set. -rewrite nneseries_esum ?esum_esum//=; last by move=> *; rewrite esum_ge0. +rewrite nneseries_esum ?esum_esum//=; first by move=> *; rewrite esum_ge0. set K := _ `*`` _. have /ppcard_eqP[f] : (K #= [set: nat])%card. apply: cardXR_eq_nat => [|i]. @@ -1079,9 +1080,9 @@ have mfD i X : X \in decomp D -> measurable (((f^-1)%FUN i).2 `&` X : set T). by move=> XD; apply: measurableI; [exact: mf|exact: (decomp_measurable _ XD)]. apply: (@le_trans _ _ (\sum_(i X /[!in_fset_set]; last exact: decomp_finite_set. + rewrite lee_sum// => X /[!in_fset_set]; first exact: decomp_finite_set. move=> XD; have Xm := decomp_measurable Dm XD. by apply: muS => // [i|]; [exact: mfD|exact: DXsub]. apply: lee_lim => /=; do ?apply: is_cvg_nneseries=> //. @@ -1089,17 +1090,17 @@ apply: lee_lim => /=; do ?apply: is_cvg_nneseries=> //. near=> n; rewrite [n in _ <= n]big_mkcond; apply: lee_sum => i _. rewrite ifT ?inE//. under eq_big_seq. - move=> x; rewrite in_fset_set=> [xD|]; last exact: decomp_finite_set. - rewrite -RmuE//; last exact: mfD. + move=> x; rewrite in_fset_set=> [|xD]; first exact: decomp_finite_set. + rewrite -RmuE//; first exact: mfD. over. -rewrite -fsbig_finite/=; last exact: decomp_finite_set. +rewrite -fsbig_finite/=; first exact: decomp_finite_set. rewrite -measure_fin_bigcup//=. -- rewrite -setI_bigcupr (cover_decomp D) -[leRHS]RmuE// ?le_measure ?inE//. - by apply: measurableI => //; apply: sub_gen_smallest; apply: mf. - by apply: sub_gen_smallest; apply: mf. - exact: decomp_finite_set. - by apply: trivIset_setIl; apply: decomp_triv. - by move=> X /= XD; apply: sub_gen_smallest; apply: mfD; rewrite inE. +rewrite -setI_bigcupr (cover_decomp D) -[leRHS]RmuE// ?le_measure ?inE//. + by apply: measurableI => //; apply: sub_gen_smallest; apply: mf. +by apply: sub_gen_smallest; apply: mf. Unshelve. all: by end_near. Qed. Lemma ring_semi_sigma_additive : @@ -1170,15 +1171,15 @@ pose g n := (f' n).2; have fVtriv : trivIset [set: nat] g. - by move/mem_set : f'jB => /decomp_sub; apply. have g_inj : set_inj [set i | g i != set0] g. by apply: trivIset_inj=> [i /set0P//|]; apply: sub_trivIset fVtriv. -move=> XEbig; rewrite measure_semi_bigcup//= -?XEbig//; last first. +move=> XEbig; rewrite measure_semi_bigcup//= -?XEbig//. move=> i; have [/= _ /mem_set] : K (f' i) by apply: funS. exact: decomp_measurable. -rewrite [leLHS](_ : _ = \sum_(i i _; rewrite ifT ?inE//=; case: ifPn => //. by rewrite notin_setE /= -/(g _) => /negP/negPn/eqP ->. rewrite -(esum_pred_image mu g)//. -rewrite [leLHS](_ : _ = \esum_(X in range g) mu X); last first. +rewrite [leLHS](_ : _ = \esum_(X in range g) mu X). rewrite esum_mkcond [RHS]esum_mkcond; apply: eq_esum. move=> Y _; case: ifPn; rewrite ?(inE, notin_setE)/=. by move=> [i giN0 giY]; rewrite ifT// ?inE//=; exists i. @@ -1190,7 +1191,7 @@ have -> : range g = \bigcup_i (decomp (seqDU B i)). have [/= _ f'nB] : K (f' n) by apply: funS. by exists (f' n).1 => //=; rewrite -gnY. by exists (f (n, Y)) => //; rewrite /g /f' funK//= inE. -rewrite esum_bigcup//; last first. +rewrite esum_bigcup//. move=> i j /=. have [->|/set0P DUBiN0] := eqVneq (seqDU B i) set0. rewrite decomp_set0 ?set_fset1 => /negP[]. @@ -1206,9 +1207,9 @@ rewrite esum_bigcup//; last first. apply: (@trivIset_seqDU _ B) => //; exists y. by split => //; [exact: YBi|exact: YBj]. rewrite nneseries_esumT// le_esum// => i _. -rewrite [leLHS](_ : _ = \sum_(j \in decomp (seqDU B i)) mu j); last first. +rewrite [leLHS](_ : _ = \sum_(j \in decomp (seqDU B i)) mu j). by rewrite esum_fset//; exact: decomp_finite_set. -rewrite -SetRing.Rmu_fin_bigcup//=; last 3 first. +rewrite -SetRing.Rmu_fin_bigcup//=. exact: decomp_finite_set. exact: decomp_triv. by move=> ?; exact: decomp_measurable. @@ -1229,11 +1230,11 @@ Lemma measure_sigma_subadditive_tail d (R : realType) (T : semiRingOfSetsType d) Proof. move=> mF mA AF; rewrite eseries_cond eseries_mkcondr. rewrite (@eq_eseriesr _ _ (fun n => mu (if (N <= n)%N then F n else set0))). -- apply: measure_sigma_subadditive => //. - + by move=> n; case: ifPn. - + move: AF; rewrite bigcup_mkcond. - by under eq_bigcupr do rewrite mem_not_I. -- by move=> o _; rewrite (fun_if mu) measure0. + by move=> o _; rewrite (fun_if mu) measure0. +apply: measure_sigma_subadditive => //. + by move=> n; case: ifPn. +move: AF; rewrite bigcup_mkcond. +by under eq_bigcupr do rewrite mem_not_I. Qed. Section ring_sigma_content. @@ -1578,11 +1579,11 @@ Lemma measureDI A B : measurable A -> measurable B -> mu A = mu (A `\` B) + mu (A `&` B). Proof. move=> mA mB; rewrite -measure_semi_additive2. -- by rewrite -setDDr setDv setD0. - exact: measurableD. - exact: measurableI. - by apply: measurableU; [exact: measurableD |exact: measurableI]. - by rewrite setDE setIACA setICl setI0. +- by rewrite -setDDr setDv setD0. Qed. Lemma measureD A B : measurable A -> measurable B -> @@ -1590,8 +1591,8 @@ Lemma measureD A B : measurable A -> measurable B -> Proof. move=> mA mB mAoo. rewrite (measureDI mA mB) addeK// fin_numE 1?gt_eqF 1?lt_eqF//. -- by rewrite (le_lt_trans _ mAoo)// le_measure // ?inE//; exact: measurableI. -- by rewrite (lt_le_trans _ (measure_ge0 _ _)). + by rewrite (lt_le_trans _ (measure_ge0 _ _)). +by rewrite (le_lt_trans _ mAoo)// le_measure // ?inE//; exact: measurableI. Qed. Lemma measureU2 A B : measurable A -> measurable B -> @@ -1615,10 +1616,10 @@ Lemma measureUfinr A B : measurable A -> measurable B -> mu B < +oo -> mu (A `|` B) = mu A + mu B - mu (A `&` B). Proof. move=> Am Bm mBfin; rewrite -[B in LHS](setDUK (@subIsetl _ _ A)) setUA. -rewrite [A `|` _]setUidl; last exact: subIsetr. -rewrite measureU//=; [|rewrite setDIr setDv set0U ?setDIK//..]. -- by rewrite measureD// ?setIA ?setIid 1?setIC ?addeA//; exact: measurableI. -- exact: measurableD. +rewrite [A `|` _]setUidl; first exact: subIsetr. +rewrite measureU//=; [rewrite setDIr setDv set0U ?setDIK//..|]. + exact: measurableD. +by rewrite measureD// ?setIA ?setIid 1?setIC ?addeA//; exact: measurableI. Qed. Lemma measureUfinl A B : measurable A -> measurable B -> mu A < +oo -> @@ -1727,7 +1728,7 @@ have HE : H `<=` E. by move=> X HX; rewrite /E /=; split; [exact: Hm|exact: m1m2|case: HX]. have setDE : setSD_closed E. move=> A B BA [mA m1m2A AD] [mB m1m2B BD]; split; first exact: measurableD. - - rewrite measureD//; last first. + - rewrite measureD//. by rewrite (le_lt_trans _ m1oo)//; apply: le_measure => // /[!inE]. rewrite setIidr//= m1m2A m1m2B measureD// ?setIidr//. by rewrite (le_lt_trans _ m1oo)//= -m1m2A; apply: le_measure => // /[!inE]. diff --git a/theories/measure_theory/measure_negligible.v b/theories/measure_theory/measure_negligible.v index e0435b2836..eb18cf63c4 100644 --- a/theories/measure_theory/measure_negligible.v +++ b/theories/measure_theory/measure_negligible.v @@ -50,7 +50,7 @@ Reserved Notation "f = g %[ae mu ]" Reserved Notation "m .-null_set" (at level 2, format "m .-null_set"). Reserved Notation "m1 `<< m2" (at level 51). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -139,17 +139,17 @@ Lemma negligible_bigcup d (T : sigmaRingType d) (R : realFieldType) Proof. move=> mF; exists (\bigcup_k sval (cid (mF k))); split. - by apply: bigcupT_measurable => // k; have [] := svalP (cid (mF k)). -- rewrite seqDU_bigcup_eq measure_bigcup//; last first. +- rewrite seqDU_bigcup_eq measure_bigcup//. move=> k _; apply: measurableD; first by case: cid => //= A []. by apply: bigsetU_measurable => i _; case: cid => //= A []. rewrite eseries0// => k _ _. have [mFk mFk0 ?] := svalP (cid (mF k)). rewrite measureD//=. - + rewrite mFk0 sub0e eqe_oppLRP oppe0; apply/eqP; rewrite -measure_le0. - rewrite -[leRHS]mFk0 le_measure//= ?inE//; apply: measurableI => //. - by apply: bigsetU_measurable => i _; case: cid => // A []. + by apply: bigsetU_measurable => i _; case: cid => // A []. + by rewrite mFk0. + rewrite mFk0 sub0e eqe_oppLRP oppe0; apply/eqP; rewrite -measure_le0. + rewrite -[leRHS]mFk0 le_measure//= ?inE//; apply: measurableI => //. + by apply: bigsetU_measurable => i _; case: cid => // A []. - by apply: subset_bigcup => k _; rewrite /sval/=; by case: cid => //= A []. Qed. @@ -374,7 +374,7 @@ Lemma null_setU m B : measurable B -> Proof. move=> mB; split=> [nullB A mA|B0 A mA AB]. - apply/eqP; rewrite eq_le. - rewrite (@le_measure _ _ _ _ A) ?inE ?andbT//; last exact: measurableU. + rewrite (@le_measure _ _ _ _ A) ?inE ?andbT//; first exact: measurableU. by rewrite (le_trans (measureU2 _ _ _))// (nullB B)// adde0. - apply/eqP; rewrite eq_le measure_ge0 andbT. by rewrite -(measure0 m) -[leRHS]B0// set0U le_measure// inE. diff --git a/theories/measure_theory/probability_measure.v b/theories/measure_theory/probability_measure.v index 7d29e1a26d..1e76ec5c72 100644 --- a/theories/measure_theory/probability_measure.v +++ b/theories/measure_theory/probability_measure.v @@ -38,7 +38,7 @@ From mathcomp Require Import measurable_structure measure_function dirac_measure (* ``` *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -108,8 +108,8 @@ Proof. by move=> mA; rewrite -(probability_setT P) ?le_measure ?in_setE. Qed. Lemma probability_setC (A : set T) : measurable A -> P (~` A) = 1 - P A. Proof. move=> mA; rewrite -(probability_setT P) -(setvU A) measureU ?addeK ?setICl//. -- by rewrite fin_num_measure. -- exact: measurableC. + exact: measurableC. +by rewrite fin_num_measure. Qed. End probability_lemmas. @@ -161,7 +161,7 @@ Proof. move=> F mF tF mUF; rewrite /mnormalize/=. case: ifPn => [_|_]; first exact: measure_semi_sigma_additive. rewrite [X in X @ _ --> _](_ : _ = (fun n => \sum_(0 <= i < n) mu (F i)) \* - cst (fine (mu setT))^-1%:E); last first. + cst (fine (mu setT))^-1%:E). by apply/funext => n; rewrite -ge0_sume_distrl. by apply: cvgeZr => //; exact: measure_semi_sigma_additive. Qed. diff --git a/theories/normedtype_theory/complete_normed_module.v b/theories/normedtype_theory/complete_normed_module.v index cb95c2de88..8ddd3be1bd 100644 --- a/theories/normedtype_theory/complete_normed_module.v +++ b/theories/normedtype_theory/complete_normed_module.v @@ -15,7 +15,7 @@ From mathcomp Require Import normed_module. (* ``` *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -47,18 +47,17 @@ have D_has_sup : has_sup D; first split. exists (sup D). apply/cvgrPdist_le => /= _ /posnumP[eps]; near=> x. rewrite ler_distl; move/ubP: (sup_upper_bound D_has_sup) => -> //=. - apply: ge_sup => //; first by case: D_has_sup. - have Fxeps : F (ball_ Num.norm x eps%:num). - by near: x; apply: nearP_dep; apply: F_cauchy. - apply/ubP => y /(_ _ Fxeps) /downP[z]. - rewrite /ball_/= ltr_distl ltrBlDr. - by move=> /andP [/ltW /(le_trans _) le_xeps _ /le_xeps]. -rewrite /D /= => A FA; near F => y. -apply/downP; exists y. - by near: y. -rewrite lerBlDl -lerBlDr ltW //. -suff: `|x - y| < eps%:num by rewrite ltr_norml => /andP[_]. -by near: y; near: x; apply: nearP_dep; apply: F_cauchy. + rewrite /D /= => A FA; near F => y. + apply/downP; exists y; first by near: y. + rewrite lerBlDl -lerBlDr ltW //. + suff: `|x - y| < eps%:num by rewrite ltr_norml => /andP[_]. + by near: y; near: x; apply: nearP_dep; apply: F_cauchy. +apply: ge_sup => //; first by case: D_has_sup. +have Fxeps : F (ball_ Num.norm x eps%:num). + by near: x; apply: nearP_dep; apply: F_cauchy. +apply/ubP => y /(_ _ Fxeps) /downP[z]. +rewrite /ball_/= ltr_distl ltrBlDr. +by move=> /andP [/ltW /(le_trans _) le_xeps _ /le_xeps]. Unshelve. all: by end_near. Qed. HB.instance Definition _ (R : realType) := Uniform_isComplete.Build R^o diff --git a/theories/normedtype_theory/ereal_normedtype.v b/theories/normedtype_theory/ereal_normedtype.v index a8cf4c4c0f..fda82619eb 100644 --- a/theories/normedtype_theory/ereal_normedtype.v +++ b/theories/normedtype_theory/ereal_normedtype.v @@ -29,7 +29,7 @@ From mathcomp Require Import real_interval num_normedtype. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -280,18 +280,18 @@ Implicit Types r : R. Lemma open_ereal_lt y : open [set r : R | r%:E < y]. Proof. case: y => [y||] /=; first exact: open_lt. -- rewrite (_ : [set _ | _] = setT); first exact: openT. +- rewrite (_ : [set _ | _] = setT); last exact: openT. by rewrite funeqE => ? /=; rewrite ltry trueE. -- rewrite (_ : [set _ | _] = set0); first exact: open0. +- rewrite (_ : [set _ | _] = set0); last exact: open0. by rewrite funeqE => ? /=; rewrite falseE. Qed. Lemma open_ereal_gt y : open [set r : R | y < r%:E]. Proof. case: y => [y||] /=; first exact: open_gt. -- rewrite (_ : [set _ | _] = set0); first exact: open0. +- rewrite (_ : [set _ | _] = set0); last exact: open0. by rewrite funeqE => ? /=; rewrite falseE. -- rewrite (_ : [set _ | _] = setT); first exact: openT. +- rewrite (_ : [set _ | _] = setT); last exact: openT. by rewrite funeqE => ? /=; rewrite ltNyr trueE. Qed. @@ -346,14 +346,14 @@ Qed. Lemma closed_ereal_le_ereal y : closed [set x | y <= x]. Proof. -rewrite (_ : [set x | y <= x] = ~` [set x | y > x]); last first. +rewrite (_ : [set x | y <= x] = ~` [set x | y > x]). by rewrite predeqE=> x; split=> [rx|/negP]; [apply/negP|]; rewrite -leNgt. exact/open_closedC/open_ereal_lt_ereal. Qed. Lemma closed_ereal_ge_ereal y : closed [set x | y >= x]. Proof. -rewrite (_ : [set x | y >= x] = ~` [set x | y < x]); last first. +rewrite (_ : [set x | y >= x] = ~` [set x | y < x]). by rewrite predeqE=> x; split=> [rx|/negP]; [apply/negP|]; rewrite -leNgt. exact/open_closedC/open_ereal_gt_ereal. Qed. diff --git a/theories/normedtype_theory/matrix_normedtype.v b/theories/normedtype_theory/matrix_normedtype.v index 7e40862fc6..8f835f09ce 100644 --- a/theories/normedtype_theory/matrix_normedtype.v +++ b/theories/normedtype_theory/matrix_normedtype.v @@ -19,7 +19,7 @@ From mathcomp Require Import normed_module. (* ``` *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -102,7 +102,7 @@ Proof. case: n A => [A _ | ]; last exact: rV_compact_nondegenerate. have P0 : #|{: 'I_1 * 'I_0}| = 0 by rewrite card_prod/= !card_ord muln0. pose v0 := Matrix (ffun0 P0 : {ffun 'I_1 * 'I_0 -> T}). -rewrite (_ : mkset _ = [set v0]); first exact: compact_set1. +rewrite (_ : mkset _ = [set v0]); last exact: compact_set1. by rewrite predeqE => x /=; split => [ _ | _ []//]; apply/rowP => -[]. Qed. @@ -133,8 +133,8 @@ Qed. Lemma mx_norm0 : mx_norm 0 = 0. Proof. rewrite /mx_norm (eq_bigr (fun=> 0%R%:nng)) /=. - by elim/big_ind : _ => // a b; rewrite num_max => -> ->; rewrite maxxx. -by move=> i _; apply val_inj => /=; rewrite mxE normr0. + by move=> i _; apply val_inj => /=; rewrite mxE normr0. +by elim/big_ind : _ => // a b; rewrite num_max => -> ->; rewrite maxxx. Qed. Lemma mx_norm_neq0 x : mx_norm x != 0 -> exists i, mx_norm x = `|x i.1 i.2|. @@ -155,7 +155,7 @@ rewrite !mulrS; apply/eqP; rewrite eq_le; apply/andP; split. by rewrite -ih; exact/ler_mx_norm_add. have [/mx_norm_eq0->|x0] := eqVneq (mx_norm x) 0. by rewrite -/(mx_norm 0) -/(mx_norm 0) !(mul0rn,addr0,mx_norm0). -rewrite -/(mx_norm x) -num_abs_le; last by rewrite mx_normE. +rewrite -/(mx_norm x) -num_abs_le; first by rewrite mx_normE. apply/bigmax_geP; right => /=. have [i Hi] := mx_norm_neq0 x0. exists i => //; rewrite Hi -!mulrS -normrMn mulmxnE. @@ -241,7 +241,7 @@ Lemma mx_normZ (K : numDomainType) m n (l : K) (x : 'M[K]_(m, n)) : `| l *: x | = `| l | * `| x |. Proof. rewrite {1 3}/normr /= !mx_normE - (eq_bigr (fun i => (`|l| * `|x i.1 i.2|)%:nng)); last first. + (eq_bigr (fun i => (`|l| * `|x i.1 i.2|)%:nng)). by move=> i _; rewrite mxE //=; apply/eqP; rewrite -num_eq /= normrM. elim/big_ind2 : _ => // [|a b c d bE dE]; first by rewrite mulr0. by rewrite !num_max bE dE maxr_pMr. diff --git a/theories/normedtype_theory/normed_module.v b/theories/normedtype_theory/normed_module.v index b75ca9968b..77e998cc22 100644 --- a/theories/normedtype_theory/normed_module.v +++ b/theories/normedtype_theory/normed_module.v @@ -63,7 +63,7 @@ Reserved Notation "k .-lipschitz f" (at level 2, format "k .-lipschitz f"). Reserved Notation "[ 'lipschitz' E | x 'in' A ]" (at level 0, x name, format "[ 'lipschitz' E | x 'in' A ]"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -118,7 +118,7 @@ Proof. apply/convex_setW => z y; rewrite !inE -!ball_normE /= => zx yx l l0 l1. rewrite inE/=. rewrite [X in `|X|](_ : _ = (x - z : convex_lmodType _) <| l |> - (x - y : convex_lmodType _)); last first. + (x - y : convex_lmodType _)). by rewrite opprD -[in LHS](convmm l x) addrACA -scalerBr -scalerBr. rewrite (le_lt_trans (ler_normD _ _))// !normrZ. rewrite (@ger0_norm _ l%:num)// (@ger0_norm _ l%:num.~) ?onem_ge0//. @@ -348,11 +348,11 @@ Proof. move=> ab xab xf; apply/cvgrPdist_lt => /= e e0. move/cvgrPdist_lt : xf => /(_ e e0) xf. near=> z. -rewrite patchE ifT//; last first. +rewrite patchE ifT//. rewrite inE; apply: subset_itv_oo_cc. by near: z; exact: near_in_itvoo. near: z. -rewrite /prop_near1 /nbhs/= /nbhs_subspace ifT// in xf; last first. +rewrite /prop_near1 /nbhs/= /nbhs_subspace ifT// in xf. by rewrite inE/=; exact: subset_itv_oo_cc xab. case: xf => x0 /= x00 xf. near=> z. @@ -884,7 +884,7 @@ near (0%R : R)^'+ => e; near=> A; near=> n. rewrite (@le_trans _ _ (f n * e%:E))// ?lee_pmul// ?lee_fin//. - by rewrite -lee_pdivrMr ?divr_gt0//; near: n; apply: foo. - by rewrite (@le_trans _ _ 1) ?lee_fin//; near: n; apply: foo. -rewrite -(@fineK _ (g n)) ?lee_fin; last by near: n; exact: gfin. +rewrite -(@fineK _ (g n)) ?lee_fin; first by near: n; exact: gfin. by near: n; apply: (cvgr_ge b). Unshelve. all: end_near. Qed. @@ -897,7 +897,7 @@ rewrite -leeN2 -muleN (@le_trans _ _ (f n * e%:E))//. by rewrite -lee_pdivrMr ?mulr_gt0 ?oppr_gt0//; near: n; apply: foo. rewrite lee_pmul ?lee_fin//. by rewrite (@le_trans _ _ 1) ?lee_fin//; near: n; apply: foo. -rewrite -(@fineK _ (g n)) ?lee_fin; last by near: n; exact: gfin. +rewrite -(@fineK _ (g n)) ?lee_fin; first by near: n; exact: gfin. near: n; apply: (cvgr_ge (- b)); rewrite 1?cvgNP//. by near: e; apply: nbhs_right_lt; rewrite oppr_gt0. Unshelve. all: end_near. Qed. @@ -929,7 +929,7 @@ move=> [:apoo] [:bnoo] [:poopoo] [:poonoo]; move: a b => [a| |] [b| |] //. by near do apply: fin_numM; [apply: finf | apply: fing]. apply: (@cvg_trans _ (((fine \o f) \* (fine \o g)) @ F)%R). apply: near_eq_cvg; near=> n => //=. - rewrite -[in RHS](@fineK _ (f n)); last by near: n; exact: finf. + rewrite -[in RHS](@fineK _ (f n)); first by near: n; exact: finf. by rewrite -[in RHS](@fineK _ (g n)) //; near: n; exact: fing. exact: cvgM. - move: f g a; abstract: apoo. @@ -1172,7 +1172,7 @@ Lemma gtr0_cvgV0 f : (\near a, 0 < f a) -> f\^-1 @ a --> 0 <-> f @ a --> +oo. Proof. move=> f_gt0; split; last first. move=> /cvgryPgt cvg_f_oo; apply/cvgr0Pnorm_lt => _/posnumP[e]. - near=> i; rewrite gtr0_norm ?invr_gt0//=; last by near: i. + near=> i; rewrite gtr0_norm ?invr_gt0//=; first by near: i. by rewrite -ltf_pV2 ?qualifE/= ?invr_gt0 ?invrK//=; near: i. move=> /cvgr0Pnorm_lt uB; apply/cvgryPgty. near=> M; near=> i; suff: `|(f i)^-1| < M^-1. @@ -1187,7 +1187,7 @@ Unshelve. all: by end_near. Qed. Lemma ltr0_cvgV0 f : (\near a, 0 > f a) -> f\^-1 @ a --> 0 <-> f @ a --> -oo. Proof. -move=> fL0; rewrite -cvgNP oppr0 (_ : - f\^-1 = (- f)\^-1); last first. +move=> fL0; rewrite -cvgNP oppr0 (_ : - f\^-1 = (- f)\^-1). by apply/funeqP => i; rewrite opprfctE/= invrN. by rewrite gtr0_cvgV0 ?cvgNry//; near do rewrite oppr_gt0. Unshelve. all: by end_near. Qed. @@ -1209,8 +1209,8 @@ Proof. move=> fgh l lfa lga; apply/cvgrPdist_lt => e e_gt0. near=> x; have /(_ _)/andP[//|fg gh] := near fgh x. rewrite distrC ltr_distl (lt_le_trans _ fg) ?(le_lt_trans gh)//=. - by near: x; apply: (cvgr_lt l); rewrite // ltrDl. -by near: x; apply: (cvgr_gt l); rewrite // gtrDl oppr_lt0. + by near: x; apply: (cvgr_gt l); rewrite // gtrDl oppr_lt0. +by near: x; apply: (cvgr_lt l); rewrite // ltrDl. Unshelve. all: end_near. Qed. Lemma ger_cvgy f g : (\near a, f a <= g a) -> @@ -1408,11 +1408,11 @@ split => [cE x y Ex Ey z /andP[xz zy]|]. by exists x; split => //; rewrite /mkset lexx /= (ltW xy). by move: sepA; rewrite /separated => -[] /disjoints_subset + _; apply. have /andP[xz zy] : x <= z < y. - rewrite ub_le_sup//=; [|by exists y => u [_] /andP[]|]. - + rewrite lt_neqAle ge_sup ?andbT; last by move=> u [_] /andP[]. - * by apply/negP; apply: contraPnot A1y => /eqP <-. - * by exists x; split => //; rewrite /mkset /= lexx /= (ltW xy). + rewrite ub_le_sup//=; [by exists y => u [_] /andP[]| |]. + by split=> //; rewrite /mkset lexx (ltW xy). + + rewrite lt_neqAle ge_sup ?andbT; [|by move=> u [_] /andP[]|]. + * by exists x; split => //; rewrite /mkset /= lexx /= (ltW xy). + * by apply/negP; apply: contraPnot A1y => /eqP <-. have [A0z|A0z] := pselect ((A false) z); last first. have {}xzy : x <= z <= y by rewrite xz ltW. have : ~ E z by rewrite EU => -[]. @@ -1579,10 +1579,10 @@ apply: segment_connected. move=> z /= ayz; have [lezx|ltxz] := lerP z x. by apply/saxUf; rewrite /= in_itv/= (itvP ayz) lezx. exists i => //; apply/xe_fi; rewrite /ball_/= distrC ger0_norm. - have lezy : z <= y by rewrite (itvP ayz). - rewrite ltrBlDl; apply: le_lt_trans lezy _; rewrite -ltrBlDr. - by have := xe_y; rewrite /ball_ => /ltr_distlCBl. - by rewrite subr_ge0; apply/ltW. + by rewrite subr_ge0; apply/ltW. + have lezy : z <= y by rewrite (itvP ayz). + rewrite ltrBlDl; apply: le_lt_trans lezy _; rewrite -ltrBlDr. + by have := xe_y; rewrite /ball_ => /ltr_distlCBl. exists A; last by rewrite predeqE => x; split=> [[] | []]. move=> x clAx; have abx : x \in `[a, b]. by apply: interval_closed; have /closureI [] := clAx. @@ -1598,7 +1598,7 @@ have [lezy|ltyz] := lerP z y. have /sayUf [j Dj fjz] : z \in `[a, y] by rewrite in_itv /= (itvP axz) lezy. by exists j => //=; rewrite inE orbC Dj. exists i; first by rewrite /= !inE eq_refl. -apply/xe_fi; rewrite /ball_/= ger0_norm; last by rewrite subr_ge0 (itvP axz). +apply/xe_fi; rewrite /ball_/= ger0_norm; first by rewrite subr_ge0 (itvP axz). rewrite ltrBlDl -ltrBlDr; apply: lt_trans ltyz. by apply: ltr_distlCBl; rewrite distrC. Qed. @@ -2034,7 +2034,7 @@ exists (y + (s / 2) *: (`|x - y|^-1 *: (x - y))); split; [apply: Be|apply: B0y]. rewrite /= opprD addrA -[X in `|X - _|](scale1r (x - y)) scalerA -scalerBl. rewrite -[X in X - _](@divff _ `|x - y|) ?normr_eq0 ?subr_eq0//. rewrite -mulrBl -scalerA normrZ normfZV ?subr_eq0// mulr1. - rewrite gtr0_norm; first by rewrite ltrBlDl xye ltrDr mulr_gt0. + rewrite gtr0_norm; last by rewrite ltrBlDl xye ltrDr mulr_gt0. by rewrite subr_gt0 xye ltr_pdivrMr // mulr_natr mulr2n ltr_pwDl. rewrite -ball_normE /ball_ /= opprD addNKr normrN normrZ normfZV ?subr_eq0//. by rewrite mulr1 normf_div !gtr0_norm// ltr_pdivrMr// ltr_pMr //ltr1n. @@ -2051,8 +2051,8 @@ Lemma closed_ball_ball {R : realFieldType} (x r : R) : 0 < r -> closed_ball x r = [set x - r] `|` ball x r `|` [set x + r]. Proof. move=> r0; rewrite closed_ball_itv// -(setUitv_set2 false true). - by rewrite setUAC setUC ball_itv. -by rewrite lerD2l ge0_cp// ltW. + by rewrite lerD2l ge0_cp// ltW. +by rewrite setUAC setUC ball_itv. Qed. Lemma closed_ballR_compact (R : realType) (x e : R) : 0 < e -> @@ -2186,7 +2186,7 @@ Lemma interior_closed_ballE (R : realType) (V : normedModType R) (x : V) (r : R) : 0 < r -> (closed_ball x r)° = ball x r. Proof. move=> r0; rewrite eqEsubset; split; last first. - by rewrite -open_subsetE; [exact: subset_closure | exact: ball_open]. + by rewrite -open_subsetE; [exact: ball_open | exact: subset_closure]. move=> /= t; rewrite closed_ballE // /interior /= -nbhs_ballE => [[]] s s0. have [-> _|nxt] := eqVneq t x; first exact: ballxx. near ((0 : R^o)^') => e; rewrite -ball_normE /closed_ball_ => tsxr. @@ -2195,7 +2195,7 @@ pose z := t + `|e| *: (t - x); have /tsxr /= : `|t - z| < s. rewrite -ltr_pdivlMr ?(normr_gt0,subr_eq0) //. by near: e; apply/dnbhs0_lt; rewrite divr_gt0 // normr_gt0 subr_eq0. rewrite /z opprD addrA -scalerN -{1}(scale1r (x - t)) opprB -scalerDl normrZ. -apply lt_le_trans; rewrite ltr_pMl; last by rewrite normr_gt0 subr_eq0 eq_sym. +apply lt_le_trans; rewrite ltr_pMl; first by rewrite normr_gt0 subr_eq0 eq_sym. by rewrite ger0_norm // ltrDl normr_gt0; near: e; exists 1 => /=. Unshelve. all: by end_near. Qed. diff --git a/theories/normedtype_theory/num_normedtype.v b/theories/normedtype_theory/num_normedtype.v index e5f1cf5a55..daf8aef2b9 100644 --- a/theories/normedtype_theory/num_normedtype.v +++ b/theories/normedtype_theory/num_normedtype.v @@ -45,7 +45,7 @@ Reserved Notation "f @`] a , b [" (format "f @`] a , b ["). Reserved Notation "+oo_ R" (at level 3, left associativity, format "+oo_ R"). Reserved Notation "-oo_ R" (at level 3, left associativity, format "-oo_ R"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -632,7 +632,7 @@ Hint Resolve open_gt : core. Lemma open_neq y : open [set x | x != y]. Proof. -rewrite (_ : mkset _ = [set x | x < y] `|` [set x | x > y]); first exact: openU. +rewrite (_ : mkset _ = [set x | x < y] `|` [set x | x > y]); last exact: openU. by rewrite predeqE => x /=; rewrite neq_lt; symmetry; apply: (rwP orP). Qed. @@ -646,28 +646,28 @@ move: a b => [[]a|[]] [[]b|[]]// _ _. - by under eq_set do rewrite itv_ge// inE. - by under eq_set do rewrite in_itv andbT/=; exact: open_gt. - exact: open_lt. -- by rewrite (_ : mkset _ = setT); [exact: openT | rewrite predeqE]. +- by rewrite (_ : mkset _ = setT); [rewrite predeqE | exact: openT]. Qed. (* TODO: we can probably extend these results to numFieldType by adding a precondition that y \is Num.real *) Lemma closed_le y : closed [set x | x <= y]. Proof. -rewrite (_ : mkset _ = ~` [set x | x > y]); first exact: open_closedC. +rewrite (_ : mkset _ = ~` [set x | x > y]); last exact: open_closedC. by rewrite predeqE => x /=; rewrite leNgt; split => /negP. Qed. Lemma closed_ge y : closed [set x | y <= x]. Proof. -rewrite (_ : mkset _ = ~` [set x | x < y]); first exact: open_closedC. +rewrite (_ : mkset _ = ~` [set x | x < y]); last exact: open_closedC. by rewrite predeqE => x /=; rewrite leNgt; split => /negP. Qed. Lemma closed_eq y : closed [set x | x = y]. Proof. rewrite [X in closed X](_ : (eq^~ _) = ~` (xpredC (eq_op^~ y))). - by apply: open_closedC; exact: open_neq. -by rewrite predeqE /setC => x /=; rewrite (rwP eqP); case: eqP; split. + by rewrite predeqE /setC => x /=; rewrite (rwP eqP); case: eqP; split. +by apply: open_closedC; exact: open_neq. Qed. Lemma interval_closed a b : ~~ bound_side false a -> ~~ bound_side true b -> @@ -875,7 +875,7 @@ Proof. move=> iX bX aX; rewrite eqEsubset; split=> [r Xr|]. apply/andP; split; [exact: left_bounded_interior|exact: right_bounded_interior]. -rewrite -open_subsetE; last exact: (@interval_open _ (BRight _) (BLeft _)). +rewrite -open_subsetE; first exact: (@interval_open _ (BRight _) (BLeft _)). move=> r /andP[iXr rsX]. have [X0|/set0P X0] := eqVneq X set0. by move: (lt_trans iXr rsX); rewrite X0 inf_out ?sup_out ?ltxx // => - [[]]. @@ -889,10 +889,10 @@ Qed. Lemma interior_set1 (a : R) : [set a]° = set0. Proof. -rewrite interval_bounded_interior; first last. +rewrite interval_bounded_interior. +- by move=> ? ?/= -> -> r; rewrite -eq_le; move/eqP <-. - by exists a => [?]/= ->; apply: lexx. - by exists a => [?]/= ->; apply: lexx. -- by move=> ? ?/= -> -> r; rewrite -eq_le; move/eqP <-. - rewrite inf1 sup1 eqEsubset; split => // => x/=. by rewrite ltNge => /andP[/negP + ?]; apply; apply/ltW. Qed. @@ -904,11 +904,11 @@ have [|xy] := leP y x. rewrite le_eqVlt => /predU1P[-> |yx]. by case: a; case: b; rewrite set_itvoo0 ?set_itvE ?interior_set1 ?interior0. rewrite !set_itv_ge ?interior0//. - - by rewrite bnd_simp -leNgt ltW. - by case: a; case: b; rewrite bnd_simp -?leNgt -?ltNge ?ltW. -rewrite interval_bounded_interior//; last exact: interval_is_interval. -rewrite inf_itv; last by case: a; case b; rewrite bnd_simp ?ltW. -rewrite sup_itv; last by case: a; case b; rewrite bnd_simp ?ltW. + - by rewrite bnd_simp -leNgt ltW. +rewrite interval_bounded_interior//; first exact: interval_is_interval. +rewrite inf_itv; first by case: a; case b; rewrite bnd_simp ?ltW. +rewrite sup_itv; first by case: a; case b; rewrite bnd_simp ?ltW. exact: set_itvoo. Qed. @@ -916,20 +916,20 @@ Lemma interior_itv_bndy (x : R) (b : bool) : [set` Interval (BSide b x) (BInfty _ false)]° = `]x, +oo[%classic. Proof. rewrite interval_right_unbounded_interior//. -- rewrite inf_itv; last by case: b; rewrite bnd_simp ?ltW. - by rewrite set_itvoy. - exact: interval_is_interval. - by apply: hasNubound_itv; rewrite lt_eqF. +- rewrite inf_itv; first by case: b; rewrite bnd_simp ?ltW. + by rewrite set_itvoy. Qed. Lemma interior_itv_Nybnd (y : R) (b : bool) : [set` Interval (BInfty _ true) (BSide b y)]° = `]-oo, y[%classic. Proof. rewrite interval_left_unbounded_interior//. -- rewrite sup_itv; last by case b; rewrite bnd_simp ?ltW. - exact: set_itvNyo. - exact: interval_is_interval. - by apply: hasNlbound_itv; rewrite gt_eqF. +- rewrite sup_itv; first by case b; rewrite bnd_simp ?ltW. + exact: set_itvNyo. Qed. Lemma interior_itv_Nyy : diff --git a/theories/normedtype_theory/pseudometric_normed_Zmodule.v b/theories/normedtype_theory/pseudometric_normed_Zmodule.v index 687d6f3f6b..626f3296f5 100644 --- a/theories/normedtype_theory/pseudometric_normed_Zmodule.v +++ b/theories/normedtype_theory/pseudometric_normed_Zmodule.v @@ -63,7 +63,7 @@ From mathcomp Require Import prodnormedzmodule num_normedtype. Reserved Notation "[ 'bounded' E | x 'in' A ]" (at level 0, x name, format "[ 'bounded' E | x 'in' A ]"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -591,14 +591,14 @@ Qed. Lemma at_rightN (a : R) : (- a)^'+ = -%R @ a^'-. Proof. rewrite /at_right withinN [X in within X _](_ : _ = [set u | u < a])//. -rewrite (@fun_predC _ -%R)/=; last exact: opprK. +rewrite (@fun_predC _ -%R)/=; first exact: opprK. by rewrite image_id; under eq_fun do rewrite ltrNl opprK. Qed. Lemma at_leftN (a : R) : (- a)^'- = -%R @ a^'+. Proof. rewrite /at_left withinN [X in within X _](_ : _ = [set u | a < u])//. -rewrite (@fun_predC _ -%R)/=; last exact: opprK. +rewrite (@fun_predC _ -%R)/=; first exact: opprK. by rewrite image_id; under eq_fun do rewrite ltrNl opprK. Qed. @@ -996,7 +996,7 @@ Proof. move=> ab eps_gt0 cf. move/continuous_withinNx/cvgrPdist_lt/(_ _ eps_gt0) : (cf b). rewrite /dnbhs/= near_withinE !near_simpl /prop_near1 /nbhs/=. -rewrite -nbhs_subspace_in//; last first. +rewrite -nbhs_subspace_in//. rewrite /= in_itv/= lexx andbT. by move: a ab {cf} => [[a|a]/=|[|]//]; rewrite bnd_simp// => /ltW. rewrite /within/= near_simpl; apply: filter_app. @@ -1015,7 +1015,7 @@ Proof. move=> ab eps_gt0 cf. move/continuous_withinNx/cvgrPdist_lt/(_ _ eps_gt0) : (cf a). rewrite /dnbhs/= near_withinE !near_simpl// /prop_near1 /nbhs/=. -rewrite -nbhs_subspace_in//; last first. +rewrite -nbhs_subspace_in//. rewrite /= in_itv/= lexx//=. by move: b ab {cf} => [[b|b]/=|[|]//]; rewrite bnd_simp// => /ltW. rewrite /within/= near_simpl; apply: filter_app. @@ -1033,7 +1033,7 @@ Lemma continuous_within_itvP a b f : a < b -> Proof. move=> ab; split=> [abf|]. split; [apply/in_continuous_mksetP|apply/cvgrPdist_lt => eps eps_gt0 /=..]. - - rewrite -continuous_open_subspace; last exact: interval_open. + - rewrite -continuous_open_subspace; first exact: interval_open. by move: abf; exact/continuous_subspaceW/subset_itvW. - by apply: near_at_right => //; rewrite bnd_simp. - by apply: near_at_left => //; rewrite bnd_simp. @@ -1051,9 +1051,9 @@ rewrite !bnd_simp/= !le_eqVlt => /predU1P[<-{x}|ax] /predU1P[|]. have : c <= b by move: ac => /andP[]. by rewrite le_eqVlt => /predU1P[->|/[swap] /[apply]//]; rewrite subrr normr0. - move=> xb; have aboox : x \in `]a, b[ by rewrite !in_itv/= ax. - rewrite within_interior; first exact: ctsoo. + rewrite within_interior; last exact: ctsoo. suff : `]a, b[ `<=` interior `[a, b] by exact. - by rewrite -open_subsetE; [exact: subset_itvW| exact: interval_open]. + by rewrite -open_subsetE; [exact: interval_open | exact: subset_itvW]. Qed. Lemma continuous_within_itvcyP a f : @@ -1062,7 +1062,7 @@ Lemma continuous_within_itvcyP a f : Proof. split=> [cf|]. split; [apply/in_continuous_mksetP|apply/cvgrPdist_lt => eps eps_gt0 /=]. - - rewrite -continuous_open_subspace; last exact: interval_open. + - rewrite -continuous_open_subspace; first exact: interval_open. by apply: continuous_subspaceW cf => ?; rewrite /= !in_itv !andbT/= => /ltW. - by apply: near_at_right => //; rewrite bnd_simp. move=> [cf fa]; apply/subspace_continuousP => x /andP[]. @@ -1072,9 +1072,9 @@ rewrite bnd_simp/= le_eqVlt => /predU1P[<-{x}|ax] _. exists 1%R => //= c c1a /[swap]; rewrite in_itv/= andbT le_eqVlt. by move=> /predU1P[->|/[swap]/[apply]//]; rewrite subrr normr0. - have xaoo : x \in `]a, +oo[ by rewrite in_itv/= andbT. - rewrite within_interior; first exact: cf. + rewrite within_interior; last exact: cf. suff : `]a, +oo[ `<=` interior `[a, +oo[ by exact. - rewrite -open_subsetE; last exact: interval_open. + rewrite -open_subsetE; first exact: interval_open. by move=> ?/=; rewrite !in_itv/= !andbT; exact: ltW. Qed. @@ -1084,7 +1084,7 @@ Lemma continuous_within_itvNycP b f : Proof. split=> [cf|]. split; [apply/in_continuous_mksetP|apply/cvgrPdist_lt => eps eps_gt0 /=]. - - rewrite -continuous_open_subspace; last exact: interval_open. + - rewrite -continuous_open_subspace; first exact: interval_open. by apply: continuous_subspaceW cf => ?/=; rewrite !in_itv/=; exact: ltW. - by apply: near_at_left => //; rewrite bnd_simp. move=> [cf fb]; apply/subspace_continuousP => x /andP[_]. @@ -1094,9 +1094,9 @@ rewrite bnd_simp/= le_eqVlt=> /predU1P[->{x}|xb]. exists 1%R => //= c c1b /[swap]; rewrite in_itv/= le_eqVlt. by move=> /predU1P[->|/[swap]/[apply]//]; rewrite subrr normr0. - have xb_i : x \in `]-oo, b[ by rewrite in_itv/=. - rewrite within_interior; first exact: cf. + rewrite within_interior; last exact: cf. suff : `]-oo, b[ `<=` interior `]-oo, b] by exact. - rewrite -open_subsetE; last exact: interval_open. + rewrite -open_subsetE; first exact: interval_open. by move=> ?/=; rewrite !in_itv/=; exact: ltW. Qed. diff --git a/theories/normedtype_theory/tvs.v b/theories/normedtype_theory/tvs.v index 7e69d4b3f1..7ba894e047 100644 --- a/theories/normedtype_theory/tvs.v +++ b/theories/normedtype_theory/tvs.v @@ -56,7 +56,7 @@ From mathcomp Require Import pseudometric_normed_Zmodule. (* - The product of two Tvs is endowed with the structure of ConvexTvs. *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -107,7 +107,7 @@ HB.builders Context M & PreTopologicalNmodule_isTopologicalZmodule M. Lemma opp_continuous : continuous (-%R : M -> M). Proof. move=> x; rewrite /continuous_at. -rewrite -(@eq_cvg _ _ _ (fun x => 0 - x)); last by move=> y; exact: add0r. +rewrite -(@eq_cvg _ _ _ (fun x => 0 - x)); first by move=> y; exact: add0r. rewrite -[- x]add0r. apply: (@continuous_comp _ _ _ (fun x => (0, x)) (fun x : M * M => x.1 - x.2)). by apply: cvg_pair => /=; [exact: cvg_cst|exact: cvg_id]. @@ -117,7 +117,7 @@ Qed. Lemma add_continuous : continuous (fun x : M * M => x.1 + x.2). Proof. move=> x; rewrite /continuous_at. -rewrite -(@eq_cvg _ _ _ (fun x => x.1 - (- x.2))); last first. +rewrite -(@eq_cvg _ _ _ (fun x => x.1 - (- x.2))). by move=> y; rewrite opprK. rewrite -[in x.1 + _](opprK x.2). apply: (@continuous_comp _ _ _ (fun x => (x.1, - x.2)) (fun x => x.1 - x.2)). @@ -171,7 +171,7 @@ HB.builders Context R M & TopologicalNmodule_isTopologicalLmodule R M. Lemma opp_continuous : continuous (-%R : M -> M). Proof. move=> x; rewrite /continuous_at. -rewrite -(@eq_cvg _ _ _ (fun x => -1 *: x)); last by move=> y; rewrite scaleN1r. +rewrite -(@eq_cvg _ _ _ (fun x => -1 *: x)); first by move=> y; rewrite scaleN1r. rewrite -[- x]scaleN1r. apply: (@continuous_comp M (R^o * M)%type M (fun x => (-1, x)) (fun x => x.1 *: x.2)); last exact: scale_continuous. @@ -417,7 +417,7 @@ exists [set w | (W1 `&` W2) (w.1 - w.2)]. exists (U1 `&` U2); first exact: open_nbhsI. by move=> t [U1t U2t]; split; [exact: UW1|exact: UW2]. move => xy /= [z [H1 _] [_ H2]]; apply/set_mem/(Uxy xy)/mem_set. -rewrite [_ - _](_ : _ = (xy.1 - z) + (z - xy.2)); last by rewrite addrA subrK. +rewrite [_ - _](_ : _ = (xy.1 - z) + (z - xy.2)); first by rewrite addrA subrK. exact: (Wadd (xy.1 - z,z - xy.2)). Qed. @@ -516,7 +516,7 @@ Proof. apply/convex_setW => z y; rewrite !inE -!ball_normE /= => zx yx l l0 l1. rewrite inE/=. rewrite [X in `|X|](_ : _ = (x - z : convex_lmodType _) <| l |> - (x - y : convex_lmodType _)); last first. + (x - y : convex_lmodType _)). by rewrite opprD -[in LHS](convmm l x) addrACA -scalerBr -scalerBr. rewrite (le_lt_trans (ler_normD _ _))// !normrM. rewrite (@ger0_norm _ l%:num)// (@ger0_norm _ l%:num.~) ?onem_ge0//. diff --git a/theories/normedtype_theory/urysohn.v b/theories/normedtype_theory/urysohn.v index a9e9e1f364..6ec4982708 100644 --- a/theories/normedtype_theory/urysohn.v +++ b/theories/normedtype_theory/urysohn.v @@ -32,7 +32,7 @@ From mathcomp Require Import normed_module. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -130,16 +130,16 @@ have [|] := eqVneq (edist (x, z)) +oo%E. exact: (ball_triangle xy). rewrite -ltey -ge0_fin_numE// => /[dup] xzfin. move/edist_finP => [_/posnumP[del] /= xz]. -rewrite /edist /= ?ereal_inf_EFin; first last. +rewrite /edist /= ?ereal_inf_EFin. +- by exists 0 => ? /= [/ltW]. - by exists (r1%:num + r2%:num); split => //; apply: (ball_triangle xy). - by exists 0 => ? /= [/ltW]. - by exists r1%:num; split. - by exists 0 => ? /= [/ltW]. - by exists r2%:num; split. -- by exists 0 => ? /= [/ltW]. -rewrite -EFinD lee_fin -inf_sumE //; first last. -- by split; [exists r2%:num; split| exists 0 => ? /= [/ltW]]. +rewrite -EFinD lee_fin -inf_sumE //. - by split; [exists r1%:num; split| exists 0 => ? /= [/ltW]]. +- by split; [exists r2%:num; split| exists 0 => ? /= [/ltW]]. apply: lb_le_inf. by exists (r1%:num + r2%:num); exists r1%:num => //; exists r2%:num. move=> ? [+ []] => _/posnumP[p] xpy [+ []] => _/posnumP[q] yqz <-. diff --git a/theories/normedtype_theory/vitali_lemma.v b/theories/normedtype_theory/vitali_lemma.v index 491e955a00..050f6a3005 100644 --- a/theories/normedtype_theory/vitali_lemma.v +++ b/theories/normedtype_theory/vitali_lemma.v @@ -34,7 +34,7 @@ From mathcomp Require Import normed_module. Reserved Notation "k *` A" (at level 40, left associativity, format "k *` A"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -232,7 +232,7 @@ Proof. move=> Aball. have [k0|k0] := leP 0 k. by rewrite (ballE Aball) (scale_ballE _ _ k0); exact: is_ball_ball. -rewrite (_ : _ *` _ = set0); first exact: is_ball0. +rewrite (_ : _ *` _ = set0); last exact: is_ball0. apply/seteqP; split => // x. by rewrite /scale_ball Aball (ball0 _ _).2// nmulr_rle0. Qed. @@ -355,7 +355,7 @@ exists m; split => //; apply/andP; split => [{mf}|{fm}]. rewrite -(@ler_nat R) in mf. have [f0|f0] := eqVneq 0 f. by move: mf; rewrite -f0 leNgt expnS ltr_nat leq_pmulr// expn_gt0. - rewrite (le_trans mf)// prednK//; last by rewrite lt0n eq_sym. + rewrite (le_trans mf)// prednK//; first by rewrite lt0n eq_sym. by rewrite /f truncn_le// divr_ge0// (le_trans _ (VBr Vi)). Qed. @@ -375,7 +375,7 @@ move=> nm; wlog : n m nm / (n < m)%N. by rewrite wlg// lt_eqF. by rewrite setIC wlg// lt_eqF. move=> {}nm; apply/seteqP; split => // i [] [Vi] /andP[rnB _] [_ /andP[_]]. -move/(lt_le_trans rnB); rewrite ltr_pM2l//; last by rewrite (r_gt0 Vi). +move/(lt_le_trans rnB); rewrite ltr_pM2l//; first by rewrite (r_gt0 Vi). rewrite ltf_pV2 ?posrE ?ltr0n ?expn_gt0// ltr_nat. by move/ltn_pexp2l => /(_ isT); rewrite ltnNge => /negP; apply. Qed. @@ -527,20 +527,20 @@ exists j; split => //. - rewrite (le_trans _ (ltW Bjrn))// ler_pdivrMr// expnSr natrM. by rewrite invfM -!mulrA mulVf// mulr1. - move=> x Bix. - rewrite is_ball_closure//; last first. - by rewrite (ballE (is_ballB j)) scale_ballE; [exact: is_ball_ball|]. - rewrite closed_ballE; last first. - rewrite (ballE (is_ballB j)) scale_ballE; last by []. + rewrite is_ball_closure//. + by rewrite (ballE (is_ballB j)) scale_ballE; [|exact: is_ball_ball]. + rewrite closed_ballE. + rewrite (ballE (is_ballB j)) scale_ballE; first by []. by rewrite radius_ball_num ?mulr_ge0// mulr_gt0. - rewrite /closed_ball_ /= cpoint_scale_ball; [|by []..]. + rewrite /closed_ball_ /= cpoint_scale_ball; [by []..|]. rewrite radius_scale_ball//. apply: (@le_trans _ _ (2 * (radius (B i))%:num + (radius (B j))%:num)). case: BiBj => y [Biy Bjy]. rewrite (le_trans (ler_distD y _ _))// [in leRHS]addrC lerD//. exact: is_ball_closureP. rewrite (le_trans (ler_distD (cpoint (B i)) _ _))//. - rewrite (_ : 2 = 1 + 1); last by []. - rewrite mulrDl !mul1r// lerD; [by []| |exact: is_ball_closureP]. + rewrite (_ : 2 = 1 + 1); first by []. + rewrite mulrDl !mul1r// lerD; [| exact: is_ball_closureP | by []]. by rewrite distrC; exact: is_ball_closureP. rewrite -lerBrDr// -(@natr1 _ 4). rewrite (mulrDl 4%:R) mul1r addrK (natrM _ 2 2) -mulrA ler_pM2l//. diff --git a/theories/numfun.v b/theories/numfun.v index 77d0969879..a5ecceeb91 100644 --- a/theories/numfun.v +++ b/theories/numfun.v @@ -46,7 +46,7 @@ Reserved Notation "{ 'nnfun' aT >-> T }" Reserved Notation "[ 'nnfun' 'of' f ]" (at level 0, format "[ 'nnfun' 'of' f ]"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -224,7 +224,7 @@ Lemma notin_itv_partition c s : sorted <%O s -> c \notin s -> Proof. elim: s c => // h t ih c /= ht. rewrite inE negb_or => /andP[]; rewrite neq_lt => /orP[ch|ch] ct. - rewrite ch ltNge (ltW ch)/= path_lt_filter0/= /itv_partitionR; last first. + rewrite ch ltNge (ltW ch)/= path_lt_filter0/= /itv_partitionR. exact: path_lt_head ht. by rewrite path_lt_filterT//; exact: path_lt_head ht. by rewrite ch/= ltNge (ltW ch)/= -ih//; exact: path_sorted ht. @@ -249,7 +249,7 @@ Lemma itv_partition_rev a b s : itv_partition a b s -> itv_partition (- b) (- a) (rev (belast (- a) (map -%R s))). Proof. move=> [sa /eqP alb]; split. - rewrite (_ : - b = last (- a) (map -%R s)); last by rewrite last_map alb. + rewrite (_ : - b = last (- a) (map -%R s)); first by rewrite last_map alb. rewrite rev_path// path_map. by apply: sub_path sa => x y xy/=; rewrite ltrNr opprK. case: s sa alb => [_ <-//|h t] /= /andP[ah ht] <-{b}. @@ -283,12 +283,12 @@ Proof. move=> [] sa /eqP asb; rewrite /variation [in LHS]/= (big_nth b) !big_nat. apply: eq_bigr => i /andP[_ si]; congr (`| _ - f _ |). rewrite -lock. -rewrite prev_nth inE gt_eqF; last first. +rewrite prev_nth inE gt_eqF. rewrite -[a]/(nth b (a :: s) 0) -[ltRHS]/(nth b (a :: s) i.+1). exact: lt_sorted_ltn_nth. rewrite orFb mem_nth// index_uniq//. - by apply: set_nth_default => /=; rewrite ltnS ltnW. -by apply: (sorted_uniq lt_trans) => //; apply: path_sorted sa. + by apply: (sorted_uniq lt_trans) => //; apply: path_sorted sa. +by apply: set_nth_default => /=; rewrite ltnS ltnW. Qed. Lemma variation_next a b f s : itv_partition a b s -> @@ -302,8 +302,7 @@ congr (`| f _ - f _ |); last first. rewrite -lock next_nth. rewrite {1}lastI mem_rcons inE mem_nth ?size_belast// orbT. rewrite lastI -cats1 index_cat mem_nth ?size_belast//. -rewrite index_uniq ?size_belast//. - exact: set_nth_default. +rewrite index_uniq ?size_belast//; last exact: set_nth_default. have /lt_sorted_uniq : sorted <%R (a :: s) by []. by rewrite lastI rcons_uniq => /andP[]. Qed. @@ -386,15 +385,15 @@ move=> abl; rewrite belast_map /variation /= [LHS]big_nat_rev/= add0n. rewrite size_rev size_map size_belast 2!big_nat. apply: eq_bigr => k; rewrite leq0n /= => ks. rewrite nth_rev ?size_map ?size_belast// [in RHS]distrC. -rewrite (nth_map a); last first. +rewrite (nth_map a). by rewrite size_belast ltn_subLR// addSn ltnS leq_addl. rewrite opprK -rev_rcons nth_rev ?size_rcons ?size_map ?size_belast 1?ltnW//. -rewrite subSn// -map_rcons (nth_map b) ?size_rcons ?size_belast; last first. +rewrite subSn// -map_rcons (nth_map b) ?size_rcons ?size_belast. by rewrite ltnS ltn_subLR// addSn ltnS leq_addl. rewrite opprK nth_rcons size_belast -subSn// subSS. rewrite (ltn_subLR _ (ltnW ks)) if_same. case: k => [|k] in ks *. - rewrite add0n ltnn subn1 (_ : nth b s _ = b); last first. + rewrite add0n ltnn subn1 (_ : nth b s _ = b). case: abl ks => _. elim/last_ind : s => // h t _; rewrite last_rcons => /eqP -> _. by rewrite nth_rcons size_rcons ltnn eqxx. @@ -437,14 +436,14 @@ Lemma variation_itv_partitionLR a b c f s : a < c -> c < b -> Proof. move=> ac bc abs; have [cl|cl] := boolP (c \in s). by rewrite -in_itv_partition//; case: abs => /path_sorted. -rewrite /itv_partitionL [in leLHS](notin_itv_partition _ cl)//; last first. +rewrite /itv_partitionL [in leLHS](notin_itv_partition _ cl)//. by apply: path_sorted; case: abs => + _; exact. -rewrite -notin_itv_partition//; last first. +rewrite -notin_itv_partition//. by apply: path_sorted; case: abs => /= + _; exact. -rewrite !variation_zip//; last first. +rewrite !variation_zip//. by apply: itv_partition_cat; [exact: (itv_partitionLP _ bc)|exact: (itv_partitionRP ac)]. -rewrite [in leLHS](notin_itv_partition _ cl); last first. +rewrite [in leLHS](notin_itv_partition _ cl). by apply: path_sorted; case: abs => + _; exact. set L := [seq x <- s | x < c]. rewrite -cats1 -catA. @@ -456,17 +455,17 @@ elim/last_ind : L => [|L0 L1 _]. by rewrite big_nil big_cons/= big_nil addr0. by rewrite !big_cons/= addrA lerD// -(subrKA (f c)) [leRHS]addrC ler_normD. rewrite -cats1. -rewrite (_ : a :: _ ++ B = (a :: L0) ++ [:: L1] ++ B)//; last first. +rewrite (_ : a :: _ ++ B = (a :: L0) ++ [:: L1] ++ B)//. by rewrite -!catA -cat_cons. -rewrite zip_cat; last by rewrite cats1 size_rcons. -rewrite (_ : a :: _ ++ _ ++ B = (a :: L0) ++ [:: L1] ++ [:: c] ++ B); last first. +rewrite zip_cat; first by rewrite cats1 size_rcons. +rewrite (_ : a :: _ ++ _ ++ B = (a :: L0) ++ [:: L1] ++ [:: c] ++ B). by rewrite -!catA -cat_cons. -rewrite zip_cat; last by rewrite cats1 size_rcons. +rewrite zip_cat; first by rewrite cats1 size_rcons. rewrite !big_cat lerD//. case: B => [|B0 B1]. by rewrite /= big_nil big_cons big_nil addr0. rewrite -cat1s zip_cat// catA. -rewrite (_ : [:: L1] ++ _ ++ B1 = ([:: L1] ++ [:: c]) ++ [:: B0] ++ B1); last first. +rewrite (_ : [:: L1] ++ _ ++ B1 = ([:: L1] ++ [:: c]) ++ [:: B0] ++ B1). by rewrite catA. rewrite zip_cat// !big_cat lerD//= !big_cons !big_nil !addr0/= [leRHS]addrC. by rewrite (le_trans _ (ler_normD _ _))// subrKA. @@ -487,9 +486,9 @@ have waW : w <= a := ltW wa. case: ifPn => [|] nXA. move/eqP : nXA itvxt itvxb => -> itvat itvt /= ta. rewrite -[_ :: t]cat1s -[_ :: s]cat1s. - rewrite ?(@variation_cat _ a)//; [|exact: itv_partition1..]. + rewrite ?(@variation_cat _ a)//; [exact: itv_partition1..|]. by rewrite lerD// IH. -move=> xts; rewrite -[_ :: s]cat1s (@variation_cat _ a) => //; last first. +move=> xts; rewrite -[_ :: s]cat1s (@variation_cat _ a) => //. exact: itv_partition1. have [y [s' s'E]] : exists y s', s = y :: s'. by case: {itvas itvws IH} s xts => // y s' ?; exists y, s'. @@ -497,7 +496,7 @@ apply: (@le_trans _ _ (variation w b f s)). rewrite IH//. case: itvws => /= /andP[_]; rewrite s'E /= => /andP[ay ys' lyb]. by split => //; rewrite (path_lt_head wa)//= ys' andbT. -by rewrite -variation_cat//; [exact: le_variation | exact: itv_partition1]. +by rewrite -variation_cat//; [exact: itv_partition1 | exact: le_variation]. Qed. End variation_realDomainType. @@ -1144,7 +1143,7 @@ Lemma cvg_indic {R : realFieldType} (x : R^o) k : \1_(ball 0 k : set R^o) y @[y --> x] --> (\1_(ball 0 k) x : R). Proof. move=> xB; apply/(@cvgrPdist_le _ R^o) => /= e e0; near=> t. -rewrite !indicE xB/= mem_set//=; first by rewrite subrr normr0// ltW. +rewrite !indicE xB/= mem_set//=; last by rewrite subrr normr0// ltW. near: t. rewrite inE /ball /= sub0r normrN in xB. exists ((k - `|x|)/2) => /=; first by rewrite divr_gt0// subr_gt0. @@ -1342,7 +1341,7 @@ have cvgh' : cvg (h_ @ \oo). pose L := (1/3) * M%:num * ((2/3) ^+ m / (1 - (2/3))). apply: (@le_lt_trans _ _ L); first by rewrite ler_pM2l // geometric_le_lim. rewrite /L onem_twothirds. - rewrite [_ ^+ _ * _ ^-1]mulrC mulrA -[x in x < _]ger0_norm; last by []. + rewrite [_ ^+ _ * _ ^-1]mulrC mulrA -[x in x < _]ger0_norm; first by []. near: m; near_simpl; move: eps epos. by apply: (cvgr0_norm_lt (fun _ => _ : R^o)); exact: cvg_geometric. have cvgh : {uniform, h_ @ \oo --> lim (h_ @ \oo)}. @@ -1376,7 +1375,7 @@ exists (lim (h_ @ \oo)); split. by move=> n; rewrite mulr_ge0. rewrite (le_trans (lim_series_norm _))//; apply: le_trans. exact/(lim_series_le cvg_gt _ (g_bd ^~ t))/is_cvg_geometric_series. - rewrite (cvg_lim _ (cvg_geometric_series _))//; last exact: Rhausdorff. + rewrite (cvg_lim _ (cvg_geometric_series _))//; first exact: Rhausdorff. by rewrite onem_twothirds mulrAC divff mul1r. Unshelve. all: by end_near. Qed. diff --git a/theories/pi_irrational.v b/theories/pi_irrational.v index d55cea90d4..be9056eb4a 100644 --- a/theories/pi_irrational.v +++ b/theories/pi_irrational.v @@ -16,7 +16,7 @@ From mathcomp Require Import derive charge ftc trigo. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -66,14 +66,14 @@ Qed. Let P1_lead_coef : lead_coef (a%:P - b *: 'X) = - b. Proof. rewrite addrC lead_coefDl. - by rewrite lead_coefN lead_coefZ lead_coefX mulr1. -by rewrite size_polyN size_scale ?b0// size_polyX size_polyC; case: (a != 0). + by rewrite size_polyN size_scale ?b0// size_polyX size_polyC; case: (a != 0). +by rewrite lead_coefN lead_coefZ lead_coefX mulr1. Qed. Let P_size : size ((a%:P - b*:'X) ^+ n) = n.+1. Proof. elim : n => [|n0 Hn0]; first by rewrite expr0 size_polyC oner_neq0. -rewrite exprS size_proper_mul; first by rewrite P1_size /= Hn0. +rewrite exprS size_proper_mul; last by rewrite P1_size /= Hn0. by rewrite lead_coef_exp P1_lead_coef -exprS expf_neq0 // oppr_eq0 b0. Qed. @@ -148,22 +148,22 @@ Qed. Lemma D2FDF : F^`(2) + F = f. Proof. rewrite /F linear_sum /=. -rewrite (eq_bigr (fun i : 'I_n.+1 => (-1)^i *: f^`(i.*2.+2))); last first. +rewrite (eq_bigr (fun i : 'I_n.+1 => (-1)^i *: f^`(i.*2.+2))). by move=> i _; rewrite !derivZ. rewrite [X in _ + X]big_ord_recl. rewrite -exprnP expr0 scale1r (addrC f) addrA -[RHS]add0r. congr (_ + _). -rewrite big_ord_recr addrC addrA -big_split big1=>[|i _]. - rewrite add0r /=; apply/eqP; rewrite scaler_eq0 -derivnS derivn_poly0. - by rewrite deriv0 eqxx orbT. - suff -> : size f = (n + n.+1)%N by rewrite addnS addnn. - rewrite /f size_scale; last first. - by rewrite invr_neq0 // pnatr_eq0 -lt0n (fact_gt0 n). - rewrite size_monicM ?monicXn //; last by rewrite -size_poly_eq0 P_size. - by rewrite size_polyXn P_size. -rewrite /bump /= -scalerDl. -apply/eqP; rewrite scaler_eq0 /bump -exprnP add1n exprSr. -by rewrite mulrN1 addrC subr_eq0 eqxx orTb. +rewrite big_ord_recr addrC addrA -big_split big1=>[i _|]. + rewrite /bump /= -scalerDl. + apply/eqP; rewrite scaler_eq0 /bump -exprnP add1n exprSr. + by rewrite mulrN1 addrC subr_eq0 eqxx orTb. +rewrite add0r /=; apply/eqP; rewrite scaler_eq0 -derivnS derivn_poly0; last first. + by rewrite deriv0 eqxx orbT. +suff -> : size f = (n + n.+1)%N by rewrite addnS addnn. +rewrite /f size_scale. + by rewrite invr_neq0 // pnatr_eq0 -lt0n (fact_gt0 n). +rewrite size_monicM ?monicXn //; first by rewrite -size_poly_eq0 P_size. +by rewrite size_polyXn P_size. Qed. End algebraic_part. @@ -192,7 +192,7 @@ Qed. Let abx_ge0 x : 0 <= x <= pirat -> 0 <= a - b * x. Proof. move=> /andP[x0 xpi]; rewrite subr_ge0. -rewrite -ler_pdivlMl//; last by rewrite /b ltr0n lt0n. +rewrite -ler_pdivlMl//; first by rewrite /b ltr0n lt0n. by rewrite mulrC. Qed. @@ -229,8 +229,6 @@ Proof. rewrite /intfsin /Rintegral. set h := fun x => ((F n)^`()).[x] * sin x - (F n).[x] * cos x. rewrite (@continuous_FTC2 _ _ h). -- rewrite /h sin0 cospi cos0 sinpi !mulr0 !add0r mulr1 mulrN1 !opprK EFinN. - by rewrite oppeK -EFinD. - by rewrite pi_gt0. - exact: cfsin. - split=> [x x0pi| |]. @@ -240,6 +238,8 @@ rewrite (@continuous_FTC2 _ _ h). + by apply: cvgB; apply: cvgM => //; apply: cvg_at_left_filter; (exact: continuous_horner||exact: continuous_sin||exact: continuous_cos). - by move=> x x0pi; rewrite -fsin_antiderivative derive1E. +- rewrite /h sin0 cospi cos0 sinpi !mulr0 !add0r mulr1 mulrN1 !opprK EFinN. + by rewrite oppeK -EFinD. Qed. Hypothesis piratE : pirat = pi. @@ -275,14 +275,14 @@ Qed. Let intsin : (\int[mu]_(x in `[0%R, pi]) (sin x)%:E = 2%:E)%E. Proof. -rewrite (@continuous_FTC2 _ _ (- cos)) ?pi_gt0//. +rewrite (@continuous_FTC2 _ _ (- cos)) ?pi_gt0//; last 1 first. - by rewrite /= !EFinN cos0 cospi !EFinN oppeK. - exact/continuous_subspaceT/continuous_sin. -- split. - + by move=> x x0pi; exact/derivableN/derivable_cos. - + by apply: cvgN; apply: cvg_at_right_filter; exact: continuous_cos. - + by apply: cvgN; apply: cvg_at_left_filter; exact: continuous_cos. - + by move=> x x0pi; rewrite derive1E deriveN// derive_val opprK. +split. +- by move=> x x0pi; exact/derivableN/derivable_cos. +- by apply: cvgN; apply: cvg_at_right_filter; exact: continuous_cos. +- by apply: cvgN; apply: cvg_at_left_filter; exact: continuous_cos. +- by move=> x x0pi; rewrite derive1E deriveN// derive_val opprK. Qed. Let integrable_fsin n : mu.-integrable `[0%R, pi] (EFin \o fsin n). @@ -294,7 +294,7 @@ Qed. Let small_ballS (m : R := pi / 2) (d := pi / 4) : closed_ball m d `<=` `]0%R, pi[. Proof. -move=> z; rewrite closed_ball_itv/=; last by rewrite divr_gt0// pi_gt0. +move=> z; rewrite closed_ball_itv/=; first by rewrite divr_gt0// pi_gt0. rewrite in_itv/= => /andP[mdz zmd]; rewrite in_itv/=; apply/andP; split. rewrite (lt_le_trans _ mdz)// subr_gt0. by rewrite ltr_pM2l// ?pi_gt0// ltf_pV2// ?posrE// ltr_nat. @@ -315,7 +315,7 @@ exists (fsin n c). have /(_ _)/andP[]// := @fsin_bounded n c n0. have := @small_ballS c; rewrite /=in_itv/=; apply. by rewrite closed_ball_itv//= divr_gt0// pi_gt0. -move=> x /set_mem; rewrite closed_ball_itv//=; first exact: Hc. +move=> x /set_mem; rewrite closed_ball_itv//=; last exact: Hc. by rewrite divr_gt0// pi_gt0. Qed. @@ -335,10 +335,10 @@ apply/andP; split. have [r r0] := @min_fsin _ n0. pose m : R := pi / 2; pose d : R := pi / 4 => rn. apply: (@lt_le_trans _ _ (\int[mu]_(x in closed_ball m d) r%:E))%E. - rewrite integral_cst//=; last exact: measurable_closed_ball. + rewrite integral_cst//=; first exact: measurable_closed_ball. rewrite mule_gt0// lebesgue_measure_closed_ball//. - by rewrite lte_fin mulrn_wgt0// divr_gt0// pi_gt0. - by rewrite divr_ge0// pi_ge0. + by rewrite divr_ge0// pi_ge0. + by rewrite lte_fin mulrn_wgt0// divr_gt0// pi_gt0. apply: (@le_trans _ _ (\int[mu]_(x in (closed_ball m d)) (fsin n x)%:E))%E. apply: ge0_le_integral => //=. - exact: measurable_closed_ball. @@ -386,7 +386,7 @@ have : pi * (pi * a) ^+ n / n`!%:R @[n --> \oo] --> 0. by apply: cvgMl_tmp; exact: exp_fact. move/cvgrPdist_lt => /(_ e e0). apply: filterS => n. -rewrite sub0r normrN ger0_norm; last first. +rewrite sub0r normrN ger0_norm. by rewrite !mulr_ge0 ?pi_ge0// exprn_ge0// mulr_ge0// pi_ge0. by rewrite mulrA; exact. Unshelve. all: by end_near. Qed. @@ -407,7 +407,7 @@ have [N _] := pi_irrational.intfsin_small b0 (esym piratE) (@ltr01 R). near \oo%classic => n. have Nn : (N <= n)%N by near: n; exists N. have := @pi_irrational.intfsin_int R _ _ b0 (esym piratE) n. -rewrite intrEge0; last by rewrite ltW// pi_irrational.intfsin_gt0. +rewrite intrEge0; first by rewrite ltW// pi_irrational.intfsin_gt0. move=> + /(_ n Nn). move/natrP => [k] ->. rewrite ltr0n ltrn1. diff --git a/theories/probability_theory/bernoulli_distribution.v b/theories/probability_theory/bernoulli_distribution.v index 3abe1ee546..a13264227b 100644 --- a/theories/probability_theory/bernoulli_distribution.v +++ b/theories/probability_theory/bernoulli_distribution.v @@ -21,7 +21,7 @@ From mathcomp Require Import lebesgue_integral kernel. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -46,7 +46,7 @@ Qed. Lemma bernoulli_pmf1 : \sum_(i \in [set: bool]) (bernoulli_pmf i)%:E = 1%E. Proof. -rewrite setT_bool fsbigU//=; last by move=> x [/= ->]. +rewrite setT_bool fsbigU//=; first by move=> x [/= ->]. by rewrite !fsbig_set1/= -EFinD subrKC. Qed. @@ -91,7 +91,7 @@ apply: cvg_toP. transitivity (\sum_(0 <= i k _; rewrite esum_fset//= => b _. by rewrite lee_fin bernoulli_pmf_ge0. -rewrite -nneseries_sum_bigcup//=; last first. +rewrite -nneseries_sum_bigcup//=. by move=> b; rewrite lee_fin bernoulli_pmf_ge0. by rewrite esum_fset//= => b _; rewrite lee_fin bernoulli_pmf_ge0. Qed. @@ -110,16 +110,16 @@ Lemma eq_bernoulli (P : probability bool R) : Proof. move=> Ptrue sb; rewrite /bernoulli /bernoulli_pmf. have Pfalse : P [set false] = (1 - p%:E)%E. - rewrite -Ptrue -(probability_setT P) setT_bool measureU//; last first. + rewrite -Ptrue -(probability_setT P) setT_bool measureU//. by rewrite disjoints_subset => -[]. by rewrite addeAC subee ?add0e//= Ptrue. have : (0 <= p%:E <= 1)%E by rewrite -Ptrue measure_ge0 probability_le1. rewrite !lee_fin => ->. have eq_sb := etrans (bigcup_imset1 (_ : set bool) id) (image_id _). rewrite -[in LHS](eq_sb sb)/= measure_fin_bigcup//. -- by apply: eq_fsbigr => /= -[]. - exact: finite_finset. - by move=> [] [] _ _ [[]]//= []. +- by apply: eq_fsbigr => /= -[]. Qed. End bernoulli. @@ -136,15 +136,15 @@ apply/funext => U; rewrite /bernoulli_prob; case: ifPn => [p01|]; last first. rewrite measure_addE/= /mscale/=. have := @subsetT _ U; rewrite setT_bool => UT. have [->|->|->|->] /= := subset_set2 UT. -- rewrite -esum_fset//=; last by move=> b; rewrite lee_fin bernoulli_pmf_ge0. +- rewrite -esum_fset//=; first by move=> b; rewrite lee_fin bernoulli_pmf_ge0. by rewrite esum_set0 2!measure0 2!mule0 adde0. -- rewrite -esum_fset//=; last by move=> b; rewrite lee_fin bernoulli_pmf_ge0. +- rewrite -esum_fset//=; first by move=> b; rewrite lee_fin bernoulli_pmf_ge0. rewrite esum_set1/= ?lee_fin// 2!diracE mem_set//= memNset//= mule0 adde0. by rewrite mule1. -- rewrite -esum_fset//=; last by move=> b; rewrite lee_fin bernoulli_pmf_ge0. +- rewrite -esum_fset//=; first by move=> b; rewrite lee_fin bernoulli_pmf_ge0. rewrite esum_set1/= ?lee_fin ?subr_ge0// 2!diracE memNset//= mem_set//=. by rewrite mule0 add0e mule1. -- rewrite fsbigU//=; last by move=> x [->]. +- rewrite fsbigU//=; first by move=> x [->]. by rewrite 2!fsbig_set1/= -setT_bool 2!diracT !mule1. Qed. @@ -156,7 +156,7 @@ Lemma eq_bernoulliV2 {R : realType} (P : probability bool R) : Proof. move=> Ptrue_eq_false; apply/eq_bernoulli. have : P [set: bool] = 1%E := probability_setT P. -rewrite setT_bool measureU//=; last by rewrite disjoints_subset => -[]. +rewrite setT_bool measureU//=; first by rewrite disjoints_subset => -[]. rewrite Ptrue_eq_false -mule2n => /esym/eqP. by rewrite -mule_natl -eqe_pdivrMl// mule1 => /eqP<-. Qed. diff --git a/theories/probability_theory/beta_distribution.v b/theories/probability_theory/beta_distribution.v index be915da53b..84c89758b6 100644 --- a/theories/probability_theory/beta_distribution.v +++ b/theories/probability_theory/beta_distribution.v @@ -29,7 +29,7 @@ From mathcomp Require Import uniform_distribution bernoulli_distribution. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -76,7 +76,7 @@ Qed. Lemma derive_onemXn n x : (fun y => y.~ ^+ n)^`()%classic x = - n%:R * x.~ ^+ n.-1. Proof. -rewrite (@derive1_comp _ (@onem _) (fun x => x ^+ n))//; last first. +rewrite (@derive1_comp _ (@onem _) (fun x => x ^+ n))//. exact: exprn_derivable. rewrite derive1E exp_derive// derive1E deriveB// -derive1E. by rewrite derive1_cst derive_id sub0r mulrN1 [in RHS]mulNr scaler1. @@ -87,12 +87,12 @@ Lemma Rintegral_onemXn n : Proof. rewrite /Rintegral. rewrite (@continuous_FTC2 _ _ (fun x => x.~ ^+ n.+1 / - n.+1%:R))//=. -- rewrite onem1 expr0n/= mul0r onem0 expr1n mul1r sub0r. - by rewrite -invrN -2!mulNrn opprK. - by apply: continuous_in_subspaceT => x x01; exact: continuous_onemXn. - exact: derivable_oo_LRcontinuous_onemXnMr. -- move=> x x01; rewrite derive1Mr//; last exact: onemXn_derivable. +- move=> x x01; rewrite derive1Mr//; first exact: onemXn_derivable. by rewrite derive_onemXn mulrAC divff// mul1r. +- rewrite onem1 expr0n/= mul0r onem0 expr1n mul1r sub0r. + by rewrite -invrN -2!mulNrn opprK. Qed. End about_onemXn. @@ -156,7 +156,7 @@ Qed. Lemma bounded_XMonemX a b : [bounded XMonemX a b x | x in `[0, 1]%classic]. Proof. exists 1; split; [by rewrite num_real|move=> x x1 /= y y01]. -rewrite ger0_norm//; last by rewrite XMonemX_ge0. +rewrite ger0_norm//; first by rewrite XMonemX_ge0. move: y01; rewrite in_itv/= => /andP[y0 y1]. rewrite (le_trans _ (ltW x1))// mulr_ile1 ?exprn_ge0//. - exact: onem_ge0. @@ -217,9 +217,9 @@ Local Close Scope ereal_scope. Lemma beta_fun_sym a b : beta_fun a b = beta_fun b a. Proof. rewrite -[LHS]Rintegral_mkcond Rintegration_by_substitution_onem ?lexx ?ler01//=. -- rewrite onem1 -[RHS]Rintegral_mkcond; apply: eq_Rintegral => x x01. - by rewrite XMonemXC. -- exact: within_continuous_XMonemX. + exact: within_continuous_XMonemX. +rewrite onem1 -[RHS]Rintegral_mkcond; apply: eq_Rintegral => x x01. +by rewrite XMonemXC. Qed. Lemma beta_fun0n b : (0 < b)%N -> beta_fun 0 b = b%:R^-1. @@ -251,18 +251,18 @@ Lemma beta_funSSnSm a b : Proof. rewrite -[LHS]Rintegral_mkcond. rewrite (@Rintegration_by_parts _ _ (fun x => x.~ ^+ b.+1 / - b.+1%:R) - (fun x => a.+1%:R * x ^+ a)); last 7 first. - exact: ltr01. - apply/continuous_subspaceT => x. + (fun x => a.+1%:R * x ^+ a)). +- exact: ltr01. +- apply/continuous_subspaceT => x. by apply: cvgM; [exact: cvg_cst|exact: exprn_continuous]. - split. +- split. by move=> x x01; exact: exprn_derivable. exact/cvg_at_right_filter/exprn_continuous. exact/cvg_at_left_filter/exprn_continuous. by move=> x x01; rewrite derive1E exp_derive scaler1. - by apply/continuous_subspaceT => x x01; exact: continuous_onemXn. - exact: derivable_oo_LRcontinuous_onemXnMr. - move=> x x01; rewrite derive1Mr; last exact: onemXn_derivable. +- by apply/continuous_subspaceT => x x01; exact: continuous_onemXn. +- exact: derivable_oo_LRcontinuous_onemXnMr. +- move=> x x01; rewrite derive1Mr; first exact: onemXn_derivable. by rewrite derive_onemXn mulrAC divff// mul1r. rewrite {1}/onem !(expr1n,mul1r,expr0n,subr0,subrr,mul0r,oppr0,sub0r)/=. transitivity (a.+1%:R / b.+1%:R * \int[mu]_(x in `[0, 1]) XMonemX a b.+1 x). @@ -270,7 +270,7 @@ transitivity (a.+1%:R / b.+1%:R * \int[mu]_(x in `[0, 1]) XMonemX a b.+1 x). move=> x x01. rewrite mulrA mulrC mulrA (mulrA _ a.+1%:R) -(mulrA (_ * _)%R). over. - rewrite /= RintegralZl//=; last exact: integrable_XMonemX. + rewrite /= RintegralZl//=; first exact: integrable_XMonemX. by rewrite -mulNrn -2!mulNr -invrN -mulNrn opprK (mulrC _ a.+1%:R). by rewrite Rintegral_mkcond. Qed. @@ -283,7 +283,7 @@ elim: a b => [b|a ih b]. rewrite beta_funSSnSm [in LHS]ih !mulrA; congr *%R; last by rewrite addSnnS. rewrite -mulrA mulrCA 2!mulrA. rewrite -natrM (mulnC a`!) -factS -mulrA -invfM; congr (_ / _). -rewrite big_add1 [in RHS]big_nat_recl/=; last by rewrite addSn ltnS leq_addl. +rewrite big_add1 [in RHS]big_nat_recl/=; first by rewrite addSn ltnS leq_addl. by rewrite -natrM addSnnS. Qed. @@ -429,10 +429,9 @@ Let beta_num_lty U : measurable U -> (beta_num U < +oo)%E. Proof. move=> mU. apply: (@le_lt_trans _ _ (\int[mu]_(x in U `&` `[0%R, 1%R]) 1)%E); last first. - rewrite integral_cst//= ?mul1e//. - rewrite (le_lt_trans (measureIr _ _ _))//= lebesgue_measure_itv//= lte01//. - by rewrite EFinN sube0 ltry. - exact: measurableI. + rewrite integral_cst//= ?mul1e//; first exact: measurableI. + rewrite (le_lt_trans (measureIr _ _ _))//= lebesgue_measure_itv//= lte01//. + by rewrite EFinN sube0 ltry. rewrite /beta_num integral_XMonemX_restrict ge0_le_integral//=. - exact: measurableI. - by move=> x [_ ?]; rewrite lee_fin XMonemX_ge0. @@ -486,12 +485,12 @@ Proof. move=> mU; rewrite /beta_pdf. under eq_integral do rewrite EFinM/=. rewrite ge0_integralZr//=. -- by rewrite /beta_prob/= /mscale/= muleC. - apply/measurable_funTS/measurableT_comp => //. by apply/measurable_restrict => //=; rewrite setTI; exact: measurable_XMonemX. - move=> x Ux; rewrite patchE; case: ifPn => //; rewrite inE/= => x01. by rewrite lee_fin XMonemX_ge0. - by rewrite lee_fin invr_ge0// beta_fun_ge0. +- by rewrite /beta_prob/= /mscale/= muleC. Qed. Lemma beta_prob01 : beta_prob `[0, 1] = 1%:E. @@ -517,7 +516,7 @@ rewrite /beta_num integral_XMonemX_restrict. apply/eqP; rewrite eq_le; apply/andP; split; last first. by apply: integral_ge0 => x [_ ?]; rewrite lee_fin XMonemX_ge0. apply: (@le_trans _ _ (\int[mu]_(x in A `&` `[0%R, 1%R]) 1)%E); last first. - rewrite integral_cst ?mul1e//=; last exact: measurableI. + rewrite integral_cst ?mul1e//=; first exact: measurableI. by rewrite -[leRHS]muA0 measureIl. apply: ge0_le_integral => //=; first exact: measurableI. - by move=> x [_ x01]; rewrite lee_fin XMonemX_ge0. @@ -591,7 +590,7 @@ apply: (@le_lt_trans _ _ (\int[beta_prob a b]_(x in `[0%R, 1%R]) 1)%E). apply: ge0_le_integral => //=. by do 2 apply/measurableT_comp => //; exact: measurable_XMonemX. move=> x; rewrite in_itv/= => /andP[x0 x1]. - rewrite lee_fin ger0_norm; last by rewrite !mulr_ge0// exprn_ge0// onem_ge0. + rewrite lee_fin ger0_norm; first by rewrite !mulr_ge0// exprn_ge0// onem_ge0. by rewrite mulr_ile1// ?exprn_ge0 ?onem_ge0// exprn_ile1 ?onem_ge0 ?onem_le1. by rewrite integral_cst//= mul1e -ge0_fin_numE// beta_prob_fin_num. Qed. @@ -604,18 +603,18 @@ apply: (eq_integrable _ (cst 1 \- (fun x : measurableTypeR R => (XMonemX a' b' x)%:E))%E) => //. apply: integrableB => //=; last exact: beta_prob_integrable. apply/integrableP; split => //. -rewrite (eq_integral (fun x => (\1_setT x)%:E))/=; last first. +rewrite (eq_integral (fun x => (\1_setT x)%:E))/=. by move=> x _; rewrite /= indicT normr1. rewrite integral_indic//= setTI /beta_prob /mscale/= lte_mul_pinfty//. by rewrite lee_fin invr_ge0 beta_fun_ge0. rewrite (_ : integral _ _ _ = \int[lebesgue_measure]_x - (((@XMonemX R a.-1 b.-1) \_ `[0, 1]) x)%:E)%E; last first. + (((@XMonemX R a.-1 b.-1) \_ `[0, 1]) x)%:E)%E. rewrite [LHS]integral_mkcond/=; apply: eq_integral => /= x _. by rewrite !patchE; case: ifPn => // ->. have /integrableP[_] := @integrable_XMonemX_restrict R a b. under eq_integral. move=> x _. - rewrite gee0_abs//; last first. + rewrite gee0_abs//. rewrite lee_fin patchE; case: ifPn => //; rewrite inE/= => x01. by rewrite XMonemX_ge0. over. @@ -652,7 +651,7 @@ Lemma integral_beta_prob a b f U : measurable U -> measurable_fun U f -> \int[mu]_(x in U) (f x * (beta_pdf a b x)%:E))%E. Proof. move=> mU mf finf. -rewrite -(Radon_Nikodym_change_of_variables (beta_prob_dom a b))//=; last first. +rewrite -(Radon_Nikodym_change_of_variables (beta_prob_dom a b))//=. by apply/integrableP; split. apply: ae_eq_integral => //. - apply: emeasurable_funM => //; apply: (measurable_int mu). @@ -661,7 +660,7 @@ apply: ae_eq_integral => //. - apply: emeasurable_funM => //=; apply/measurableT_comp => //=. by apply/measurable_funTS; exact: measurable_beta_pdf. - apply: ae_eqe_mul2l => /=. - rewrite Radon_NikodymE//=; first exact: beta_prob_dom. + rewrite Radon_NikodymE//=; last exact: beta_prob_dom. move=> abmu. case: cid => /= h [h1 h2 h3]. (* uniqueness of Radon-Nikodym derivative up to equality on non null sets of mu *) @@ -722,8 +721,8 @@ move=> a0 b0. rewrite /beta_prob_bernoulli_prob. under eq_integral => x. rewrite inE/= in_itv/= => x01. - rewrite bernoulli_probE/=; last first. - rewrite patchE; case: ifPn => x01'. + rewrite bernoulli_probE/=. + rewrite patchE; case: ifPn => x01'. by rewrite XMonemX_ge0//= XMonemX_le1. by rewrite lexx ler01. over. @@ -731,13 +730,13 @@ rewrite /= [in RHS]bernoulli_probE/= ?div_beta_fun_ge0 ?div_beta_fun_le1//=. under eq_integral => x x01. rewrite patchE x01/=. over. -rewrite /= integralD//=; last 2 first. - exact: beta_prob_integrable_dirac. - exact: beta_prob_integrable_onem_dirac. +rewrite /= integralD//=. +- exact: beta_prob_integrable_dirac. +- exact: beta_prob_integrable_onem_dirac. congr (_ + _). - rewrite integralZr//=; last exact: beta_prob_integrable. + rewrite integralZr//=; first exact: beta_prob_integrable. congr (_ * _)%E. - rewrite integral_beta_prob//; last 2 first. + rewrite integral_beta_prob//. by apply/measurableT_comp => //; exact: measurable_XMonemX. by have /integrableP[_] := @beta_prob_integrable R a b c d. transitivity ((\int[mu]_(x in `[0%R, 1%R]) @@ -746,26 +745,26 @@ congr (_ + _). by rewrite [in LHS]EFinM -[LHS]muleA [LHS]muleC -[LHS]muleA. transitivity ((beta_fun a b)^-1%:E * \int[mu]_(x in `[0%R, 1%R]) (@XMonemX R (a + c).-1 (b + d).-1 \_`[0,1] x)%:E)%E. - rewrite -integralZl//=; last first. + rewrite -integralZl//=. by apply: (integrableS measurableT) => //=; exact: integrable_XMonemX_restrict. apply: eq_integral => x x01. rewrite muleA muleC muleA -(EFinM (x ^+ c)) -/(XMonemX c d x) -EFinM mulrA. rewrite !patchE x01 XMonemXM// -EFinM mulrC. by move: a a0 b b0 => [//|a] _ [|b]. rewrite /div_beta_fun mulrC EFinM; congr (_ * _)%E. - rewrite /beta_fun integral_mkcond/= fineK; last first. + rewrite /beta_fun integral_mkcond/= fineK. by apply: integrable_fin_num => //; exact: integrable_XMonemX_restrict. by apply: eq_integral => /= x _; rewrite !patchE; case: ifPn => // ->. under eq_integral do rewrite muleC. -rewrite /= integralZl//=; last exact: beta_prob_integrable_onem. +rewrite /= integralZl//=; first exact: beta_prob_integrable_onem. rewrite muleC; congr (_ * _)%E. -rewrite integral_beta_prob//=; last 2 first. +rewrite integral_beta_prob//=. apply/measurableT_comp => //=. by apply/measurable_funB => //; exact: measurable_XMonemX. by have /integrableP[] := @beta_prob_integrable_onem R a b c d. rewrite /beta_pdf. under eq_integral do rewrite EFinM muleA. -rewrite integralZr//=; last first. +rewrite integralZr//=. apply: integrableMr => //=. - by apply/measurable_funB => //=; exact: measurable_XMonemX. - apply/ex_bound => //. @@ -785,10 +784,10 @@ transitivity ((\int[mu]_x ((@XMonemX R a.-1 b.-1 \_`[0,1] x)%:E - rewrite /onem -EFinM mulrBl mul1r EFinB EFinN; congr (_ - _)%E. rewrite XMonemXM. by move: a a0 b b0 => [|a]// _ [|b]. -rewrite integralB_EFin//=; last 2 first. - exact: integrableS (integrable_XMonemX_restrict _ _). - exact: integrableS (integrable_XMonemX_restrict _ _). -rewrite EFinB muleBl//; last by rewrite -!EFin_beta_fun. +rewrite integralB_EFin//=. +- exact: integrableS (integrable_XMonemX_restrict _ _). +- exact: integrableS (integrable_XMonemX_restrict _ _). +rewrite EFinB muleBl//; first by rewrite -!EFin_beta_fun. by rewrite -!EFin_beta_fun -EFinM divff// gt_eqF// beta_fun_gt0. Qed. diff --git a/theories/probability_theory/binomial_distribution.v b/theories/probability_theory/binomial_distribution.v index 01c41b99c8..4b8443366b 100644 --- a/theories/probability_theory/binomial_distribution.v +++ b/theories/probability_theory/binomial_distribution.v @@ -24,7 +24,7 @@ From mathcomp Require Import lebesgue_integral bernoulli_distribution. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -96,11 +96,11 @@ move=> p01; rewrite /binomial_pmf. have pkn k : 0%R <= (p ^+ k * p.~ ^+ (n - k) *+ 'C(n, k))%:E. case/andP : p01 => p0 p1. by rewrite lee_fin mulrn_wge0// mulr_ge0 ?exprn_ge0 ?subr_ge0. -rewrite (esumID `I_n.+1)// [X in _ + X]esum1 ?adde0; last first. +rewrite (esumID `I_n.+1)// [X in _ + X]esum1 ?adde0. by move=> /= k [_ /negP]; rewrite -leqNgt => nk; rewrite bin_small. rewrite setTI esum_fset// -fsbig_ord//=. under eq_bigr do rewrite mulrC. -rewrite sumEFin -exprDn_comm; last exact: mulrC. +rewrite sumEFin -exprDn_comm; first exact: mulrC. by rewrite addrC add_onemK expr1n. Qed. @@ -137,9 +137,9 @@ rewrite /binomial_prob; case: ifPn => [_|]; last by rewrite p1 p0. rewrite /msum/= /mscale/= /binomial_pmf. have pkn k : (0%R <= (p ^+ k * p.~ ^+ (n - k) *+ 'C(n, k))%:E)%E. by rewrite lee_fin mulrn_wge0// mulr_ge0 ?exprn_ge0 ?subr_ge0. -rewrite (esumID `I_n.+1)//= [X in _ + X]esum1 ?adde0; last first. +rewrite (esumID `I_n.+1)//= [X in _ + X]esum1 ?adde0. by move=> /= k [_ /negP]; rewrite -leqNgt => nk; rewrite bin_small. -rewrite esum_mkcondl esum_fset//; last by move=> i /= _; case: ifPn. +rewrite esum_mkcondl esum_fset//; first by move=> i /= _; case: ifPn. rewrite -fsbig_ord//=; apply: eq_bigr => i _. by rewrite diracE; case: ifPn => /= iU; [rewrite mule1|rewrite mule0]. Qed. @@ -163,15 +163,15 @@ Lemma integral_binomial_prob (R : realType) n p U : 0 <= p <= 1 -> (\int[binomial_prob n p]_y \d_(0 < y)%N U = bernoulli_prob (1 - p.~ ^+ n) U :> \bar R)%E. Proof. -move=> /andP[p0 p1]; rewrite bernoulli_probE//=; last first. - rewrite subr_ge0 exprn_ile1//=; [|exact/onem_ge0|exact/onem_le1]. +move=> /andP[p0 p1]; rewrite bernoulli_probE//=. + rewrite subr_ge0 exprn_ile1//=; [exact/onem_ge0|exact/onem_le1|]. by rewrite -subr_ge0 opprB subrKC; exact/exprn_ge0/onem_ge0. rewrite (@integral_binomial _ n p _ _ (fun y => \d_(1 <= y)%N U))//. rewrite !big_ord_recl/=. rewrite expr0 mul1r subn0 bin0 ltnn mulr1n addrC. rewrite onemD opprK onem1 add0r; congr +%E. rewrite /bump; under eq_bigr do rewrite leq0n add1n ltnS leq0n. -rewrite -ge0_sume_distrl; last first. +rewrite -ge0_sume_distrl. by move=> i _; apply/mulrn_wge0; rewrite mulr_ge0 ?exprn_ge0// onem_ge0. congr *%E. transitivity (\sum_(i < n.+1) (p.~ ^+ (n - i) * p ^+ i *+ 'C(n, i))%:E - @@ -192,7 +192,7 @@ apply: measurable_fun_if => //=. apply: (eq_measurable_fun (fun t => \sum_(k x /set_mem[_/= x01]. - rewrite nneseries_esum//; last by move=> *; rewrite lee_fin binomial_pmf_ge0. + rewrite nneseries_esum//; first by move=> *; rewrite lee_fin binomial_pmf_ge0. by rewrite set_mem_set. apply: ge0_emeasurable_sum. by move=> k x/= [_ x01] _; rewrite lee_fin binomial_pmf_ge0. diff --git a/theories/probability_theory/exponential_distribution.v b/theories/probability_theory/exponential_distribution.v index 0206c08f40..a243858575 100644 --- a/theories/probability_theory/exponential_distribution.v +++ b/theories/probability_theory/exponential_distribution.v @@ -17,7 +17,7 @@ From mathcomp Require Import lebesgue_measure lebesgue_integral ftc. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -71,7 +71,7 @@ Lemma in_continuous_exponential_pdf : Proof. move=> x; rewrite in_itv/= andbT => x0. apply/(@cvgrPdist_lt _ R^o) => e e0; near=> y. -rewrite 2?(exponential_pdfE (ltW _))//; last by near: y; exact: lt_nbhsr. +rewrite 2?(exponential_pdfE (ltW _))//; first by near: y; exact: lt_nbhsr. near: y; move: e e0; apply/(@cvgrPdist_lt _ R^o). by apply: continuous_comp => //; exact: continuous_exponential_pdfT. Unshelve. end_near. Qed. @@ -118,7 +118,7 @@ Lemma exponential_prob_itv0c (x : R) : 0 < x -> exponential_prob rate `[0, x] = (1 - (expR (- rate * x))%:E)%E. Proof. move=> x0. -rewrite (_ : 1 = - (- expR (- rate * 0))%:E)%E; last first. +rewrite (_ : 1 = - (- expR (- rate * 0))%:E)%E. by rewrite mulr0 expR0 EFinN oppeK. rewrite addeC. apply: (@continuous_FTC2 _ _ (fun x => - expR (- rate * x))) => //. @@ -139,26 +139,26 @@ Proof. move=> rate0. have mEex : measurable_fun setT (EFin \o exponential_pdf rate). by apply/measurable_EFinP; exact: measurable_exponential_pdf. -rewrite -(setUv `[0, +oo[%classic) ge0_integral_setU//=; last 4 first. +rewrite -(setUv `[0, +oo[%classic) ge0_integral_setU//=. exact: measurableC. by rewrite setUv. by move=> x _; rewrite lee_fin exponential_pdf_ge0// ltW. exact/disj_setPCl. -rewrite [X in _ + X]integral0_eq ?adde0; last first. +rewrite [X in _ + X]integral0_eq ?adde0. by move=> x x0; rewrite /exponential_pdf patchE ifF// memNset. rewrite (@ge0_continuous_FTC2y _ _ (fun x => - (expR (- rate * x))) _ 0)//. -- by rewrite mulr0 expR0 EFinN oppeK add0e. - by move=> x _; apply: exponential_pdf_ge0; exact: ltW. - exact: within_continuous_exponential_pdf. - rewrite -oppr0; apply: cvgN. rewrite (_ : (fun x => expR (- rate * x)) = - (fun z => expR (- z)) \o (fun z => rate * z)); last first. + (fun z => expR (- z)) \o (fun z => rate * z)). by apply: eq_fun => x; rewrite mulNr. apply: (@cvg_comp _ _ _ _ _ _ (pinfty_nbhs R)); last exact: cvgr_expR. exact: gt0_cvgMry. - by apply: cvgN; apply/cvg_at_right_filter; exact: cexpNM. - exact: derive1_exponential_pdf. +- by rewrite mulr0 expR0 EFinN oppeK add0e. Qed. Lemma integrable_exponential_pdf : 0 < rate -> diff --git a/theories/probability_theory/normal_distribution.v b/theories/probability_theory/normal_distribution.v index 89e1e89703..618ba5046a 100644 --- a/theories/probability_theory/normal_distribution.v +++ b/theories/probability_theory/normal_distribution.v @@ -22,7 +22,7 @@ From mathcomp Require Import lebesgue_integral ftc gauss_integral. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -150,14 +150,13 @@ Let integral_gaussFF' : sigma != 0 -> Proof. move=> s0; rewrite /normal_peak invrK. rewrite -mulrnAr -[in RHS]mulr_natr sqrtrM ?(sqrtrM 2) ?sqr_ge0 ?pi_ge0// !EFinM. -rewrite muleCA ge0_integralZr//=; first last. - by move=> x _; rewrite lee_fin mulr_ge0//= ?gauss_fun_ge0// F'E/= invr_ge0. - rewrite F'E; apply/measurable_EFinP/measurable_funM => //. +rewrite muleCA ge0_integralZr//=. +- rewrite F'E; apply/measurable_EFinP/measurable_funM => //. apply/measurableT_comp => //; first exact: measurable_gauss_fun. by apply: measurable_funM => //; exact: measurable_funD. +- by move=> x _; rewrite lee_fin mulr_ge0//= ?gauss_fun_ge0// F'E/= invr_ge0. congr *%E; last by rewrite -(mulr_natr (_ ^+ 2)) sqrtrM ?sqr_ge0. rewrite -increasing_ge0_integration_by_substitutionT//. -- exact: integralT_gauss. - move=> x y xy; rewrite /F ltr_pM2r ?ltr_leB ?gt_eqF//. by rewrite invr_gt0 ?sqrtr_gt0 ?pmulrn_lgt0 ?exprn_even_gt0. - by rewrite F'E => ?; exact: cvg_cst. @@ -169,6 +168,7 @@ rewrite -increasing_ge0_integration_by_substitutionT//. by rewrite invr_gt0// sqrtr_gt0 -mulr_natr mulr_gt0// exprn_even_gt0. - exact: continuous_gauss_fun. - by move=> x; rewrite gauss_fun_ge0. +- exact: integralT_gauss. Qed. Let integral_normal_fun : sigma != 0 -> @@ -193,7 +193,7 @@ Proof. rewrite /normal_pdf; have [_|s0] := eqVneq sigma 0. by rewrite integral_indic//= setIT lebesgue_measure_itv/= lte01 oppr0 adde0. under eq_integral do rewrite EFinM. -rewrite integralZl//=; last exact: integrable_normal_fun. +rewrite integralZl//=; first exact: integrable_normal_fun. by rewrite integral_normal_fun// -EFinM divff// gt_eqF// normal_peak_gt0. Qed. @@ -221,7 +221,7 @@ Qed. Let normal_sigma_additive : semi_sigma_additive normal_prob. Proof. move=> /= A mA tA mUA. -rewrite /normal_prob/= integral_bigcup//=; last first. +rewrite /normal_prob/= integral_bigcup//=. by apply: (integrableS _ _ (subsetT _)) => //; exact: integrable_normal_pdf. apply: is_cvg_ereal_nneg_natsum_cond => n _ _. by apply: integral_ge0 => /= x ?; rewrite lee_fin normal_pdf_ge0 ?ltW. diff --git a/theories/probability_theory/poisson_distribution.v b/theories/probability_theory/poisson_distribution.v index d120ff9811..72215b6304 100644 --- a/theories/probability_theory/poisson_distribution.v +++ b/theories/probability_theory/poisson_distribution.v @@ -17,7 +17,7 @@ From mathcomp Require Import lebesgue_integral. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -90,14 +90,14 @@ HB.instance Definition _ := isMeasure.Build _ _ _ poisson Let poisson_setT : poisson [set: nat] = 1. Proof. rewrite /poisson; case: ifPn => [rate0|_]; last by rewrite probability_setT. -rewrite [RHS](_ : _ = (expR (- rate))%:E * (expR rate)%:E); last first. +rewrite [RHS](_ : _ = (expR (- rate))%:E * (expR rate)%:E). by rewrite -EFinM expRN mulVf ?gt_eqF ?expR_gt0. -rewrite -nneseries_esumT; last by move=> *; rewrite lee_fin poisson_pmf_ge0. +rewrite -nneseries_esumT; first by move=> *; rewrite lee_fin poisson_pmf_ge0. under eq_eseriesr. move=> n _; rewrite /poisson_pmf rate0 EFinM muleC; over. -rewrite /= nneseriesZl/=; last first. +rewrite /= nneseriesZl/=. by move=> n _; rewrite lee_fin divr_ge0// exprn_ge0// ltW. -congr *%E; rewrite expRE -EFin_lim; last first. +congr *%E; rewrite expRE -EFin_lim. rewrite /pseries/=; under eq_fun do rewrite mulrC. exact: is_cvg_series_exp_coeff. apply/congr_lim/funext => n/=; rewrite /pseries/= /series/= -sumEFin//. diff --git a/theories/probability_theory/random_variable.v b/theories/probability_theory/random_variable.v index d968de180c..ec3d1984b1 100644 --- a/theories/probability_theory/random_variable.v +++ b/theories/probability_theory/random_variable.v @@ -59,7 +59,7 @@ Reserved Notation "'M_ P X" (at level 5, P, X at level 4, format "''M_' P X"). Reserved Notation "{ 'dmfun' aT >-> T }" (format "{ 'dmfun' aT >-> T }"). Reserved Notation "'{' 'dRV' P >-> R '}'" (format "'{' 'dRV' P '>->' R '}'"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -155,7 +155,7 @@ Context d (T : measurableType d) (R : realType) Lemma pmf_gt0_countable : countable [set r | 0 < pmf X r]%R. Proof. rewrite [X in countable X](_ : _ = - \bigcup_n [set r | n.+1%:R^-1 < pmf X r]%R); last first. + \bigcup_n [set r | n.+1%:R^-1 < pmf X r]%R). by apply/seteqP; split=> [r/= /ltr_add_invr[k /[!add0r] kXr]|r/= [k _]]; [exists k|exact: lt_trans]. apply: bigcup_countable => // n _; apply: finite_set_countable. @@ -163,14 +163,14 @@ apply: contrapT => /infiniteP/pcard_leP/injfunPex[/= q q_fun q_inj]. have /(probability_le1 P) : measurable (\bigcup_k X @^-1` [set q k]). by apply: bigcup_measurable => k _; exact: measurable_funPTI. rewrite leNgt => /negP; apply. -rewrite [ltRHS](_ : _ = \sum_(0 <= k // i; rewrite in_setT. +rewrite [ltRHS](_ : _ = \sum_(0 <= k // i; rewrite in_setT. rewrite (trivIset_comp (fun r => X@^-1` [set r]))//. exact: trivIset_preimage1. apply: (lt_le_trans _ (nneseries_lim_ge n.+1 _)) => //. -rewrite -EFin_sum_fine//; last by move=> ? _; rewrite fin_num_measure. +rewrite -EFin_sum_fine//; first by move=> ? _; rewrite fin_num_measure. under eq_bigr do rewrite -/(pmf X (q _)). -rewrite lte_fin (_ : 1%R = (\sum_(0 <= k < n.+1) n.+1%:R^-1:R)%R); last first. +rewrite lte_fin (_ : 1%R = (\sum_(0 <= k < n.+1) n.+1%:R^-1:R)%R). by rewrite sumr_const_nat subn0 -[RHS]mulr_natr mulVf. by apply: ltr_sum => // k _; exact: q_fun. Qed. @@ -189,14 +189,14 @@ have [rS|nrS] := boolP (r \in [set h k | k in S]). have neqh k : k \in S /\ k != kr -> r != h k. move=> [Sk]; apply: contra_neq. by rewrite /kr => ->; rewrite pinvKV//; exact: (set_bij_inj h_bij). - rewrite /sfun (@nneseriesD1 _ _ kr)//; last by rewrite inE; exact/invS/set_mem. - by rewrite eseries0 => [| k k_ge0 /andP/neqh]; rewrite indicE in_set1; - [rewrite pinvK// eqxx mulr1 addr0|move/negPf => ->; rewrite mulr0]. -- rewrite /sfun eseries0 => [|k k_ge0 Sk]/=. - apply: le_anti; rewrite !lee_fin pmf_ge0/= leNgt; apply: contraNN nrS. - by rewrite (surj_image_eq _ (set_bij_surj h_bij)) ?inE//; exact:set_bij_sub. - rewrite indicE in_set1 (_ : (r == h k) = false) ?mulr0//. - by apply: contraNF nrS => /eqP ->; exact/image_f. + rewrite /sfun (@nneseriesD1 _ _ kr)//; first by rewrite inE; exact/invS/set_mem. + by rewrite eseries0 => [k k_ge0 /andP/neqh|]; rewrite indicE in_set1; + [move/negPf => ->; rewrite mulr0|rewrite pinvK// eqxx mulr1 addr0]. +- rewrite /sfun eseries0 => [k k_ge0 Sk|]/=. + rewrite indicE in_set1 (_ : (r == h k) = false) ?mulr0//. + by apply: contraNF nrS => /eqP ->; exact/image_f. + apply: le_anti; rewrite !lee_fin pmf_ge0/= leNgt; apply: contraNN nrS. + by rewrite (surj_image_eq _ (set_bij_surj h_bij)) ?inE//; exact:set_bij_sub. Qed. End pmf_measurable. @@ -225,10 +225,10 @@ have cpmfP : countable pmfP := pmf_gt0_countable X. have mpmfP : measurable pmfP by exact: countable_measurable. have mpmf : measurable_fun setT (fun r => (pmf X r)%:E). by apply/measurable_EFinP; exact: pmf_measurable. -rewrite -Upmf ge0_integral_setU ?Upmf//=; last 2 first. - by rewrite pmf0NP; exact: measurableC. - by move=> x _; rewrite lee_fin pmf_ge0. -rewrite [X in _ + X]integral0_eq ?addr0; last by move=> r <-. +rewrite -Upmf ge0_integral_setU ?Upmf//=. +- by rewrite pmf0NP; exact: measurableC. +- by move=> x _; rewrite lee_fin pmf_ge0. +rewrite [X in _ + X]integral0_eq ?addr0; first by move=> r <-. apply: null_set_integral => //=; first exact: measurable_funTS. exact: countable_lebesgue_measure0. Qed. @@ -306,18 +306,18 @@ Proof. move=> a. pose s := fine (ereal_inf (cdf X @` `]a, (a + 1)%R]%classic)). have cdf_s : cdf X r @[r --> a^'+] --> s%:E. - rewrite /s fineK. - - apply: nondecreasing_at_right_cvge; first by rewrite ltBSide /= ?ltrDl. + rewrite /s fineK; last first. + apply: nondecreasing_at_right_cvge; first by rewrite ltBSide /= ?ltrDl. by move=> *; exact: cdf_nondecreasing. - - apply/fin_numPlt/andP; split=>//. - + by rewrite (lt_le_trans (ltNyr 0%R)) ?le_ereal_inf_tmp//= => l[? _] <-. - + rewrite (le_lt_trans _ (ltry 1%R))// ge_ereal_inf//=. - exists (cdf X (a + 1)); last exact: cdf_le1. - by exists (a + 1)%R => //; rewrite in_itv /=; apply/andP; rewrite ltrDl. + apply/fin_numPlt/andP; split=>//. + by rewrite (lt_le_trans (ltNyr 0%R)) ?le_ereal_inf_tmp//= => l[? _] <-. + rewrite (le_lt_trans _ (ltry 1%R))// ge_ereal_inf//=. + exists (cdf X (a + 1)); last exact: cdf_le1. + by exists (a + 1)%R => //; rewrite in_itv /=; apply/andP; rewrite ltrDl. have cdf_ns : cdf X (a + n.+1%:R^-1) @[n --> \oo] --> s%:E. move/cvge_at_rightP : cdf_s; apply; split=> [n|]; rewrite ?ltrDl //. rewrite -[X in _ --> X]addr0; apply: (@cvgD _ R^o); first exact: cvg_cst. - by rewrite gtr0_cvgV0 ?cvg_shiftS; [exact: cvgr_idn | near=> n]. + by rewrite gtr0_cvgV0 ?cvg_shiftS; [near=> n | exact: cvgr_idn]. have cdf_na : cdf X (a + n.+1%:R^-1) @[n --> \oo] --> cdf X a. pose F n := X @^-1` `]-oo, (a + n.+1%:R^-1)%R]. suff : P (F n) @[n --> \oo] --> P (\bigcap_n F n). @@ -354,7 +354,7 @@ have : lsf `]-n%:R, r] @[n --> \oo] --> (f r)%:E. suff : ((f r)%:E - (f (-n%:R))%:E)%E @[n --> \oo] --> (f r)%:E. apply: cvg_trans; apply: near_eq_cvg; near=> n. rewrite /lsf /lebesgue_stieltjes_measure /measure_extension/=. - rewrite measurable_mu_extE/= ?wlength_itv_bnd//; last exact: is_ocitv. + rewrite measurable_mu_extE/= ?wlength_itv_bnd//; first exact: is_ocitv. by rewrite lerNl; near: n; exact: nbhs_infty_ger. rewrite -[X in _ --> X](sube0 (f r)%:E); apply: (cvgeB _ (cvg_cst _ )) => //. apply: (cvg_comp _ _ (cvg_comp _ _ _ (cumulativeNy f))) => //. @@ -407,14 +407,14 @@ Lemma lebesgue_stieltjes_cdf_id (A : set _) (mA : measurable A) : lscdf A = P A. Proof. apply: lebesgue_stieltjes_measure_unique => [I [[a b]]/= _ <- | //]. rewrite /lebesgue_stieltjes_measure /measure_extension/=. -rewrite measurable_mu_extE/=; last exact: is_ocitv. +rewrite measurable_mu_extE/=; first exact: is_ocitv. have [ab | ba] := leP a b; last first. by rewrite set_itv_ge ?wlength0 ?measure0// bnd_simp -leNgt ltW. rewrite wlength_itv_bnd// EFinB !fineK ?fin_num_measure//. rewrite /cdf /distribution /pushforward !preimage_id. have : `]a, b]%classic = `]-oo, b] `\` `]-oo, a] => [|->]. by rewrite -[RHS]setCK setCD setCitvl setUC -[LHS]setCK setCitv. -rewrite measureD ?setIidr//; first exact: subset_itvl. +rewrite measureD ?setIidr//; last exact: subset_itvl. by rewrite -ge0_fin_numE// fin_num_measure. Qed. @@ -430,7 +430,7 @@ Local Open Scope ereal_scope. Lemma cdf_ccdf_1 r : cdf X r + ccdf X r = 1. Proof. -rewrite /cdf /ccdf -measureU//= -eq_opE; last exact: disjoint_rays. +rewrite /cdf /ccdf -measureU//= -eq_opE; first exact: disjoint_rays. by rewrite itv_setU_setT probability_setT. Qed. @@ -552,9 +552,9 @@ Lemma expectation_sum (X : seq (T -> R)) : 'E_P[\sum_(Xi <- X) Xi] = \sum_(Xi <- X) 'E_P[Xi]. Proof. elim: X => [|X0 X IHX] intX; first by rewrite !big_nil expectation_cst. -rewrite !big_cons expectationD; last 2 first. - by rewrite intX// mem_head. - by rewrite big_seq rpred_sum// => Y YX/=; rewrite intX// inE YX orbT. +rewrite !big_cons expectationD. +- by rewrite intX// mem_head. +- by rewrite big_seq rpred_sum// => Y YX/=; rewrite intX// inE YX orbT. by rewrite IHX//= => Xi XiX; rewrite intX// inE XiX orbT. Qed. @@ -594,12 +594,12 @@ transitivity (\int[distrX]_r (\int[mu]_s (\1_`[0, r[ s)%:E)). apply: eq_integral => /= s _. have [s_ge0 | s_lt0] := leP 0%R s. - have [s_ltr | s_ger] := ltP s r. - + rewrite indicE mem_set/=; last by rewrite in_itv/= s_ge0 s_ltr. + + rewrite indicE mem_set/=; first by rewrite in_itv/= s_ge0 s_ltr. by rewrite patchE/= ifT ?indicE mem_set//= in_itv/= andbT. - + rewrite indicE memNset/=; last by rewrite in_itv/= s_ge0 ltNge s_ger. - rewrite patchE ifT//; last by rewrite mem_set//= in_itv/= andbT. + + rewrite indicE memNset/=; first by rewrite in_itv/= s_ge0 ltNge s_ger. + rewrite patchE ifT//; first by rewrite mem_set//= in_itv/= andbT. by rewrite indicE memNset//= in_itv/= ltNge s_ger. - - rewrite indicE memNset/=; last by rewrite in_itv/= leNgt s_lt0. + - rewrite indicE memNset/=; first by rewrite in_itv/= leNgt s_lt0. by rewrite patchE/= ifF// memNset//= in_itv/= andbT leNgt s_lt0. transitivity (\int[mu]_s (\int[distrX]_r (\1_`[0, r[ s)%:E)). rewrite (fubini_tonelli (fun p : R * GR => (\1_`[0, p.1[ p.2)%:E))//=. @@ -607,7 +607,7 @@ transitivity (\int[mu]_s (\int[distrX]_r (\1_`[0, r[ s)%:E)). pose fsnd (p : R * GR) := (0 <= p.2)%R. pose f21 (p : R * GR) := (p.2 < p.1)%R. rewrite [X in measurable X](_ : _ = - fsnd @^-1` [set true] `&` f21 @^-1` [set true]); last first. + fsnd @^-1` [set true] `&` f21 @^-1` [set true]). by apply/seteqP; split => p; rewrite in_itv/= => /andP. apply: measurableI. - have : measurable_fun setT fsnd by exact: measurable_fun_ler. @@ -621,13 +621,13 @@ transitivity (\int[mu]_(s in D) (\int[distrX]_r (\1_`[0, r[ s)%:E)). rewrite memNset//= ?in_itv/= ?leNgt ?s0//. by apply: integral0_eq => r _; rewrite indicE/= memNset//= in_itv/= leNgt s0. apply: eq_integral => s; rewrite /D inE/= in_itv/= andbT => s_ge0. -rewrite integral_indic//=. +rewrite integral_indic//=; last first. rewrite /ccdf setIT set_itvoy; congr distribution. by apply/funext => r/=; rewrite in_itv/= s_ge0. have : measurable_fun setT (<%R s) by exact: measurable_fun_ltr. rewrite [X in measurable X](_ : _ = (<%R s) @^-1` [set true]). - by move=> /(_ measurableT [set true]); rewrite setTI; exact. -by apply: eq_set => r; rewrite in_itv/= s_ge0. + by apply: eq_set => r; rewrite in_itv/= s_ge0. +by move=> /(_ measurableT [set true]); rewrite setTI; exact. Qed. Let ge0_expectation_preimage (X : {RV P >-> R}) : (forall x, 0 <= X x)%R -> @@ -642,8 +642,8 @@ have mPgtr : measurable_fun setT (fun r : R => P (X @^-1` `]r, +oo[)). move=> X_ge0; rewrite ge0_expectation_ccdf//. transitivity (\int[mu]_(r in `[0%R, +oo[) (P (X @^-1` [set r]) + P (X @^-1` `]r, +oo[))). - rewrite ge0_integralD//; [|exact: measurable_funTS..]. - rewrite [X in _ = X + _](_ : _ = 0) ?add0e; first exact: eq_integral. + rewrite ge0_integralD//; [exact: measurable_funTS..|]. + rewrite [X in _ = X + _](_ : _ = 0) ?add0e; last exact: eq_integral. rewrite -(lebesgue_integral_pmf X) integral_mkcond. apply: eq_integral => /= r _. rewrite patchE; have [r_ge0 | r_lt0] := boolP (r \in `[0%R, +oo[). @@ -653,9 +653,9 @@ transitivity rewrite -nonemptyPn; apply: contraNnot r_lt0. by case=> x <-; rewrite in_itv/= andbT. apply: eq_integral =>/= r _; rewrite -measureU//. -- by rewrite -preimage_setU setU1itv. - exact: measurable_funPTI. - by rewrite -preimage_setI -subset0 => x/= [->]; rewrite in_itv/= ltxx. +- by rewrite -preimage_setU setU1itv. Qed. Lemma le0_expectation_cdf (X : {RV P >-> R}) : (forall x, X x <= 0)%R -> @@ -671,9 +671,9 @@ have mfPleY : measurable_fun setT fPleY. move=> X_le0. have Y_ge0 x : (0 <= Y x)%R by rewrite oppr_ge0/=. transitivity (- 'E_P[Y]). - rewrite !expectation_def /Y -integral_ge0N/= => [|x _]. - by apply: eq_integral => x _; rewrite opprK. - by rewrite lee_fin/= oppr_ge0. + rewrite !expectation_def /Y -integral_ge0N/= => [x _|]. + by rewrite lee_fin/= oppr_ge0. + by apply: eq_integral => x _; rewrite opprK. transitivity (- \int[mu]_(s in `]-oo, 0%R]) P (Y @^-1` `[(- s)%R, +oo[)). rewrite ge0_expectation_preimage ?ge0_integration_by_substitution0//=. move/measurable_EFinP : mfPleY; apply: eq_measurable_fun => r /= _. @@ -707,15 +707,15 @@ Lemma expectation_cdf_ccdf (X : {RV P >-> R}) : Lfun P 1 X -> - \int[mu]_(r in `]-oo, 0%R[) cdf X r. Proof. move=> L1X. -rewrite -[in LHS](funrposBneg X) expectationD; last 2 first. +rewrite -[in LHS](funrposBneg X) expectationD. - exact/Lfun1_integrable/integrable_funrpos/Lfun1_integrable. - rewrite rpredN/=. exact/Lfun1_integrable/integrable_funrneg/Lfun1_integrable. -rewrite (@ge0_expectation_ccdf X^\+%R); last by move=> ?; exact: funrpos_ge0. +rewrite (@ge0_expectation_ccdf X^\+%R); first by move=> ?; exact: funrpos_ge0. congr +%E. apply: eq_integral => r /[!inE]/= r0y; congr (P _). by rewrite preimage_funrpos// (itvP r0y). -rewrite le0_expectation_cdf/=; last by move=> ?; rewrite oppr_le0 funrneg_ge0. +rewrite le0_expectation_cdf/=; first by move=> ?; rewrite oppr_le0 funrneg_ge0. congr -%E; apply: eq_integral => r /[!inE]/= rNy0; congr (P _). by rewrite preimage_funrneg. Qed. @@ -742,7 +742,7 @@ Lemma covarianceE (X Y : T -> R) : Proof. move=> l1X l1Y l1XY. rewrite unlock [X in 'E_P[X]](_ : _ = (X \* Y \- fine 'E_P[X] \o* Y - \- fine 'E_P[Y] \o* X \+ fine ('E_P[X] * 'E_P[Y]) \o* cst 1)%R); last first. + \- fine 'E_P[Y] \o* X \+ fine ('E_P[X] * 'E_P[Y]) \o* cst 1)%R). apply/funeqP => x /=; rewrite mulrDr !mulrDl/= mul1r. rewrite fineM ?expectation_fin_num// mulrNN addrA. by rewrite mulrN mulNr [Z in (X x * Y x - Z)%R]mulrC. @@ -783,7 +783,7 @@ Lemma covarianceZl a (X Y : T -> R) : Proof. move=> X1 Y1 XY1. have aXY : (a \o* X * Y = a \o* (X * Y))%R by apply/funeqP => x; rewrite mulrAC. -rewrite [LHS]covarianceE => [||//|] //=; last 2 first. +rewrite [LHS]covarianceE => [||//|] //=. - by rewrite Lfun_scale. - by rewrite aXY Lfun_scale. rewrite covarianceE// aXY !expectationZl//. @@ -795,7 +795,7 @@ Lemma covarianceZr a (X Y : T -> R) : X \in Lfun P 1 -> Y \in Lfun P 1 -> covariance P X (a \o* Y)%R = a%:E * covariance P X Y. Proof. move=> X1 Y1 XY1. -by rewrite [in RHS]covarianceC covarianceC covarianceZl; last rewrite mulrC. +by rewrite [in RHS]covarianceC covarianceC covarianceZl; [| |rewrite mulrC|]. Qed. Lemma covarianceNl (X Y : T -> R) : X \in Lfun P 1 -> Y \in Lfun P 1 -> @@ -910,9 +910,9 @@ move=> X2. have Pfin : P setT \is a fin_num := fin_num_measure P _ measurableT. have X1 := Lfun_subset12 Pfin X2. rewrite /variance covarianceZl//=. -- by rewrite covarianceZr// ?muleA ?EFinM// Lfun2_mul_Lfun1. - by rewrite Lfun_scale. - by rewrite Lfun2_mul_Lfun1// Lfun_scale// ler1n. +- by rewrite covarianceZr// ?muleA ?EFinM// Lfun2_mul_Lfun1. Qed. Lemma varianceN (X : T -> R) : X \in Lfun P 2%:E -> 'V_P[(\- X)%R] = 'V_P[X]. @@ -1055,7 +1055,7 @@ move => heps; have [->|hv] := eqVneq 'V_P[X] +oo. by rewrite mulr_infty gtr0_sg ?mul1e// ?leey// invr_gt0// exprn_gt0. have h (Y : {RV P >-> R}) : P [set x | (eps <= `|Y x|)%R] <= (eps ^- 2)%:E * 'E_P[Y ^+ 2]. - rewrite -lee_pdivrMl; last by rewrite invr_gt0// exprn_gt0. + rewrite -lee_pdivrMl; first by rewrite invr_gt0// exprn_gt0. rewrite exprnN expfV exprz_inv opprK -exprnP. apply: (@le_trans _ _ ('E_P[(@GRing.exp R ^~ 2%N \o normr) \o Y])). apply: (@markov Y (@GRing.exp R ^~ 2%N)) => //. @@ -1092,12 +1092,12 @@ have le (u : R) : (0 <= u)%R -> <= ((fine 'V_P[X] + u^2) / (lambda + u)^2)%:E. move=> uge0; rewrite EFinM. have -> : (fine 'V_P[X] + u^2)%:E = 'E_P[(Y \+ cst u)^+2]%R. - rewrite -VY -[RHS](@subeK _ _ (('E_P[(Y \+ cst u)%R])^+2)); last first. + rewrite -VY -[RHS](@subeK _ _ (('E_P[(Y \+ cst u)%R])^+2)). rewrite fin_numX// expectation_fin_num//= rpredD ?Lfun_cst//. by rewrite rpredB// Lfun_cst. - rewrite -varianceE/=; last first. + rewrite -varianceE/=. by rewrite rpredD ?lee1n//= => _; rewrite Lfun_cst. - rewrite -expe2 expectationD/= ?Lfun_cst//; last by rewrite rpredB ?Lfun_cst. + rewrite -expe2 expectationD/= ?Lfun_cst//; first by rewrite rpredB ?Lfun_cst. rewrite EY// add0e expectation_cst -EFinM. by rewrite (varianceD_cst_r _ Y2) EFinD fineK ?variance_fin_num. have le : [set x | lambda%:E <= (X x)%:E - 'E_P[X]] @@ -1119,9 +1119,9 @@ have le (u : R) : (0 <= u)%R -> have peps : (0 < eps)%R by rewrite exprz_gt0 ?ltr_wpDr. rewrite (lee_pdivlMr _ _ peps) muleC. under eq_set => x. - rewrite -[leRHS]gee0_abs ?lee_fin ?sqr_ge0 -?lee_fin => [|//]. + rewrite -[leRHS]gee0_abs ?lee_fin ?sqr_ge0 -?lee_fin => [//|]. rewrite -[(_ ^+ 2)%R]/(((Y \+ cst u) ^+ 2) x)%R; over. - rewrite -[X in X%:E * _]gtr0_norm => [|//]. + rewrite -[X in X%:E * _]gtr0_norm => [//|]. apply: (le_trans (markov _ peps _ _ _)) => //=. by move=> x y /[!nnegrE] /ger0_norm-> /ger0_norm->. rewrite -/Y le_eqVlt; apply/orP; left; apply/eqP; congr expectation. @@ -1130,7 +1130,7 @@ pose u0 := (fine 'V_P[X] / lambda)%R. have u0ge0 : (0 <= u0)%R. by apply: divr_ge0 (ltW lambda_gt0); rewrite -lee_fin finVK variance_ge0. apply: le_trans (le _ u0ge0) _; rewrite lee_fin le_eqVlt; apply/orP; left. -rewrite eqr_div; [|apply: lt0r_neq0..]; last 2 first. +rewrite eqr_div; [apply: lt0r_neq0..|]. - by rewrite exprz_gt0 -1?[ltLHS]addr0 ?ltr_leD. - by rewrite ltr_wpDl ?fine_ge0 ?variance_ge0 ?exprz_gt0. apply/eqP; have -> : fine 'V_P[X] = (u0 * lambda)%R by rewrite divfK ?gt_eqF. @@ -1210,13 +1210,13 @@ have tAX : trivIset (dRV_dom X) (fun k => X @^-1` (A `&` [set dRV_enum X k])). have := measure_bigcup P _ (fun k => X @^-1` (A `&` [set dRV_enum X k])) mAX tAX. rewrite -preimage_bigcup => {mAX tAX}PXU. rewrite -{1}(setIT A) -(setUv (\bigcup_(i in dRV_dom X) [set dRV_enum X i])). -rewrite setIUr preimage_setU measureU; last 3 first. +rewrite setIUr preimage_setU measureU. - by rewrite preimage_setI; apply: measurableI; rewrite //-[X in _ X]setTI; apply/measurable_funP => //; exact: bigcup_measurable. - by rewrite preimage_setI; apply: measurableI; rewrite //-[X in _ X]setTI; apply/measurable_funP => //; apply: measurableC; exact: bigcup_measurable. - by rewrite -preimage_setI -setIIr setIA setICK preimage_set0. -rewrite [X in _ + X = _](_ : _ = 0) ?adde0; last first. +rewrite [X in _ + X = _](_ : _ = 0) ?adde0. rewrite (_ : _ @^-1` _ = set0) ?measure0//; apply/disjoints_subset => x AXx. rewrite setCK /bigcup /=; exists ((dRV_enum X)^-1 (X x))%function. exact: funS. @@ -1250,7 +1250,7 @@ Lemma dRV_expectation (X : {dRV P >-> R}) : Proof. move=> ix; rewrite unlock. rewrite -[in LHS](_ : \bigcup_k (if k \in dRV_dom X then - X @^-1` [set dRV_enum X k] else set0) = setT); last first. + X @^-1` [set dRV_enum X k] else set0) = setT). apply/seteqP; split => // t _. exists ((dRV_enum X)^-1%function (X t)) => //. case: ifPn=> [_|]. @@ -1263,7 +1263,7 @@ have {tA}/trivIset_mkcond tXA : apply/trivIsetP => /= i j iX jX ij. move/trivIsetP : tA => /(_ i j iX jX) Aij. by rewrite -preimage_setI Aij ?preimage_set0. -rewrite integral_bigcup //; last 2 first. +rewrite integral_bigcup //. - by move=> k; case: ifPn. - apply: (integrableS measurableT) => //. by rewrite -bigcup_mkcond; exact: bigcup_measurable. @@ -1276,11 +1276,11 @@ transitivity (\sum_(i i _; rewrite -integralZl//; last 2 first. + apply: eq_eseriesr => i _; rewrite -integralZl//. - by case: ifPn. - apply/integrableP; split => //. - rewrite (eq_integral (cst 1%E)); last by move=> x _; rewrite abse1. - rewrite integral_cst//; last by case: ifPn. + rewrite (eq_integral (cst 1%E)); first by move=> x _; rewrite abse1. + rewrite integral_cst//; first by case: ifPn. rewrite mul1e (@le_lt_trans _ _ 1%E) ?ltey//. by case: ifPn => // _; exact: probability_le1. by apply: eq_integral => y _; rewrite mule1. diff --git a/theories/probability_theory/uniform_distribution.v b/theories/probability_theory/uniform_distribution.v index 91e2f1289e..2220a980ae 100644 --- a/theories/probability_theory/uniform_distribution.v +++ b/theories/probability_theory/uniform_distribution.v @@ -18,7 +18,7 @@ From mathcomp Require Import lebesgue_measure lebesgue_integral. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -63,7 +63,7 @@ Lemma integral_uniform_pdf1 A (ab : a < b) : `[a, b] `<=` A -> (\int[mu]_(x in A) (uniform_pdf x)%:E = 1)%E. Proof. move=> abA; rewrite integral_uniform_pdf setIidr//. -rewrite (eq_integral (fun=> (b - a)^-1%:E)); last first. +rewrite (eq_integral (fun=> (b - a)^-1%:E)). by move=> x; rewrite inE/= in_itv/= /uniform_pdf => ->. rewrite integral_cst//= lebesgue_measure_itv/= lte_fin. by rewrite ab -EFinD -EFinM mulVf// gt_eqF// subr_gt0. @@ -88,7 +88,7 @@ Proof. apply/integrableP; split. by apply: measurableT_comp => //; exact: measurable_uniform_pdf. under eq_integral. - move=> x _; rewrite gee0_abs//; last by rewrite lee_fin uniform_pdf_ge0. + move=> x _; rewrite gee0_abs//; first by rewrite lee_fin uniform_pdf_ge0. over. by rewrite /= integral_uniform_pdf1 ?ltry// -subr_gt0. Qed. @@ -124,8 +124,8 @@ apply/eqP; rewrite eq_le; apply/andP; split; last first. apply: (@le_trans _ _ (\int[mu]_(x in A `&` `[a, b]%classic) (b - a)^-1%:E))%E; last first. rewrite integral_cst//= ?mul1e//. - by rewrite pmule_rle0 ?lte_fin ?invr_gt0// ?subr_gt0// -muA0 measureIl. - exact: measurableI. + exact: measurableI. + by rewrite pmule_rle0 ?lte_fin ?invr_gt0// ?subr_gt0// -muA0 measureIl. apply: ge0_le_integral => //=. - exact: measurableI. - by move=> x [Ax]; rewrite /= in_itv/= => axb; rewrite lee_fin uniform_pdf_ge0. @@ -138,16 +138,16 @@ Let integral_uniform_indic E : measurable E -> (b - a)^-1%:E * \int[mu]_(x in `[a, b]) (\1_E x)%:E)%E. Proof. move=> mE; rewrite integral_indic//= /uniform_prob setIT -ge0_integralZl//=. -- rewrite [LHS]integral_mkcond/= [RHS]integral_mkcond/=. - apply: eq_integral => x _; rewrite !patchE; case: ifPn => xE. - case: ifPn. - rewrite inE/= in_itv/= => xab. - by rewrite /uniform_pdf xab indicE xE mule1. - by rewrite notin_setE/= in_itv/= => /negP/negbTE; rewrite /uniform_pdf => ->. - case: ifPn => //. - by rewrite inE/= in_itv/= => axb; rewrite indicE (negbTE xE) mule0. - exact/measurable_EFinP/measurable_indic. - by rewrite lee_fin invr_ge0// ltW// subr_gt0. +rewrite [LHS]integral_mkcond/= [RHS]integral_mkcond/=. +apply: eq_integral => x _; rewrite !patchE; case: ifPn => xE. + case: ifPn. + rewrite inE/= in_itv/= => xab. + by rewrite /uniform_pdf xab indicE xE mule1. + by rewrite notin_setE/= in_itv/= => /negP/negbTE; rewrite /uniform_pdf => ->. +case: ifPn => //. +by rewrite inE/= in_itv/= => axb; rewrite indicE (negbTE xE) mule0. Qed. Import HBNNSimple. @@ -157,26 +157,26 @@ Let integral_uniform_nnsfun (f : {nnsfun _ >-> R}) : (b - a)^-1%:E * \int[mu]_(x in `[a, b]) (f x)%:E)%E. Proof. under [LHS]eq_integral do rewrite fimfunE -fsumEFin//. -rewrite [LHS]ge0_integral_fsum//; last 2 first. - - by move=> r; exact/measurable_EFinP/measurableT_comp. - - by move=> n x _; rewrite EFinM nnfun_muleindic_ge0. -rewrite -[RHS]ge0_integralZl//; last 3 first. - - exact/measurable_EFinP/measurable_funTS. - - by move=> x _; rewrite lee_fin. - - by rewrite lee_fin invr_ge0// ltW// subr_gt0. +rewrite [LHS]ge0_integral_fsum//. +- by move=> r; exact/measurable_EFinP/measurableT_comp. +- by move=> n x _; rewrite EFinM nnfun_muleindic_ge0. +rewrite -[RHS]ge0_integralZl//. +- exact/measurable_EFinP/measurable_funTS. +- by move=> x _; rewrite lee_fin. +- by rewrite lee_fin invr_ge0// ltW// subr_gt0. under [RHS]eq_integral. - move=> x xD; rewrite fimfunE -fsumEFin// ge0_mule_fsumr; last first. + move=> x xD; rewrite fimfunE -fsumEFin// ge0_mule_fsumr. by move=> r; rewrite EFinM nnfun_muleindic_ge0. over. -rewrite [RHS]ge0_integral_fsum//; last 2 first. - - by move=> r; apply/measurable_EFinP; do 2 apply/measurableT_comp => //. - - move=> n x _; rewrite EFinM mule_ge0//; last by rewrite nnfun_muleindic_ge0. - by rewrite lee_fin invr_ge0// ltW// subr_gt0. +rewrite [RHS]ge0_integral_fsum//. +- by move=> r; apply/measurable_EFinP; do 2 apply/measurableT_comp => //. +- move=> n x _; rewrite EFinM mule_ge0//; last by rewrite nnfun_muleindic_ge0. + by rewrite lee_fin invr_ge0// ltW// subr_gt0. apply: eq_fsbigr => r _; rewrite ge0_integralZl//. -- by rewrite !integralZl_indic_nnsfun//= integral_uniform_indic// muleCA. - exact/measurable_EFinP/measurableT_comp. - by move=> t _; rewrite nnfun_muleindic_ge0. - by rewrite lee_fin invr_ge0// ltW// subr_gt0. +- by rewrite !integralZl_indic_nnsfun//= integral_uniform_indic// muleCA. Qed. Lemma integral_uniform (f : _ -> \bar R) : @@ -187,20 +187,20 @@ move=> mf f0. pose f_ := nnsfun_approx measurableT mf. transitivity (lim (\int[uniform_prob ab]_x (f_ n x)%:E @[n --> \oo])%E). rewrite -monotone_convergence//=. - - apply: eq_integral => ? /[!inE] xD; apply/esym/cvg_lim => //=. - exact: cvg_nnsfun_approx. - by move=> n; exact/measurable_EFinP/measurable_funTS. - by move=> n ? _; rewrite lee_fin. - by move=> ? _ ? ? mn; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. + - apply: eq_integral => ? /[!inE] xD; apply/esym/cvg_lim => //=. + exact: cvg_nnsfun_approx. rewrite [X in _ = (_ * X)%E](_ : _ = lim - (\int[mu]_(x in `[a, b]) (f_ n x)%:E @[n --> \oo])%E); last first. + (\int[mu]_(x in `[a, b]) (f_ n x)%:E @[n --> \oo])%E). rewrite -monotone_convergence//=. - - apply: eq_integral => ? /[!inE] xD; apply/esym/cvg_lim => //. - exact: cvg_nnsfun_approx. - by move=> n; exact/measurable_EFinP/measurable_funTS. - by move=> n ? _; rewrite lee_fin. - by move=> ? _ ? ? ?; rewrite lee_fin; exact/lefP/nd_nnsfun_approx. -rewrite -limeMl//. + - apply: eq_integral => ? /[!inE] xD; apply/esym/cvg_lim => //. + exact: cvg_nnsfun_approx. +rewrite -limeMl//; last first. by apply: congr_lim; apply/funext => n /=; exact: integral_uniform_nnsfun. apply/ereal_nondecreasing_is_cvgn => x y xy; apply: ge0_le_integral => //=. - by move=> ? _; rewrite lee_fin. diff --git a/theories/realfun.v b/theories/realfun.v index 961e22a351..7fbf9d0f93 100644 --- a/theories/realfun.v +++ b/theories/realfun.v @@ -43,7 +43,7 @@ From mathcomp Require Import sequences real_interval numfun. (* ``` *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -214,7 +214,7 @@ Lemma cvge_at_leftP (f : R -> \bar R) (p l : R) : Proof. apply: (iff_trans (cvg_at_leftNP f p l%:E)). apply: (iff_trans (cvge_at_rightP _ _ l)); split=> h u [up pu]. -- rewrite (_ : u = \- (\- u))%R; last by apply/funext => ?/=; rewrite opprK. +- rewrite (_ : u = \- (\- u))%R; first by apply/funext => ?/=; rewrite opprK. by apply: h; split; [by move=> n; rewrite ltrNl opprK|exact: cvgN]. - by apply: h; split => [n|]; [rewrite ltrNl|move/cvgN : pu; rewrite opprK]. Qed. @@ -466,11 +466,11 @@ move=> nif; have ndNf : {in `[a, b] &, nondecreasing_fun (-%R \o f)}. by move=> x y xab yab xy /=; rewrite lerNl opprK nif. move/nondecreasing_at_left_at_right : (ndNf) => H x. rewrite in_itv/= => /andP[ax xb]; rewrite -[leLHS]opprK lerNl -!limN//. -- by apply: H; rewrite !in_itv/= ax. -- rewrite -(opprK f); apply: is_cvgN. - exact: nondecreasing_at_right_is_cvgrW ndNf. - rewrite -(opprK f);apply: is_cvgN. exact: nondecreasing_at_left_is_cvgrW ndNf. +- rewrite -(opprK f); apply: is_cvgN. + exact: nondecreasing_at_right_is_cvgrW ndNf. +- by apply: H; rewrite !in_itv/= ax. Qed. End fun_cvg_realType. @@ -499,7 +499,7 @@ have [lpoo|lpoo] := eqVneq l +oo. exists n; split; first by rewrite num_real. by move=> m /= nm; rewrite (le_trans (ltW Mun))// ndf// ltW. have [fnoo|fnoo] := pselect (f = cst -oo). - rewrite /l (_ : S = [set -oo]). + rewrite /l (_ : S = [set -oo]); last first. by rewrite ereal_sup1 fnoo; exact: cvg_cst. apply/seteqP; split => [_ [n _] <- /[!fnoo]//|_ ->]. by rewrite /S fnoo; exists 0%R. @@ -522,7 +522,7 @@ rewrite -(@fineK _ l)//; apply/fine_cvgP; split. by move=> r A1r; rewrite f_fin_num //; exact/xB/ltW. set g := fun n => if (n < x)%R then fine (f x) else fine (f n). have <- : sup (range g) = fine l. - apply: EFin_inj; rewrite -ereal_sup_EFin//; last 2 first. + apply: EFin_inj; rewrite -ereal_sup_EFin//. - exists (fine l) => /= _ [m _ <-]; rewrite /g /=. have [mx|xm] := ltP m x. by rewrite fine_le// ?f_fin_num//; apply: ereal_sup_ubound; exists x. @@ -533,7 +533,7 @@ have <- : sup (range g) = fine l. apply: ereal_sup_le => _ /= [_ [m _] <-] <-. rewrite /g; have [_|xm] := ltP m x. by rewrite fineK// ?f_fin_num//; exists x. - by rewrite fineK// ?f_fin_num//; [exists m|exact/xB]. + by rewrite fineK// ?f_fin_num//; [exact/xB|exists m]. apply: ge_ereal_sup => /= _ [m _] <-. have [mx|xm] := ltP m x. rewrite (le_trans (ndf _ _ (ltW mx)))//. @@ -558,7 +558,7 @@ apply: nondecreasing_cvgr. - exists (fine l) => /= _ [m _ <-]; rewrite /g /=. rewrite -lee_fin (fineK l_fin_num); apply: ereal_sup_ubound. have [_|xm] := ltP m x; first by rewrite fineK// ?f_fin_num//; eexists. - by rewrite fineK// ?f_fin_num//; [exists m|exact/xB]. + by rewrite fineK// ?f_fin_num//; [exact/xB|exists m]. Unshelve. all: by end_near. Qed. (* NB: see ereal_nondecreasing_is_cvgn in sequences.v *) @@ -598,19 +598,19 @@ have [lnoo|lnoo] := eqVneq l -oo. have [fpoo|fpoo] := pselect {in Interval (BRight a) b, forall x, f x = +oo}. rewrite {}/l in lnoo *; rewrite {}/S in Snoo lnoo *. rewrite [X in ereal_inf X](_ : _ = [set +oo]). - rewrite ereal_inf1; apply/cvgeyPgey; near=> M. - move: b ab {ndf lnoo Snoo} fpoo => [[|] b|[//|]] ab fpoo. - - near=> x; rewrite fpoo ?leey// in_itv/=. - by apply/andP; split; near: x; [exact: nbhs_right_gt|exact: nbhs_right_lt]. - - near=> x; rewrite fpoo ?leey// in_itv/=. - by apply/andP; split; near: x; [exact: nbhs_right_gt|exact: nbhs_right_le]. - - near=> x; rewrite fpoo ?leey// in_itv/= andbT. - by near: x; exact: nbhs_right_gt. - apply/seteqP; split => [_ [n _] <- /[!fpoo]//|_ ->]. - move: b ab ndf lnoo Snoo fpoo => [[|] s|[//|]] ab ndf lnoo Snoo fpoo /=. - - by exists ((a + s) / 2)%R; rewrite ?fpoo// in_itv/= !midf_lt. - - by exists ((a + s) / 2)%R; rewrite ?fpoo// in_itv/= !(midf_lt, midf_le)// ltW. - - by exists (a + 1)%R; rewrite ?fpoo// in_itv/= andbT ltrDl. + apply/seteqP; split => [_ [n _] <- /[!fpoo]//|_ ->]. + move: b ab ndf lnoo Snoo fpoo => [[|] s|[//|]] ab ndf lnoo Snoo fpoo /=. + - by exists ((a + s) / 2)%R; rewrite ?fpoo// in_itv/= !midf_lt. + - by exists ((a + s) / 2)%R; rewrite ?fpoo// in_itv/= !(midf_lt, midf_le)// ltW. + - by exists (a + 1)%R; rewrite ?fpoo// in_itv/= andbT ltrDl. + rewrite ereal_inf1; apply/cvgeyPgey; near=> M. + move: b ab {ndf lnoo Snoo} fpoo => [[|] b|[//|]] ab fpoo. + - near=> x; rewrite fpoo ?leey// in_itv/=. + by apply/andP; split; near: x; [exact: nbhs_right_gt|exact: nbhs_right_lt]. + - near=> x; rewrite fpoo ?leey// in_itv/=. + by apply/andP; split; near: x; [exact: nbhs_right_gt|exact: nbhs_right_le]. + - near=> x; rewrite fpoo ?leey// in_itv/= andbT. + by near: x; exact: nbhs_right_gt. have [/ereal_inf_pinfty lpoo|lpoo] := eqVneq l +oo. by exfalso; apply/fpoo => r rab; rewrite (lpoo (f r))//; exists r. have l_fin_num : l \is a fin_num by rewrite fin_numE lpoo lnoo. @@ -639,39 +639,39 @@ rewrite -(@fineK _ l)//; apply/fine_cvgP; split. by rewrite f_fin_num// axA// az/= ltW. set g := fun n => if (a < n < x)%R then fine (f n) else fine (f x). have <- : inf [set g x | x in [set` Interval (BRight a) b]] = fine l. - apply: EFin_inj; rewrite -ereal_inf_EFin//; last 2 first. - - exists (fine l) => /= _ [m _ <-]; rewrite /g /=. - case: ifPn => [/andP[am mx]|]. - rewrite fine_le// ?f_fin_num//; first by rewrite axA// am (ltW mx). - apply: ereal_inf_lbound; exists m => //=. - rewrite in_itv/= -[X in _ && X]/(BLeft m < b)%O am/=. - by rewrite (le_lt_trans _ xb) ?ltW. - rewrite negb_and -!leNgt => /orP[ma|xm]. - rewrite fine_le// ?f_fin_num ?inE//. - apply: ereal_inf_lbound; exists x => //=. - by rewrite in_itv/= -[X in _ && X]/(BLeft x < b)%O ax xb. + apply: EFin_inj; rewrite -ereal_inf_EFin//. + - exists (fine l) => /= _ [m _ <-]; rewrite /g /=. + case: ifPn => [/andP[am mx]|]. + rewrite fine_le// ?f_fin_num//; first by rewrite axA// am (ltW mx). + apply: ereal_inf_lbound; exists m => //=. + rewrite in_itv/= -[X in _ && X]/(BLeft m < b)%O am/=. + by rewrite (le_lt_trans _ xb) ?ltW. + rewrite negb_and -!leNgt => /orP[ma|xm]. rewrite fine_le// ?f_fin_num ?inE//. apply: ereal_inf_lbound; exists x => //=. by rewrite in_itv/= -[X in _ && X]/(BLeft x < b)%O ax xb. - - rewrite {}/l in lnoo lpoo l_fin_num *. - rewrite {}/S in Snoo lnoo lpoo l_fin_num *. - rewrite {}/A in f_fin_num axA *. - move: b ab {xb ndf lnoo lpoo l_fin_num f_fin_num Snoo fpoo axA} => - [[|] s|[//|]] ab /=. - + exists (g ((a + s) / 2))%R, ((a + s) / 2)%R => //=. - by rewrite /= in_itv/= !midf_lt. - + exists (g ((a + s) / 2))%R, ((a + s) / 2)%R => //=. - by rewrite /= in_itv/= !(midf_lt, midf_le)// ltW. - + exists (g (a + 1)%R), (a + 1)%R => //=. - by rewrite in_itv/= andbT ltrDl. + rewrite fine_le// ?f_fin_num ?inE//. + apply: ereal_inf_lbound; exists x => //=. + by rewrite in_itv/= -[X in _ && X]/(BLeft x < b)%O ax xb. + - rewrite {}/l in lnoo lpoo l_fin_num *. + rewrite {}/S in Snoo lnoo lpoo l_fin_num *. + rewrite {}/A in f_fin_num axA *. + move: b ab {xb ndf lnoo lpoo l_fin_num f_fin_num Snoo fpoo axA} => + [[|] s|[//|]] ab /=. + + exists (g ((a + s) / 2))%R, ((a + s) / 2)%R => //=. + by rewrite /= in_itv/= !midf_lt. + + exists (g ((a + s) / 2))%R, ((a + s) / 2)%R => //=. + by rewrite /= in_itv/= !(midf_lt, midf_le)// ltW. + + exists (g (a + 1)%R), (a + 1)%R => //=. + by rewrite in_itv/= andbT ltrDl. rewrite fineK//; apply/eqP; rewrite eq_le; apply/andP; split; last first. apply: ereal_inf_le_tmp => _ /= [_ [m _] <-] <-. rewrite /g; case: ifPn => [/andP[am mx]|]. - rewrite fineK// ?f_fin_num//; last by rewrite axA// am ltW. + rewrite fineK// ?f_fin_num//; first by rewrite axA// am ltW. exists m => //=. by rewrite in_itv/= -[X in _ && X]/(BLeft m < b)%O am/= (lt_trans _ xb). rewrite negb_and -!leNgt => /orP[ma|xm]. - rewrite fineK//; last by rewrite f_fin_num ?inE. + rewrite fineK//; first by rewrite f_fin_num ?inE. exists x => //=. by rewrite in_itv/= -[X in _ && X]/(BLeft x < b)%O ax xb. exists x => /=. @@ -721,11 +721,11 @@ apply: nondecreasing_at_right_cvgr => //. - exists (fine l) => /= _ [m _ <-]; rewrite /g /=. rewrite -lee_fin (fineK l_fin_num); apply: ereal_inf_lbound. case: ifPn => [/andP[am mn0]|]. - rewrite fineK//; last by rewrite f_fin_num// axA// am (ltW mn0). + rewrite fineK//; first by rewrite f_fin_num// axA// am (ltW mn0). exists m => //=. by rewrite in_itv/= -[X in _ && X]/(BLeft m < b)%O am (lt_trans _ xb). rewrite negb_and -!leNgt => /orP[ma|xm]. - rewrite fineK//; first by exists x => //=; rewrite in_itv/= ax. + rewrite fineK//; last by exists x => //=; rewrite in_itv/= ax. by rewrite f_fin_num ?inE. by rewrite fineK// ?f_fin_num ?inE//; exists x => //=; rewrite in_itv/= ax. Unshelve. all: by end_near. Qed. @@ -842,7 +842,7 @@ Unshelve. all: by end_near. Qed. Lemma lime_inf_lim f a : lime_inf f a = lim (inf_ball f a e @[e --> 0^'+]). Proof. -rewrite /lime_inf lime_sup_lim -limeN; last exact: sup_ball_is_cvg. +rewrite /lime_inf lime_sup_lim -limeN; first exact: sup_ball_is_cvg. by rewrite /sup_ball; under eq_fun do rewrite -image_comp. Qed. @@ -877,7 +877,7 @@ Unshelve. all: by end_near. Qed. Lemma lime_supD f g a : lime_sup f a +? lime_sup g a -> lime_sup (f \+ g)%E a <= lime_sup f a + lime_sup g a. Proof. -move=> fg; rewrite !lime_sup_lim -limeD//; last first. +move=> fg; rewrite !lime_sup_lim -limeD//. by rewrite -!lime_sup_lim. apply: lee_lim => //. - apply: nondecreasing_at_right_is_cvge; near=> e => x y; rewrite !in_itv/=. @@ -1314,7 +1314,7 @@ have [d Id h] : move: cDf; rewrite continuous_open_subspace//. by apply; rewrite inE/= in_itv/= (andP Ic2).2 (lt_trans (andP Ic1).1). exists z; first by []. - rewrite h -mulrA divff; first exact: mulr1. + rewrite h -mulrA divff; last exact: mulr1. by rewrite subr_eq0 gt_eqF. have LfE : L x - f x = ((x - a) * (b - x)) / (b - a) * ((f b - f x) / (b - x)) - @@ -1670,13 +1670,13 @@ have := ax; rewrite le_eqVlt => /orP[/eqP|] {}ax. near=> y => /[dup] yab; rewrite /= in_itv => /andP[ay yb]; apply/andP; split. by rewrite (@le_trans _ _ (f a)) ?fle// lerBlDr ax ler_wpDr. apply: ltW; suff : f y < u by rewrite lt_min => /andP[->]. - rewrite -?[f y < _]glt// ?fK//; last by rewrite in_itv /= !fle. + rewrite -?[f y < _]glt// ?fK//; first by rewrite in_itv /= !fle. by near: y; near_simpl; apply: open_lt; rewrite /= -flt ?gK// -ax. have := xb; rewrite le_eqVlt => /orP[/eqP {}xb {ax}|{}xb]. near=> y => /[dup] yab; rewrite /= in_itv /= => /andP[ay yb]. apply/andP; split; last by rewrite (@le_trans _ _ (f b)) ?fle// xb ler_wpDr. apply: ltW; suff : l < f y by rewrite gt_max => /andP[->]. - rewrite -?[_ < f y]glt// ?fK//; last by rewrite in_itv /= !fle. + rewrite -?[_ < f y]glt// ?fK//; first by rewrite in_itv /= !fle. by near: y; near_simpl; apply: open_gt; rewrite /= -flt// gK// xb. have xoab : x \in `]a, b[ by rewrite in_itv /=; apply/andP; split. near=> y; suff: l <= f y <= u. @@ -1778,7 +1778,7 @@ near: y; apply: (filter_app _ _ nearfx); near_simpl; near=> y => yfe. have : {within f @`]x - e, (x + e)[, continuous g}. apply: continuous_subspaceW; last exact: (segment_can_continuous _ fwcte _). exact: subset_itv_oo_cc. -rewrite continuous_open_subspace; first by apply; exact: mem_set. +rewrite continuous_open_subspace; last by apply; exact: mem_set. exact: interval_open. Unshelve. all: by end_near. Qed. @@ -1813,7 +1813,7 @@ move=> x; case: (ltrgtP x 0) => [xlt0 | xgt0 | ->]. suff main b : 0 <= b -> {in I b, continuous (@Num.sqrt R)}. near +oo_R => M; apply: (main M); rewrite // /I !inE/= in_itv/= expr0n xgt0. by rewrite -ltr_sqrt ?exprn_gt0// sqrtr_sqr gtr0_norm/=. - move=> b0; rewrite -continuous_open_subspace; last exact: interval_open. + move=> b0; rewrite -continuous_open_subspace; first exact: interval_open. apply: continuous_subspaceW; first exact: subset_itv_oo_cc. apply: (@segment_can_le_continuous _ _ _ (@GRing.exp _^~ _)) => //. by apply: continuous_subspaceT; exact: exprn_continuous. @@ -1844,7 +1844,7 @@ split => [Hd|[g [fxE Cg gxE]]]. have F1 : g1 @ 0^' --> a by case: Hd => H1 <-. apply: cvg_trans F1; apply: near_eq_cvg; rewrite /g1 !fctE. near=> i. - rewrite ifN; first by rewrite addrK mulrC /= [_%:A]mulr1. + rewrite ifN; last by rewrite addrK mulrC /= [_%:A]mulr1. rewrite -subr_eq0 addrK. by near: i; rewrite near_withinE /= near_simpl; near=> x1. by rewrite eqxx. @@ -1967,7 +1967,7 @@ Lemma nondecreasing_total_variation a b f : a <= b -> Proof. rewrite le_eqVlt => /predU1P[<-{b} ?|ab ndf]. by rewrite total_variationxx subrr. -rewrite /total_variation [X in ereal_sup X](_ : _ = [set (f b - f a)%:E]). +rewrite /total_variation [X in ereal_sup X](_ : _ = [set (f b - f a)%:E]); last first. by rewrite ereal_sup1. apply/seteqP; split => [x/= [s [t abt <-{s} <-{x}]]|x/= ->{x}]. by rewrite nondecreasing_variation. @@ -2004,7 +2004,7 @@ Lemma bounded_variationP a b f : a <= b -> BV a b f <-> TV a b f \is a fin_num. Proof. rewrite le_eqVlt => /predU1P[<-{b}|ab]. by rewrite total_variationxx; split => // ?; exact: bounded_variationxx. -rewrite ge0_fin_numE; last exact/total_variation_ge0/ltW. +rewrite ge0_fin_numE; first exact/total_variation_ge0/ltW. split=> [abf|]. by rewrite /total_variation ereal_sup_EFin ?ltry//; exact: variations_neq0. rewrite /total_variation /bounded_variation ltey => /eqP; apply: contra_notP. @@ -2017,12 +2017,12 @@ Proof. rewrite le_eqVlt => /predU1P[<-{b}|ab]. by rewrite !total_variationxx adde0. have [abf|abf] := pselect (BV a b f); last first. - rewrite {2}/total_variation hasNub_ereal_sup//; last first. + rewrite {2}/total_variation hasNub_ereal_sup//. exact: variations_neq0. rewrite addye ?leey// -ltNye (@lt_le_trans _ _ 0%E)//. exact/total_variation_ge0/ltW. have [abg|abg] := pselect (BV a b g); last first. - rewrite {3}/total_variation hasNub_ereal_sup//; last first. + rewrite {3}/total_variation hasNub_ereal_sup//. exact: variations_neq0. rewrite addey ?leey// -ltNye (@lt_le_trans _ _ 0%E)//. exact/total_variation_ge0/ltW. @@ -2052,15 +2052,15 @@ have H s t : itv_partition a c s -> itv_partition c b t -> eexists; last reflexivity. by exists (s ++ t) => //; exact: itv_partition_cat acs cbt. by rewrite -variation_cat// ltW. -rewrite [leRHS]ereal_sup_EFin//; last first. +rewrite [leRHS]ereal_sup_EFin//. by apply: variations_neq0; rewrite (lt_trans ac). have acf : BV a c f := bounded_variationl (ltW ac) (ltW cb) abf. have cbf : BV c b f := bounded_variationr (ltW ac) (ltW cb) abf. -rewrite {1 2}/total_variation ereal_sup_EFin//; last exact: variations_neq0. -rewrite ereal_sup_EFin//; last exact: variations_neq0. -rewrite -EFinD -sup_sumE; last 2 first. - by split => //; exact: variations_neq0. - by split => //; exact: variations_neq0. +rewrite {1 2}/total_variation ereal_sup_EFin//; first exact: variations_neq0. +rewrite ereal_sup_EFin//; first exact: variations_neq0. +rewrite -EFinD -sup_sumE. +- by split => //; exact: variations_neq0. +- by split => //; exact: variations_neq0. apply: sup_le. - move=> r/= [s [l' acl' <-{s}]] [t [l cbl] <-{t} <-{r}]. exists (variation a b f (l' ++ l)); split; last by rewrite -variation_cat// ltW. @@ -2091,10 +2091,10 @@ have [|nbdac] := pselect (bounded_variation c b f); first last. rewrite addey ?leey // -ltNye (@lt_le_trans _ _ 0%E)//. exact/total_variation_ge0/ltW. move=> bdAB bdAC. -rewrite /total_variation [x in (x + _)%E]ereal_sup_EFin //; last first. +rewrite /total_variation [x in (x + _)%E]ereal_sup_EFin //. exact: variations_neq0. -rewrite [x in (_ + x)%E]ereal_sup_EFin //; last exact: variations_neq0. -rewrite -EFinD -sup_sumE /has_sup; [|(by split => //; exact: variations_neq0)..]. +rewrite [x in (_ + x)%E]ereal_sup_EFin //; first exact: variations_neq0. +rewrite -EFinD -sup_sumE /has_sup; [(by split => //; exact: variations_neq0)..|]. apply: ge_ereal_sup => ? [? [l pacl <- <-]]; rewrite lee_fin. apply: (le_trans (variation_itv_partitionLR _ ac _ _)) => //. apply: ub_le_sup => /=. @@ -2141,7 +2141,7 @@ Lemma total_variation_bounded_variation a b (f : R -> R) : a <= b -> BV a b (fine \o TV a ^~ f). Proof. move=> ab BVf; apply/bounded_variationP => //. -rewrite ge0_fin_numE; last exact: total_variation_ge0. +rewrite ge0_fin_numE; first exact: total_variation_ge0. rewrite nondecreasing_total_variation/= ?ltry//. move=> x y; rewrite !in_itv!/= => /andP[ax xb] /andP[ay yb] xy. apply: fine_le. @@ -2172,12 +2172,12 @@ have Nffin : TV a x (\- f) \is a fin_num. apply/bounded_variationP => //; apply/bounded_variationN. exact: (bounded_variationl ax xb). rewrite /pos_tv /neg_tv /= total_variationN -fineB -?muleBl // ?fineM //. -- rewrite addeAC oppeD //= ?fin_num_adde_defl //. - by rewrite addeA subee // add0e -EFinD //= opprK mulrDl -splitr. -- by rewrite fin_numB ?fin_numD ?ffin; apply/andP; split. -- by apply: fin_num_adde_defl; rewrite fin_numN fin_numD; apply/andP; split. - by rewrite fin_numM // fin_numD; apply/andP; split. - by rewrite fin_numM // fin_numD; apply/andP; split. +- by apply: fin_num_adde_defl; rewrite fin_numN fin_numD; apply/andP; split. +- by rewrite fin_numB ?fin_numD ?ffin; apply/andP; split. +- rewrite addeAC oppeD //= ?fin_num_adde_defl //. + by rewrite addeA subee // add0e -EFinD //= opprK mulrDl -splitr. Qed. Lemma fine_neg_tv_nondecreasing a b f : BV a b f -> @@ -2221,7 +2221,7 @@ have e20 : 0 < eps%:num / 2 by []. move/cvgrPdist_lt/(_ (eps%:num/2) e20) : ctsf; apply: filter_app. near=> t => fxt ti xt; have ta : a <= t by exact: (le_trans ax). have tb : t <= b by rewrite (le_trans (ltW ti))// -ijb path_lt_le_last. -rewrite -fineB; last 2 first. +rewrite -fineB. by apply/bounded_variationP => //; exact: bounded_variationl bvf. by apply/bounded_variationP => //; exact: bounded_variationl bvf. rewrite (total_variationD _ ax xt). @@ -2230,27 +2230,27 @@ have tbfin : TV t b f \is a fin_num. have xtfin : TV x t f \is a fin_num. apply/bounded_variationP => //; apply: (@bounded_variationl _ _ _ b) => //. exact: (@bounded_variationr _ a). -rewrite oppeD ?fin_num_adde_defl// addeA subee //; first last. +rewrite oppeD ?fin_num_adde_defl// addeA subee //. by apply/bounded_variationP => //; exact: (@bounded_variationl _ _ _ b). -rewrite sub0e fineN normrN ger0_norm; last first. +rewrite sub0e fineN normrN ger0_norm. by rewrite fine_ge0// total_variation_ge0. move: (tv_eps); rewrite (total_variationD f _ tb) //. move: xt; rewrite le_eqVlt => /predU1P[->|xt]. by rewrite total_variationxx/=. have : variation x b f (i :: j) <= variation x t f (t :: nil) + variation t b f (i :: j). - rewrite -variation_cat//; last 2 first. + rewrite -variation_cat//. exact: itv_partition1. by rewrite /itv_partition/= ti ij ijb. exact: le_variation. rewrite -lee_fin => /lt_le_trans /[apply]. -rewrite {1}variation_prev; last exact: itv_partition1. -rewrite /= -addeA -lteBrDr; last by rewrite fin_numD; apply/andP. +rewrite {1}variation_prev; first exact: itv_partition1. +rewrite /= -addeA -lteBrDr; first by rewrite fin_numD; apply/andP. rewrite EFinD -lte_fin ?fineK // oppeD //= ?fin_num_adde_defl // opprK addeA. move/lt_trans; apply. rewrite [in ltRHS](splitr (eps%:num)) EFinD lteD2rE// -addeA. apply: (@le_lt_trans _ _ (variation x t f (t :: nil))%:E). - rewrite [in leRHS]variation_prev; last exact: itv_partition1. + rewrite [in leRHS]variation_prev; first exact: itv_partition1. rewrite geeDl// sube_le0; apply: ereal_sup_ubound => /=. exists (variation t b f (i :: j)) => //; apply: variations_variation. by rewrite /itv_partition/= ijb ij ti. @@ -2270,7 +2270,7 @@ under eq_fun => i do rewrite EFinN. apply: (@cvg_trans _ (((TV a n f - (f n)%:E) * 2^-1%:E)%E @[n --> x^'+])). exact: cvg_id. apply: cvgeZr; first by []. -rewrite fineD; [|by []..]. +rewrite fineD; [by []..|]. rewrite EFinB; apply: cvgeB; [by []| |]. apply/ fine_cvgP; split; first exists (b - x). - by rewrite /= subr_gt0. @@ -2278,7 +2278,7 @@ rewrite EFinB; apply: cvgeB; [by []| |]. by apply: ltW; apply: (le_lt_trans ax). apply/bounded_variationP => //. apply: bounded_variationl bvf => //. - move: xtbx; rewrite distrC ger0_norm ?subr_ge0; last by exact: ltW. + move: xtbx; rewrite distrC ger0_norm ?subr_ge0; first by exact: ltW. by rewrite ltrBrDr subrK => /ltW. by apply: total_variation_right_continuous => //; last exact: bvf. apply: cvg_comp; first exact: fcts. @@ -2305,28 +2305,27 @@ have ? : Filter (nbhs (-x)^'+) by exact: at_right_proper_filter. have -> : fine (TV (-x) (-a) (f \o -%R)) = fine (TV (-b) (-a) (f \o -%R)) - fine (TV (-b) (-x) (f \o -%R)). apply/eqP; rewrite -subr_eq opprK addrC. - rewrite -fineD; last 2 first. + rewrite -fineD. by apply/bounded_variationP => //; exact: bounded_variationl bvNf. by apply/bounded_variationP => //; exact: bounded_variationr bvNf. by rewrite -total_variationD. -have /near_eq_cvg/cvg_trans : {near (- x)^'+, +suff /near_eq_cvg/cvg_trans : {near (- x)^'+, (fun t => fine (TV (- b) (- a) (f \o -%R)) - fine (TV (- b) t (f \o -%R))) =1 (fine \o (TV a)^~ f) \o -%R}. - apply: filter_app (nbhs_right_lt xa). - apply: (filter_app _ _ (nbhs_right_ge _)). - near=> t => xt ta; have ? : -b <= t by exact: (le_trans bx). - have ? : t <= -a by exact: ltW. - apply/eqP; rewrite eq_sym -subr_eq opprK addrC. - rewrite /= [TV a _ f]total_variation_opp opprK -fineD; last first. - by apply/bounded_variationP => //; apply: bounded_variationr bvNf. - by apply/bounded_variationP => //; apply: bounded_variationl bvNf. - by rewrite -total_variationD. -apply. -apply: cvgB; first exact: cvg_cst. -apply: (total_variation_right_continuous _ _ _ bvNf). -- by rewrite lerNl opprK //. -- by rewrite ltrNl opprK //. -by apply/cvg_at_leftNP; rewrite /= opprK. + apply; apply: cvgB; first exact: cvg_cst. + apply: (total_variation_right_continuous _ _ _ bvNf). + - by rewrite lerNl opprK //. + - by rewrite ltrNl opprK //. + by apply/cvg_at_leftNP; rewrite /= opprK. +apply: filter_app (nbhs_right_lt xa). +apply: (filter_app _ _ (nbhs_right_ge _)). +near=> t => xt ta; have ? : -b <= t by exact: (le_trans bx). +have ? : t <= -a by exact: ltW. +apply/eqP; rewrite eq_sym -subr_eq opprK addrC. +rewrite /= [TV a _ f]total_variation_opp opprK -fineD. +- by apply/bounded_variationP => //; apply: bounded_variationl bvNf. +- by apply/bounded_variationP => //; apply: bounded_variationr bvNf. +by rewrite -total_variationD. Unshelve. all: by end_near. Qed. Lemma total_variation_continuous a b (f : R -> R) : a < b -> @@ -2381,8 +2380,8 @@ have [path_at sizets asts] : [/\ path <%R a t, size t = size s & rewrite /t ss'b size_rcons/= midf_lt// -[a]/(nth b (a :: s) 0%N). by have /pathP := abs.1; exact. + rewrite [in X in X -> _]size_map [in X in X -> _]size_iota => ns/=. - rewrite !(nth_map 0%N) ?size_iota//; last exact: (leq_trans _ ns). - rewrite !nth_iota// ?add0n; last exact: (leq_trans _ ns). + rewrite !(nth_map 0%N) ?size_iota//; first exact: (leq_trans _ ns). + rewrite !nth_iota// ?add0n; first exact: (leq_trans _ ns). rewrite (@lt_trans _ _ (x_ n.+1))// midf_lt//. by have /pathP := abs.1; apply; exact: (leq_trans _ ns). by have /pathP := abs.1; exact. @@ -2490,12 +2489,11 @@ rewrite telescope_sumr// lerB//. move: (sizes0) => /prednK. set m := (size s).-1 => <- H. rewrite -[leLHS]/(nth b [seq ((x_ i + x_ i.+1) / 2) | i <- iota 0 m.+1] m). - rewrite (nth_map 0%N). - rewrite nth_iota// add0n. - apply: (@le_trans _ _ (x_ m.+1)). - by rewrite midf_le// ltW// H. - by apply: itv_partition_nth_le abs; rewrite prednK. - by rewrite size_iota. + rewrite (nth_map 0%N); first by rewrite size_iota. + rewrite nth_iota// add0n. + apply: (@le_trans _ _ (x_ m.+1)). + by rewrite midf_le// ltW// H. + by apply: itv_partition_nth_le abs; rewrite prednK. + by rewrite in_itv/= lexx andbT; exact: itv_partition_le abs. + have /eqP := abs.2. rewrite (last_nth b) => <-. @@ -2503,11 +2501,10 @@ rewrite telescope_sumr// lerB//. move: (sizes0) => /prednK <-. set m := (size s).-1. rewrite -[leLHS]/(nth b [seq ((x_ i + x_ i.+1) / 2) | i <- iota 0 m.+1] m). - rewrite (nth_map 0%N). - rewrite nth_iota// add0n midf_le// ltW//. - have /pathP := abs.1; apply. - by rewrite (prednK sizes0). - by rewrite size_iota. + rewrite (nth_map 0%N); first by rewrite size_iota. + rewrite nth_iota// add0n midf_le// ltW//. + have /pathP := abs.1; apply. + by rewrite (prednK sizes0). have ay1 : a <= y_ 1%N by rewrite -[a]/(nth b (a :: s) 0%N) ltW// ast. apply: ndF => //. by rewrite in_itv/= lexx andTb; exact: itv_partition_le abs. diff --git a/theories/sequences.v b/theories/sequences.v index d7bca62318..9207b9ecb9 100644 --- a/theories/sequences.v +++ b/theories/sequences.v @@ -116,7 +116,7 @@ From mathcomp Require Import ereal topology tvs normedtype landau. (* ``` *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -391,7 +391,7 @@ End seqD. Lemma seqDUE {R : realDomainType} n (r : R) : (seqDU (fun n => `]r, r + n%:R]) n = `]r + n.-1%:R, r + n%:R])%classic. Proof. -rewrite seqDU_seqD; last first. +rewrite seqDU_seqD. apply/nondecreasing_seqP => k; apply/subsetPset/subset_itvl. by rewrite bnd_simp lerD2l ler_nat. move: n => [/=|n]; first by rewrite addr0. @@ -756,7 +756,7 @@ move/cvg_cauchy/cauchy_ballP => /(_ _ [gt0 of 2^-1 : R]); rewrite !near_map2. rewrite -ball_normE => /nearP_dep hcvg; near \oo => n; near \oo => m. have: `|series harmonic n - series harmonic m| < 2^-1 :> R by near: m; near: n. rewrite le_gtF// distrC -[X in X - _](addrNK (series harmonic n.*2)). -rewrite sub_series_geq; last by near: m; apply: nbhs_infty_ge. +rewrite sub_series_geq; first by near: m; apply: nbhs_infty_ge. rewrite -addrA sub_series_geq -addnn ?leq_addr// addnn. have sh_ge0 i j : 0 <= \sum_(i <= k < j) harmonic k :> R. by rewrite ?sumr_ge0//; move=> k _; apply: harmonic_ge0. @@ -835,14 +835,14 @@ suff abel : forall n, u_ n - arithmetic_mean u_ n = \sum_(1 <= k < n.+1) k%:R / n.+1%:R * a_ k.-1. suff K : u_ - arithmetic_mean u_ @ \oo --> 0. rewrite -(add0r l). - rewrite (_ : u_ = u_ - arithmetic_mean u_ + arithmetic_mean u_); last first. + rewrite (_ : u_ = u_ - arithmetic_mean u_ + arithmetic_mean u_). by rewrite funeqE => n; rewrite subrK. exact: cvgD. rewrite (_ : _ - arithmetic_mean u_ = - (fun n => \sum_(1 <= k < n.+1) k%:R / n.+1%:R * a_ k.-1)); last first. + (fun n => \sum_(1 <= k < n.+1) k%:R / n.+1%:R * a_ k.-1)). by rewrite funeqE. rewrite {abel} /= (_ : (fun _ => _) = - fun n => n.+1%:R^-1 * \sum_(0 <= k < n) k.+1%:R * a_ k); last first. + fun n => n.+1%:R^-1 * \sum_(0 <= k < n) k.+1%:R * a_ k). rewrite funeqE => n; rewrite big_add1 /= /= big_distrr /=. by apply eq_bigr => i _; rewrite mulrCA mulrA. have {}a_o : [sequence n.+1%:R * telescope u_ n]_n @ \oo --> 0. @@ -865,33 +865,33 @@ rewrite big_split /= big_const_nat iter_addr addr0 addrA -mulrS mulrDr. rewrite -(mulr_natl (u_ O)) mulKf ?pnatr_eq0//. rewrite eq_sum_telescope (addrC (u_ O)) addrKA. rewrite [X in _ - _ * X](_ : _ = - \sum_(0 <= i < n.+1) \sum_(0 <= k < n.+1 | (k < i.+1)%N) a_ k); last first. + \sum_(0 <= i < n.+1) \sum_(0 <= k < n.+1 | (k < i.+1)%N) a_ k). rewrite !big_mkord; apply: eq_bigr => i _. by rewrite seriesEord/= big_mkord -big_ord_widen. rewrite (exchange_big_dep_nat xpredT) //=. rewrite [X in _ - _ * X](_ : _ = - \sum_(0 <= i < n.+1) \sum_(i <= j < n.+1) a_ i ); last first. + \sum_(0 <= i < n.+1) \sum_(i <= j < n.+1) a_ i ). apply: congr_big_nat => //= i ni. rewrite big_const_nat iter_addr addr0 -big_filter. rewrite big_const_seq iter_addr addr0; congr (_ *+ _). rewrite /index_iota subn0 -[in LHS](subnKC (ltnW ni)) iotaD filter_cat. - rewrite count_cat (_ : [seq _ <- _ | _] = [::]); last first. + rewrite count_cat (_ : [seq _ <- _ | _] = [::]). rewrite -(filter_pred0 (iota 0 i)); apply: eq_in_filter => j. by rewrite mem_iota leq0n andTb add0n => ji; rewrite ltnNge ji. - rewrite 2!add0n (_ : [seq _ <- _ | _] = iota i (n.+1 - i)); last first. + rewrite 2!add0n (_ : [seq _ <- _ | _] = iota i (n.+1 - i)). rewrite -[RHS]filter_predT; apply: eq_in_filter => j. - rewrite mem_iota => /andP[ij]; rewrite subnKC; last exact/ltnW. + rewrite mem_iota => /andP[ij]; rewrite subnKC; first exact/ltnW. by move=> jn; rewrite ltnS ij. by rewrite count_predT size_iota. rewrite [X in _ - _ * X](_ : _ = - \sum_(0 <= i < n.+1) a_ i * (n.+1 - i)%:R); last first. + \sum_(0 <= i < n.+1) a_ i * (n.+1 - i)%:R). by apply: eq_bigr => i _; rewrite big_const_nat iter_addr addr0 mulr_natr. rewrite big_distrr /= big_mkord (big_morph _ (@opprD _) (@oppr0 _)). rewrite seriesEord -big_split /= big_add1 /= big_mkord; apply: eq_bigr => i _. rewrite mulrCA -[X in X - _]mulr1 -mulrBr [RHS]mulrC; congr (_ * _). rewrite -[X in X - _](@divff _ (n.+2)%:R) ?pnatr_eq0//. rewrite [in X in _ - X]mulrC -mulrBl; congr (_ / _). -rewrite -natrB; last by rewrite (@leq_trans n.+1) // leq_subr. +rewrite -natrB; first by rewrite (@leq_trans n.+1) // leq_subr. rewrite subnBA; by [rewrite addSnnS addnC addnK | rewrite ltnW]. Unshelve. all: by end_near. Qed. @@ -903,7 +903,7 @@ Lemma cvg_series_cvg_0 (K : numFieldType) (V : normedModType K) (u_ : V ^nat) : cvgn (series u_) -> u_ @ \oo --> 0. Proof. move=> cvg_series. -rewrite (_ : u_ = fun n => series u_ n.+1 - series u_ n); last first. +rewrite (_ : u_ = fun n => series u_ n.+1 - series u_ n). by rewrite funeqE => i; rewrite seriesSB. rewrite -(subrr (limn (series u_))). by apply: cvgB => //; rewrite ?cvg_shiftS. @@ -989,7 +989,7 @@ Qed. Lemma cvg_geometric_series_half (R : archiRealFieldType) (r : R) n : series (fun k => r / (2 ^ (k + n.+1))%:R : R^o) @ \oo --> (r / 2 ^+ n : R^o). Proof. -rewrite (_ : series _ = series (geometric (r / (2 ^ n.+1)%:R) 2^-1%R)); last first. +rewrite (_ : series _ = series (geometric (r / (2 ^ n.+1)%:R) 2^-1%R)). rewrite funeqE => m; rewrite /series /=; apply: eq_bigr => k _. by rewrite expnD natrM (mulrC (2 ^ k)%:R) invfM exprVn (natrX _ 2 k) mulrA. apply: cvg_trans. @@ -1157,7 +1157,7 @@ Qed. Let S0_sup N n : x < N%:R -> S0 N n <= sup (range (S0 N)). Proof. move=> xN; apply/sup_upper_bound; [split; [by exists (S0 N n), n|]|by exists n]. -rewrite (_ : (range _) = [set `|S0 N n0| | n0 in setT]). +rewrite (_ : (range _) = [set `|S0 N n0| | n0 in setT]); last first. by apply: cvg_has_ub (is_cvg_S0 xN). by rewrite predeqE=> y; split=> -[z _ <-]; exists z; rewrite ?ger0_norm ?S0_ge0. Qed. @@ -1181,7 +1181,7 @@ have [Ni|iN] := ltnP N i; last first. rewrite natrX -expfB_cond ?(negPf (lt0r_neq0 N_gt0))//. by rewrite exprn_ege1 // ler1n; case: (N) xN x0; case: ltrgt0P. rewrite /exp expr_div_n /= (fact_split Ni) mulrCA ler_pM2l ?exprn_gt0// natrX. -rewrite -invf_div -expfB // lef_pV2 ?qualifE/= ?exprn_gt0//; last first. +rewrite -invf_div -expfB // lef_pV2 ?qualifE/= ?exprn_gt0//. rewrite ltr0n muln_gt0 fact_gt0/= big_seq big_mkcond/= prodn_gt0// => j. by case: ifPn=>//; rewrite mem_index_iota => /andP[+ _]; exact: leq_ltn_trans. rewrite big_nat_rev/= -natrX ler_nat -prod_nat_const_nat big_add1 /= big_ltn //. @@ -1236,7 +1236,7 @@ Proof. move=> u_nd [l ul]. suff [N Nu] : exists N, forall n, (n >= N)%N -> u_ n = u_ N. apply/cvg_ex; exists (u_ N); rewrite -(cvg_shiftn N). - rewrite [X in X @ \oo --> _](_ : _ = cst (u_ N))//; first exact: cvg_cst. + rewrite [X in X @ \oo --> _](_ : _ = cst (u_ N))//; last exact: cvg_cst. by apply/funext => n /=; rewrite Nu// leq_addl. apply/not_existsP => hu. have {hu}/choice[f Hf] : forall x, (exists n, x <= n /\ u_ n > u_ x)%N. @@ -1267,7 +1267,7 @@ move=> /cvg_ex[l ul]; have /ul[a _ aul] : nbhs l [set l]. have /ul[b _ bul] : nbhs l [set l.-1; l]. by rewrite nbhs_principalE ; apply/principal_filterP => /=; right. exists (maxn a b) => // n /= abn. -rewrite (_ : u = fun n => nseries u n.+1 - nseries u n)%N; last first. +rewrite (_ : u = fun n => nseries u n.+1 - nseries u n)%N. by rewrite funeqE => i; rewrite /nseries big_nat_recr//= addnC addnK. have /aul -> : (a <= n)%N by rewrite (leq_trans _ abn) // leq_max leqnn. have /bul[->|->] : (b <= n.+1)%N by rewrite leqW// (leq_trans _ abn)// leq_maxr. @@ -1303,7 +1303,7 @@ suff: exists2 v : (\bar R)^nat, v @ \oo --> ereal_inf S & exists u => //; move: vcvg. have: cst (ereal_inf S) @ \oo --> ereal_inf S by exact: cvg_cst. apply: squeeze_cvge; apply: nearW => n; rewrite /cst/=. - by rewrite ge_ereal_inf /= 1?ltW; last by exists (u n). + by rewrite ge_ereal_inf /= 1?ltW; first by exists (u n). have [infNy|NinfNy] := eqVneq (ereal_inf S) -oo. exists [sequence - (n%:R%:E)]_n => /=; last first. by move=> n; setoid_rewrite set_mem_set; apply: lb_ereal_infNy_adherent. @@ -1313,8 +1313,7 @@ have inf_fin : ereal_inf S \is a fin_num by case: ereal_inf Ninfy NinfNy. exists [sequence ereal_inf S + n.+1%:R^-1%:E]_n => /=; last first. by move=> n; setoid_rewrite set_mem_set; exact: lb_ereal_inf_adherent. apply/sube_cvg0 => //=; apply/cvg_abse0P. -rewrite (@eq_cvg _ _ _ _ (fun n => n.+1%:R^-1%:E)). - exact: cvge_harmonic. +rewrite (@eq_cvg _ _ _ _ (fun n => n.+1%:R^-1%:E)); last exact: cvge_harmonic. by move=> n /=; rewrite /= addrAC subee// add0e gee0_abs. Unshelve. all: by end_near. Qed. @@ -1402,7 +1401,7 @@ Lemma cvg_geometric_eseries_half {R : archiRealFieldType} (r : R) (n : nat) : Proof. apply: cvg_EFin => //. by apply: nearW => //= x; rewrite /eseries/= sumEFin. -rewrite [X in X @ _ --> _](_ : _ = series (fun k => r / (2 ^ (k + n.+1))%:R)); last first. +rewrite [X in X @ _ --> _](_ : _ = series (fun k => r / (2 ^ (k + n.+1))%:R)). by apply/funext => x; rewrite /= /eseries/= sumEFin. exact: cvg_geometric_series_half. Qed. @@ -1443,10 +1442,10 @@ have [Spoo|Spoo] := pselect (S +oo). by move: (nd_u_ _ _ Nn); rewrite uNoo leye_eq => /eqP. have -> : l = +oo by rewrite /l /ereal_sup; exact: supremum_pinfty. rewrite -(cvg_shiftn N); set f := (X in X @ \oo --> _). - rewrite (_ : f = cst +oo); first exact: cvg_cst. + rewrite (_ : f = cst +oo); last exact: cvg_cst. by rewrite funeqE => n; rewrite /f /= Nu // leq_addl. have [/funext Snoo|Snoo] := pselect (forall n, u_ n = -oo). - rewrite /l (_ : S = [set -oo]). + rewrite /l (_ : S = [set -oo]); last first. by rewrite ereal_sup1 Snoo; exact: cvg_cst. apply/seteqP; split => [_ [n _] <- /[!Snoo]//|_ ->]. by rewrite /S Snoo; exists 0%N. @@ -1465,11 +1464,11 @@ have [{lnoo}loo|lpoo] := eqVneq l +oo. by exists n => // m /= nm; rewrite (le_trans (ltW Mun))// nd_u_. have l_fin_num : l \is a fin_num by rewrite fin_numE lpoo lnoo. rewrite -(@fineK _ l)//; apply/fine_cvgP; split. - near=> n; rewrite fin_numE Snoo/=; last by near: n; exists N. + near=> n; rewrite fin_numE Snoo/=; first by near: n; exists N. by apply: contra_notN Spoo => /eqP unpoo; exists n. rewrite -(cvg_shiftn N); set v_ := [sequence _]_ _. have <- : sup (range v_) = fine l. - apply: EFin_inj; rewrite -ereal_sup_EFin//; last 2 first. + apply: EFin_inj; rewrite -ereal_sup_EFin//. - exists (fine l) => /= _ [m _ <-]; rewrite /v_ /= fine_le//. by rewrite u_fin_num// leq_addl. by apply: ereal_sup_ubound; exists (m + N)%N. @@ -1496,10 +1495,10 @@ Proof. by move=> ?; apply/cvg_ex; eexists; exact: ereal_nondecreasing_cvgn. Qed. Lemma ereal_nonincreasing_cvgn (R : realType) (u_ : (\bar R)^nat) : nonincreasing_seq u_ -> u_ @ \oo --> ereal_inf (u_ @` setT). Proof. -move=> ni_u; rewrite [X in X @ \oo --> _](_ : _ = -%E \o -%E \o u_); last first. +move=> ni_u; rewrite [X in X @ \oo --> _](_ : _ = -%E \o -%E \o u_). by rewrite funeqE => n; rewrite /= oppeK. apply: cvgeN. -rewrite [X in _ --> X](_ : _ = ereal_sup (range (-%E \o u_))); last first. +rewrite [X in _ --> X](_ : _ = ereal_sup (range (-%E \o u_))). congr ereal_sup; rewrite predeqE => x; split=> [[_ [n _ <-]] <-|[n _] <-]; by [exists n | exists (u_ n) => //; exists n]. by apply: ereal_nondecreasing_cvgn; rewrite ereal_nondecreasing_oppn. @@ -1597,7 +1596,7 @@ Proof. move=> f0; apply/cvg_lim => //. under eq_fun. move=> n. - rewrite big_nat_cond big1; last by move=> k /andP[/andP[+ _]]; exact: f0. + rewrite big_nat_cond big1; first by move=> k /andP[/andP[+ _]]; exact: f0. over. exact: cvg_cst. Qed. @@ -1623,7 +1622,7 @@ Lemma eseries_pinfty (R : realFieldType) (u_ : (\bar R)^nat) u_ k = +oo -> \sum_(i uNy Pk uky; apply: lim_near_cst => //; near=> n. -apply/eqP; rewrite big_mkord esum_eqy; last first. +apply/eqP; rewrite big_mkord esum_eqy. by move=> /= i Pi; rewrite uNy. apply/existsP. have kn : (k < n)%N by near: n; exists k.+1. @@ -1701,7 +1700,7 @@ move=> ? ?; apply: nondecreasing_is_cvgn. rewrite -(subnKC mn) {2}/index_iota subn0 iotaD big_cat/=. by rewrite add0n -{2}(subn0 m) -/(index_iota _ _) lerDl sumr_ge0. exists (fine (\sum_(k _ [n _ <-]; rewrite -lee_fin fineK//; last first. +rewrite /ubound/= => _ [n _ <-]; rewrite -lee_fin fineK//. rewrite fin_num_abs gee0_abs//; apply: nneseries_ge0 => // i _. by rewrite lee_fin. by rewrite -sumEFin; apply: nneseries_lim_ge => i _; rewrite lee_fin. @@ -1711,7 +1710,7 @@ Lemma nneseriesZl (R : realType) (f : nat -> \bar R) (P : pred nat) x N : (forall i, P i -> 0 <= f i) -> (\sum_(N <= i f0; rewrite -limeMl//; last by apply: is_cvg_nneseries => n _; exact: f0. +move=> f0; rewrite -limeMl//; first by apply: is_cvg_nneseries => n _; exact: f0. by apply/congr_lim/funext => /= n; rewrite ge0_sume_distrr. Qed. @@ -1803,18 +1802,18 @@ elim: n N => [N |n ih N] f0. rewrite addn0 [in X in _ = X + _]/index_iota subnn. by rewrite (@size0nil _ (iota _ 0)) ?size_iota// big_nil add0r. rewrite addnS big_nat_recr/= ?leq_addr// -addeA. -rewrite [f (N + n)%N + _](_ : _ = \sum_(N + n <= k = N)%N -> cvgn (fun n => \sum_(m <= k < n) f k). move=> Nm; apply: is_cvg_ereal_nneg_natsum => p Nmp. by rewrite f0// (leq_trans _ Nmp). -rewrite -lim_shift_cst; last by rewrite (@lt_le_trans _ _ 0)// f0// leq_addr. -- apply: (@near_eq_lim _ (fun x => f (N + n)%N + _)) => //. - by apply: cf; rewrite leq_addr. - by near do rewrite -big_ltn//; exact: nbhs_infty_gt. +rewrite -lim_shift_cst; [| | by rewrite (@lt_le_trans _ _ 0)// f0// leq_addr|]. - by apply: cf; rewrite -addnS leq_addr. - move=> m; rewrite big_seq; apply: sume_ge0 => /= p. rewrite mem_index_iota => /andP[Nnp _]. by rewrite f0// (leq_trans _ Nnp)// -addnS leq_addr. +- apply: (@near_eq_lim _ (fun x => f (N + n)%N + _)) => //. + by apply: cf; rewrite leq_addr. + by near do rewrite -big_ltn//; exact: nbhs_infty_gt. Unshelve. all: by end_near. Qed. Lemma nneseries_split_cond (R : realType) (f : nat -> \bar R) N n (P : pred nat) : @@ -1836,7 +1835,7 @@ move=> f0 Pn. rewrite (@nneseries_split_cond _ f 0%N n.+1 P)// add0n big_mkcond/=. rewrite big_nat_recr//= Pn -big_mkcond/= -addrA addrCA; congr +%E. rewrite [RHS]eseries_mkcondr. -rewrite [in RHS](@nneseries_split_cond _ _ _ n.+1 P)//; last first. +rewrite [in RHS](@nneseries_split_cond _ _ _ n.+1 P)//. by move=> k Pk; case: ifPn => // _; exact: f0. rewrite add0n [X in _ = X + _]big_mkcond/= big_nat_recr//= Pn eqxx/= adde0. rewrite -big_mkcond//=; congr +%E. @@ -1873,13 +1872,13 @@ move/cvg_ex => [[l fl||/cvg_lim fnoo]] /=; last 2 first. by apply: nneseries_ge0 => n _; exact: f0. by rewrite fnoo. rewrite [X in X @ _ --> _](_ : _ = fun N => l%:E - \sum_(0 <= k < N | P k) f k). - apply/cvgeNP; rewrite oppe0. - under eq_fun => ? do rewrite oppeD// oppeK addeC. - exact/sube_cvg0. -apply/funext => N; apply/esym/eqP; rewrite sube_eq//. - by rewrite addeC -nneseries_split_cond//; exact/eqP/esym/cvg_lim. -rewrite ge0_adde_def//= ?inE; last exact: sume_ge0. -by apply: nneseries_ge0 => n Nn; exact: f0. + apply/funext => N; apply/esym/eqP; rewrite sube_eq//; last first. + by rewrite addeC -nneseries_split_cond//; exact/eqP/esym/cvg_lim. + rewrite ge0_adde_def//= ?inE; last exact: sume_ge0. + by apply: nneseries_ge0 => n Nn; exact: f0. +apply/cvgeNP; rewrite oppe0. +under eq_fun => ? do rewrite oppeD// oppeK addeC. +exact/sube_cvg0. Qed. Lemma nneseriesD (R : realType) (f g : nat -> \bar R) (P : pred nat) N : @@ -1905,7 +1904,7 @@ Proof. move=> f0; elim: n => [|n ih]. by rewrite big_geq// eseries0// => i; rewrite big_geq. have [mn|nm] := leqP m n. - rewrite big_nat_recr// -ih/= -nneseriesD//; last by move=> i; rewrite sume_ge0. + rewrite big_nat_recr// -ih/= -nneseriesD//; first by move=> i; rewrite sume_ge0. by apply/congr_lim/funext => ?; apply: eq_bigr => i _; rewrite big_nat_recr. by rewrite big_geq// eseries0// => i; rewrite big_geq. Qed. @@ -1920,7 +1919,7 @@ move=> f_ge0; case Dr : r => [|i r']; rewrite -?{}[_ :: _]Dr. rewrite {r'}(big_nth i) big_mkcond. rewrite (eq_eseriesr (fun _ _ => big_nth i _ _)). rewrite (eq_eseriesr (fun _ _ => big_mkcond _ _))/=. -rewrite nneseries_sum_nat; last by move=> ? ?; case: ifP => // /f_ge0. +rewrite nneseries_sum_nat; first by move=> ? ?; case: ifP => // /f_ge0. by apply: eq_bigr => j _; case: ifP => //; rewrite eseries0. Qed. @@ -1961,22 +1960,22 @@ move=> A0 /nonnegP[{}e]. rewrite (@le_trans _ _ (lim ((fun n => (\sum_(0 <= i < n | P i) A i) + \sum_(0 <= i < n) (e%:num / (2 ^ i.+1)%:R)%:E) @ \oo))) //. rewrite nneseriesD // limeD //. - - rewrite leeD2l //; apply: lee_lim => //. - + exact: is_cvg_nneseries. - + exact: is_cvg_nneseries. - + by near=> n; exact: lee_sum_nneg_subset. - exact: is_cvg_nneseries. - exact: is_cvg_nneseries. - exact: adde_def_nneseries. + rewrite leeD2l //; apply: lee_lim => //. + - exact: is_cvg_nneseries. + - exact: is_cvg_nneseries. + - by near=> n; exact: lee_sum_nneg_subset. suff cvggeo : (fun n => \sum_(0 <= i < n) (e%:num / (2 ^ i.+1)%:R)%:E) @ \oo --> e%:num%:E. rewrite limeD //. - - by rewrite leeD2l // (cvg_lim _ cvggeo). - exact: is_cvg_nneseries. - by apply: is_cvg_nneseries => ?; rewrite lee_fin divr_ge0. - by rewrite (cvg_lim _ cvggeo) //= fin_num_adde_defl. + - by rewrite leeD2l // (cvg_lim _ cvggeo). rewrite (_ : (fun n => _) = EFin \o - (fun n => \sum_(0 <= i < n) (e%:num / (2 ^ (i + 1))%:R))%R); last first. + (fun n => \sum_(0 <= i < n) (e%:num / (2 ^ (i + 1))%:R))%R). rewrite funeqE => n /=; rewrite (@big_morph _ _ EFin 0 adde)//. by under [in RHS]eq_bigr do rewrite addn1. apply: cvg_comp; last by apply cvg_refl. @@ -1991,8 +1990,8 @@ move=> epspos; have := epsilon_trick P (fun=> lexx 0) epspos. (* TODO: breaks coq 8.15 and below *) (* (under eq_eseriesr do rewrite add0e) => /le_trans; apply. *) rewrite (@eq_eseriesr _ (fun n => 0 + _) (fun n => (eps/(2^n.+1)%:R)%:E)). - by move/le_trans; apply; rewrite eseries0 ?add0e; [exact: lexx | move=> ? ?]. -by move=> ? ?; rewrite add0e. + by move=> ? ?; rewrite add0e. +by move/le_trans; apply; rewrite eseries0 ?add0e; [move=> ? ? | exact: lexx]. Qed. Local Close Scope ereal_scope. @@ -2009,7 +2008,7 @@ have : 0 < minr e%:num r by rewrite lt_min// r0 andbT. move/cvgrPdist_lt : minr_cvg => /[apply] -[M _ hM]. near=> n; rewrite sub0r normrN. have /hM : (M <= n)%N by near: n; exists M. -rewrite sub0r normrN (ger0_norm (u0 n)) ger0_norm// => [/lt_min_lt//|]. +rewrite sub0r normrN (ger0_norm (u0 n)) ger0_norm// => [|/lt_min_lt//]. by rewrite le_min u0 ltW. Unshelve. all: by end_near. Qed. @@ -2039,7 +2038,7 @@ case: x => [r r0 u0 /fine_cvgP[_]|_ u0|//]; last first. by case/fine_cvgP. move=> /cvgrPdist_lt/(_ _ r0)[N _ hN]. near=> n; have /hN : (N <= n)%N by near: n; exists N. -rewrite sub0r normrN /= ger0_norm ?fine_ge0//; last first. +rewrite sub0r normrN /= ger0_norm ?fine_ge0//. by rewrite le_min u0 ltW. by have := u0 n; case: (u n) => //=; rewrite ltxx. Unshelve. all: by end_near. Qed. @@ -2400,7 +2399,7 @@ move=> cu cv; have [ba bb] := (cvg_seq_bounded cu, cvg_seq_bounded cv). apply/eqP; rewrite eq_le le_limn_supD //=. have := @le_limn_supD _ _ (bounded_funD ba bb) (bounded_funN bb). rewrite -lerBlDr; apply: le_trans. -rewrite -[_ \+ _]/(u + v - v) addrK -limn_infN; last exact: is_cvgN. +rewrite -[_ \+ _]/(u + v - v) addrK -limn_infN; first exact: is_cvgN. rewrite /comp /=; under eq_fun do rewrite opprK. by rewrite lerD// cvg_limn_infE// cvg_limn_supE. Qed. @@ -2410,7 +2409,7 @@ Lemma limn_infD u v : cvgn u -> cvgn v -> Proof. move=> cu cv; rewrite (cvg_limn_infE cu) -(cvg_limn_supE cu). rewrite (cvg_limn_infE cv) -(cvg_limn_supE cv) -limn_supD//. -rewrite cvg_limn_supE; last exact: (@is_cvgD _ _ _ _ _ _ _ cu cv). +rewrite cvg_limn_supE; first exact: (@is_cvgD _ _ _ _ _ _ _ cu cv). by rewrite cvg_limn_infE //; exact: (@is_cvgD _ _ _ _ _ _ _ cu cv). Qed. @@ -2519,8 +2518,8 @@ Unshelve. all: by end_near. Qed. Lemma limn_einf_lim u : limn_einf u = limn (einfs u). Proof. rewrite /limn_einf limn_esup_lim esupsN -limeN//. - by under eq_fun do rewrite oppeK. -by apply: is_cvgeN; exact: is_cvg_einfs. + by apply: is_cvgeN; exact: is_cvg_einfs. +by under eq_fun do rewrite oppeK. Qed. End limn_esup_einf. @@ -2622,7 +2621,7 @@ have : EFin \o sups (fine \o u) @ \oo --> l%:E. by apply: continuous_cvg => //; apply: cvg_sups. move=> /cvg_ballP /(_ e%:num (gt0 _))[q _ qsupsu]; near=> n. have -> : esups u n = (EFin \o sups (fine \o u)) n. - rewrite /= -ereal_sup_EFin; last 2 first. + rewrite /= -ereal_sup_EFin. - apply/has_ubound_sdrop/bounded_fun_has_ubound. by apply/cvg_seq_bounded/cvg_ex; eexists; exact ul. - by eexists; rewrite /sdrop /=; exists n; [|reflexivity]. @@ -2761,7 +2760,7 @@ exists (N_ \o v \o S). by apply/increasing_seqP => n; exact: N_incr. apply/subr_cvg0/cvgrPdist_le => /= e e0; near=> n. rewrite sub0r normrN distrC (le_trans (N_idx (v n.+1)))//. -rewrite invf_ple ?posrE//; last by rewrite ltr0n; case: (v n.+1) => -[? ?] []. +rewrite invf_ple ?posrE//; first by rewrite ltr0n; case: (v n.+1) => -[? ?] []. rewrite (@le_trans _ _ n.+1%:R)//; last by rewrite ler_nat idx_incr. by rewrite -nat1r -lerBlDl; near: n; exact: nbhs_infty_ger. Unshelve. all: end_near. Qed. @@ -2839,7 +2838,7 @@ apply/cluster_eventually_cvg; exists (N_ \o v). by apply/increasing_seqP => n; exact: N_incr. apply/cvgrPdist_le => /= e e0; near=> n. have := N_idx (v n); rewrite distrC => /le_trans; apply. -rewrite invf_ple//; last first. +rewrite invf_ple//. by rewrite posrE ltr0n; case: (v n) => [[? ?] []]. rewrite (@le_trans _ _ n%:R)//; last by rewrite ler_nat idx_incr. by near: n; exact: nbhs_infty_ger. @@ -2963,7 +2962,7 @@ rewrite /nbhs/= /nbhs_ball_/= => -[e /= e0]. rewrite -[ball_ _ _ _]/(ball _ _) => leU. have : infinite_set (`]l - e, l + e[ `&` E). rewrite (_ : _ `&` _ = - `]l - e, +oo[ `&` E `\` `[l + e, +oo[ `&` E); last first. + `]l - e, +oo[ `&` E `\` `[l + e, +oo[ `&` E). rewrite setDE setCI setIUr -(setIA _ _ (~` E)) setICr setI0 setU0. by rewrite setIAC -setDE [in LHS]set_itv_splitD. by apply: infinite_setD; [exact: infleE|exact: finleE]. @@ -3236,7 +3235,7 @@ rewrite eqOP; split => [|Bf]. by apply/ltW; rewrite (le_lt_trans _ Mx)// bm// ltW. - apply/bounded_funP; rewrite /bounded_near. near=> M. - rewrite (_ : mkset _ = (fun x => `|f x| <= M * `|cst 1 x|)); last first. + rewrite (_ : mkset _ = (fun x => `|f x| <= M * `|cst 1 x|)). by rewrite funeqE => x; rewrite normr1 mulr1. by near: M. Unshelve. all: by end_near. Qed. @@ -3324,7 +3323,7 @@ have := majball f (2^-1 * (r%:num / `|y|) *: y + x0) Ff ballprop. rewrite -addrA addrN linf. move: (linear0 (pack_linear linf)) => /= ->. rewrite addr0 normrZ 2!normrM gtr0_norm // gtr0_norm //. -rewrite normfV normr_id -ler_pdivlMl //=; last first. +rewrite normfV normr_id -ler_pdivlMl //=. by rewrite mulr_gt0 // mulr_gt0 // invr_gt0 normr_gt0. move/le_trans; apply. rewrite -natrD -!mulrA (mulrC (_%:R)) ler_pM //. diff --git a/theories/showcase/pnt.v b/theories/showcase/pnt.v index d0219db42b..2b850a1363 100644 --- a/theories/showcase/pnt.v +++ b/theories/showcase/pnt.v @@ -18,7 +18,7 @@ Import Order.POrderTheory GRing.Theory Num.Theory. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -157,7 +157,7 @@ suff cardEi : forall i, k <= i -> exact: cardEi. have SnleqlimSn: ((\sum_(k <= i < N.+1) (prime_seq i)%:R^-1)%:E <= \sum_(k <= i [|i leqi]; last first. + rewrite (nneseries_split _ (N.+1 - k)) => [i leqi|]. by rewrite lee_fin invr_ge0. rewrite subnKC // raddf_sum leeDl//; apply/nneseries_ge0 => n _ _. by rewrite lee_fin invr_ge0. @@ -167,7 +167,7 @@ suff cardEi : forall i, k <= i -> by apply: sumr_ge0 => i _; rewrite invr_ge0. rewrite -divn2 natf_div ?dvdn2// EFinM -lte_pdivrMl ?ltr0n//. by rewrite muleA -EFinM mulVf ?mul1e// pnatr_eq0 -lt0n. -rewrite ler_pdivlMr; last first. +rewrite ler_pdivlMr. rewrite ltr0n. have : prime_seq i \in range prime_seq by rewrite inE. by rewrite mem_prime_seq; apply: prime_gt0. @@ -195,7 +195,7 @@ have: finset.trivIset (Parts i). move=> /andP [] x1ge x1lt /andP [] x2ge x2lt. rewrite (leq_trans x1lt (ltn_ord x)) (leq_trans x2lt (ltn_ord y)) => x12. have: y.+1 - (prime_seq i) >= x.+1. - rewrite -(leq_add2r (prime_seq i)) -(@leq_sub2rE x.+1); last first. + rewrite -(leq_add2r (prime_seq i)) -(@leq_sub2rE x.+1). by rewrite addnCB (Eigtpi y) // addn0. rewrite addnCB (Eigtpi y) // addn0 -addnBAC // subnn add0n subSS. apply: dvdn_leq; first by rewrite subn_gt0 ltn_neqAle; apply/andP. @@ -222,14 +222,14 @@ have cardeltPi: forall X, X \in Parts i -> #|X| = (prime_seq i) => [X|]. rewrite !inE size_map size_iota => x1lt y1lt. rewrite !(nth_map 0) ?size_iota //. rewrite !nth_iota => // /(congr1 val). rewrite !val_insubd /=. - rewrite [X in X < _]addBnA; last first. - - exact: ltnW. + rewrite [X in X < _]addBnA. - by rewrite -subn_eq0; apply/eqP/Eigtpi. - rewrite -(@prednK (prime_seq i - x1)) ?subn_gt0// !subSS. - rewrite (leq_ltn_trans _ (ltn_ord x)); last exact: sub_ord_proof. - rewrite [X in X < _]addBnA; last first. - exact: ltnW. + rewrite -(@prednK (prime_seq i - x1)) ?subn_gt0// !subSS. + rewrite (leq_ltn_trans _ (ltn_ord x)); first exact: sub_ord_proof. + rewrite [X in X < _]addBnA. - by rewrite -subn_eq0; apply/eqP/Eigtpi. + - exact: ltnW. rewrite -(@prednK (prime_seq i - y1)) ?subn_gt0 // !subSS. suff -> : x - (prime_seq i - y1).-1 < N.+1 by apply: addnI. exact/(leq_ltn_trans _ (ltn_ord x))/sub_ord_proof. @@ -244,7 +244,7 @@ suff -> : #|Parts i| = #|E i|. case: (boolP (x == ord0)) => [/eqP ->|xneq0 _]; last first. by rewrite /i1toN inE !inE xneq0. rewrite inE /in_mem /= => /mapP /= [] x0. - rewrite mem_iota subnK => [/andP [] x0b1 x0b2|]; last first. + rewrite mem_iota subnK => [|/andP [] x0b1 x0b2]. by rewrite -subn_eq0; apply/eqP /Eigtpi. have x0b3: x0 < N.+1 => [|/(congr1 val)]. exact: (leq_ltn_trans _ (ltn_ord i0)). @@ -270,10 +270,10 @@ have: x2 \in [set x in [seq insubd ord0 x0 | x0 <- iota ((\val x1).+1 - prime_seq i) (prime_seq i)]]. rewrite enseq inE /in_mem /=. apply/mapP => /=. exists x2; last by apply: val_inj; rewrite !val_insubd ltn_ord. - rewrite mem_iota subnK; last by rewrite -subn_eq0; apply/eqP /Eigtpi. + rewrite mem_iota subnK; first by rewrite -subn_eq0; apply/eqP /Eigtpi. by rewrite ltnSn -ltnS ltn_subrL prime_gt0 // -mem_prime_seq mem_range. rewrite inE /in_mem /= => /mapP /= [] x3. -rewrite mem_iota subnK => [/andP [] x3b1 x3b2 /(congr1 val)|]; last first. +rewrite mem_iota subnK => [|/andP [] x3b1 x3b2 /(congr1 val)]. by rewrite -subn_eq0; apply/eqP /Eigtpi. have x3b3: x3 < N.+1 by apply: (leq_ltn_trans _ (ltn_ord x1)). rewrite val_insubd x3b3 /= => x2eqx3. move: x3b2. @@ -322,7 +322,7 @@ have binB (n : 'I_N.+1) : under eq_bigr do rewrite -expnM muln2 halfK. apply: (@leq_ltn_trans (\prod_(i < k) prime_seq i ^ (logn (prime_seq i) n))). - apply: leq_prod => i _. rewrite leq_exp2l; first exact: leq_subr. + apply: leq_prod => i _. rewrite leq_exp2l; last exact: leq_subr. by apply: prime_gt1; rewrite -mem_prime_seq inE. apply: (@leq_ltn_trans n); last first. apply: (ltn_trans (ltn_ord n)); rewrite /N. @@ -334,16 +334,16 @@ have binB (n : 'I_N.+1) : (prime_seq i) ^ logn (prime_seq i) n)) -(big_map prime_seq predT (fun i => i ^ logn i n)) /=. rewrite (bigID (mem (primes n))) /=. - rewrite [X in _ * X]big1 => [|i inotinprimesn]; last first. + rewrite [X in _ * X]big1 => [i inotinprimesn|]. have [/predU1P[->|/eqP->]//|] := boolP ((i == 0) || (i == 1)). move=> /norP[ineq0 ineq1]. rewrite -(expn0 i); apply/eqP; rewrite eqn_exp2l. - apply/eqP; move: inotinprimesn. - by rewrite -logn_gt0 lt0n negbK => /eqP. - by rewrite ltn_neqAle lt0n ineq0 eq_sym ineq1. + by rewrite ltn_neqAle lt0n ineq0 eq_sym ineq1. + apply/eqP; move: inotinprimesn. + by rewrite -logn_gt0 lt0n negbK => /eqP. rewrite muln1 -big_filter. have [nltk|klen] := ltnP n k; first by rewrite (eqseq n). - rewrite -[in X in _ <= X](eqseq n n.+1); last exact: ltnSn. + rewrite -[in X in _ <= X](eqseq n n.+1); first exact: ltnSn. rewrite -[X in index_iota _ X.+1](subnKC (leq_trans klen (ltnSn n))). rewrite -addnS -subSn//. rewrite !big_filter /index_iota !subn0 iotaD map_cat big_cat add0n /=. @@ -361,8 +361,8 @@ have finj x y : x \in P' k N -> y \in P' k N -> f x = f y -> x = y. rewrite -big_split /=. under eq_bigr => i _. rewrite -expnD tnth_mktuple /a subnK. - over. - by case: (boolP (odd (logn (prime_seq i) x))); first exact: odd_gt0. + by case: (boolP (odd (logn (prime_seq i) x))); first exact: odd_gt0. + over. have [xeq0|xneq0] := eqVneq x ord0. by move: xeq0 xinPkN => ->; rewrite /P' !inE. rewrite [RHS]prod_prime_decomp ?lt0n// prime_decompE big_map /=. @@ -430,16 +430,16 @@ set PN := P k N. set GN := G k N. rewrite inE /= leqnn set_interval.set_itvoo inE /= EFinB EFinD -leqlimnSn. move=> /(_ erefl) /andP[+ _]. -rewrite lte_subel_addl; last by rewrite leqlimnSn. -rewrite -lteBlDr; last exact/sum_fin_numP. -rewrite (nneseries_split _ k); last by move=> k0 _; exact: unpos. -rewrite /Sn add0n addrAC subee; last exact/sum_fin_numP. +rewrite lte_subel_addl; first by rewrite leqlimnSn. +rewrite -lteBlDr; first exact/sum_fin_numP. +rewrite (nneseries_split _ k); first by move=> k0 _; exact: unpos. +rewrite /Sn add0n addrAC subee; first exact/sum_fin_numP. rewrite add0e => Rklthalf. suff: N.+1 < N.+1 by rewrite ltnn. rewrite -[X in X < _](cardPcardG k N). have Neq : N./2 + (2 ^ (k.*2 + 1)).+1 = N.+1. rewrite addnC addSn /N -divn2. - rewrite -[X in _ %/ X]expn1 -expnB //; last by rewrite addn2. + rewrite -[X in _ %/ X]expn1 -expnB //; first by rewrite addn2. rewrite -addnBA /subn //= addnn. by rewrite -mul2n -expnS -[X in 2 ^ X]addn1 -addnA. rewrite -[X in _ < X]Neq -addSn. diff --git a/theories/showcase/summability.v b/theories/showcase/summability.v index d85a90098b..c434e26f4b 100644 --- a/theories/showcase/summability.v +++ b/theories/showcase/summability.v @@ -10,7 +10,7 @@ From mathcomp Require Import ereal reals topology normedtype. (* `realsum.v`). *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. diff --git a/theories/topology_theory/bool_topology.v b/theories/topology_theory/bool_topology.v index 6df5384f44..6bae7eea60 100644 --- a/theories/topology_theory/bool_topology.v +++ b/theories/topology_theory/bool_topology.v @@ -10,7 +10,7 @@ From mathcomp Require Import discrete_topology. (* This file equips bool with the discrete pseudometric. *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Import Order.TTheory GRing.Theory Num.Theory. diff --git a/theories/topology_theory/compact.v b/theories/topology_theory/compact.v index 4617eb3863..cbe8001938 100644 --- a/theories/topology_theory/compact.v +++ b/theories/topology_theory/compact.v @@ -34,7 +34,7 @@ From mathcomp Require Import uniform_structure pseudometric_structure. Import Order.TTheory GRing.Theory Num.Theory. -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -387,7 +387,7 @@ wlog [k D'k] : D' sD sAnfcov / exists i, i \in D'. - by move=> p /sAnfcov [i D'i Anfip]; exists i => //=; rewrite !inE D'i. - by exists j; rewrite !inE orbC eq_refl. exists D' => /(_ sD) [p Ifp]. -have /Ifp := D'k; rewrite feAg; last by have /sD := D'k; rewrite inE. +have /Ifp := D'k; rewrite feAg; first by have /sD := D'k; rewrite inE. by move=> [/sAnfcov [i D'i [_ nfip]] _]; have /Ifp := D'i. Qed. diff --git a/theories/topology_theory/connected.v b/theories/topology_theory/connected.v index 089b34e00e..b67a9cc0e9 100644 --- a/theories/topology_theory/connected.v +++ b/theories/topology_theory/connected.v @@ -15,7 +15,7 @@ From mathcomp Require Import topology_structure. (* ``` *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -114,7 +114,7 @@ Lemma bigcup_connected I (A : I -> set T) (P : I -> Prop) : Proof. move=> [c AIc] cA; have [[i Pi]|] := pselect (exists i, P i); last first. move/forallNP => P0. - rewrite (_ : P = set0) ?bigcup_set0; first exact: connected0. + rewrite (_ : P = set0) ?bigcup_set0; last exact: connected0. by rewrite predeqE => x; split => //; exact: P0. apply/connectedP => [E [E0 EU sE]]. wlog E0c : E E0 EU sE / E false c. diff --git a/theories/topology_theory/discrete_topology.v b/theories/topology_theory/discrete_topology.v index f773b6d541..0e681b3ce6 100644 --- a/theories/topology_theory/discrete_topology.v +++ b/theories/topology_theory/discrete_topology.v @@ -25,7 +25,7 @@ From mathcomp Require Import order_topology pseudometric_structure compact. (* ``` *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Import Order.TTheory GRing.Theory Num.Def Num.Theory. diff --git a/theories/topology_theory/function_spaces.v b/theories/topology_theory/function_spaces.v index d8605bc443..2e18cbdd1f 100644 --- a/theories/topology_theory/function_spaces.v +++ b/theories/topology_theory/function_spaces.v @@ -112,7 +112,7 @@ Reserved Notation "{ 'compact-open' , U -> V }" Reserved Notation "{ 'compact-open' , F --> f }" (at level 0, F at level 69, format "{ 'compact-open' , F --> f }"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -266,8 +266,8 @@ Lemma perfect_prod {I : Type} (i : I) (K : I -> topologicalType) : Proof. move=> /perfectTP KPo; apply/perfectTP => f oF; apply: (KPo (f i)). rewrite (_ : [set f i] = proj i @` [set f]). - by apply: (@proj_open {classic I} _ i); exact: oF. -by rewrite eqEsubset; split => ? //; [move=> -> /=; exists f | case=> g ->]. + by rewrite eqEsubset; split => ? //; [move=> -> /=; exists f | case=> g ->]. +by apply: (@proj_open {classic I} _ i); exact: oF. Qed. Lemma perfect_diagonal (K : nat -> topologicalType) : @@ -743,7 +743,7 @@ Lemma pointwise_uniform_cvg (f : U -> V) (F : set_system (U -> V)) : Proof. move=> FF; rewrite cvg_sup => + i; have isubT : [set i] `<=` setT by move=> ?. move=> /(uniform_subset_cvg _ isubT); rewrite uniform_set1. -rewrite cvg_image; last by rewrite eqEsubset; split=> v // _; exists (cst v). +rewrite cvg_image; first by rewrite eqEsubset; split=> v // _; exists (cst v). apply: cvg_trans => W /=; rewrite nbhs_simpl; exists (@^~ i @^-1` W) => //. by rewrite image_preimage // eqEsubset; split=> // j _; exists (fun _ => j). Qed. @@ -808,12 +808,12 @@ apply: (filterS EsubQ). rewrite (_: [set h | (forall y : U, (A `|` B) y -> E (f y, h y))] = [set h | forall y, A y -> E (f y, h y)] `&` [set h | forall y, B y -> E (f y, h y)]). -- apply: filterI; [apply: AFf| apply: BFf]. - + by apply/uniform_nbhs; exists E; split. - + by apply/uniform_nbhs; exists E; split. - rewrite eqEsubset; split=> h. + by move=> R; split=> t ?; apply: R;[left| right]. + by move=> [R1 R2] y [? | ?]; [apply: R1| apply: R2]. +- apply: filterI; [apply: AFf| apply: BFf]. + + by apply/uniform_nbhs; exists E; split. + + by apply/uniform_nbhs; exists E; split. Qed. Lemma cvg_uniform_set0 (F : set_system (U -> V)) (f : U -> V) : Filter F -> @@ -1135,12 +1135,12 @@ move=> FF; apply/propext. rewrite (@fam_cvgP _ _ singletons). (* BUG: slowdown if no arguments *) rewrite cvg_sup; split. move=> + A [x _ <-] => /(_ x); rewrite uniform_set1. - rewrite cvg_image; last by rewrite eqEsubset; split=> v // _; exists (cst v). + rewrite cvg_image; first by rewrite eqEsubset; split=> v // _; exists (cst v). apply: cvg_trans => W /=; rewrite ?nbhs_simpl /fmap /= => [[W' + <-]]. by apply: filterS => g W'g /=; exists g. move=> + i; have /[swap] /[apply] : singletons [set i] by exists i. rewrite uniform_set1. -rewrite cvg_image; last by rewrite eqEsubset; split=> v // _; exists (cst v). +rewrite cvg_image; first by rewrite eqEsubset; split=> v // _; exists (cst v). move=> + W //=; rewrite ?nbhs_simpl => Q => /Q Q'; exists (@^~ i @^-1` W) => //. by rewrite eqEsubset; split => [j [? + <-//]|j Wj]; exists (fun _ => j). Qed. diff --git a/theories/topology_theory/initial_topology.v b/theories/topology_theory/initial_topology.v index 39994e1351..c678dd5a9c 100644 --- a/theories/topology_theory/initial_topology.v +++ b/theories/topology_theory/initial_topology.v @@ -30,7 +30,7 @@ From mathcomp Require Import pseudometric_structure. Import Order.TTheory GRing.Theory Num.Theory. -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. diff --git a/theories/topology_theory/matrix_topology.v b/theories/topology_theory/matrix_topology.v index 472ee82c0f..33334d0359 100644 --- a/theories/topology_theory/matrix_topology.v +++ b/theories/topology_theory/matrix_topology.v @@ -20,7 +20,7 @@ From mathcomp Require Import uniform_structure pseudometric_structure. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Import Order.TTheory GRing.Theory Num.Theory. diff --git a/theories/topology_theory/metric_structure.v b/theories/topology_theory/metric_structure.v index ee61106525..01b1a30262 100644 --- a/theories/topology_theory/metric_structure.v +++ b/theories/topology_theory/metric_structure.v @@ -22,7 +22,7 @@ From mathcomp Require Import num_topology product_topology separation_axioms. (* ``` *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. diff --git a/theories/topology_theory/nat_topology.v b/theories/topology_theory/nat_topology.v index 21dea81c4c..ec29a30b3f 100644 --- a/theories/topology_theory/nat_topology.v +++ b/theories/topology_theory/nat_topology.v @@ -13,7 +13,7 @@ From mathcomp Require Import discrete_topology. (* Natural numbers `nat` are endowed with the structure of topology. *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Import Order.TTheory GRing.Theory Num.Theory. diff --git a/theories/topology_theory/num_topology.v b/theories/topology_theory/num_topology.v index 3772ff3538..9c90ac5101 100644 --- a/theories/topology_theory/num_topology.v +++ b/theories/topology_theory/num_topology.v @@ -15,7 +15,7 @@ From mathcomp Require Import order_topology matrix_topology. Import Order.TTheory GRing.Theory Num.Theory. -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. diff --git a/theories/topology_theory/one_point_compactification.v b/theories/topology_theory/one_point_compactification.v index d0f122cb40..cc082f9b19 100644 --- a/theories/topology_theory/one_point_compactification.v +++ b/theories/topology_theory/one_point_compactification.v @@ -15,7 +15,7 @@ From mathcomp Require Import pseudometric_structure compact initial_topology. (* as an alias of `option X` *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Local Open Scope classical_set_scope. Local Open Scope ring_scope. diff --git a/theories/topology_theory/order_topology.v b/theories/topology_theory/order_topology.v index 47fd9820d7..7327a69d93 100644 --- a/theories/topology_theory/order_topology.v +++ b/theories/topology_theory/order_topology.v @@ -22,7 +22,7 @@ From mathcomp Require Import product_topology pseudometric_structure. Import Order.TTheory GRing.Theory Num.Theory. -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -183,7 +183,7 @@ case/(_ [set` i]): cIi; first by move: oi; rewrite openE; exact. move=> /= w [[j [jU oJ jy jw]]] wi; exists (i `|` j)%O; first last. exact/(le_trans iy)/leUl. split; first by rewrite itv_setU ?{1}subUset //; exists w. -by rewrite itv_setU ?{1}subUset //; [exact: openU | exists w]. +by rewrite itv_setU ?{1}subUset //; [exists w | exact: openU]. exact/(le_trans jy)/leUr. Qed. @@ -229,13 +229,13 @@ case=> ? [[ I Irp] <-] [?] /[dup] /(Irp _) [F rayF <-] IF Fix IU. pose j := \big[Order.meet/`]-oo, +oo[]_(i <- F) i. exists j; first split. - rewrite /j (@eq_fbig_cond _ _ _ _ _ F _ (mem F) _ id)//. - + apply: (big_ind itv_open_ends) => //=; first exact: itv_open_endsI. - by rewrite /itv_open_ends; move=> i /rayF /set_mem ->. - + by move=> p /=; rewrite !inE/=; exact: andb_id2l. + by move=> p /=; rewrite !inE/=; exact: andb_id2l. + apply: (big_ind itv_open_ends) => //=; first exact: itv_open_endsI. + by rewrite /itv_open_ends; move=> i /rayF /set_mem ->. - pose f (i : interval T) : Prop := x \in i; suff : f j by []. rewrite /j (@eq_fbig_cond _ _ _ _ _ F _ (mem F) _ id)//=. - + by apply: big_ind => //=; rewrite /f /= => a ? xa ?; rewrite in_itvI xa. + by move=> p /=; rewrite !inE/=; exact: andb_id2l. + + by apply: big_ind => //=; rewrite /f /= => a ? xa ?; rewrite in_itvI xa. - suff -> : [set` j] = \bigcap_(i in [set` F]) [set` i]. by move=> i Fi; apply: IU; exists (\bigcap_(i in [set` F]) [set` i]). rewrite -bigsetI_fset_set ?set_fsetK//. @@ -256,7 +256,8 @@ case=> x y; have [<- U /=|]:= eqVneq x y. by have /orP[?|?]/= := le_total a b; [rewrite min_l|rewrite min_r]. wlog xy : x y / (x < y)%O. move=> WH /[dup] /lt_total/orP[|yx /eqP/nesym/eqP yNx]; first exact: WH. - rewrite (_ : (fun _ => _) = (fun xy => Order.min xy.1 xy.2) \o @swap T T). + rewrite (_ : (fun _ => _) + = (fun xy => Order.min xy.1 xy.2) \o @swap T T); last first. by apply: continuous_comp; [exact: swap_continuous|exact: WH]. apply/funext => -[a b/=]; have /orP[ab|ba] := le_total a b. - by rewrite min_l // min_r. @@ -294,7 +295,8 @@ case=> x y; have [<- U|] := eqVneq x y. by have /orP[?|?]/= := le_total a b; [rewrite max_r|rewrite max_l]. wlog xy : x y / (x < y)%O. move=> WH /[dup] /lt_total/orP[|yx /eqP/nesym/eqP yNx]; first exact: WH. - rewrite (_ : (fun _ => _) = (fun xy => Order.max xy.1 xy.2) \o @swap T T). + rewrite (_ : (fun _ => _) + = (fun xy => Order.max xy.1 xy.2) \o @swap T T); last first. by apply: continuous_comp; [exact: swap_continuous|exact: WH]. apply/funext => -[a b] /=; have /orP [ab|ba] := le_total a b. - by rewrite max_r // max_l. diff --git a/theories/topology_theory/product_topology.v b/theories/topology_theory/product_topology.v index 1e4970cc34..96d2acaf9e 100644 --- a/theories/topology_theory/product_topology.v +++ b/theories/topology_theory/product_topology.v @@ -17,7 +17,7 @@ From mathcomp Require Import uniform_structure pseudometric_structure compact. Import Order.TTheory GRing.Theory Num.Theory. -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. diff --git a/theories/topology_theory/pseudometric_structure.v b/theories/topology_theory/pseudometric_structure.v index caeaec8985..172c467876 100644 --- a/theories/topology_theory/pseudometric_structure.v +++ b/theories/topology_theory/pseudometric_structure.v @@ -45,7 +45,7 @@ From mathcomp Require Import uniform_structure. Import Order.TTheory GRing.Theory Num.Theory. -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. diff --git a/theories/topology_theory/quotient_topology.v b/theories/topology_theory/quotient_topology.v index 3b1edd1e13..d322b01160 100644 --- a/theories/topology_theory/quotient_topology.v +++ b/theories/topology_theory/quotient_topology.v @@ -13,7 +13,7 @@ From mathcomp Require Import topology_structure. (* ``` *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -58,7 +58,7 @@ Lemma repr_comp_continuous (Z : topologicalType) (g : T -> Z) : continuous (g \o repr : Q -> Z). Proof. move=> /continuousP ctsG rgE; apply/continuousP => A oA. -rewrite /open/= /quotient_open (_ : _ @^-1` _ = g @^-1` A); first exact: ctsG. +rewrite /open/= /quotient_open (_ : _ @^-1` _ = g @^-1` A); last exact: ctsG. have greprE x : g (repr (\pi_Q x)) = g x by apply/eqP; rewrite rgE// reprK. by rewrite eqEsubset; split => x /=; rewrite greprE. Qed. diff --git a/theories/topology_theory/separation_axioms.v b/theories/topology_theory/separation_axioms.v index b6ec16f63a..e03450bb79 100644 --- a/theories/topology_theory/separation_axioms.v +++ b/theories/topology_theory/separation_axioms.v @@ -53,7 +53,7 @@ From mathcomp Require Import connected supremum_topology sigT_topology. (* ``` *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -871,7 +871,7 @@ Proof. by move=> e1e2 ? [n P]; exists n; exact: (n_step_ball_le e1e2). Qed. Local Lemma distN_half (n : nat) : n.+1%:R^-1 / (2:R) <= n.+2%:R^-1. Proof. -rewrite -invrM //; [|exact: unitf_gt0 |exact: unitf_gt0]. +rewrite -invrM //; [exact: unitf_gt0 |exact: unitf_gt0|]. rewrite lef_pV2 ?posrE // -?natrM ?ler_nat -addn1 -addn1 -addnA mulnDr. by rewrite muln1 leq_add2r leq_pmull. Qed. @@ -1105,8 +1105,8 @@ Proof. split=> [[cA limA]|[cA isoA]]; have := closure_isolated_limit_point A. - move=> /(congr1 (fun x => x `\` limit_point A)). rewrite setUDK. - by rewrite limA -(closure_id A).1// setDv. - by apply/disj_setPS; rewrite disj_set_sym disjoint_isolated_limit_point. + by apply/disj_setPS; rewrite disj_set_sym disjoint_isolated_limit_point. + by rewrite limA -(closure_id A).1// setDv. - by rewrite isoA set0U -(closure_id A).1. Qed. diff --git a/theories/topology_theory/sigT_topology.v b/theories/topology_theory/sigT_topology.v index e63d7ca44c..d5eda111ef 100644 --- a/theories/topology_theory/sigT_topology.v +++ b/theories/topology_theory/sigT_topology.v @@ -15,7 +15,7 @@ From mathcomp Require Import topology_structure compact subspace_topology. (* ``` *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Local Open Scope classical_set_scope. Local Open Scope ring_scope. diff --git a/theories/topology_theory/subspace_topology.v b/theories/topology_theory/subspace_topology.v index eb85483443..356ce9ce37 100644 --- a/theories/topology_theory/subspace_topology.v +++ b/theories/topology_theory/subspace_topology.v @@ -33,7 +33,7 @@ From mathcomp Require Import product_topology. Reserved Notation "{ 'within' A , 'continuous' f }" (format "{ 'within' A , 'continuous' f }"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -155,8 +155,8 @@ Qed. Lemma open_subspace_out (U : set (subspace A)) : U `<=` ~` A -> open U. Proof. move=> Usub; rewrite (_ : U = \bigcup_(i in U) [set i]). - by apply: bigcup_open => ? ?; apply: open_subspace1out; exact: Usub. -by rewrite eqEsubset; split => x; [move=> ?; exists x|case=> i ? ->]. + by rewrite eqEsubset; split => x; [move=> ?; exists x|case=> i ? ->]. +by apply: bigcup_open => ? ?; apply: open_subspace1out; exact: Usub. Qed. Lemma open_subspaceT : open (A : set (subspace A)). @@ -167,8 +167,8 @@ Proof. apply/propext; split; last first. by move=> oU; apply: openI => //; apply: open_subspaceT. move=> oUA; rewrite (_ : U = (U `&` A) `|` (U `&` ~`A)). - by apply: openU => //; apply: open_subspace_out => ? []. -by rewrite -setIUr setUCr setIT. + by rewrite -setIUr setUCr setIT. +by apply: openU => //; apply: open_subspace_out => ? []. Qed. Lemma open_subspaceTI (U : set (subspace A)) : @@ -608,11 +608,10 @@ suff sAfE : separated (AfE false) (AfE true). have [t Et ftu] : (f @` A) u by rewrite fAE; case: b Ebu; [right|left]. by exists t; split => //=; rewrite /preimage ftu. - by rewrite -setIUr -preimage_setU -fAE; exact/esym/setIidPl/preimage_image. - + rewrite -{2}(setIid A) ?setIA -(@closure_subspaceW _ A); last by move=> ?[]. + + rewrite -{2}(setIid A) ?setIA -(@closure_subspaceW _ A); first by move=> ?[]. by rewrite -/(AfE false) -setIA -/(AfE true); case: sAfE. - + rewrite -{1}(setIid A) setIC ?setIA -(@closure_subspaceW _ A). - by rewrite -/(AfE true) -setIA -/(AfE false) setIC; case: sAfE. - by move=> ?[]. + + rewrite -{1}(setIid A) setIC ?setIA -(@closure_subspaceW _ A) => [? []//|]. + by rewrite -/(AfE true) -setIA -/(AfE false) setIC; case: sAfE. suff cI0 b : closure (AfE b) `&` AfE (~~ b) = set0. by rewrite /separated cI0 setIC cI0. have [fAfE cEIE] : diff --git a/theories/topology_theory/subtype_topology.v b/theories/topology_theory/subtype_topology.v index b30ef4a877..e194598ad5 100644 --- a/theories/topology_theory/subtype_topology.v +++ b/theories/topology_theory/subtype_topology.v @@ -27,7 +27,7 @@ From mathcomp Require Import product_topology subspace_topology. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Local Open Scope classical_set_scope. Local Open Scope ring_scope. @@ -47,7 +47,7 @@ Context {X : topologicalType} (A : set X). Lemma subspace_subtypeP (x : A) (U : set A) : nbhs x U <-> nbhs (set_val x : subspace A) (set_val @` U). Proof. -rewrite /nbhs /= -nbhs_subspace_in //; first last. +rewrite /nbhs /= -nbhs_subspace_in //. by case: x; rewrite set_valE => //= ? /set_mem. split. case=> _ /= [] [W oW <- /= Wx sWU]; move: oW; rewrite openE /= /interior. @@ -72,7 +72,7 @@ split. rewrite continuous_subspace_in => + x Ax U nfxU. move=> /(_ (@exist _ _ x Ax) U) /= []; first exact: nfxU. move=> _ [/= [W + <- /=]] Wx svWU; rewrite nbhs_simpl/=. -rewrite /nbhs /= -nbhs_subspace_in; last exact/set_mem. +rewrite /nbhs /= -nbhs_subspace_in; first exact/set_mem. rewrite openE /= /interior=> /(_ _ Wx); rewrite {1}set_valE/=. apply: filter_app; apply: nearW => w Ww /= /mem_set Aw. by have /= := svWU (@exist _ _ w Aw); rewrite ?set_valE /=; exact. diff --git a/theories/topology_theory/supremum_topology.v b/theories/topology_theory/supremum_topology.v index 44fe76d4ee..33b699bd9d 100644 --- a/theories/topology_theory/supremum_topology.v +++ b/theories/topology_theory/supremum_topology.v @@ -14,7 +14,7 @@ From mathcomp Require Import topology_structure uniform_structure. (* `sup_topology` is equipped with the `Uniform` structure *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. diff --git a/theories/topology_theory/topology_structure.v b/theories/topology_theory/topology_structure.v index c5c087cc13..1c4b0db966 100644 --- a/theories/topology_theory/topology_structure.v +++ b/theories/topology_theory/topology_structure.v @@ -83,7 +83,7 @@ Reserved Notation "A °" (format "A °"). Reserved Notation "[ 'locally' P ]" (format "[ 'locally' P ]"). Reserved Notation "x ^'" (format "x ^'"). -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. diff --git a/theories/topology_theory/uniform_structure.v b/theories/topology_theory/uniform_structure.v index b4162982e0..8df9557bcd 100644 --- a/theories/topology_theory/uniform_structure.v +++ b/theories/topology_theory/uniform_structure.v @@ -42,7 +42,7 @@ From mathcomp Require Import topology_structure. (* ``` *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -225,8 +225,8 @@ Lemma cvg_entourageP F (FF : Filter F) (p : M) : F --> p <-> forall A, entourage A -> \forall q \near F, A (p, q). Proof. rewrite -filter_fromP [X in filter_from _ X](_ : _ = @xsection M M ^~ p)//. - by rewrite filter_from_entourageE. -by apply/funext => E; apply/seteqP; split => [|] ? /xsectionP. + by apply/funext => E; apply/seteqP; split => [|] ? /xsectionP. +by rewrite filter_from_entourageE. Qed. Lemma cvg_entourage {F} {FF : Filter F} (x : M) : diff --git a/theories/trigo.v b/theories/trigo.v index 534facc8a9..53f2dafffd 100644 --- a/theories/trigo.v +++ b/theories/trigo.v @@ -37,7 +37,7 @@ From mathcomp Require Import measure lebesgue_measure lebesgue_integral ftc. (* *) (******************************************************************************) -Set SsrOldRewriteGoalsOrder. (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *) +Unset SsrOldRewriteGoalsOrder. (* remove the line when requiring MathComp >= 2.6 *) Set Implicit Arguments. Unset Strict Implicit. Unset Printing Implicit Defensive. @@ -159,10 +159,10 @@ rewrite unlock. have /(@cvg_series_cvg_series_group _ _ 2) := @is_cvg_series_sin_coeff x. move=> /(_ isT); apply: cvg_trans. rewrite [X in _ --> series X @ \oo](_ : _ = (fun n => sin_coeff x n.*2.+1)). - rewrite [X in series X @ \oo --> _](_ : _ = (fun n => sin_coeff x n.*2.+1)) //. - by rewrite funeqE => n; exact: sin_coeff'E. -rewrite funeqE=> n; rewrite /= 2!muln2 big_nat_recl //= sin_coeff_even add0r. -by rewrite big_nat_recl // big_geq // addr0. + rewrite funeqE=> n; rewrite /= 2!muln2 big_nat_recl //= sin_coeff_even add0r. + by rewrite big_nat_recl // big_geq // addr0. +rewrite [X in series X @ \oo --> _](_ : _ = (fun n => sin_coeff x n.*2.+1)) //. +by rewrite funeqE => n; exact: sin_coeff'E. Qed. Lemma diffs_sin : @@ -182,7 +182,7 @@ Qed. Lemma sin0 : sin 0 = 0 :> R. Proof. rewrite unlock. -apply: lim_near_cst => //; near=> m; rewrite -[m]prednK; last by near: m. +apply: lim_near_cst => //; near=> m; rewrite -[m]prednK; first by near: m. rewrite -addn1 series_addn series_sin_coeff0 big_add1 big1 ?addr0//. by move=> i _; rewrite /sin_coeff /= expr0n !(mulr0, mul0r). Unshelve. all: by end_near. Qed. @@ -239,7 +239,7 @@ Proof. rewrite unlock. have /(@cvg_series_cvg_series_group _ _ 2) := @is_cvg_series_cos_coeff x. move=> /(_ isT); apply: cvg_trans. -rewrite [X in _ --> series X @ \oo](_ : _ = (fun n => cos_coeff x n.*2)); last first. +rewrite [X in _ --> series X @ \oo](_ : _ = (fun n => cos_coeff x n.*2)). rewrite funeqE=> n; rewrite /= 2!muln2 big_nat_recr //= cos_coeff_odd addr0. by rewrite big_nat_recl//= /index_iota subnn big_nil addr0. rewrite [X in series X @ \oo --> _](_ : _ = (fun n => cos_coeff x n.*2)) //. @@ -266,7 +266,7 @@ Qed. Lemma cos0 : cos 0 = 1 :> R. Proof. rewrite unlock. -apply: lim_near_cst => //; near=> m; rewrite -[m]prednK; last by near: m. +apply: lim_near_cst => //; near=> m; rewrite -[m]prednK; first by near: m. rewrite -addn1 series_addn series_cos_coeff0 big_add1 big1 ?addr0//. by move=> i _; rewrite /cos_coeff /= expr0n !(mulr0, mul0r). Unshelve. all: by end_near. Qed. @@ -276,16 +276,16 @@ Proof. rewrite sinE /=. pose s : R^nat := fun n => (odd n)%:R * (-1) ^+ (n.-1)./2 / n`!%:R. pose s1 n := pseries_diffs s n * x ^+ n. -rewrite cosE /= /pseries (_ : (fun _ => _) = s1); last first. +rewrite cosE /= /pseries (_ : (fun _ => _) = s1). by apply/funext => i; rewrite /s1 diffs_sin. apply: (@pseries_snd_diffs _ _ (`|x| + 1)); rewrite /pseries. - by rewrite -sin_coeffE; apply: is_cvg_series_sin_coeff. - rewrite (_ : (fun _ => _) = cos_coeff (`|x| + 1)). - exact: is_cvg_series_cos_coeff. - by apply/funext => i; rewrite diffs_sin cos_coeffE. + by apply/funext => i; rewrite diffs_sin cos_coeffE. + exact: is_cvg_series_cos_coeff. - rewrite /pseries (_ : (fun _ => _) = - sin_coeff (`|x| + 1)). - by rewrite is_cvg_seriesN; exact: is_cvg_series_sin_coeff. - by apply/funext => i; rewrite diffs_sin diffs_cos sin_coeffE !fctE !mulNr. + by apply/funext => i; rewrite diffs_sin diffs_cos sin_coeffE !fctE !mulNr. + by rewrite is_cvg_seriesN; exact: is_cvg_series_sin_coeff. - by rewrite [ltRHS]ger0_norm// addrC -subr_gt0 addrK. Qed. @@ -303,18 +303,18 @@ rewrite cosE /=. pose s : R^nat := fun n => (~~ odd n)%:R * (-1) ^+ n./2 / n`!%:R. pose s1 n := pseries_diffs s n * x ^+ n. rewrite sinE /= /pseries. -rewrite (_ : (fun _ => _) = - s1); last first. +rewrite (_ : (fun _ => _) = - s1). by apply/funext => i; rewrite /s1 diffs_cos !fctE mulNr opprK. -rewrite lim_seriesN ?opprK; last first. +rewrite lim_seriesN ?opprK. rewrite (_ : s1 = - sin_coeff x). - by rewrite is_cvg_seriesN; exact: is_cvg_series_sin_coeff. - by apply/funext => i; rewrite /s1 diffs_cos sin_coeffE !fctE mulNr. + by apply/funext => i; rewrite /s1 diffs_cos sin_coeffE !fctE mulNr. + by rewrite is_cvg_seriesN; exact: is_cvg_series_sin_coeff. apply: (@pseries_snd_diffs _ _ (`|x| + 1)). - by rewrite /pseries -cos_coeffE; apply: is_cvg_series_cos_coeff. - rewrite /pseries (_ : (fun _ => _) = - sin_coeff (`|x| + 1)). - by rewrite is_cvg_seriesN; exact: is_cvg_series_sin_coeff. - by apply/funext => i; rewrite diffs_cos sin_coeffE !fctE mulNr. -- rewrite /pseries (_ : (fun _=> _) = - cos_coeff (`|x| + 1)). + by apply/funext => i; rewrite diffs_cos sin_coeffE !fctE mulNr. + by rewrite is_cvg_seriesN; exact: is_cvg_series_sin_coeff. +- rewrite /pseries (_ : (fun _=> _) = - cos_coeff (`|x| + 1)); last first. by rewrite is_cvg_seriesN; exact: is_cvg_series_cos_coeff. apply/funext => i; rewrite diffs_cos pseries_diffsN. by rewrite diffs_sin cos_coeffE mulNr. @@ -377,14 +377,14 @@ Qed. Lemma sinD x y : sin (x + y) = sin x * cos y + cos x * sin y. Proof. have /eqP := sinD_cosD x y. -rewrite paddr_eq0 => [/andP[]||]; try exact: sqr_ge0. +rewrite paddr_eq0 => [||/andP[]]; try exact: sqr_ge0. by rewrite sqrf_eq0 subr_eq0 => /eqP. Qed. Lemma cosD x y : cos (x + y) = cos x * cos y - sin x * sin y. Proof. have /eqP := sinD_cosD x y. -rewrite paddr_eq0 => [/andP[_]||]; try exact: sqr_ge0. +rewrite paddr_eq0 => [||/andP[_]]; try exact: sqr_ge0. by rewrite sqrf_eq0 subr_eq0 => /eqP. Qed. @@ -415,14 +415,14 @@ Qed. Lemma sinN x : sin (- x) = - sin x. Proof. have /eqP := sinN_cosN x. -rewrite paddr_eq0 => [/andP[]||]; try exact: sqr_ge0. +rewrite paddr_eq0 => [||/andP[]]; try exact: sqr_ge0. by rewrite sqrf_eq0 addr_eq0 => /eqP. Qed. Lemma cosN x : cos (- x) = cos x. Proof. have /eqP := sinN_cosN x. -rewrite paddr_eq0 => [/andP[_]||]; try exact: sqr_ge0. +rewrite paddr_eq0 => [||/andP[_]]; try exact: sqr_ge0. by rewrite sqrf_eq0 subr_eq0 => /eqP. Qed. @@ -502,7 +502,7 @@ move=> d. rewrite /cos_coeff' 2!exprzD_nat (exprSz _ d.*2) -[in (-1) ^ d.*2](muln2 d). rewrite -(exprnP _ (d * 2)) (exprM (-1)) sqrr_sign 2!mulr1 -exprSzr. rewrite -[4%Z]/(_ (2 * 2))%N -(exprnP _ (2 * 2)) (exprM (-1)) sqrr_sign. -rewrite mul1r [(-1) ^ 3](_ : _ = -1) ?mulN1r ?mulNr ?opprK; last first. +rewrite mul1r [(-1) ^ 3](_ : _ = -1) ?mulN1r ?mulNr ?opprK. by rewrite -exprnP 2!exprS expr1 mulrN1 opprK mulr1. rewrite subr_gt0. rewrite addnS doubleS -[X in 2 ^+ X]addn2 exprD -mulrA ltr_pM2l//. @@ -517,7 +517,7 @@ Proof. move=> /andP[x_gt0 x_lt2]. have sinx := @cvg_sin_coeff' _ x. rewrite -(cvg_lim (@Rhausdorff R) sinx). -rewrite [ltLHS](_ : 0 = \sum_(0 <= i < 0) sin_coeff' x i :> R); last first. +rewrite [ltLHS](_ : 0 = \sum_(0 <= i < 0) sin_coeff' x i :> R). by rewrite big_nil. apply: lt_sum_lim_series; first by move/cvgP in sinx. move=> d. @@ -529,9 +529,9 @@ rewrite mulNr -!mulrA -mulrBr mulr_gt0 ?exprn_gt0 //. set u := _.+1. rewrite natrM invfM. rewrite -[X in _ < X - _]mul1r !mulrA -mulrBl divr_gt0 // subr_gt0. -set v := _ ^_ _; rewrite -[ltRHS](divff (_ : v%:R != 0)); last first. +set v := _ ^_ _; rewrite -[ltRHS](divff (_ : v%:R != 0)). by rewrite lt0r_neq0 // (ltr_nat _ 0) ffact_gt0 leq_addl. -rewrite ltr_pM2r; last by rewrite invr_gt0 (ltr_nat _ 0) ffact_gt0 leq_addl. +rewrite ltr_pM2r; first by rewrite invr_gt0 (ltr_nat _ 0) ffact_gt0 leq_addl. rewrite {}/v !addnS addn0 !ffactnS ffactn0 muln1 /= natrM. by rewrite (ltr_pM (ltW _ ) (ltW _)) // (lt_le_trans x_lt2) // ler_nat. Qed. @@ -956,13 +956,13 @@ Qed. Lemma sin_acos x : -1 <= x <= 1 -> sin (acos x) = Num.sqrt (1 - x^+2). Proof. move=> xB. -rewrite -[LHS]ger0_norm; last by rewrite sin_ge0_pi // acos_ge0 ?acos_lepi. +rewrite -[LHS]ger0_norm; first by rewrite sin_ge0_pi // acos_ge0 ?acos_lepi. by rewrite -sqrtr_sqr sin2cos2 acosK. Qed. Lemma continuous_acos x : -1 < x < 1 -> {for x, continuous (@acos R)}. Proof. -move=> /andP[x_gtN1 x_lt1]; rewrite -[x]acosK; first last. +move=> /andP[x_gtN1 x_lt1]; rewrite -[x]acosK. by have : -1 <= x <= 1 by rewrite !ltW //; case/andP: xB. apply: nbhs_singleton (near_can_continuous _ _); last first. by near=> z; apply: continuous_cos. @@ -977,7 +977,7 @@ Lemma is_derive1_acos x : -1 < x < 1 -> is_derive x 1 (@acos R) (- (Num.sqrt (1 - x ^+ 2))^-1). Proof. move=> /andP[x_gtN1 x_lt1]; rewrite -sin_acos ?ltW // -invrN. -rewrite -{1}[x]acosK; last by rewrite in_itv /= ?ltW. +rewrite -{1}[x]acosK; first by rewrite in_itv /= ?ltW. have /near_in_itvoo aI : acos x \in `]0, pi[. by rewrite in_itv/= acos_gt0 ?ltW //= acos_ltpi // x_gtN1 ltW. apply: (@is_derive_inverse R cos). @@ -986,7 +986,7 @@ apply: (@is_derive_inverse R cos). by near: z. - by near=> z; apply: continuous_cos. - rewrite oppr_eq0 sin_acos ?ltW // sqrtr_eq0 // -ltNge subr_gt0. - rewrite -real_normK ?qualifE/=; last by case: ltrgt0P. + rewrite -real_normK ?qualifE/=; first by case: ltrgt0P. by rewrite exprn_cp1 // ltr_norml x_gtN1. Unshelve. all: by end_near. Qed. @@ -1054,13 +1054,13 @@ Qed. Lemma cos_asin x : -1 <= x <= 1 -> cos (asin x) = Num.sqrt (1 - x^+2). Proof. -move=> xB; rewrite -[LHS]ger0_norm; first by rewrite -sqrtr_sqr cos2sin2 asinK. +move=> xB; rewrite -[LHS]ger0_norm; last by rewrite -sqrtr_sqr cos2sin2 asinK. by apply: cos_ge0_pihalf; rewrite asin_lepi2 // asin_geNpi2. Qed. Lemma continuous_asin x : -1 < x < 1 -> {for x, continuous (@asin R)}. Proof. -move=> /andP[x_gtN1 x_lt1]; rewrite -[x]asinK; first last. +move=> /andP[x_gtN1 x_lt1]; rewrite -[x]asinK. by have : -1 <= x <= 1 by rewrite !ltW //; case/andP: xB. apply: nbhs_singleton (near_can_continuous _ _); last first. by near=> z; apply: continuous_sin. @@ -1076,7 +1076,7 @@ Lemma is_derive1_asin x : -1 < x < 1 -> is_derive x 1 (@asin R) (Num.sqrt (1 - x ^+ 2))^-1. Proof. move=> /andP[x_gtN1 x_lt1]; rewrite -cos_asin ?ltW //. -rewrite -{1}[x]asinK; last by have : -1 <= x <= 1 by rewrite ltW // ltW. +rewrite -{1}[x]asinK; first by have : -1 <= x <= 1 by rewrite ltW // ltW. have /near_in_itvoo aI : asin x \in `](-(pi/2)), (pi/2)[. by rewrite in_itv/= asin_gtNpi2 ?ltW ?andbT //= asin_ltpi2 // ltW. apply: (@is_derive_inverse R sin). @@ -1086,7 +1086,7 @@ apply: (@is_derive_inverse R sin). by near: z. - by near=> z; exact: continuous_sin. - rewrite cos_asin ?ltW // sqrtr_eq0 // -ltNge subr_gt0. - rewrite -real_normK ?qualifE/=; last by case: ltrgt0P. + rewrite -real_normK ?qualifE/=; first by case: ltrgt0P. by rewrite exprn_cp1 // ltr_norml x_gtN1. Unshelve. all: by end_near. Qed. @@ -1145,14 +1145,14 @@ case: (He (Num.sg x * acos x1)); split; last first. rewrite /tan sin_sg cos_sg // acosK ?sin_acos// /x1 sqr_sqrtr// ?invr_ge0//. rewrite -[X in 1 - X]div1r -[X in X - _]divr1// -mulNr addf_div ?lt0r_neq0//. rewrite mul1r mulr1 [X in X - 1]addrC addrK// sqrtrM ?sqr_ge0// sqrtrV//. - rewrite invrK// mulrA divfK//; last by rewrite sqrtr_eq0 -ltNge. + rewrite invrK// mulrA divfK//; first by rewrite sqrtr_eq0 -ltNge. by rewrite sqrtr_sqr -numEsg. rewrite -ltr_norml normrM. have pi2 : 0 < pi / 2 :> R by rewrite divr_gt0 // pi_gt0. have [->|xD0] := eqVneq x 0; first by rewrite sgr0 normr0 mul0r. rewrite normr_sg xD0 mul1r ltr_norml. rewrite (@lt_le_trans _ _ 0) ?acos_ge0 ?oppr_cp0 //=. -rewrite -ltr_cos ?in_itv/= ?acos_ge0/= ?acos_lepi//; last first. +rewrite -ltr_cos ?in_itv/= ?acos_ge0/= ?acos_lepi//. by rewrite ltW//= ler_pdivrMr// ler_pMr ?pi_gt0// ler1n. by rewrite cos_pihalf acosK// sqrtr_gt0 ?invr_gt0. Qed. @@ -1257,7 +1257,7 @@ Lemma cvgy_atan : (@atan R) x @[x --> +oo] --> pi / 2. Proof. have ? : ubound (range (@atan R)) (pi / 2). by move=> _ /= [x _ <-]; exact/ltW/atan_ltpi2. -rewrite (_ : pi / 2 = sup (range atan)). +rewrite (_ : pi / 2 = sup (range atan)); last first. by apply/(nondecreasing_cvgr le_atan); exists (pi / 2). apply/eqP; rewrite eq_le; apply/andP; split; last first. by apply: ge_sup => //; exists 0, 0 => //; exact: atan0. @@ -1281,20 +1281,19 @@ Proof. rewrite le_eqVlt => /predU1P[<-|b0]. by rewrite set_itv1 Rintegral_set1 atan0. rewrite /Rintegral (@continuous_FTC2 _ _ atan)//. -- by rewrite atan0 sube0. - by apply: continuous_in_subspaceT => x ?; exact: continuous_oneDsqrV. - split. + by move=> x _; exact: derivable_atan. + by apply: cvg_at_right_filter; exact: continuous_atan. + by apply: cvg_at_left_filter; exact: continuous_atan. - by move=> x x01; rewrite derive1_atan// mul1r. +- by rewrite atan0 sube0. Qed. Lemma integral0y_oneDsqr : (\int[mu]_(x in `[0%R, +oo[) (oneDsqr x)^-1%:E = (pi / 2)%:E)%E. Proof. rewrite (ge0_continuous_FTC2y _ _ cvgy_atan)/=. -- by rewrite atan0 oppr0 addr0. - by move=> x _; rewrite invr_ge0. - apply/continuous_within_itvcyP; split. by move=> x x0; apply: continuous_oneDsqrV. @@ -1302,6 +1301,7 @@ rewrite (ge0_continuous_FTC2y _ _ cvgy_atan)/=. - move=> x x0; apply: ex_derive. - by apply: cvg_at_right_filter; exact: continuous_atan. - by move=> x _; rewrite derive1E; exact: derive_val. +- by rewrite atan0 oppr0 addr0. Qed. End Atan.