Imports
import Mathlib.Tactic import Mathlib.Algebra.Field.Power import Mathlib.NumberTheory.LSeries.RiemannZeta import Mathlib.NumberTheory.LSeries.HurwitzZetaValues import Analysis.Section_6_1 import Analysis.Section_6_epilogue import Analysis.Section_7_2

Analysis I, Section 7.3: Sums of non-negative numbers

I have attempted to make the translation as faithful a paraphrasing as possible of the original text. When there is a choice between a more idiomatic Lean solution and a more faithful translation, I have generally chosen the latter. In particular, there will be places where the Lean code could be "golfed" to be more elegant and idiomatic, but I have consciously avoided doing so.

Main constructions and results of this section:

  • Equivalent characterizations of convergence of nonnegative series.

  • Cauchy condensation test.

namespace Chapter7open Realabbrev Series.nonneg (s: Series) : Prop := n, s.seq n 0abbrev declaration uses `sorry`Series.partial_of_nonneg {s: Series} (h: s.nonneg) : Monotone s.partial := s:Seriesh:s.nonnegMonotone s.partial All goals completed! 🐙

Proposition 7.3.1

theorem Series.converges_of_nonneg_iff {s: Series} (h: s.nonneg) : s.converges M, N, s.partial N M := s:Seriesh:s.nonnegs.converges M, (N : ), s.partial N M -- This broadly follows the argument in the text, though for one direction I choose to use Mathlib routines rather than Chapter6 results. s:Seriesh:s.nonnegs.converges M, (N : ), s.partial N Ms:Seriesh:s.nonneg(∃ M, (N : ), s.partial N M) s.converges s:Seriesh:s.nonnegs.converges M, (N : ), s.partial N M s:Seriesh:s.nonneghconv:s.converges M, (N : ), s.partial N M set S : Chapter6.Sequence := s.m, s.partial, s:Seriesh:s.nonneghconv:s.converges n < s.m, s.partial n = 0 intro n s:Seriesh:s.nonneghconv:s.convergesn:hn:n < s.ms.partial n = 0; All goals completed! 🐙 have : S.IsBounded := s:Seriesh:s.nonnegs.converges M, (N : ), s.partial N M s:Seriesh:s.nonneghconv:s.convergesS:Chapter6.Sequence := { m := s.m, seq := s.partial, vanish := }S.Convergent s:Seriesh:s.nonneghconv:s.convergesS:Chapter6.Sequence := { m := s.m, seq := s.partial, vanish := } L, Filter.Tendsto S.seq Filter.atTop (nhds L) All goals completed! 🐙 s:Seriesh:s.nonneghconv:s.convergesS:Chapter6.Sequence := { m := s.m, seq := s.partial, vanish := }M:hpos:M 0hM:S.BoundedBy M M, (N : ), s.partial N M s:Seriesh:s.nonneghconv:s.convergesS:Chapter6.Sequence := { m := s.m, seq := s.partial, vanish := }M:hpos:M 0hM:S.BoundedBy M (N : ), s.partial N M; s:Seriesh:s.nonneghconv:s.convergesS:Chapter6.Sequence := { m := s.m, seq := s.partial, vanish := }M:hpos:M 0hM✝:S.BoundedBy MN:hM:|S.seq N| Ms.partial N M All goals completed! 🐙 s:Seriesh:s.nonneghbound: M, (N : ), s.partial N Ms.converges s:Seriesh:s.nonneghbound: M, (N : ), s.partial N Mhinfin:Filter.Tendsto s.partial Filter.atTop Filter.atTops.convergess:Seriesh:s.nonneghbound: M, (N : ), s.partial N Mhfin: l, Filter.Tendsto s.partial Filter.atTop (nhds l)s.converges s:Seriesh:s.nonneghbound: M, (N : ), s.partial N Mhinfin:Filter.Tendsto s.partial Filter.atTop Filter.atTops.converges s:Seriesh:s.nonneghinfin:Filter.Tendsto s.partial Filter.atTop Filter.atTopM:hM: (N : ), s.partial N Ms.converges s:Seriesh:s.nonneghinfin:Filter.Tendsto s.partial Filter.atTop Filter.atTopM:hM: (N : ), s.partial N MN:hN:M < s.partial Ns.converges All goals completed! 🐙 All goals completed! 🐙
theorem Series.sum_of_nonneg_lt {s: Series} (h: s.nonneg) {M:} (hM: N, s.partial N M) : s.sum M := s:Seriesh:s.nonnegM:hM: (N : ), s.partial N Ms.sum M have : M, N, s.partial N M := s:Seriesh:s.nonnegM:hM: (N : ), s.partial N Ms.sum M All goals completed! 🐙 s:Seriesh:s.nonnegM:hM: (N : ), s.partial N Mthis:s.convergess.sum M; s:Seriesh:s.nonnegM:hM: (N : ), s.partial N Mthis:s.convergesExists.choose M s:Seriesh:s.nonnegM:hM: (N : ), s.partial N Mthis:s.convergeshconv:s.convergesTo (Exists.choose this)Exists.choose M; s:Seriesh:s.nonnegM:hM: (N : ), s.partial N Mthis:s.convergeshconv:Filter.Tendsto s.partial Filter.atTop (nhds (Exists.choose this))Exists.choose M; All goals completed! 🐙theorem Series.partial_le_sum_of_nonneg {s: Series} (hnon: s.nonneg) (hconv: s.converges) (N : ) : s.partial N s.sum := s:Serieshnon:s.nonneghconv:s.convergesN:s.partial N s.sum s:Serieshnon:s.nonneghconv:s.convergesN:Filter.Tendsto s.partial Filter.atTop (nhds s.sum) s:Serieshnon:s.nonneghconv:s.convergesN:Filter.Tendsto s.partial Filter.atTop (nhds (Exists.choose )); All goals completed! 🐙

