Аналіз I, Глава 7.2

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:

namespace Chapter7open BigOperators

Визначення 7.2.1 (Formal infinite series). This is similar to Chapter 6 sequence, but is manipulated differently. As with Chapter 5, we will start series from 0 by default.

@[ext] structure Series where m : seq : vanish : n < m, seq n = 0

Functions from ℕ to ℝ can be thought of as series.

instance Series.instCoe : Coe ( ) Series where coe := fun a { m := 0 seq := fun n if n 0 then a n.toNat else 0 vanish := a: n < 0, (if n 0 then a n.toNat else 0) = 0 a: n:hn:n < 0(if n 0 then a n.toNat else 0) = 0 All goals completed! 🐙 }
@[simp] theorem Series.eval_coe (a : ) (n : ) : (a : Series).seq n = a n := a: n:{ m := 0, seq := fun n => if n 0 then a n.toNat else 0, vanish := }.seq n = a n All goals completed! 🐙abbrev Series.mk' {m:} (a: { n // n m } ) : Series where m := m seq := fun n if h : n m then a n, h else 0 vanish := m:a:{ n // n m } n < m, (if h : n m then a n, h else 0) = 0 m:a:{ n // n m } n:hn:n < m(if h : n m then a n, h else 0) = 0 All goals completed! 🐙theorem Series.eval_mk' {m:} (a : { n // n m } ) {n : } (h:n m) : (Series.mk' a).seq n = a n, h := m:a:{ n // n m } n:h:n m(mk' a).seq n = a n, h All goals completed! 🐙

Визначення 7.2.2 (Convergence of series)

abbrev Series.partial (s : Series) (N:) : := n Finset.Icc s.m N, s.seq n
theorem Series.partial_succ (s : Series) {N:} (h: N s.m-1) : s.partial (N+1) = s.partial N + s.seq (N+1) := s:SeriesN:h:N s.m - 1s.partial (N + 1) = s.partial N + s.seq (N + 1) s:SeriesN:h:N s.m - 1 n Finset.Icc s.m (N + 1), s.seq n = n Finset.Icc s.m N, s.seq n + s.seq (N + 1) s:SeriesN:h:N s.m - 1 n Finset.Icc s.m (N + 1), s.seq n = s.seq (N + 1) + s.partial N have : N+1 Finset.Icc s.m N := s:SeriesN:h:N s.m - 1s.partial (N + 1) = s.partial N + s.seq (N + 1) All goals completed! 🐙 s:SeriesN:h:N s.m - 1this:N + 1 Finset.Icc s.m NFinset.Icc s.m (N + 1) = insert (N + 1) (Finset.Icc s.m N) s:SeriesN:h:N s.m - 1this:N + 1 Finset.Icc s.m Ns.m N + 1 All goals completed! 🐙abbrev Series.convergesTo (s : Series) (L:) : Prop := Filter.Tendsto (s.partial) Filter.atTop (nhds L)abbrev Series.converges (s : Series) : Prop := L, s.convergesTo Labbrev Series.diverges (s : Series) : Prop := ¬s.convergesopen Classical in noncomputable abbrev Series.sum (s : Series) : := if h : s.converges then h.choose else 0theorem Series.converges_of_convergesTo {s : Series} {L:} (h: s.convergesTo L) : s.converges := s:SeriesL:h:s.convergesTo Ls.converges All goals completed! 🐙

Ремарка 7.2.3

theorem Series.sum_of_converges {s : Series} {L:} (h: s.convergesTo L) : s.sum = L := s:SeriesL:h:s.convergesTo Ls.sum = L s:SeriesL:h:s.convergesTo LExists.choose = L All goals completed! 🐙
theorem Series.convergesTo_sum {s : Series} (h: s.converges) : s.convergesTo s.sum := s:Seriesh:s.convergess.convergesTo s.sum s:Seriesh:s.convergess.convergesTo (Exists.choose ) All goals completed! 🐙

Приклад 7.2.4

noncomputable abbrev Series.example_7_2_4 := mk' (m := 1) (fun n (2:)^(-n:))
theorem declaration uses 'sorry'Series.example_7_2_4a {N:} (hN: N 1) : example_7_2_4.partial N = 1 - (2:)^(-N) := N:hN:N 1example_7_2_4.partial N = 1 - 2 ^ (-N) All goals completed! 🐙theorem declaration uses 'sorry'Series.example_7_2_4b : example_7_2_4.convergesTo 1 := example_7_2_4.convergesTo 1 All goals completed! 🐙theorem declaration uses 'sorry'Series.example_7_2_4c : example_7_2_4.sum = 1 := example_7_2_4.sum = 1 All goals completed! 🐙noncomputable abbrev Series.example_7_2_4' := mk' (m := 1) (fun n (2:)^(n:))theorem declaration uses 'sorry'Series.example_7_2_4'a {N:} (hN: N 1) : example_7_2_4'.partial N = (2:)^(N+1) - 2 := N:hN:N 1example_7_2_4'.partial N = 2 ^ (N + 1) - 2 All goals completed! 🐙theorem declaration uses 'sorry'Series.example_7_2_4'b : example_7_2_4'.diverges := example_7_2_4'.diverges All goals completed! 🐙

Твердження 7.2.5 / Вправа 7.2.2

theorem declaration uses 'sorry'Series.converges_iff_tail_decay (s:Series) : s.converges ε > 0, N s.m, p N, q N, | n Finset.Icc p q, s.seq n| ε := s:Seriess.converges ε > 0, N s.m, p N, q N, | n Finset.Icc p q, s.seq n| ε All goals completed! 🐙

Наслідок 7.2.6 (Zero test) / Вправа 7.2.3

theorem declaration uses 'sorry'Series.decay_of_converges {s:Series} (h: s.converges) : Filter.Tendsto s.seq Filter.atTop (nhds 0) := s:Seriesh:s.convergesFilter.Tendsto s.seq Filter.atTop (nhds 0) All goals completed! 🐙
theorem declaration uses 'sorry'Series.diverges_of_nodecay {s:Series} (h: ¬ Filter.Tendsto s.seq Filter.atTop (nhds 0)) : s.diverges := s:Seriesh:¬Filter.Tendsto s.seq Filter.atTop (nhds 0)s.diverges All goals completed! 🐙

Приклад 7.2.7

theorem declaration uses 'sorry'Series.example_7_2_7 : ((fun n: (1:)):Series).diverges := { m := 0, seq := fun n => if n 0 then (fun n => 1) n.toNat else 0, vanish := }.diverges ¬Filter.Tendsto { m := 0, seq := fun n => if n 0 then (fun n => 1) n.toNat else 0, vanish := }.seq Filter.atTop (nhds 0) All goals completed! 🐙
theorem declaration uses 'sorry'Series.example_7_2_7' : ((fun n: (-1:)^n):Series).diverges := { m := 0, seq := fun n => if n 0 then (fun n => (-1) ^ n) n.toNat else 0, vanish := }.diverges ¬Filter.Tendsto { m := 0, seq := fun n => if n 0 then (fun n => (-1) ^ n) n.toNat else 0, vanish := }.seq Filter.atTop (nhds 0) All goals completed! 🐙

Визначення 7.2.8 (Absolute convergence)

abbrev Series.abs (s:Series) : Series := mk' (m:=s.m) (fun n |s.seq n|)
abbrev Series.absConverges (s:Series) : Prop := s.abs.convergesabbrev Series.condConverges (s:Series) : Prop := s.converges ¬ s.absConverges

Твердження 7.2.9 (Absolute convergence test) / Example 7.2.4

theorem declaration uses 'sorry'Series.converges_of_absConverges {s:Series} (h : s.absConverges) : s.converges := s:Seriesh:s.absConvergess.converges All goals completed! 🐙
theorem declaration uses 'sorry'Series.abs_le {s:Series} (h : s.absConverges) : |s.sum| s.abs.sum := s:Seriesh:s.absConverges|s.sum| s.abs.sum All goals completed! 🐙

Твердження 7.2.12 (Alternating series test)

theorem declaration uses 'sorry'Series.converges_of_alternating {m:} {a: { n // n m} } (ha: n, a n 0) (ha': Antitone a) : ((mk' (fun n (-1)^(n:) * a n)).converges Filter.Tendsto a Filter.atTop (nhds 0)) := m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone a(mk' fun n => (-1) ^ n * a n).converges Filter.Tendsto a Filter.atTop (nhds 0) -- цей доказ написан так, щоб співпадати із структурою орігінального тексту. m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone a(mk' fun n => (-1) ^ n * a n).converges Filter.Tendsto a Filter.atTop (nhds 0)m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone aFilter.Tendsto a Filter.atTop (nhds 0) (mk' fun n => (-1) ^ n * a n).converges m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone a(mk' fun n => (-1) ^ n * a n).converges Filter.Tendsto a Filter.atTop (nhds 0) m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:(mk' fun n => (-1) ^ n * a n).convergesFilter.Tendsto a Filter.atTop (nhds 0) m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto (mk' fun n => (-1) ^ n * a n).seq Filter.atTop (nhds 0)Filter.Tendsto a Filter.atTop (nhds 0) m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto (fun b => dist ((mk' fun n => (-1) ^ n * a n).seq b) 0) Filter.atTop (nhds 0)Filter.Tendsto (fun b => dist (a b) 0) Filter.atTop (nhds 0) m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto (fun x => dist ((mk' fun n => (-1) ^ n * a n).seq x) 0) Filter.atTop (nhds 0)Filter.Tendsto (fun b => dist (a b) 0) Filter.atTop (nhds 0) m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto (fun x => dist ((mk' fun n => (-1) ^ n * a n).seq x) 0) Filter.atTop (nhds 0)heq:{ n // n m } = (Set.Ici m)n:{ n // n m }dist (a n) 0 = dist ((mk' fun n => (-1) ^ n * a n).seq n) 0 All goals completed! 🐙 m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)(mk' fun n => (-1) ^ n * a n).converges m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0) L, Filter.Tendsto (mk' fun n => (-1) ^ n * a n).partial Filter.atTop (nhds L) m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a n L, Filter.Tendsto b.partial Filter.atTop (nhds L) m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partial L, Filter.Tendsto S Filter.atTop (nhds L) have claim0 {N:} (hN: N m) : S (N+1) = S N + (-1)^(N+1) * a N+1, m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialN:hN:N mN + 1 m All goals completed! 🐙 := m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone a(mk' fun n => (-1) ^ n * a n).converges Filter.Tendsto a Filter.atTop (nhds 0) have h1 : N+1 m := m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone a(mk' fun n => (-1) ^ n * a n).converges Filter.Tendsto a Filter.atTop (nhds 0) All goals completed! 🐙 m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialN:hN:N mh1:N + 1 m(-1) ^ (N + 1) * a N + 1, = b.seq (N + 1)m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialN:hN:N mh1:N + 1 mN b.m - 1 m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialN:hN:N mh1:N + 1 mN b.m - 1; All goals completed! 🐙 have claim1 {N:} (hN: N m) : S (N+2) = S N + (-1)^(N+1) * (a N+1, m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, N:hN:N mN + 1 m All goals completed! 🐙 - a N+2, m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, N:hN:N mN + 2 m All goals completed! 🐙 ) := calc S (N+2) = S N + (-1)^(N+1) * a N+1, m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, N:hN:N mN + 1 m All goals completed! 🐙 + (-1)^(N+2) * a N+2, m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, N:hN:N mN + 2 m All goals completed! 🐙 := m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, N:hN:N mS (N + 2) = S N + (-1) ^ (N + 1) * a N + 1, + (-1) ^ (N + 2) * a N + 2, have hN2 : N+2 = N+1+1 := m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, N:hN:N mS (N + 2) = S N + (-1) ^ (N + 1) * a N + 1, + (-1) ^ (N + 2) * a N + 2, All goals completed! 🐙 m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, N:hN:N mhN2:N + 2 = N + 1 + 1S (N + 1 + 1) = S (N + 1) + (-1) ^ (N + 1 + 1) * a N + 1 + 1, exact claim0 (show N+1 m m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, N:hN:N mS (N + 2) = S N + (-1) ^ (N + 1) * a N + 1, + (-1) ^ (N + 2) * a N + 2, All goals completed! 🐙) _ = S N + (-1)^(N+1) * a N+1, m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, N:hN:N mN + 1 m All goals completed! 🐙 + (-1) * (-1)^(N+1) * a N+2, m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, N:hN:N mN + 2 m All goals completed! 🐙 := m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, N:hN:N mS N + (-1) ^ (N + 1) * a N + 1, + (-1) ^ (N + 2) * a N + 2, = S N + (-1) ^ (N + 1) * a N + 1, + -1 * (-1) ^ (N + 1) * a N + 2, m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, N:hN:N m(-1) ^ (N + 2) = -1 * (-1) ^ (N + 1) m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, N:hN:N m(-1) ^ (N + 2) = (-1) ^ (1 + (N + 1)) m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, N:hN:N mN + 2 = 1 + (N + 1); All goals completed! 🐙 _ = _ := m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, N:hN:N mS N + (-1) ^ (N + 1) * a N + 1, + -1 * (-1) ^ (N + 1) * a N + 2, = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, ) All goals completed! 🐙 have claim2 {N:} (hN: N m) (h': Odd N) : S (N+2) S N := m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone a(mk' fun n => (-1) ^ n * a n).converges Filter.Tendsto a Filter.atTop (nhds 0) m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, claim1: {N : } (hN : N m), S (N + 2) = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, )N:hN:N mh':Odd NS N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, ) S N m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, claim1: {N : } (hN : N m), S (N + 2) = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, )N:hN:N mh':Odd Na N + 2, a N + 1, m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, claim1: {N : } (hN : N m), S (N + 2) = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, )N:hN:N mh':Odd NN + 1, N + 2, All goals completed! 🐙 have claim3 {N:} (hN: N m) (h': Even N) : S (N+2) S N := m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone a(mk' fun n => (-1) ^ n * a n).converges Filter.Tendsto a Filter.atTop (nhds 0) m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, claim1: {N : } (hN : N m), S (N + 2) = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, )claim2: {N : }, N m Odd N S (N + 2) S NN:hN:N mh':Even NS N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, ) S N m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, claim1: {N : } (hN : N m), S (N + 2) = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, )claim2: {N : }, N m Odd N S (N + 2) S NN:hN:N mh':Even Na N + 2, a N + 1, m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, claim1: {N : } (hN : N m), S (N + 2) = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, )claim2: {N : }, N m Odd N S (N + 2) S NN:hN:N mh':Even NN + 1, N + 2, All goals completed! 🐙 have why1 {N:} (hN: N m) (h': Even N) (k:) : S (N+2*k) S N := m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone a(mk' fun n => (-1) ^ n * a n).converges Filter.Tendsto a Filter.atTop (nhds 0) All goals completed! 🐙 have why2 {N:} (hN: N m) (h': Even N) (k:) : S (N+2*k+1) S N - a N+1, m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, claim1: {N : } (hN : N m), S (N + 2) = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, )claim2: {N : }, N m Odd N S (N + 2) S Nclaim3: {N : }, N m Even N S (N + 2) S Nwhy1: {N : }, N m Even N (k : ), S (N + 2 * k) S NN:hN:N mh':Even Nk:N + 1 m All goals completed! 🐙 := m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone a(mk' fun n => (-1) ^ n * a n).converges Filter.Tendsto a Filter.atTop (nhds 0) All goals completed! 🐙 have why3 {N:} (hN: N m) (h': Even N) (k:) : S (N+2*k+1) S (N+2*k) := m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone a(mk' fun n => (-1) ^ n * a n).converges Filter.Tendsto a Filter.atTop (nhds 0) All goals completed! 🐙 have claim4 {N:} (hN: N m) (h': Even N) (k:) : S N - a N+1, m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, claim1: {N : } (hN : N m), S (N + 2) = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, )claim2: {N : }, N m Odd N S (N + 2) S Nclaim3: {N : }, N m Even N S (N + 2) S Nwhy1: {N : }, N m Even N (k : ), S (N + 2 * k) S Nwhy2: {N : } (hN : N m), Even N (k : ), S (N + 2 * k + 1) S N - a N + 1, why3: {N : }, N m Even N (k : ), S (N + 2 * k + 1) S (N + 2 * k)N:hN:N mh':Even Nk:N + 1 m All goals completed! 🐙 S (N + 2*k + 1) S (N + 2*k + 1) S (N + 2*k) S (N + 2*k) S N := ge_iff_le.mp (why2 hN h' k), why3 hN h' k, why1 hN h' k have why4 {N n:} (hN: N m) (h': Even N) (hn: n N) : S N - a N+1, m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, claim1: {N : } (hN : N m), S (N + 2) = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, )claim2: {N : }, N m Odd N S (N + 2) S Nclaim3: {N : }, N m Even N S (N + 2) S Nwhy1: {N : }, N m Even N (k : ), S (N + 2 * k) S Nwhy2: {N : } (hN : N m), Even N (k : ), S (N + 2 * k + 1) S N - a N + 1, why3: {N : }, N m Even N (k : ), S (N + 2 * k + 1) S (N + 2 * k)claim4: {N : } (hN : N m), Even N (k : ), S N - a N + 1, S (N + 2 * k + 1) S (N + 2 * k + 1) S (N + 2 * k) S (N + 2 * k) S NN:n:hN:N mh':Even Nhn:n NN + 1 m All goals completed! 🐙 S n S n S N := m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone a(mk' fun n => (-1) ^ n * a n).converges Filter.Tendsto a Filter.atTop (nhds 0) All goals completed! 🐙 have why5 {ε:} (: ε > 0) : N, n N, m N, |S n - S m| ε := m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone a(mk' fun n => (-1) ^ n * a n).converges Filter.Tendsto a Filter.atTop (nhds 0) All goals completed! 🐙 have : CauchySeq S := m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone a(mk' fun n => (-1) ^ n * a n).converges Filter.Tendsto a Filter.atTop (nhds 0) m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, claim1: {N : } (hN : N m), S (N + 2) = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, )claim2: {N : }, N m Odd N S (N + 2) S Nclaim3: {N : }, N m Even N S (N + 2) S Nwhy1: {N : }, N m Even N (k : ), S (N + 2 * k) S Nwhy2: {N : } (hN : N m), Even N (k : ), S (N + 2 * k + 1) S N - a N + 1, why3: {N : }, N m Even N (k : ), S (N + 2 * k + 1) S (N + 2 * k)claim4: {N : } (hN : N m), Even N (k : ), S N - a N + 1, S (N + 2 * k + 1) S (N + 2 * k + 1) S (N + 2 * k) S (N + 2 * k) S Nwhy4: {N n : } (hN : N m), Even N n N S N - a N + 1, S n S n S Nwhy5: {ε : }, ε > 0 N, n N, m N, |S n - S m| ε ε > 0, N, n N, dist (S n) (S N) < ε m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, claim1: {N : } (hN : N m), S (N + 2) = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, )claim2: {N : }, N m Odd N S (N + 2) S Nclaim3: {N : }, N m Even N S (N + 2) S Nwhy1: {N : }, N m Even N (k : ), S (N + 2 * k) S Nwhy2: {N : } (hN : N m), Even N (k : ), S (N + 2 * k + 1) S N - a N + 1, why3: {N : }, N m Even N (k : ), S (N + 2 * k + 1) S (N + 2 * k)claim4: {N : } (hN : N m), Even N (k : ), S N - a N + 1, S (N + 2 * k + 1) S (N + 2 * k + 1) S (N + 2 * k) S (N + 2 * k) S Nwhy4: {N n : } (hN : N m), Even N n N S N - a N + 1, S n S n S Nwhy5: {ε : }, ε > 0 N, n N, m N, |S n - S m| εε::ε > 0 N, n N, dist (S n) (S N) < ε m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, claim1: {N : } (hN : N m), S (N + 2) = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, )claim2: {N : }, N m Odd N S (N + 2) S Nclaim3: {N : }, N m Even N S (N + 2) S Nwhy1: {N : }, N m Even N (k : ), S (N + 2 * k) S Nwhy2: {N : } (hN : N m), Even N (k : ), S (N + 2 * k + 1) S N - a N + 1, why3: {N : }, N m Even N (k : ), S (N + 2 * k + 1) S (N + 2 * k)claim4: {N : } (hN : N m), Even N (k : ), S N - a N + 1, S (N + 2 * k + 1) S (N + 2 * k + 1) S (N + 2 * k) S (N + 2 * k) S Nwhy4: {N n : } (hN : N m), Even N n N S N - a N + 1, S n S n S Nwhy5: {ε : }, ε > 0 N, n N, m N, |S n - S m| εε::ε > 0N:hN: n N, m N, |S n - S m| ε / 2 N, n N, dist (S n) (S N) < ε m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, claim1: {N : } (hN : N m), S (N + 2) = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, )claim2: {N : }, N m Odd N S (N + 2) S Nclaim3: {N : }, N m Even N S (N + 2) S Nwhy1: {N : }, N m Even N (k : ), S (N + 2 * k) S Nwhy2: {N : } (hN : N m), Even N (k : ), S (N + 2 * k + 1) S N - a N + 1, why3: {N : }, N m Even N (k : ), S (N + 2 * k + 1) S (N + 2 * k)claim4: {N : } (hN : N m), Even N (k : ), S N - a N + 1, S (N + 2 * k + 1) S (N + 2 * k + 1) S (N + 2 * k) S (N + 2 * k) S Nwhy4: {N n : } (hN : N m), Even N n N S N - a N + 1, S n S n S Nwhy5: {ε : }, ε > 0 N, n N, m N, |S n - S m| εε::ε > 0N:hN: n N, m N, |S n - S m| ε / 2 n N, dist (S n) (S N) < ε m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, claim1: {N : } (hN : N m), S (N + 2) = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, )claim2: {N : }, N m Odd N S (N + 2) S Nclaim3: {N : }, N m Even N S (N + 2) S Nwhy1: {N : }, N m Even N (k : ), S (N + 2 * k) S Nwhy2: {N : } (hN : N m), Even N (k : ), S (N + 2 * k + 1) S N - a N + 1, why3: {N : }, N m Even N (k : ), S (N + 2 * k + 1) S (N + 2 * k)claim4: {N : } (hN : N m), Even N (k : ), S N - a N + 1, S (N + 2 * k + 1) S (N + 2 * k + 1) S (N + 2 * k) S (N + 2 * k) S Nwhy4: {N n : } (hN : N m), Even N n N S N - a N + 1, S n S n S Nwhy5: {ε : }, ε > 0 N, n N, m N, |S n - S m| εε::ε > 0N:hN: n N, m N, |S n - S m| ε / 2n:hn:n Ndist (S n) (S N) < ε m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, claim1: {N : } (hN : N m), S (N + 2) = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, )claim2: {N : }, N m Odd N S (N + 2) S Nclaim3: {N : }, N m Even N S (N + 2) S Nwhy1: {N : }, N m Even N (k : ), S (N + 2 * k) S Nwhy2: {N : } (hN : N m), Even N (k : ), S (N + 2 * k + 1) S N - a N + 1, why3: {N : }, N m Even N (k : ), S (N + 2 * k + 1) S (N + 2 * k)claim4: {N : } (hN : N m), Even N (k : ), S N - a N + 1, S (N + 2 * k + 1) S (N + 2 * k + 1) S (N + 2 * k) S (N + 2 * k) S Nwhy4: {N n : } (hN : N m), Even N n N S N - a N + 1, S n S n S Nwhy5: {ε : }, ε > 0 N, n N, m N, |S n - S m| εε::ε > 0N:n:hn:n NhN:|S n - S N| ε / 2dist (S n) (S N) < ε m:a:{ n // n m } ha: (n : { n // n m }), a n 0ha':Antitone ah:Filter.Tendsto a Filter.atTop (nhds 0)b:Series := mk' fun n => (-1) ^ n * a nS: := b.partialclaim0: {N : } (hN : N m), S (N + 1) = S N + (-1) ^ (N + 1) * a N + 1, claim1: {N : } (hN : N m), S (N + 2) = S N + (-1) ^ (N + 1) * (a N + 1, - a N + 2, )claim2: {N : }, N m Odd N S (N + 2) S Nclaim3: {N : }, N m Even N S (N + 2) S Nwhy1: {N : }, N m Even N (k : ), S (N + 2 * k) S Nwhy2: {N : } (hN : N m), Even N (k : ), S (N + 2 * k + 1) S N - a N + 1, why3: {N : }, N m Even N (k : ), S (N + 2 * k + 1) S (N + 2 * k)claim4: {N : } (hN : N m), Even N (k : ), S N - a N + 1, S (N + 2 * k + 1) S (N + 2 * k + 1) S (N + 2 * k) S (N + 2 * k) S Nwhy4: {N n : } (hN : N m), Even N n N S N - a N + 1, S n S n S Nwhy5: {ε : }, ε > 0 N, n N, m N, |S n - S m| εε::ε > 0N:n:hn:n NhN:|S n - S N| ε / 2|S n - S N| < ε; All goals completed! 🐙 All goals completed! 🐙

Приклад 7.2.13

noncomputable abbrev Series.example_7_2_13 : Series := (mk' (m:=1) (fun n (-1:)^(n:) / (n:)))
theorem declaration uses 'sorry'Series.example_7_2_13a : example_7_2_13.converges := example_7_2_13.converges All goals completed! 🐙theorem declaration uses 'sorry'Series.example_7_2_13b : ¬ example_7_2_13.absConverges := ¬example_7_2_13.absConverges All goals completed! 🐙theorem declaration uses 'sorry'Series.example_7_2_13c : example_7_2_13.condConverges := example_7_2_13.condConverges All goals completed! 🐙instance Series.inst_add : Add Series where add a b := { m := max a.m b.m seq := fun (n:) if n max a.m b.m then a.seq n + b.seq n else 0 vanish := a:Seriesb:Series n < max a.m b.m, (if n max a.m b.m then a.seq n + b.seq n else 0) = 0 a:Seriesb:Seriesn:hn:n < max a.m b.m(if n max a.m b.m then a.seq n + b.seq n else 0) = 0 a:Seriesb:Seriesn:hn:¬n max a.m b.m(if n max a.m b.m then a.seq n + b.seq n else 0) = 0 All goals completed! 🐙 }

Твердження 7.2.14 (a) (Series laws) / Вправа 7.2.5

theorem declaration uses 'sorry'Series.add {s t:Series} (hs: s.converges) (ht: t.converges) : (s + t).converges (s+t).sum = s.sum + t.sum := s:Seriest:Serieshs:s.convergesht:t.converges(s + t).converges (s + t).sum = s.sum + t.sum All goals completed! 🐙
instance Series.inst.smul : SMul Series where smul c s := { m := s.m seq := fun n if n s.m then c * s.seq n else 0 vanish := c:s:Series n < s.m, (if n s.m then c * s.seq n else 0) = 0 c:s:Seriesn:hn:n < s.m(if n s.m then c * s.seq n else 0) = 0 c:s:Seriesn:hn:¬n s.m(if n s.m then c * s.seq n else 0) = 0 All goals completed! 🐙 }

Твердження 7.2.14 (b) (Series laws) / Вправа 7.2.5

theorem declaration uses 'sorry'Series.smul {c:} {s:Series} (hs: s.converges) : (c s).converges (c s).sum = c * s.sum := c:s:Serieshs:s.converges(c s).converges (c s).sum = c * s.sum All goals completed! 🐙
abbrev Series.from (s:Series) (m₁:) : Series := mk' (m := max s.m m₁) (fun n s.seq (n:))

Твердження 7.2.14 (c) (Series laws) / Вправа 7.2.5

theorem declaration uses 'sorry'Series.converges_from (s:Series) (k:) : s.converges (s.from (s.m+k)).converges := s:Seriesk:s.converges (s.from (s.m + k)).converges All goals completed! 🐙
theorem declaration uses 'sorry'Series.sum_from {s:Series} (k:) (h: s.converges) : s.sum = n Finset.Ico s.m (s.m+k), s.seq n + (s.from (s.m+k)).sum := s:Seriesk:h:s.convergess.sum = n Finset.Ico s.m (s.m + k), s.seq n + (s.from (s.m + k)).sum All goals completed! 🐙

Твердження 7.2.14 (d) (Series laws) / Вправа 7.2.5

theorem declaration uses 'sorry'Series.shift {s:Series} {x:} (h: s.convergesTo x) (L:) : (mk' (m := s.m + L) (fun n s.seq (n - L))).convergesTo x := s:Seriesx:h:s.convergesTo xL:(mk' fun n => s.seq (n - L)).convergesTo x All goals completed! 🐙

Лема 7.2.15 (telescoping series) / Вправа 7.2.6

theorem declaration uses 'sorry'Series.telescope {a: } (ha: Filter.Tendsto a Filter.atTop (nhds 0)) : ((fun n: a (n+1) - a n):Series).convergesTo (a 0) := a: ha:Filter.Tendsto a Filter.atTop (nhds 0){ m := 0, seq := fun n => if n 0 then (fun n => a (n + 1) - a n) n.toNat else 0, vanish := }.convergesTo (a 0) All goals completed! 🐙
/- Вправа 7.2.1 -/ def declaration uses 'sorry'Series.exercise_7_2_1_convergent : Decidable ( (mk' (m := 1) (fun n (-1:)^(n:))).converges ) := Decidable (mk' fun n => (-1) ^ n).converges -- The first line of this proof should be `apply isTrue` or `apply isFalse`. All goals completed! 🐙end Chapter7