@@ -57,6 +57,7 @@ From mathcomp Require Import ereal topology tvs normedtype landau.
5757(* is convergent and its limit is sup u_n *)
5858(* nonincreasing_cvgn u_ == if u_ is nonincreasing u_ and bound by below *)
5959(* then u_ is convergent *)
60+ (* adherence_value u_ a == a is an adherence value of the sequence u_ *)
6061(* adjacent_seq == adjacent sequences lemma *)
6162(* cesaro == Cesaro's lemma *)
6263(* ``` *)
@@ -2671,6 +2672,163 @@ apply: nondecreasing_cvgn_le; last exact: is_cvg_geometric_series.
26712672by apply: nondecreasing_series => ? _ /=; rewrite pmulr_lge0 // exprn_gt0.
26722673Qed .
26732674
2675+ Definition adherence_value {R : numDomainType} (u_ : R^nat) (a : R) :=
2676+ forall (e : R) n, e > 0 -> exists2 p, (p >= n)%N & `|u_ p - a| <= e.
2677+
2678+ Section adherence_value_cvg.
2679+ Context {R : realType}.
2680+ Variables (u_ : R^nat) (a : R).
2681+
2682+ (* We build a sequence of increasing positive indices N_k s.t.
2683+ |u_N_k - a| <= 1/k where N_k is the smallest natural number of the set
2684+ A(N, k) defined below. *)
2685+
2686+ Let A N k := [set j | (j > N)%N /\ `|u_ j - a| <= k.+1%:R^-1].
2687+
2688+ Let elt_prop Nk :=
2689+ [/\ `|u_ Nk.1 - a| <= Nk.2%:R^-1, A Nk.1 Nk.2 !=set0 & (0 < Nk.2)%N].
2690+
2691+ Let elt_type := {x : nat * nat | elt_prop x}.
2692+
2693+ Let N_ (x : elt_type) := (proj1_sig x).1.
2694+
2695+ Let idx_ (x : elt_type) := (proj1_sig x).2.
2696+
2697+ Let N_idx x : `|u_ (N_ x) - a| <= (idx_ x)%:R^-1.
2698+ Proof . by move: x => [[? ?]] []. Qed .
2699+
2700+ Let A_nonempty x : A (N_ x) (idx_ x) !=set0.
2701+ Proof . by move: x => [[? ?]] []. Qed .
2702+
2703+ Let elt_rel i j := [/\ (idx_ j = (idx_ i).+1),
2704+ (N_ j > N_ i)%N & N_ j = proj1_sig (cid (nat_has_minimum (A_nonempty i)))].
2705+
2706+ Let N_incr v k p : (forall n, elt_rel (v n) (v n.+1)) ->
2707+ (k < p)%N -> (N_ (v k) < N_ (v p))%N.
2708+ Proof .
2709+ move=> vrel kp.
2710+ have {}Nv n : (N_ (v n) < N_ (v n.+1))%O by have [_] := vrel n.
2711+ by move/increasing_seqP/leqW_mono : Nv => ->.
2712+ Qed .
2713+
2714+ Let idx_incr v n : (forall n, elt_rel (v n) (v n.+1)) -> (n <= idx_ (v n))%N.
2715+ Proof .
2716+ by move=> vrel; elim: n => // n /leq_ltn_trans; apply; have [->] := vrel n.
2717+ Qed .
2718+
2719+ Let adherence_value_cvg_direct : adherence_value u_ a ->
2720+ exists2 f : nat -> nat, increasing_seq f & (u_ \o f @ \oo --> a).
2721+ Proof .
2722+ move=> u_a.
2723+ have [N0 N01] : {N0 | `| u_ N0 - a | <= 1^-1}.
2724+ by move: u_a => /(_ 1 1 ltr01)/cid2[N1 _] N1a1; exists N1; rewrite invr1.
2725+ have A0 : A N0 1 !=set0.
2726+ move: u_a => /(_ 2^-1 N0.+1).
2727+ by rewrite invr_gt0// ltr0n => /(_ isT)[j N0j j1]; exists j.
2728+ have [v [v0 vrel]] : {v : nat -> elt_type |
2729+ v 0 = exist elt_prop (N0, 1) (And3 N01 A0 isT) /\
2730+ forall n, elt_rel (v n) (v n.+1) }.
2731+ apply: dependent_choice => // -[[N i] /=] [uNi ANi0 i0].
2732+ pose M := proj1_sig (cid (nat_has_minimum ANi0)).
2733+ have Mi1 : `|u_ M - a| <= i.+1%:R^-1 by rewrite /M; case: cid => /= x [[]].
2734+ have AMi1 : A M i.+1 !=set0.
2735+ move: u_a => /(_ i.+2%:R^-1 M.+1).
2736+ by rewrite invr_gt0// ltr0n => /(_ isT)/cid2[m nm um]; exists m.
2737+ exists (exist elt_prop (M, i.+1) (And3 Mi1 AMi1 isT)).
2738+ rewrite /elt_rel/= /N_/=; split; first exact.
2739+ - by rewrite /M; case: cid => // x [[]].
2740+ - rewrite /M; case: cid => // x [/= ANix ANi].
2741+ case: cid => //= y [/ANi xy] /(_ _ ANix) yx.
2742+ by apply/eqP; rewrite eq_le leEnat xy yx.
2743+ exists (N_ \o v \o S).
2744+ by apply/increasing_seqP => n; exact: N_incr.
2745+ apply/subr_cvg0/cvgrPdist_le => /= e e0; near=> n.
2746+ rewrite sub0r normrN (le_trans (N_idx (v n.+1)))//.
2747+ rewrite invf_ple ?posrE//; last by rewrite ltr0n; case: (v n.+1) => -[? ?] [].
2748+ rewrite (@le_trans _ _ n.+1%:R)//; last by rewrite ler_nat idx_incr.
2749+ by rewrite -nat1r -lerBlDl; near: n; exact: nbhs_infty_ger.
2750+ Unshelve. all: end_near. Qed .
2751+
2752+ Lemma adherence_value_cvg : adherence_value u_ a <->
2753+ exists2 f : nat -> nat, increasing_seq f & (u_ \o f @ \oo --> a).
2754+ Proof .
2755+ split => // -[f incrf] /cvgrPdist_le/= + e n e0.
2756+ move=> /(_ _ e0)[N _ {}Nauf].
2757+ exists (f (n + N)); last by rewrite distrC Nauf//= leq_addl.
2758+ rewrite (@leq_trans (f n))//.
2759+ elim: n => // n; rewrite -ltnS => /leq_trans; apply.
2760+ by move/increasing_seqP : incrf; exact.
2761+ by rewrite -leEnat incrf leq_addr.
2762+ Qed .
2763+
2764+ Lemma limit_point_adherence_value :
2765+ limit_point (range u_) a -> adherence_value u_ a.
2766+ Proof .
2767+ pose U := range u_.
2768+ pose V i := [set u_ k | k in `I_i].
2769+ have finV i : finite_set (V i) by exact/finite_image/finite_II.
2770+ (* we pick up elements u_N_k from the following set: *)
2771+ pose aU k := `]a - k.+1%:R^-1, a + k.+1%:R^-1[ `&` ((U `\` V k) `\ a).
2772+ move=> u_a.
2773+ have aU0 k : aU k !=set0.
2774+ have /(limit_pointP _ _).1 [a_ [au a_a]] := limit_point_setD (finV k) u_a.
2775+ move/cvgrPdist_lt => /(_ k.+1%:R^-1).
2776+ rewrite invr_gt0 ltr0n => /(_ isT)[N _ a_cvg].
2777+ exists (a_ N); split; first by rewrite /= in_itv/= -ltr_distlC a_cvg/=.
2778+ split; last exact/eqP.
2779+ split; first by have /au[] := imageT a_ N.
2780+ by case => x xk uxaN; have /au[_] := imageT a_ N; apply => /=; exists x.
2781+ have idx_aU k : exists N1, u_ N1 \in aU k.
2782+ have [/= y [/= a1y [[[m _ umy] Uny] ya]]] := aU0 k.
2783+ exists m; rewrite inE /aU umy; split => //=; split => //; split => //.
2784+ by exists m.
2785+ have [N0 N01] : {N0 | `| u_ N0 - a | <= 1^-1}.
2786+ apply/cid; have [a_ [au a_a]] := (limit_pointP _ _).1 u_a.
2787+ move/cvgrPdist_le => /(_ _ ltr01)[N _] /(_ _ (leqnn N)) aaN1.
2788+ have /au[x _ uxaN] := imageT a_ N.
2789+ by exists x; rewrite uxaN distrC invr1.
2790+ have A0 : A N0 1 !=set0.
2791+ have [N1] := idx_aU N0.+1.
2792+ rewrite inE => -[/= uN1 [[[x _ uxuN1] /= VN0N1] uN1_a]].
2793+ exists x; split.
2794+ by rewrite ltnNge; apply/negP => xN0; apply: VN0N1; exists x.
2795+ move: uN1; rewrite in_itv/= -ltr_distlC uxuN1 distrC => /ltW/le_trans; apply.
2796+ by rewrite lef_pV2 ?posrE// ler_nat.
2797+ have [v [v0 vrel]] : {v : nat -> elt_type |
2798+ v 0%N = exist elt_prop (N0, 1) (And3 N01 A0 isT) /\
2799+ forall n, elt_rel (v n) (v n.+1) }.
2800+ apply: dependent_choice => // -[[N i] /=] [uNi ANi0 i0].
2801+ pose M := proj1_sig (cid (nat_has_minimum ANi0)).
2802+ have M0 : (0 < M)%N.
2803+ by rewrite /M; case: cid => //= x [[+ _] _]; exact: leq_trans.
2804+ have Mi1 : `|u_ M - a| <= i.+1%:R^-1 by rewrite /M; case: cid => /= x [[]].
2805+ have AMi1 : A M i.+1 !=set0.
2806+ have [N1] := idx_aU (maxn i.+1 M.+1).
2807+ rewrite inE => -[/= uN1 [[[x _ uxuN2] /= Vi1M1] uN1_a]].
2808+ have Mx : (M < x)%N.
2809+ rewrite ltnNge; apply/negP => xM.
2810+ by apply: Vi1M1; exists x => //; rewrite /(`I_ _) leq_max !ltnS xM orbT.
2811+ exists x; split => //.
2812+ move: uN1; rewrite in_itv -ltr_distlC uxuN2 distrC => /ltW/le_trans; apply.
2813+ by rewrite lef_pV2 ?posrE// ler_nat ltnS leq_max ltnSn.
2814+ exists (exist elt_prop (M, i.+1) (And3 Mi1 AMi1 isT)).
2815+ rewrite /elt_rel/= /N_/=; split; first exact.
2816+ - by rewrite /M; case: cid => // x [[]].
2817+ - rewrite /M; case: cid => // x [ANix ANi]/=.
2818+ case: cid => //= y; rewrite /idx_/= => -[/ANi xy /(_ _ ANix) yx].
2819+ by apply/eqP; rewrite eq_le leEnat xy yx.
2820+ apply/adherence_value_cvg; exists (N_ \o v).
2821+ by apply/increasing_seqP => n; exact: N_incr.
2822+ apply/cvgrPdist_le => /= e e0; near=> n.
2823+ have := N_idx (v n); rewrite distrC => /le_trans; apply.
2824+ rewrite invf_ple//; last first.
2825+ by rewrite posrE ltr0n; case: (v n) => [[? ?] []].
2826+ rewrite (@le_trans _ _ n%:R)//; last by rewrite ler_nat idx_incr.
2827+ by near: n; exact: nbhs_infty_ger.
2828+ Unshelve. all: end_near. Qed .
2829+
2830+ End adherence_value_cvg.
2831+
26742832Section adjacent_cut.
26752833Context {R : realType}.
26762834Implicit Types L D E : set R.
0 commit comments