Some useful nonnegativity lemmas for later applications.

theorem Series.partial_nonneg {s: Series} (hnon: s.nonneg) (N : ) : 0 s.partial N := s:Serieshnon:s.nonnegN:0 s.partial N s:Serieshnon:s.nonnegN:0 n Finset.Icc s.m N, s.seq n; s:Serieshnon:s.nonnegN: i Finset.Icc s.m N, 0 s.seq i; All goals completed! 🐙
theorem Series.sum_of_nonneg {s:Series} (hnon: s.nonneg) : 0 s.sum := s:Serieshnon:s.nonneg0 s.sum s:Serieshnon:s.nonnegh:s.converges0 s.sums:Serieshnon:s.nonnegh:¬s.converges0 s.sum s:Serieshnon:s.nonnegh:s.converges0 s.sums:Serieshnon:s.nonnegh:¬s.converges0 s.sum All goals completed! 🐙 All goals completed! 🐙

Corollary 7.3.2 (Comparison test) / Exercise 7.3.1

theorem declaration uses `sorry`Series.converges_of_le {s t: Series} (hm: s.m = t.m) (hcomp: n s.m, |s.seq n| t.seq n) (hconv : t.converges) : s.absConverges |s.sum| s.abs.sum s.abs.sum t.sum := s:Seriest:Serieshm:s.m = t.mhcomp: n s.m, |s.seq n| t.seq nhconv:t.convergess.absConverges |s.sum| s.abs.sum s.abs.sum t.sum All goals completed! 🐙
theorem declaration uses `sorry`Series.diverges_of_ge {s t: Series} (hm: s.m = t.m) (hcomp: n s.m, |s.seq n| t.seq n) (hdiv: ¬ s.absConverges) : t.diverges := s:Seriest:Serieshm:s.m = t.mhcomp: n s.m, |s.seq n| t.seq nhdiv:¬s.absConvergest.diverges All goals completed! 🐙

Lemma 7.3.3 (Geometric series) / Exercise 7.3.2

theorem declaration uses `sorry`Series.converges_geom {x: } (hx: |x| < 1) : (fun n x ^ n : Series).convergesTo (1 / (1 - x)) := x:hx:|x| < 1{ m := 0, seq := fun n if n 0 then (fun n x ^ n) n.toNat else 0, vanish := }.convergesTo (1 / (1 - x)) All goals completed! 🐙
theorem declaration uses `sorry`Series.absConverges_geom {x: } (hx: |x| < 1) : (fun n x ^ n : Series).absConverges := x:hx:|x| < 1{ m := 0, seq := fun n if n 0 then (fun n x ^ n) n.toNat else 0, vanish := }.absConverges All goals completed! 🐙theorem declaration uses `sorry`Series.diverges_geom {x: } (hx: |x| 1) : (fun n x ^ n : Series).diverges := x:hx:|x| 1{ m := 0, seq := fun n if n 0 then (fun n x ^ n) n.toNat else 0, vanish := }.diverges All goals completed! 🐙theorem declaration uses `sorry`Series.converges_geom_iff (x: ) : (fun n x ^ n : Series).converges |x| < 1 := x:{ m := 0, seq := fun n if n 0 then (fun n x ^ n) n.toNat else 0, vanish := }.converges |x| < 1 All goals completed! 🐙

Proposition 7.3.4 (Cauchy criterion)

