11From mathcomp Require Import all_ssreflect_compat ssralg ssrnum ssrint interval.
22#[warning="-warn-library-file-internal-analysis"]
3- From mathcomp Require Import unstable.
4- From mathcomp Require Import classical_sets boolp topology.
5- From mathcomp Require Import ereal sequences reals.
3+ From mathcomp Require Import archimedean mathcomp_extra unstable.
4+ From mathcomp Require Import classical_sets boolp topology measure_function.
5+ From mathcomp Require Import set_interval normed_module.
6+ From mathcomp Require Import pseudometric_normed_Zmodule measurable_function.
7+ From mathcomp Require Import measurable_realfun measurable_structure .
8+ From mathcomp Require Import derive lebesgue_measure lebesgue_integral ftc.
9+ From mathcomp Require Import ereal sequences reals realfun real_interval.
610Import Order.POrderTheory GRing.Theory Num.Theory.
711
812(**md************************************************************************* *)
@@ -23,6 +27,10 @@ Set Implicit Arguments.
2327Unset Strict Implicit .
2428Unset Printing Implicit Defensive.
2529
30+ Import Num.Def.
31+ Local Open Scope ring_scope.
32+ Local Open Scope ereal_scope.
33+ Local Open Scope order_scope.
2634Local Open Scope classical_set_scope.
2735Local Open Scope set_scope.
2836Local Open Scope nat_scope.
@@ -452,3 +460,217 @@ apply: (@cardG R); first by move: Rklthalf; rewrite /un div1r.
452460Qed .
453461
454462End dvg_sum_inv_prime_seq.
463+
464+ Lemma Abel_discrete (R : comPzRingType) (a b : nat -> R) (n p : nat) :
465+ p < n -> let A n := (\sum_(0 <= k < n.+1) a k)%R in
466+ (\sum_(p.+1 <= k < n.+1) (a k) * (b k) = A n * b n - A p * b p.+1
467+ + \sum_(p.+1 <= k < n) A k * (b k - b k.+1))%R.
468+ Proof .
469+ move=> ngtp A.
470+ rewrite big_nat_cond.
471+ under eq_bigr => k /andP [] /andP [] pk _ _.
472+ rewrite (_ : a k = (A k - A k.-1)%R) ?mulrBl.
473+ by rewrite /A (ltn_predK pk) // big_nat_recr //= [RHS]addrC addKr.
474+ over.
475+ rewrite -big_nat_cond.
476+ under [in RHS]eq_bigr do rewrite mulrBr.
477+ rewrite !big_split !sumrN /= [X in (_ - X)%R]big_add1 -pred_Sn.
478+ under [X in (_ - X)%R]eq_bigr do rewrite -pred_Sn.
479+ by rewrite [RHS](AC (2*2) ((3*1)*(2*4)))/= -big_nat_recr//= -opprD -big_ltn.
480+ Qed .
481+
482+ Local Notation "\int_( x 'in ' D ) F" := (\int[lebesgue_measure]_(x in D) F)%R
483+ (at level 36, F at level 36, x, D at level 50).
484+
485+ Lemma Abel_continuous (R : realType) (x y : R^o) (f : R^o -> R^o)
486+ (a : nat -> R) : (0 <= y <= x)%R -> derivable_oo_LRcontinuous f y x ->
487+ {within `[y, x] : set R^o, continuous f^`()} ->
488+ let A := fun x : R => (\sum_(0 <= n < `|floor x|.+1) a n)%R in
489+ (\sum_(`|floor y|.+1 <= n < `|floor x|.+1) a n * f n%:R =
490+ A x * f x - A y * f y - \int_(t in `[y, x]) (A t * f^`() t))%R.
491+ Proof .
492+ move=> /andP [] y0 /[dup] /(le_trans y0) x0 /[dup] yx.
493+ rewrite le_eqVlt => /orP[/eqP <-|yx'] fderivable fC1 A.
494+ by rewrite big_geq// subrr set_itv1 Rintegral_set1 subr0.
495+ have x0' := le_lt_trans y0 yx'.
496+ set p := `|floor y|; set q := `|floor x|.
497+ have floory0: (0 <= floor y)%R by rewrite floor_ge0.
498+ have floorx0: (0 <= floor x)%R by rewrite floor_ge0.
499+ have py : (p%:R <= y)%R.
500+ by rewrite -mulrz_nat natz gez0_abs ?floor_ge0// floor_le.
501+ have yp : (y < p.+1%:R)%R.
502+ by rewrite -natr1 -mulrz_nat natz -intrD1 gez0_abs// floorD1_gt.
503+ have qx : (q%:R <= x)%R.
504+ by rewrite -mulrz_nat natz gez0_abs ?floor_ge0// floor_le.
505+ have xq : (x < q.+1%:R)%R.
506+ by rewrite -natr1 -mulrz_nat natz -intrD1 gez0_abs// floorD1_gt.
507+ have AteqAn: forall n t, (n%:R <= t < n.+1%:R)%R -> A t = A n%:R.
508+ move=> n t /andP [] tb1 tb2.
509+ have: floor t = n.
510+ apply /floor_def /andP. split=> //.
511+ by rewrite -natz natr1 mulrz_nat.
512+ suff: @floor R n%:R = n by rewrite /A => -> ->.
513+ by apply /(@intr_inj R) /eqP; rewrite -[_ == _]intrEfloor.
514+ have pleq: p <= q by apply: lez_abs2 => //; apply: le_floor.
515+ have fi: lebesgue_measure.-integrable `[y, x] (EFin \o f^`()).
516+ by apply: continuous_compact_integrable => //; apply: segment_compact.
517+ have fcontinuous: {in `]y, x[ : set R^o, continuous f}.
518+ rewrite -continuous_open_subspace //. apply: derivable_within_continuous.
519+ by case: fderivable.
520+ have tfct1t2 : forall t1 t2, (y <= t1)%R -> (t1 <= t2)%R -> (t2 <= x)%R ->
521+ \int_(x in `[t1, t2]) f^`() x = (f t2 - f t1)%R.
522+ move=> t1 t2 ylet1.
523+ rewrite /Rintegral le_eqVlt => /orP [/eqP ->|t1ltt2 t2lex].
524+ by rewrite subrr set_itv1 (integral_Sset1 t2).
525+ rewrite (@continuous_FTC2 _ _ f)//.
526+ by apply/(continuous_subspaceW _ fC1)/subset_itv; rewrite bnd_simp.
527+ split.
528+ - apply: (@in1_subset_itv _ _ _ `]y, x[%R); last first.
529+ by case: fderivable.
530+ by apply: subset_itv; rewrite bnd_simp.
531+ - move: ylet1. rewrite le_eqVlt => /orP [/eqP <-|yltn].
532+ by case: fderivable.
533+ apply/cvg_at_right_filter/fcontinuous.
534+ rewrite inE/= in_itv/=. apply/andP. split=> //.
535+ exact: (lt_le_trans t1ltt2).
536+ - move: t2lex. rewrite le_eqVlt => /orP [/eqP ->|t2ltx].
537+ by case: fderivable.
538+ apply: cvg_at_left_filter. apply: fcontinuous.
539+ rewrite inE/= in_itv/=. apply/andP. split=> //.
540+ exact: (le_lt_trans ylet1).
541+ move: pleq. rewrite leq_eqVlt => /orP [/eqP|] pq.
542+ rewrite pq big_geq; first exact: ltnSn.
543+ suff AteqAx t : t \in `[y, x] -> A t = A x.
544+ rewrite (AteqAx y); first by rewrite set_itvcc inE/= lexx.
545+ under eq_Rintegral => t tyx do rewrite AteqAx//.
546+ by rewrite RintegralZl//= -!mulrBr tfct1t2// subrr// mulr0.
547+ rewrite inE/= in_itv/= => /andP[] yt tx.
548+ rewrite !(AteqAn p)// ?[X in X.+1]pq; apply/andP; split=> //.
549+ - exact: (le_trans py yt).
550+ - exact: (le_lt_trans tx xq).
551+ - exact: (le_trans py yx).
552+ have ->: ((\sum_(p.+1 <= n < q.+1) a n * f n%:R)%R =
553+ (A q%:R * f q%:R - A p%:R * f p.+1%:R)%R -
554+ (\sum_(p.+1 <= n < q) A n%:R * (f n.+1%:R - f n%:R)))%R.
555+ rewrite -sumrN /A !floor_nat Abel_discrete//. congr (_ + _)%R.
556+ by under [RHS]eq_bigr do rewrite floor_nat -mulrN opprB.
557+ rewrite big_nat.
558+ under eq_bigr => i /andP [] plti iltq.
559+ have yi : (y <= i%:R)%R by apply/(le_trans (ltW yp)); rewrite ler_nat.
560+ have ix : (i.+1%:R <= x)%R by apply: (le_trans _ qx); rewrite ler_nat.
561+ rewrite -tfct1t2// ?ler_nat//.
562+ have {}fi: lebesgue_measure.-integrable `[i%:R, i.+1%:R] (EFin \o f^`()).
563+ apply: (integrableS _ _ _ fi) => //.
564+ by apply: subset_itv => //=; rewrite bnd_simp.
565+ rewrite -RintegralZl// -Rintegral_itv_bndo_bndc.
566+ apply: eq_integrable; first exact: measurable_itv.
567+ by move=> t _ /=; rewrite EFinM.
568+ apply: integrableZl; first exact: measurable_itv.
569+ apply: (integrableS _ _ _ fi) => //.
570+ by apply: subset_itv => //=; rewrite bnd_simp.
571+ under eq_Rintegral => t.
572+ rewrite set_itvco inE/= => /AteqAn <-.
573+ over.
574+ over.
575+ rewrite -big_nat => /=.
576+ have Afi: lebesgue_measure.-integrable (`[y, x] : set R^o)
577+ (EFin \o (fun x0 : R^o => A x0 * f^`() x0)%R).
578+ have /setIidl <-: `[y, x] `<=` `[p%:R, q.+1%:R[.
579+ by apply: subset_itv; rewrite bnd_simp/=.
580+ rewrite -[p%:R]mulrz_nat -[q.+1%:R]mulrz_nat itvzz_bnd_bigcupD1.
581+ by rewrite ler_nat; apply/ltnW/(ltn_trans pq).
582+ rewrite setI_bigcupr bigcup_mkord.
583+ apply: integrable_bigsetU => i _; first exact: measurableI.
584+ apply: eq_integrable; first exact: measurableI.
585+ move=> t; rewrite inE/= => -[_]; rewrite in_itv/=.
586+ by rewrite -!natrD !mulrz_nat addnS EFinM => /AteqAn ->.
587+ apply: integrableZl; first exact: measurableI.
588+ by apply: (integrableS _ _ _ fi) => //; apply: measurableI.
589+ rewrite /Rintegral big_nat sum_fine => [i /andP[] pi iq//|].
590+ apply: integrable_fin_num => //.
591+ apply: (integrableS _ _ _ Afi) => //.
592+ apply: subset_itv; rewrite bnd_simp.
593+ by apply/ltW/(lt_le_trans yp); rewrite ler_nat.
594+ by apply: (le_trans _ qx); rewrite ler_nat.
595+ rewrite -big_nat -integral_bigsetU_EFin //=; first exact: iota_uniq.
596+ - apply /trivIsetP => i j _ _ /eqP ineqj. rewrite -subset0 => z/=.
597+ rewrite !in_itv/= => -[] /andP[] iz zi /andP[] jz zj.
598+ move: (le_lt_trans iz zj) (le_lt_trans jz zi).
599+ by rewrite !ltr_nat => ij ji; apply/ineqj/anti_leq/andP; split.
600+ - apply: measurable_int.
601+ apply: (integrableS _ _ _ Afi) => //.
602+ exact: bigsetU_measurable.
603+ rewrite (big_addn 0) big_mkord.
604+ rewrite -(bigcup_mkord _ (fun i => `[(i + p.+1)%:R, (i + p.+1).+1%:R[)).
605+ apply: bigcup_sub => i/=; rewrite ltn_subRL addnC => ipq.
606+ apply: subset_itv; rewrite bnd_simp.
607+ by apply/ltW/(lt_le_trans yp); rewrite ler_nat leq_addl.
608+ by apply: (le_trans _ qx); rewrite ler_nat.
609+ rewrite (big_addn 0) big_mkord.
610+ rewrite -(bigcup_mkord _ (fun i => `[(i + p.+1)%:R, (i + p.+1).+1%:R[)).
611+ under eq_bigcupr do
612+ rewrite addnC -addnS -mulrz_nat -[(_ + _.+1)%:R]mulrz_nat !natrD.
613+ rewrite -(absz_nat (q - p.+1)) -natz natrB//.
614+ rewrite -itvzz_bnd_bigcupD1; first by rewrite ler_nat.
615+ rewrite !mulrz_nat -![fine _]/(Rintegral _ _ _).
616+ have itvyq: `[y, p.+1%:R[ `|` `[p.+1%:R, q%:R[ = `[y, q%:R[.
617+ by rewrite -itv_bndbnd_setU// bnd_simp// ?ler_nat// ltW.
618+ have itvyx: `[y, x[ = `[y, p.+1%:R[ `|` `[p.+1%:R, q%:R[ `|` `[q%:R, x[.
619+ rewrite itvyq -itv_bndbnd_setU// bnd_simp.
620+ by apply/ltW/(lt_le_trans yp); rewrite ler_nat.
621+ have ->:
622+ (\int_(t in `[y, x]) (A t * f^`() t) =
623+ \int_(t in `[y, p.+1%:R[) (A t * f^`() t) +
624+ \int_(t in `[p.+1%:R, q%:R[) (A t * f^`() t) +
625+ \int_(t in `[q%:R, x[) (A t * f^`() t))%R.
626+ rewrite /Rintegral -integral_itv_bndo_bndc.
627+ apply: (measurable_int (@lebesgue_measure R)).
628+ apply: (integrableS _ _ _ Afi) => //.
629+ by apply: subset_itv; rewrite bnd_simp//.
630+ rewrite itvyx -![fine _]/(Rintegral _ _ _) !Rintegral_setU //=.
631+ - exact: measurableU.
632+ - rewrite -itvyx.
633+ apply: (integrableS _ _ _ Afi) => //.
634+ by apply: subset_itv; rewrite bnd_simp//.
635+ - apply /disj_setPS => z.
636+ rewrite itvyq => /= -[] /andP [] _ zq /andP [] qz _.
637+ suff: (z < z)%R by rewrite ltxx.
638+ exact: (lt_le_trans zq qz).
639+ - rewrite itvyq.
640+ apply: (integrableS _ _ _ Afi) => //.
641+ by apply: subset_itv; rewrite bnd_simp//.
642+ - apply /disj_setPS => z /= [] /andP [] _ zp /andP [] pz _.
643+ suff: (z < z)%R by rewrite ltxx.
644+ exact: (lt_le_trans zp pz).
645+ under [in RHS]eq_Rintegral => t.
646+ rewrite inE/= in_itv/= => /andP [] /(le_trans py) pt tp.
647+ rewrite (AteqAn p) ?pt//.
648+ over.
649+ under [X in (_ = _ - (_ + _ + X))%R]eq_Rintegral => t.
650+ rewrite inE/= in_itv/= => /andP [] qt tx.
651+ rewrite (AteqAn q); first by rewrite qt; apply: (lt_trans tx).
652+ over.
653+ rewrite !RintegralZl //=.
654+ - apply: (integrableS _ _ _ fi) => //.
655+ apply: subset_itv; rewrite bnd_simp//=.
656+ by apply: (le_trans _ qx); rewrite ler_nat.
657+ - apply: (integrableS _ _ _ fi) => //.
658+ apply: subset_itv; rewrite bnd_simp//=.
659+ by apply: (le_trans (ltW yp)); rewrite ler_nat.
660+ rewrite /Rintegral [in RHS]integral_itv_bndo_bndc.
661+ apply: (measurable_int (@lebesgue_measure R)).
662+ apply: (integrableS _ _ _ fi) => //.
663+ apply: subset_itv; rewrite bnd_simp//=.
664+ by apply: (le_trans _ qx); rewrite ler_nat.
665+ rewrite [X in (A q%:R * fine X)%R]integral_itv_bndo_bndc.
666+ apply: (measurable_int (@lebesgue_measure R)).
667+ apply: (integrableS _ _ _ fi) => //.
668+ apply: subset_itv; rewrite bnd_simp//=.
669+ by apply: (le_trans (ltW yp)); rewrite ler_nat.
670+ rewrite -![fine _]/(Rintegral _ _ _) !tfct1t2 //.
671+ - exact: ltW.
672+ - by apply: (le_trans _ qx); rewrite ler_nat.
673+ - by apply: (le_trans (ltW yp)); rewrite ler_nat.
674+ rewrite (AteqAn q x) ?qx// (AteqAn p y) ?py// !opprD !mulrBr !opprB !addrA.
675+ by rewrite (AC 7 ((1*7)*(3*2)*6*4*5))/= !subrr !add0r.
676+ Qed .
0 commit comments