Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG_UNRELEASED.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@

### Added

- in `sequences.v`,
+ lemmas `is_cvg_series_shiftn`, `series_near_le_cvg`

### Changed

### Renamed
Expand Down
43 changes: 38 additions & 5 deletions theories/sequences.v
Original file line number Diff line number Diff line change
Expand Up @@ -558,7 +558,7 @@ Proof. by rewrite telescopeK/= addrC addrNK. Qed.

Section series_patched.
Context (N : nat) {K : numFieldType} {V : normedModType K}.
Implicit Types (f : nat -> V) (u : V ^nat) (l : set_system V).
Implicit Types (f : nat -> V) (u : V ^nat) (l : set_system V).

Lemma is_cvg_series_restrict u_ :
cvgn [sequence \sum_(N <= k < n) u_ k]_n = cvgn (series u_).
Expand All @@ -571,6 +571,20 @@ rewrite funeqE => n; case: leqP => // ltNn; apply: (canRL (addrK _)).
by rewrite seriesEnat addrC -big_cat_nat// ltnW.
Qed.

Lemma is_cvg_series_shiftn u_ : cvgn (series u_) <-> cvgn [series u_ (n + N)]_n.
Proof.
split.
- rewrite -is_cvg_series_restrict => /cvg_ex[/= l +].
rewrite -(cvg_shiftn N)/= => Nnul; apply: cvgP; apply: cvg_trans Nnul.
apply: near_eq_cvg; near=> n.
rewrite /series/=.
by rewrite -{1}(add0n N) big_addn addnK.
- move=> cvgu; rewrite -is_cvg_series_restrict.
apply: cvgP; rewrite -(cvg_shiftn N)/=; apply: cvg_trans cvgu.
apply: near_eq_cvg; near=> n => /=.
by rewrite -{2}(add0n N) big_addn addnK.
Unshelve. all: by end_near. Qed.

End series_patched.

Section sequences_R_lemmas.
Expand Down Expand Up @@ -972,17 +986,36 @@ have := su_cv; rewrite near_swap => su_cvC; near=> m => /=; rewrite sub_series.
by have [|/ltnW]:= leqP m.2 m.1 => m12; rewrite ?normrN; near: m.
Unshelve. all: by end_near. Qed.

Lemma series_le_cvg (R : realType) (u_ v_ : R ^nat) :
(forall n, 0 <= u_ n) -> (forall n, 0 <= v_ n) ->
(forall n, u_ n <= v_ n) ->
Lemma series_le_cvg {R : realType} (u_ v_ : R ^nat) :

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rename to series_squeeze_is_cvgn?

(forall n, 0 <= u_ n) -> (forall n, 0 <= v_ n) ->
(forall n, u_ n <= v_ n) ->
cvgn (series v_) -> cvgn (series u_).
Proof.
move=> u_ge0 v_ge0 le_uv /cvg_seq_bounded/bounded_fun_has_ubound[M v_M].
apply: nondecreasing_is_cvgn; first exact: nondecreasing_series.
exists M => _ [n _ <-].
by apply: le_trans (v_M (series v_ n) _); [apply: ler_sum | exists n].
by apply: le_trans (v_M (series v_ n) _); [exact: ler_sum | exists n].
Qed.

Lemma series_near_le_cvg {R : realType} (u_ v_ : R^nat) :

@affeldt-aist affeldt-aist Sep 27, 2026 •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe near_series_squeeze_is_cvgn is better because it follows the pattern of the squeeze lemmas (and anyway it should contain the is_cvg substring).

(\forall n \near \oo, 0 <= u_ n) -> (\forall n \near \oo, 0 <= v_ n) ->
(\forall n \near \oo, u_ n <= v_ n) ->
cvgn (series v_) -> cvgn (series u_).
Proof.
move=> u0 v0 uv cvg_v.
near \oo => N; apply/(is_cvg_series_shiftn N).
move: cvg_v => /(is_cvg_series_shiftn N); apply: series_le_cvg => /= n.
- have : forall n, (n >= N)%N -> 0 <= u_ n.
by near: N; exact: (iffLR (near_infty_leq _)).
by apply; exact: leq_addl.
- have : forall n, (n >= N)%N -> 0 <= v_ n.
by near: N; exact: (iffLR (near_infty_leq _)).
by apply; exact: leq_addl.
- have : forall n, (n >= N)%N -> u_ n <= v_ n.
by near: N; exact: (iffLR (near_infty_leq _)).
by apply; exact: leq_addl.
Unshelve. all: by end_near. Qed.

Lemma normed_cvg {R : realType} (V : completeNormedModType R) (u_ : V ^nat) :
cvgn [normed series u_] -> cvgn (series u_).
Proof.
Expand Down
Loading