theorem Series.cauchy_criterion {s:Series} (hm: s.m = 1) (hs:s.nonneg) (hmono: n 1, s.seq (n+1) s.seq n) : s.converges (fun k 2^k * s.seq (2^k): Series).converges := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq ns.converges { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }.converges -- This proof is written to follow the structure of the original text. s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }s.converges t.converges have ht: t.nonneg := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq ns.converges { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }.converges s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }n:t.seq n 0; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }n:h:n 0t.seq n 0s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }n:h:¬n 0t.seq n 0 s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }n:h:n 0t.seq n 0s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }n:h:¬n 0t.seq n 0 All goals completed! 🐙; All goals completed! 🐙 have hmono' : n 1, m n, s.seq m s.seq n := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq ns.converges { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }.converges intro n s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonnegn:hn:n 1 m n, s.seq m s.seq n s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonnegn:hn:n 1m:m n s.seq m s.seq n s:Serieshm✝:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonnegn:hn:n 1m:hm:m ns.seq m s.seq n; s:Serieshm✝:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonnegn:hn:n 1k:hm:n + k ns.seq (n + k) s.seq n; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonnegn:hn:n 1k:s.seq (n + k) s.seq n s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonnegn:hn:n 1s.seq (n + 0) s.seq ns:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonnegn:hn:n 1k:hk:s.seq (n + k) s.seq ns.seq (n + (k + 1)) s.seq n; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonnegn:hn:n 1k:hk:s.seq (n + k) s.seq ns.seq (n + (k + 1)) s.seq n convert (hmono (n+k) (s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonnegn:hn:n 1k:hk:s.seq (n + k) s.seq nn + k 1 All goals completed! 🐙)).trans hk using 2; All goals completed! 🐙 have htm : t.m = 0 := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq ns.converges { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }.converges All goals completed! 🐙 s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0(∃ M, (N : ), s.partial N M) M, (N : ), t.partial N M s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partial(∃ M, (N : ), S N M) M, (N : ), t.partial N M s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partial(∃ M, (N : ), S N M) M, (N : ), T N M have Lemma_7_3_6 (K:) : S (2^(K+1) - 1) T K T K 2 * S (2^K) := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq ns.converges { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }.converges s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialS (2 ^ (0 + 1) - 1) T 0 T 0 2 * S (2 ^ 0)s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:hK:S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)S (2 ^ (K + 1 + 1) - 1) T (K + 1) T (K + 1) 2 * S (2 ^ (K + 1)) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialS (2 ^ (0 + 1) - 1) T 0 T 0 2 * S (2 ^ 0) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partials.seq 1 2 * s.seq 1; All goals completed! 🐙 s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:hK:S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)h2K:1 2 ^ KS (2 ^ (K + 1 + 1) - 1) T (K + 1) T (K + 1) 2 * S (2 ^ (K + 1)); s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:hK:S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)S (2 ^ (K + 1 + 1) - 1) T (K + 1) T (K + 1) 2 * S (2 ^ (K + 1)) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)S (2 ^ (K + 1 + 1) - 1) T (K + 1) T (K + 1) 2 * S (2 ^ (K + 1)) have claim1 : T (K + 1) = T K + 2^(K+1) * s.seq (2^(K+1)) := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq ns.converges { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }.converges s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)K t.m - 1; All goals completed! 🐙 have claim2a : S (2^(K+1)) S (2^K) + 2^K * s.seq (2^(K+1)) := calc _ = S (2^K) + n .Ioc (2^K) (2^(K+1)), s.seq n := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))S (2 ^ (K + 1)) = S (2 ^ K) + n Finset.Ioc (2 ^ K) (2 ^ (K + 1)), s.seq n have : Disjoint (Finset.Icc s.m (2^K)) (Finset.Ioc (2^K) (2^(K+1))) := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))S (2 ^ (K + 1)) = S (2 ^ K) + n Finset.Ioc (2 ^ K) (2 ^ (K + 1)), s.seq n s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1)) a Finset.Icc s.m (2 ^ K), b Finset.Ioc (2 ^ K) (2 ^ (K + 1)), a b; intro x s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))x:hx:x Finset.Icc s.m (2 ^ K) b Finset.Ioc (2 ^ K) (2 ^ (K + 1)), x b s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))x:hx:x Finset.Icc s.m (2 ^ K)y:y Finset.Ioc (2 ^ K) (2 ^ (K + 1)) x y s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))x:hx:x Finset.Icc s.m (2 ^ K)y:hy:y Finset.Ioc (2 ^ K) (2 ^ (K + 1))x y; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))x:y:hx:s.m x x 2 ^ Khy:2 ^ K < y y 2 ^ (K + 1)x y; All goals completed! 🐙 s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ K)) (Finset.Ioc (2 ^ K) (2 ^ (K + 1)))Finset.Icc s.m (2 ^ (K + 1)) = Finset.Icc s.m (2 ^ K) Finset.Ioc (2 ^ K) (2 ^ (K + 1)) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ K)) (Finset.Ioc (2 ^ K) (2 ^ (K + 1)))x:x Finset.Icc s.m (2 ^ (K + 1)) x Finset.Icc s.m (2 ^ K) Finset.Ioc (2 ^ K) (2 ^ (K + 1)); s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ K)) (Finset.Ioc (2 ^ K) (2 ^ (K + 1)))x:s.m x x 2 ^ (K + 1) s.m x x 2 ^ K 2 ^ K < x x 2 ^ (K + 1); s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ K)) (Finset.Ioc (2 ^ K) (2 ^ (K + 1)))x:s.m x x 2 ^ (K + 1) s.m x x 2 ^ K 2 ^ K < x x 2 ^ (K + 1)s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ K)) (Finset.Ioc (2 ^ K) (2 ^ (K + 1)))x:s.m x x 2 ^ K 2 ^ K < x x 2 ^ (K + 1) s.m x x 2 ^ (K + 1) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ K)) (Finset.Ioc (2 ^ K) (2 ^ (K + 1)))x:s.m x x 2 ^ (K + 1) s.m x x 2 ^ K 2 ^ K < x x 2 ^ (K + 1) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ K)) (Finset.Ioc (2 ^ K) (2 ^ (K + 1)))x:h1:s.m xh2:x 2 ^ (K + 1)s.m x x 2 ^ K 2 ^ K < x x 2 ^ (K + 1); All goals completed! 🐙 s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ K)) (Finset.Ioc (2 ^ K) (2 ^ (K + 1)))x:h1:s.m xh2:x 2 ^ Ks.m x x 2 ^ (K + 1)s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ K)) (Finset.Ioc (2 ^ K) (2 ^ (K + 1)))x:h1:2 ^ K < xh2:x 2 ^ (K + 1)s.m x x 2 ^ (K + 1) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ K)) (Finset.Ioc (2 ^ K) (2 ^ (K + 1)))x:h1:s.m xh2:x 2 ^ Ks.m x x 2 ^ (K + 1) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ K)) (Finset.Ioc (2 ^ K) (2 ^ (K + 1)))x:h1:s.m xh2:x 2 ^ Kx 2 * 2 ^ K; All goals completed! 🐙 s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ K)) (Finset.Ioc (2 ^ K) (2 ^ (K + 1)))x:h1:2 ^ K < xh2:x 2 ^ (K + 1)1 x; All goals completed! 🐙 _ S (2^K) + n .Ioc ((2:)^K) (2^(K+1)), s.seq (2^(K+1)) := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))S (2 ^ K) + n Finset.Ioc (2 ^ K) (2 ^ (K + 1)), s.seq n S (2 ^ K) + n Finset.Ioc (2 ^ K) (2 ^ (K + 1)), s.seq (2 ^ (K + 1)) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))n:hn:n Finset.Ioc (2 ^ K) (2 ^ (K + 1))s.seq (2 ^ (K + 1)) s.seq n; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))n:hn:2 ^ K < n n 2 ^ (K + 1)s.seq (2 ^ (K + 1)) s.seq n; exact hmono' _ (s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))n:hn:2 ^ K < n n 2 ^ (K + 1)n 1 All goals completed! 🐙) _ hn.2 _ = _ := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))S (2 ^ K) + n Finset.Ioc (2 ^ K) (2 ^ (K + 1)), s.seq (2 ^ (K + 1)) = S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1)) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))(2 * 2 ^ K - 2 ^ K).toNat = 2 ^ K s.seq (2 * 2 ^ K) = 0; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))(2 * 2 ^ K - 2 ^ K).toNat = 2 ^ K; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))(2 ^ K).toNat = 2 ^ K; All goals completed! 🐙 have claim2 : 2 * S (2^(K+1)) 2 * S (2^K) + 2^(K+1) * s.seq (2^(K+1)) := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq ns.converges { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }.converges s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 * 2 ^ K * s.seq (2 ^ (K + 1)); All goals completed! 🐙 have claim3 : S (2^(K+1+1) - 1) S (2^(K+1)-1) + 2^(K+1) * s.seq (2^(K+1)) := calc _ = S (2^(K+1)-1) + n .Icc (2^(K+1)) (2^(K+1+1)-1), s.seq n := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))S (2 ^ (K + 1 + 1) - 1) = S (2 ^ (K + 1) - 1) + n Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1), s.seq n have : Disjoint (Finset.Icc s.m (2^(K+1)-1)) (Finset.Icc (2^(K+1)) (2^(K+1+1)-1)) := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))S (2 ^ (K + 1 + 1) - 1) = S (2 ^ (K + 1) - 1) + n Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1), s.seq n s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1)) a Finset.Icc s.m (2 ^ (K + 1) - 1), b Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1), a b; intro x s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))x:hx:x Finset.Icc s.m (2 ^ (K + 1) - 1) b Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1), x b s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))x:hx:x Finset.Icc s.m (2 ^ (K + 1) - 1)y:y Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1) x y s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))x:hx:x Finset.Icc s.m (2 ^ (K + 1) - 1)y:hy:y Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1)x y; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))x:y:hx:s.m x x < 2 ^ (K + 1)hy:2 ^ (K + 1) y y < 2 ^ (K + 1 + 1)x y; All goals completed! 🐙 s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ (K + 1) - 1)) (Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1))Finset.Icc s.m (2 ^ (K + 1 + 1) - 1) = Finset.Icc s.m (2 ^ (K + 1) - 1) Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ (K + 1) - 1)) (Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1))a✝:a✝ Finset.Icc s.m (2 ^ (K + 1 + 1) - 1) a✝ Finset.Icc s.m (2 ^ (K + 1) - 1) Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1); s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ (K + 1) - 1)) (Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1))a✝:s.m a✝ a✝ < 2 ^ (K + 1 + 1) s.m a✝ a✝ < 2 ^ (K + 1) 2 ^ (K + 1) a✝ a✝ < 2 ^ (K + 1 + 1); s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ (K + 1) - 1)) (Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1))a✝:s.m a✝ a✝ < 2 ^ (K + 1 + 1) s.m a✝ a✝ < 2 ^ (K + 1) 2 ^ (K + 1) a✝ a✝ < 2 ^ (K + 1 + 1)s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ (K + 1) - 1)) (Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1))a✝:s.m a✝ a✝ < 2 ^ (K + 1) 2 ^ (K + 1) a✝ a✝ < 2 ^ (K + 1 + 1) s.m a✝ a✝ < 2 ^ (K + 1 + 1) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ (K + 1) - 1)) (Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1))a✝:s.m a✝ a✝ < 2 ^ (K + 1 + 1) s.m a✝ a✝ < 2 ^ (K + 1) 2 ^ (K + 1) a✝ a✝ < 2 ^ (K + 1 + 1) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ (K + 1) - 1)) (Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1))a✝:h1:s.m a✝h2:a✝ < 2 ^ (K + 1 + 1)s.m a✝ a✝ < 2 ^ (K + 1) 2 ^ (K + 1) a✝ a✝ < 2 ^ (K + 1 + 1); s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ (K + 1) - 1)) (Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1))a✝:h1:s.m a✝h2:a✝ < 2 ^ (K + 1 + 1)a✝ < 2 ^ (K + 1) 2 ^ (K + 1) a✝; All goals completed! 🐙 s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ (K + 1) - 1)) (Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1))a✝:h1:s.m a✝h2:a✝ < 2 ^ (K + 1)s.m a✝ a✝ < 2 ^ (K + 1 + 1)s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ (K + 1) - 1)) (Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1))a✝:h1:2 ^ (K + 1) a✝h2:a✝ < 2 ^ (K + 1 + 1)s.m a✝ a✝ < 2 ^ (K + 1 + 1) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ (K + 1) - 1)) (Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1))a✝:h1:s.m a✝h2:a✝ < 2 ^ (K + 1)s.m a✝ a✝ < 2 ^ (K + 1 + 1) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ (K + 1) - 1)) (Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1))a✝:h1:s.m a✝h2:a✝ < 2 ^ (K + 1)a✝ < 2 * 2 ^ (K + 1); All goals completed! 🐙 s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))this:Disjoint (Finset.Icc s.m (2 ^ (K + 1) - 1)) (Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1))a✝:h1:2 ^ (K + 1) a✝h2:a✝ < 2 ^ (K + 1 + 1)1 a✝; All goals completed! 🐙 _ S (2^(K+1)-1) + n .Icc ((2:)^(K+1)) (2^(K+1+1)-1), s.seq (2^(K+1)) := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))S (2 ^ (K + 1) - 1) + n Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1), s.seq n S (2 ^ (K + 1) - 1) + n Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1), s.seq (2 ^ (K + 1)) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))n:hn:n Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1)s.seq n s.seq (2 ^ (K + 1)); s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))n:hn:2 ^ (K + 1) n n < 2 ^ (K + 1 + 1)s.seq n s.seq (2 ^ (K + 1)); s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))n:hn:2 ^ (K + 1) n n < 2 ^ (K + 1 + 1)2 ^ (K + 1) 1; All goals completed! 🐙 _ = _ := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))S (2 ^ (K + 1) - 1) + n Finset.Icc (2 ^ (K + 1)) (2 ^ (K + 1 + 1) - 1), s.seq (2 ^ (K + 1)) = S (2 ^ (K + 1) - 1) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1)) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))(2 * (2 * 2 ^ K) - 2 * 2 ^ K).toNat = 2 * 2 ^ K s.seq (2 * 2 ^ K) = 0; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))(2 * (2 * 2 ^ K) - 2 * 2 ^ K).toNat = 2 * 2 ^ K; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))(2 ^ K * 2).toNat = 2 ^ K * 2; All goals completed! 🐙 s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim3:S (2 ^ (K + 1 + 1) - 1) S (2 ^ (K + 1) - 1) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))S (2 ^ (K + 1 + 1) - 1) T (K + 1) T (K + 1) 2 * S (2 ^ (K + 1)); s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim3:S (2 ^ (K + 1 + 1) - 1) S (2 ^ (K + 1) - 1) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))S (2 ^ (K + 1 + 1) - 1) T (K + 1)s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim3:S (2 ^ (K + 1 + 1) - 1) S (2 ^ (K + 1) - 1) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))T (K + 1) 2 * S (2 ^ (K + 1)) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim3:S (2 ^ (K + 1 + 1) - 1) S (2 ^ (K + 1) - 1) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))S (2 ^ (K + 1 + 1) - 1) T (K + 1)s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialK:h2K:1 2 ^ Kh2K':1 2 ^ (K + 1)hK1:S (2 ^ (K + 1) - 1) T KhK2:T K 2 * S (2 ^ K)claim1:T (K + 1) = T K + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim2a:S (2 ^ (K + 1)) S (2 ^ K) + 2 ^ K * s.seq (2 ^ (K + 1))claim2:2 * S (2 ^ (K + 1)) 2 * S (2 ^ K) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))claim3:S (2 ^ (K + 1 + 1) - 1) S (2 ^ (K + 1) - 1) + 2 ^ (K + 1) * s.seq (2 ^ (K + 1))T (K + 1) 2 * S (2 ^ (K + 1)) All goals completed! 🐙 s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)(∃ M, (N : ), S N M) M, (N : ), T N Ms:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)(∃ M, (N : ), T N M) M, (N : ), S N M s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)(∃ M, (N : ), S N M) M, (N : ), T N M s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), S N M M, (N : ), T N M; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), S N M (N : ), T N 2 * M; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), S N MN:T N 2 * M; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), S N MN:hN:N < 0T N 2 * Ms:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), S N MN:hN:0 NT N 2 * M s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), S N MN:hN:N < 0T N 2 * M s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), S N MN:hN:N < 00 M; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), S N MN:hN:N < 00 = S 0; All goals completed! 🐙 s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), S N MN:hN:0 NT N.toNat 2 * M; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), S N MN:hN:0 N2 * S (2 ^ N.toNat) 2 * M; All goals completed! 🐙 s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), T N M M, (N : ), S N M; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), T N M (N : ), S N M; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), T N MK':S K' M; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), T N MK':hK':K' < 1S K' Ms:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), T N MK':hK':1 K'S K' M s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), T N MK':hK':K' < 1S K' M s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), T N MK':hK':K' < 10 M; All goals completed! 🐙 s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), T N MK':hK':1 K'K: := (K' - 1).toNatS K' M; have hK : K' = K + 1 := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq ns.converges { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }.converges s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), T N MK':hK':1 K'K: := (K' - 1).toNatK' = K' - 1 + 1; All goals completed! 🐙 calc _ S (2 ^ (K+1) - 1) := s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), T N MK':hK':1 K'K: := (K' - 1).toNathK:K' = K + 1S K' S (2 ^ (K + 1) - 1) s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), T N MK':hK':1 K'K: := (K' - 1).toNathK:K' = K + 1K' 2 ^ (K + 1) - 1; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), T N MK':hK':1 K'K: := (K' - 1).toNathK:K' = K + 1K + 1 2 ^ (K + 1) - 1 s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), T N MK':hK':1 K'K: := (K' - 1).toNathK:K' = K + 1n:n + 1 2 ^ (n + 1) - 1; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), T N MK':hK':1 K'K: := (K' - 1).toNathK:K' = K + 10 + 1 2 ^ (0 + 1) - 1s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), T N MK':hK':1 K'K: := (K' - 1).toNathK:K' = K + 1n:hn:n + 1 2 ^ (n + 1) - 1(n + 1) + 1 2 ^ (n + 1 + 1) - 1; s:Serieshm:s.m = 1hs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghmono': n 1, m n, s.seq m s.seq nhtm:t.m = 0S: := s.partialT: := t.partialLemma_7_3_6: (K : ), S (2 ^ (K + 1) - 1) T K T K 2 * S (2 ^ K)M:hM: (N : ), T N MK':hK':1 K'K: := (K' - 1).toNathK:K' = K + 1n:hn:n + 1 2 ^ (n + 1) - 1(n + 1) + 1 2 ^ (n + 1 + 1) - 1 s:Serieshm:s.m = 1hs:s.nonnegt:Series := { m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }ht:t.nonneghtm:t.m = 0S: := s.partialT: := t.partialM:hM: (N : ), T N MK':hK':1 K'K: := (K' - 1).toNathK:K' = K + 1n:hmono: (n : ), 1 n s.seq (n + 1) s.seq nhmono': (n : ), 1 n (m : ), n m s.seq m s.seq nLemma_7_3_6: (K : ), S (2 ^ K * 2 - 1) T K T K 2 * S (2 ^ K)hn:n + 1 < 2 ^ n * 2n + 1 + 1 < 2 ^ n * 2 * 2; All goals completed! 🐙 _ T K := (Lemma_7_3_6 K).1 _ M := hM K

Corollary 7.3.7

theorem Series.converges_qseries (q: ) (hq: q > 0) : (mk' (m := 1) fun n 1 / (n:) ^ q : Series).converges (q>1) := q:hq:q > 0(mk' fun n 1 / n ^ q).converges q > 1 -- This proof is written to follow the structure of the original text. q:hq:q > 0s:Series := mk' fun n 1 / n ^ qs.converges q > 1 have hs : s.nonneg := q:hq:q > 0(mk' fun n 1 / n ^ q).converges q > 1 q:hq:q > 0s:Series := mk' fun n 1 / n ^ qn:s.seq n 0; q:hq:q > 0s:Series := mk' fun n 1 / n ^ qn:0 if 1 n then (n ^ q)⁻¹ else 0; q:hq:q > 0s:Series := mk' fun n 1 / n ^ qn:h:1 n0 if 1 n then (n ^ q)⁻¹ else 0q:hq:q > 0s:Series := mk' fun n 1 / n ^ qn:h:¬1 n0 if 1 n then (n ^ q)⁻¹ else 0 q:hq:q > 0s:Series := mk' fun n 1 / n ^ qn:h:1 n0 if 1 n then (n ^ q)⁻¹ else 0q:hq:q > 0s:Series := mk' fun n 1 / n ^ qn:h:¬1 n0 if 1 n then (n ^ q)⁻¹ else 0 All goals completed! 🐙; All goals completed! 🐙 have hmono : n 1, s.seq (n+1) s.seq n := q:hq:q > 0(mk' fun n 1 / n ^ q).converges q > 1 intro n q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonnegn:hn:n 1s.seq (n + 1) s.seq n have hn1 : n 0 := q:hq:q > 0(mk' fun n 1 / n ^ q).converges q > 1 All goals completed! 🐙 have hn3 : n.toNat > 0 := q:hq:q > 0(mk' fun n 1 / n ^ q).converges q > 1 All goals completed! 🐙 q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonnegn:hn:n 1hn1:n 0hn3:n.toNat > 0((n + 1) ^ q)⁻¹ (n ^ q)⁻¹ q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonnegn:hn:n 1hn1:n 0hn3:n.toNat > 00 < n ^ qq:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonnegn:hn:n 1hn1:n 0hn3:n.toNat > 00 nq:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonnegn:hn:n 1hn1:n 0hn3:n.toNat > 0n n + 1q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonnegn:hn:n 1hn1:n 0hn3:n.toNat > 00 q q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonnegn:hn:n 1hn1:n 0hn3:n.toNat > 00 < n ^ qq:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonnegn:hn:n 1hn1:n 0hn3:n.toNat > 00 nq:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonnegn:hn:n 1hn1:n 0hn3:n.toNat > 0n n + 1q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonnegn:hn:n 1hn1:n 0hn3:n.toNat > 00 q try All goals completed! 🐙 All goals completed! 🐙 q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq n{ m := 0, seq := fun n if n 0 then (fun k 2 ^ k * s.seq (2 ^ k)) n.toNat else 0, vanish := }.converges q > 1 have (n:) : 2^n * s.seq (2^n) = (2^(1-q))^n := q:hq:q > 0(mk' fun n 1 / n ^ q).converges q > 1 have : 1 (2:)^n := q:hq:q > 0(mk' fun n 1 / n ^ q).converges q > 1 q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nn:1 2 ^ n; All goals completed! 🐙 q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nn:this:1 2 ^ n2 ^ n * ((2 ^ n) ^ q)⁻¹ = (2 ^ (1 - q)) ^ n q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nn:this:1 2 ^ n(2 ^ n) ^ (-q + 1) = (2 ^ n) ^ (1 - q)q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nn:this:1 2 ^ n0 2q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nn:this:1 2 ^ n2 ^ n 0q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nn:this:1 2 ^ n0 2 ^ n q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nn:this:1 2 ^ n(2 ^ n) ^ (-q + 1) = (2 ^ n) ^ (1 - q)q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nn:this:1 2 ^ n0 2q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nn:this:1 2 ^ n2 ^ n 0q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nn:this:1 2 ^ n0 2 ^ n (try All goals completed! 🐙); All goals completed! 🐙 q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nthis: (n : ), 2 ^ n * s.seq (2 ^ n) = (2 ^ (1 - q)) ^ n|2 ^ (1 - q)| < 1 1 < q q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nthis: (n : ), 2 ^ n * s.seq (2 ^ n) = (2 ^ (1 - q)) ^ n1 < 2 1 - q < 0 2 < 1 0 < 1 - q 1 < qq:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nthis: (n : ), 2 ^ n * s.seq (2 ^ n) = (2 ^ (1 - q)) ^ n0 < 2q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nthis: (n : ), 2 ^ n * s.seq (2 ^ n) = (2 ^ (1 - q)) ^ n0 2 ^ (1 - q) q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nthis: (n : ), 2 ^ n * s.seq (2 ^ n) = (2 ^ (1 - q)) ^ n1 < 2 1 - q < 0 2 < 1 0 < 1 - q 1 < qq:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nthis: (n : ), 2 ^ n * s.seq (2 ^ n) = (2 ^ (1 - q)) ^ n0 < 2q:hq:q > 0s:Series := mk' fun n 1 / n ^ qhs:s.nonneghmono: n 1, s.seq (n + 1) s.seq nthis: (n : ), 2 ^ n * s.seq (2 ^ n) = (2 ^ (1 - q)) ^ n0 2 ^ (1 - q) try All goals completed! 🐙 All goals completed! 🐙

Remark 7.3.8

theorem Series.zeta_eq {q:} (hq: q > 1) : (mk' (m := 1) fun n 1 / (n:) ^ q : Series).sum = riemannZeta q := q:hq:q > 1(mk' fun n 1 / n ^ q).sum = riemannZeta q -- `riemannZeta` is defined over the complex numbers, so some preliminary work is needed to specialize to the reals. q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ q(mk' fun n 1 / n ^ q).sum = riemannZeta q have hL : L = riemannZeta q := q:hq:q > 1(mk' fun n 1 / n ^ q).sum = riemannZeta q q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qL = ∑' (n : ), 1 / (n + 1) ^ q q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qn:1 / (n + 1) ^ q = (1 / (n + 1) ^ q) All goals completed! 🐙 q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta q(mk' fun n 1 / n ^ q).sum = L q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta q(mk' fun n 1 / n ^ q).sum = L; q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta q(mk' fun n 1 / n ^ q).convergesTo L have : Summable (fun (n : ) 1 / (n+1:) ^ q) := q:hq:q > 1(mk' fun n 1 / n ^ q).sum = riemannZeta q q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qn:n + 1 = |n + 1| q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qn:0 n + 1; All goals completed! 🐙 have tail (a: ) (L:) : Filter.atTop.Tendsto a (nhds L) Filter.atTop.Tendsto (fun n: a n) (nhds L) := q:hq:q > 1(mk' fun n 1 / n ^ q).sum = riemannZeta q q:hq:q > 1L✝: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qthis:Summable fun n 1 / (n + 1) ^ qa: L:Filter.atTop = Filter.map (fun n n) Filter.atTop All goals completed! 🐙 q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qthis:Summable fun n 1 / (n + 1) ^ qtail: (a : ) (L : ), Filter.Tendsto a Filter.atTop (nhds L) Filter.Tendsto (fun n a n) Filter.atTop (nhds L)Filter.Tendsto (mk' fun n 1 / n ^ q).partial Filter.atTop (nhds L) q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qthis:Summable fun n 1 / (n + 1) ^ qtail: (a : ) (L : ), Filter.Tendsto a Filter.atTop (nhds L) Filter.Tendsto (fun n a n) Filter.atTop (nhds L)Filter.Tendsto (fun n (mk' fun n 1 / n ^ q).partial n) Filter.atTop (nhds L) q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qthis:Summable fun n 1 / (n + 1) ^ qtail: (a : ) (L : ), Filter.Tendsto a Filter.atTop (nhds L) Filter.Tendsto (fun n a n) Filter.atTop (nhds L)n:(mk' fun n 1 / n ^ q).partial n = i Finset.range n, 1 / (i + 1) ^ q q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qthis:Summable fun n 1 / (n + 1) ^ qtail: (a : ) (L : ), Filter.Tendsto a Filter.atTop (nhds L) Filter.Tendsto (fun n a n) Filter.atTop (nhds L)n:(∑ x Finset.Icc 1 n, if 1 x then (x ^ q)⁻¹ else 0) = x Finset.range n, ((x + 1) ^ q)⁻¹ set e : := { toFun n := n+1 inj' _ _ _ := q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qthis:Summable fun n 1 / (n + 1) ^ qtail: (a : ) (L : ), Filter.Tendsto a Filter.atTop (nhds L) Filter.Tendsto (fun n a n) Filter.atTop (nhds L)n:x✝²:x✝¹:x✝:(fun n n + 1) x✝² = (fun n n + 1) x✝¹x✝² = x✝¹ All goals completed! 🐙 } q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qthis:Summable fun n 1 / (n + 1) ^ qtail: (a : ) (L : ), Filter.Tendsto a Filter.atTop (nhds L) Filter.Tendsto (fun n a n) Filter.atTop (nhds L)n:e: := { toFun := fun n n + 1, inj' := }Finset.Icc 1 n = Finset.map e (Finset.range n)q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qthis:Summable fun n 1 / (n + 1) ^ qtail: (a : ) (L : ), Filter.Tendsto a Filter.atTop (nhds L) Filter.Tendsto (fun n a n) Filter.atTop (nhds L)n:e: := { toFun := fun n n + 1, inj' := }m:hm:m Finset.range n((m + 1) ^ q)⁻¹ = if 1 e m then ((e m) ^ q)⁻¹ else 0 q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qthis:Summable fun n 1 / (n + 1) ^ qtail: (a : ) (L : ), Filter.Tendsto a Filter.atTop (nhds L) Filter.Tendsto (fun n a n) Filter.atTop (nhds L)n:e: := { toFun := fun n n + 1, inj' := }Finset.Icc 1 n = Finset.map e (Finset.range n) q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qthis:Summable fun n 1 / (n + 1) ^ qtail: (a : ) (L : ), Filter.Tendsto a Filter.atTop (nhds L) Filter.Tendsto (fun n a n) Filter.atTop (nhds L)n:e: := { toFun := fun n n + 1, inj' := }x:x Finset.Icc 1 n x Finset.map e (Finset.range n); q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qthis:Summable fun n 1 / (n + 1) ^ qtail: (a : ) (L : ), Filter.Tendsto a Filter.atTop (nhds L) Filter.Tendsto (fun n a n) Filter.atTop (nhds L)n:e: := { toFun := fun n n + 1, inj' := }x:1 x x n a < n, a + 1 = x; q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qthis:Summable fun n 1 / (n + 1) ^ qtail: (a : ) (L : ), Filter.Tendsto a Filter.atTop (nhds L) Filter.Tendsto (fun n a n) Filter.atTop (nhds L)n:e: := { toFun := fun n n + 1, inj' := }x:1 x x n a < n, a + 1 = xq:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qthis:Summable fun n 1 / (n + 1) ^ qtail: (a : ) (L : ), Filter.Tendsto a Filter.atTop (nhds L) Filter.Tendsto (fun n a n) Filter.atTop (nhds L)n:e: := { toFun := fun n n + 1, inj' := }x:(∃ a < n, a + 1 = x) 1 x x n q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qthis:Summable fun n 1 / (n + 1) ^ qtail: (a : ) (L : ), Filter.Tendsto a Filter.atTop (nhds L) Filter.Tendsto (fun n a n) Filter.atTop (nhds L)n:e: := { toFun := fun n n + 1, inj' := }x:1 x x n a < n, a + 1 = x q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qthis:Summable fun n 1 / (n + 1) ^ qtail: (a : ) (L : ), Filter.Tendsto a Filter.atTop (nhds L) Filter.Tendsto (fun n a n) Filter.atTop (nhds L)n:e: := { toFun := fun n n + 1, inj' := }x:left✝:1 xright✝:x n a < n, a + 1 = x; q:hq:q > 1L: := ∑' (n : ), 1 / (n + 1) ^ qhL:L = riemannZeta qthis:Summable fun n 1 / (n + 1) ^ qtail: (a : ) (L : ), Filter.Tendsto a Filter.atTop (nhds L) Filter.Tendsto (fun n a n) Filter.atTop (nhds L)n:e: := { toFun := fun n n + 1, inj' := }x:left✝:1 xright✝:x n(x - 1).toNat < n (x - 1).toNat + 1 = x; All goals completed! 🐙 All goals completed! 🐙 All goals completed! 🐙
theorem Series.Basel_problem : (mk' (m := 1) fun n 1 / (n:) ^ 2 : Series).sum = Real.pi ^ 2 / 6 := (mk' fun n 1 / n ^ 2).sum = π ^ 2 / 6 have := zeta_eq (show 2 > 1 (mk' fun n 1 / n ^ 2).sum = π ^ 2 / 6 All goals completed! 🐙) this:(mk' fun n (n ^ 2)⁻¹).sum = π ^ 2 / 6(mk' fun n 1 / n ^ 2).sum = π ^ 2 / 6 All goals completed! 🐙

Exercise 7.3.3

theorem declaration uses `sorry`Series.nonneg_sum_zero {a: } (ha: (a:Series).nonneg) (hconv: (a:Series).converges) : (a:Series).sum = 0 n, a n = 0 := a: ha:{ m := 0, seq := fun n if n 0 then a n.toNat else 0, vanish := }.nonneghconv:{ m := 0, seq := fun n if n 0 then a n.toNat else 0, vanish := }.converges{ m := 0, seq := fun n if n 0 then a n.toNat else 0, vanish := }.sum = 0 (n : ), a n = 0 All goals completed! 🐙
end Chapter7