Analysis I, Section 6.1: Convergence and limit laws

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:

Real.dist_eq (x y : ) : dist x y = |x - y|
abbrev Real.Close (ε x y : ) : Prop := dist x y ε

Definition 6.1.2 (ε-close). This is similar to the previous notion of ε-closeness, but where all quantities are real instead of rational.

theorem Real.close_def (ε x y : ) : ε.Close x y dist x y ε := ε:x:y:ε.Close x y dist x y ε All goals completed! 🐙
namespace Chapter6

Definition 6.1.3 (Sequence). This is similar to the Chapter 5 sequence, except that now the sequence is real-valued. As with Chapter 5, we start sequences from 0 by default.

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

Sequences can be thought of as functions from ℤ to ℝ.

instance Sequence.instCoeFun : CoeFun Sequence (fun _ ) where coe a := a.seq
@[coe] abbrev Sequence.ofNatFun (a: ) : Sequence := { m := 0 seq n := if n 0 then a n.toNat else 0 vanish := a: n < 0, (if n 0 then a n.toNat else 0) = 0 All goals completed! 🐙 }

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

instance Sequence.instCoe : Coe ( ) Sequence where coe := ofNatFun
abbrev Sequence.mk' (m:) (a: { n // n m } ) : Sequence where m := m seq 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 All goals completed! 🐙lemma Sequence.eval_mk {n m:} (a: { n // n m } ) (h: n m) : (Sequence.mk' m a) n = a n, h := n:m:a:{ n // n m } h:n m(mk' m a).seq n = a n, h All goals completed! 🐙@[simp] lemma Sequence.eval_coe (n:) (a: ) : (a:Sequence) n = a n := n:a: (↑a).seq n = a n All goals completed! 🐙

a.from n₁ starts from Unknown identifier `n₁`n₁. It is intended for use when Unknown identifier `n₁`sorry sorry : Propn₁ Unknown identifier `n₀`n₀, but returns the "junk" value of the original sequence Unknown identifier `a`a otherwise.

abbrev Sequence.from (a:Sequence) (m₁:) : Sequence := mk' (max a.m m₁) (a ·)
lemma Sequence.from_eval (a:Sequence) {m₁ n:} (hn: n m₁) : (a.from m₁) n = a n := a:Sequencem₁:n:hn:n m₁(a.from m₁).seq n = a.seq n a:Sequencem₁:n:hn:n m₁n < a.m 0 = a.seq n; a:Sequencem₁:n:hn:n m₁a✝:n < a.m0 = a.seq n; a:Sequencem₁:n:hn:n m₁a✝:n < a.ma.seq n = 0; All goals completed! 🐙end Chapter6

Definition 6.1.3 (ε-steady)

abbrev Real.Steady (ε: ) (a: Chapter6.Sequence) : Prop := n a.m, m a.m, ε.Close (a n) (a m)

Definition 6.1.3 (ε-steady)

lemma Real.steady_def (ε: ) (a: Chapter6.Sequence) : ε.Steady a n a.m, m a.m, ε.Close (a n) (a m) := ε:a:Chapter6.Sequenceε.Steady a n a.m, m a.m, ε.Close (a.seq n) (a.seq m) All goals completed! 🐙

Definition 6.1.3 (Eventually ε-steady)

abbrev Real.EventuallySteady (ε: ) (a: Chapter6.Sequence) : Prop := N a.m, ε.Steady (a.from N)

Definition 6.1.3 (Eventually ε-steady)

lemma Real.eventuallySteady_def (ε: ) (a: Chapter6.Sequence) : ε.EventuallySteady a N, (N a.m) ε.Steady (a.from N) := ε:a:Chapter6.Sequenceε.EventuallySteady a N a.m, ε.Steady (a.from N) All goals completed! 🐙

For fixed s, the function ε ↦ ε.Steady s is monotone

theorem Real.Steady.mono {a: Chapter6.Sequence} {ε₁ ε₂: } (: ε₁ ε₂) (hsteady: ε₁.Steady a) : ε₂.Steady a := a:Chapter6.Sequenceε₁:ε₂::ε₁ ε₂hsteady:ε₁.Steady aε₂.Steady a All goals completed! 🐙

For fixed s, the function ε ↦ ε.EventuallySteady s is monotone

theorem Real.EventuallySteady.mono {a: Chapter6.Sequence} {ε₁ ε₂: } (: ε₁ ε₂) (hsteady: ε₁.EventuallySteady a) : ε₂.EventuallySteady a := a:Chapter6.Sequenceε₁:ε₂::ε₁ ε₂hsteady:ε₁.EventuallySteady aε₂.EventuallySteady a a:Chapter6.Sequenceε₁:ε₂::ε₁ ε₂hsteady:ε₁.EventuallySteady aN✝:p✝:N✝ a.mthis:ε₁.Steady (a.from N✝)ε₂.Steady (a.from N✝); All goals completed! 🐙
namespace Chapter6

Definition 6.1.3 (Cauchy sequence)

abbrev Sequence.IsCauchy (a:Sequence) : Prop := ε > (0:), ε.EventuallySteady a

Definition 6.1.3 (Cauchy sequence)

lemma Sequence.isCauchy_def (a:Sequence) : a.IsCauchy ε > (0:), ε.EventuallySteady a := a:Sequencea.IsCauchy ε > 0, ε.EventuallySteady a All goals completed! 🐙

This is almost the same as Chapter5.Sequence.IsCauchy.coe

lemma Sequence.IsCauchy.coe (a: ) : (a:Sequence).IsCauchy ε > 0, N, j N, k N, dist (a j) (a k) ε := a: (↑a).IsCauchy ε > 0, N, j N, k N, dist (a j) (a k) ε a: ε::ε > 0ε.EventuallySteady a N, j N, k N, dist (a j) (a k) ε a: ε::ε > 0ε.EventuallySteady a N, j N, k N, dist (a j) (a k) εa: ε::ε > 0(∃ N, j N, k N, dist (a j) (a k) ε) ε.EventuallySteady a a: ε::ε > 0ε.EventuallySteady a N, j N, k N, dist (a j) (a k) ε a: ε::ε > 0N:hN:N (↑a).mh':ε.Steady ((↑a).from N) N, j N, k N, dist (a j) (a k) ε a: ε::ε > 0N:h':ε.Steady ((↑a).from N) N, j N, k N, dist (a j) (a k) ε; a: ε::ε > 0N:h':ε.Steady ((↑a).from N) j N, k N, dist (a j) (a k) ε a: ε::ε > 0N:h':ε.Steady ((↑a).from N)j:hj:j Nk:hk:k Ndist (a j) (a k) ε a: ε::ε > 0N:j:hj:j Nk:hk:k Nh': (n : ), N n (m : ), N m dist (if N n then if 0 n then a n.toNat else 0 else 0) (if N m then if 0 m then a m.toNat else 0 else 0) εdist (a j) (a k) ε a: ε::ε > 0N:j:hj:j Nk:hk:k Nh': (n : ), N n (m : ), N m dist (if N n then if 0 n then a n.toNat else 0 else 0) (if N m then if 0 m then a m.toNat else 0 else 0) εN ja: ε::ε > 0N:j:hj:j Nk:hk:k Nh': (n : ), N n (m : ), N m dist (if N n then if 0 n then a n.toNat else 0 else 0) (if N m then if 0 m then a m.toNat else 0 else 0) εN ka: ε::ε > 0N:j:hj:j Nk:hk:k Nh':dist (if N j then if 0 j then a (↑j).toNat else 0 else 0) (if N k then if 0 k then a (↑k).toNat else 0 else 0) εdist (a j) (a k) ε a: ε::ε > 0N:j:hj:j Nk:hk:k Nh': (n : ), N n (m : ), N m dist (if N n then if 0 n then a n.toNat else 0 else 0) (if N m then if 0 m then a m.toNat else 0 else 0) εN ja: ε::ε > 0N:j:hj:j Nk:hk:k Nh': (n : ), N n (m : ), N m dist (if N n then if 0 n then a n.toNat else 0 else 0) (if N m then if 0 m then a m.toNat else 0 else 0) εN ka: ε::ε > 0N:j:hj:j Nk:hk:k Nh':dist (if N j then if 0 j then a (↑j).toNat else 0 else 0) (if N k then if 0 k then a (↑k).toNat else 0 else 0) εdist (a j) (a k) ε try All goals completed! 🐙 All goals completed! 🐙 a: ε::ε > 0N:h': j N, k N, dist (a j) (a k) εε.EventuallySteady a; refine max N 0, a: ε::ε > 0N:h': j N, k N, dist (a j) (a k) εmax (↑N) 0 (↑a).m All goals completed! 🐙, ?_ a: ε::ε > 0N:h': j N, k N, dist (a j) (a k) εn:hn:n ((↑a).from (max (↑N) 0)).mm:hm:m ((↑a).from (max (↑N) 0)).mε.Close (((↑a).from (max (↑N) 0)).seq n) (((↑a).from (max (↑N) 0)).seq m); a: ε::ε > 0N:h': j N, k N, dist (a j) (a k) εn:m:hn:N nhm:N mε.Close (((↑a).from (max (↑N) 0)).seq n) (((↑a).from (max (↑N) 0)).seq m) have npos : 0 n := a: (↑a).IsCauchy ε > 0, N, j N, k N, dist (a j) (a k) ε All goals completed! 🐙 have mpos : 0 m := a: (↑a).IsCauchy ε > 0, N, j N, k N, dist (a j) (a k) ε All goals completed! 🐙 a: ε::ε > 0N:h': j N, k N, dist (a j) (a k) εn:m:hn:N nhm:N mnpos:0 _fvar.52079 := ?_mvar.58255mpos:0 _fvar.52085 := ?_mvar.58402dist (a n.toNat) (a m.toNat) ε a: ε::ε > 0N:h': j N, k N, dist (a j) (a k) εm:hm:N mmpos:0 _fvar.52085 := ?_mvar.58402n:hn:N ndist (a (↑n).toNat) (a m.toNat) ε a: ε::ε > 0N:h': j N, k N, dist (a j) (a k) εn:hn:N nm:hm:N mdist (a (↑n).toNat) (a (↑m).toNat) ε a: ε::ε > 0N:h': j N, k N, dist (a j) (a k) εn:hn:N nm:hm:N mn Na: ε::ε > 0N:h': j N, k N, dist (a j) (a k) εn:hn:N nm:hm:N mm Na: ε::ε > 0N:n:hn:N nm:hm:N mh':dist (a n) (a m) εdist (a (↑n).toNat) (a (↑m).toNat) ε a: ε::ε > 0N:h': j N, k N, dist (a j) (a k) εn:hn:N nm:hm:N mn Na: ε::ε > 0N:h': j N, k N, dist (a j) (a k) εn:hn:N nm:hm:N mm Na: ε::ε > 0N:n:hn:N nm:hm:N mh':dist (a n) (a m) εdist (a (↑n).toNat) (a (↑m).toNat) ε try All goals completed! 🐙
lemma Sequence.IsCauchy.mk {n₀:} (a: {n // n n₀} ) : (mk' n₀ a).IsCauchy ε > 0, N n₀, j N, k N, dist (mk' n₀ a j) (mk' n₀ a k) ε := n₀:a:{ n // n n₀ } (mk' n₀ a).IsCauchy ε > 0, N n₀, j N, k N, dist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) ε n₀:a:{ n // n n₀ } ε::ε > 0ε.EventuallySteady (mk' n₀ a) N n₀, j N, k N, dist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) ε n₀:a:{ n // n n₀ } ε::ε > 0ε.EventuallySteady (mk' n₀ a) N n₀, j N, k N, dist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) εn₀:a:{ n // n n₀ } ε::ε > 0(∃ N n₀, j N, k N, dist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) ε) ε.EventuallySteady (mk' n₀ a) n₀:a:{ n // n n₀ } ε::ε > 0ε.EventuallySteady (mk' n₀ a) N n₀, j N, k N, dist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) ε n₀:a:{ n // n n₀ } ε::ε > 0N:hN:N (mk' n₀ a).mh':ε.Steady ((mk' n₀ a).from N) N n₀, j N, k N, dist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) ε; n₀:a:{ n // n n₀ } ε::ε > 0N:hN:N (mk' n₀ a).mh':ε.Steady ((mk' n₀ a).from N) j N, k N, dist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) ε n₀:a:{ n // n n₀ } ε::ε > 0N:hN:N n₀h':ε.Steady ((mk' n₀ a).from N) j N, k N, dist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) ε n₀:a:{ n // n n₀ } ε::ε > 0N:hN:N n₀h':ε.Steady ((mk' n₀ a).from N)j:hj:j Nk:hk:k Ndist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) ε n₀:a:{ n // n n₀ } ε::ε > 0N:hN:N n₀j:hj:j Nk:hk:k Nh': n N, m N, ε.Close (if h : n N then if h_1 : n n₀ then a n, else 0 else 0) (if h : m N then if h_1 : m n₀ then a m, else 0 else 0)dist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) ε n₀:a:{ n // n n₀ } ε::ε > 0N:hN:N n₀j:hj:j Nk:hk:k Nh': n N, m N, ε.Close (if h : n N then if h_1 : n n₀ then a n, else 0 else 0) (if h : m N then if h_1 : m n₀ then a m, else 0 else 0)j Nn₀:a:{ n // n n₀ } ε::ε > 0N:hN:N n₀j:hj:j Nk:hk:k Nh': n N, m N, ε.Close (if h : n N then if h_1 : n n₀ then a n, else 0 else 0) (if h : m N then if h_1 : m n₀ then a m, else 0 else 0)k Nn₀:a:{ n // n n₀ } ε::ε > 0N:hN:N n₀j:hj:j Nk:hk:k Nh':ε.Close (if h : j N then if h_1 : j n₀ then a j, else 0 else 0) (if h : k N then if h_1 : k n₀ then a k, else 0 else 0)dist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) ε n₀:a:{ n // n n₀ } ε::ε > 0N:hN:N n₀j:hj:j Nk:hk:k Nh': n N, m N, ε.Close (if h : n N then if h_1 : n n₀ then a n, else 0 else 0) (if h : m N then if h_1 : m n₀ then a m, else 0 else 0)j Nn₀:a:{ n // n n₀ } ε::ε > 0N:hN:N n₀j:hj:j Nk:hk:k Nh': n N, m N, ε.Close (if h : n N then if h_1 : n n₀ then a n, else 0 else 0) (if h : m N then if h_1 : m n₀ then a m, else 0 else 0)k Nn₀:a:{ n // n n₀ } ε::ε > 0N:hN:N n₀j:hj:j Nk:hk:k Nh':ε.Close (if h : j N then if h_1 : j n₀ then a j, else 0 else 0) (if h : k N then if h_1 : k n₀ then a k, else 0 else 0)dist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) ε try All goals completed! 🐙 simp_all [show n₀ j n₀:a:{ n // n n₀ } (mk' n₀ a).IsCauchy ε > 0, N n₀, j N, k N, dist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) ε All goals completed! 🐙, show n₀ k n₀:a:{ n // n n₀ } (mk' n₀ a).IsCauchy ε > 0, N n₀, j N, k N, dist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) ε All goals completed! 🐙] n₀:a:{ n // n n₀ } ε::ε > 0N:left✝:N n₀right✝: j N, k N, dist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) εε.EventuallySteady (mk' n₀ a); n₀:a:{ n // n n₀ } ε::ε > 0N:left✝:N n₀right✝: j N, k N, dist ((mk' n₀ a).seq j) ((mk' n₀ a).seq k) εmax n₀ N (mk' n₀ a).m ε.Steady ((mk' n₀ a).from (max n₀ N)); All goals completed! 🐙@[coe] abbrev Sequence.ofChapter5Sequence (a: Chapter5.Sequence) : Sequence := { m := a.n₀ seq n := a n vanish n hn := a:Chapter5.Sequencen:hn:n < a.n₀(a.seq n) = 0 All goals completed! 🐙 }instance Chapter5.Sequence.inst_coe_sequence : Coe Chapter5.Sequence Sequence where coe := Sequence.ofChapter5Sequence@[simp] theorem Chapter5.coe_sequence_eval (a: Chapter5.Sequence) (n:) : (a:Sequence) n = (a n:) := rfltheorem declaration uses 'sorry'Sequence.is_steady_of_rat (ε:) (a: Chapter5.Sequence) : ε.Steady a (ε:).Steady (a:Sequence) := ε:a:Chapter5.Sequenceε.Steady a (↑ε).Steady a All goals completed! 🐙theorem declaration uses 'sorry'Sequence.is_eventuallySteady_of_rat (ε:) (a: Chapter5.Sequence) : ε.EventuallySteady a (ε:).EventuallySteady (a:Sequence) := ε:a:Chapter5.Sequenceε.EventuallySteady a (↑ε).EventuallySteady a All goals completed! 🐙

Proposition 6.1.4

theorem Sequence.isCauchy_of_rat (a: Chapter5.Sequence) : a.IsCauchy (a:Sequence).IsCauchy := a:Chapter5.Sequencea.IsCauchy (↑a).IsCauchy -- This proof is written to follow the structure of the original text. a:Chapter5.Sequencea.IsCauchy (↑a).IsCauchya:Chapter5.Sequence(↑a).IsCauchy a.IsCauchy a:Chapter5.Sequence(↑a).IsCauchy a.IsCauchya:Chapter5.Sequencea.IsCauchy (↑a).IsCauchy a:Chapter5.Sequence(↑a).IsCauchy a.IsCauchy a:Chapter5.Sequenceh:(↑a).IsCauchya.IsCauchy; a:Chapter5.Sequenceh: ε > 0, ε.EventuallySteady aa.IsCauchy a:Chapter5.Sequenceh: ε > 0, ε.EventuallySteady a ε > 0, ε.EventuallySteady a a:Chapter5.Sequenceh: ε > 0, ε.EventuallySteady aε::ε > 0ε.EventuallySteady a specialize h ε (a:Chapter5.Sequenceh: ε > 0, ε.EventuallySteady aε::ε > 0ε > 0 All goals completed! 🐙) rwa [is_eventuallySteady_of_rata:Chapter5.Sequenceε::ε > 0h:(↑ε).EventuallySteady a(↑ε).EventuallySteady a a:Chapter5.Sequenceh:a.IsCauchy(↑a).IsCauchy a:Chapter5.Sequenceh: ε > 0, ε.EventuallySteady a(↑a).IsCauchy a:Chapter5.Sequenceh: ε > 0, ε.EventuallySteady a ε > 0, ε.EventuallySteady a a:Chapter5.Sequenceh: ε > 0, ε.EventuallySteady aε::ε > 0ε.EventuallySteady a a:Chapter5.Sequenceh: ε > 0, ε.EventuallySteady aε::ε > 0ε':hε':0 < ε'hlt:ε' < εε.EventuallySteady a a:Chapter5.Sequenceε::ε > 0ε':hε':0 < ε'hlt:ε' < εh:ε'.EventuallySteady aε.EventuallySteady a a:Chapter5.Sequenceε::ε > 0ε':hε':0 < ε'hlt:ε' < εh:(↑ε').EventuallySteady aε.EventuallySteady a All goals completed! 🐙
end Chapter6

Definition 6.1.5

abbrev Real.CloseSeq (ε: ) (a: Chapter6.Sequence) (L:) : Prop := n a.m, ε.Close (a n) L

Definition 6.1.5

theorem Real.closeSeq_def (ε: ) (a: Chapter6.Sequence) (L:) : ε.CloseSeq a L n a.m, dist (a n) L ε := ε:a:Chapter6.SequenceL:ε.CloseSeq a L n a.m, dist (a.seq n) L ε All goals completed! 🐙

Definition 6.1.5

abbrev Real.EventuallyClose (ε: ) (a: Chapter6.Sequence) (L:) : Prop := N a.m, ε.CloseSeq (a.from N) L

Definition 6.1.5

theorem Real.eventuallyClose_def (ε: ) (a: Chapter6.Sequence) (L:) : ε.EventuallyClose a L N, (N a.m) ε.CloseSeq (a.from N) L := ε:a:Chapter6.SequenceL:ε.EventuallyClose a L N a.m, ε.CloseSeq (a.from N) L All goals completed! 🐙
theorem Real.CloseSeq.coe (ε : ) (a : ) (L : ): (ε.CloseSeq a L) n, dist (a n) L ε := ε:a: L:ε.CloseSeq (↑a) L (n : ), dist (a n) L ε ε:a: L:ε.CloseSeq (↑a) L (n : ), dist (a n) L εε:a: L:(∀ (n : ), dist (a n) L ε) ε.CloseSeq (↑a) L ε:a: L:ε.CloseSeq (↑a) L (n : ), dist (a n) L ε ε:a: L:h:ε.CloseSeq (↑a) Ln:dist (a n) L ε; ε:a: L:n:h:n (↑a).m ε.Close ((↑a).seq n) Ldist (a n) L ε; All goals completed! 🐙 ε:a: L:(∀ (n : ), dist (a n) L ε) ε.CloseSeq (↑a) L ε:a: L:h: (n : ), dist (a n) L εn:hn:n (↑a).mε.Close ((↑a).seq n) L; lift n to using (ε:a: L:h: (n : ), dist (a n) L εn:?m.100 All goals completed! 🐙); ε:a: L:n:h:dist (a n) L εε.Close ((↑a).seq n) L; All goals completed! 🐙theorem Real.CloseSeq.mono {a: Chapter6.Sequence} {ε₁ ε₂ L: } (: ε₁ ε₂) (hclose: ε₁.CloseSeq a L) : ε₂.CloseSeq a L := a:Chapter6.Sequenceε₁:ε₂:L::ε₁ ε₂hclose:ε₁.CloseSeq a Lε₂.CloseSeq a L a:Chapter6.Sequenceε₁:ε₂:L::ε₁ ε₂hclose:ε₁.CloseSeq a Ln✝:a✝:n✝ a.mthis:ε₁.Close (a.seq n✝) Lε₂.Close (a.seq n✝) L; a:Chapter6.Sequenceε₁:ε₂:L::ε₁ ε₂hclose:ε₁.CloseSeq a Ln✝:a✝:n✝ a.mthis:|a.seq n✝ - L| ε₁|a.seq n✝ - L| ε₂; All goals completed! 🐙theorem Real.EventuallyClose.mono {a: Chapter6.Sequence} {ε₁ ε₂ L: } (: ε₁ ε₂) (hclose: ε₁.EventuallyClose a L) : ε₂.EventuallyClose a L := a:Chapter6.Sequenceε₁:ε₂:L::ε₁ ε₂hclose:ε₁.EventuallyClose a Lε₂.EventuallyClose a L a:Chapter6.Sequenceε₁:ε₂:L::ε₁ ε₂hclose:ε₁.EventuallyClose a LN✝:p✝:N✝ a.mthis:ε₁.CloseSeq (a.from N✝) Lε₂.CloseSeq (a.from N✝) L; All goals completed! 🐙namespace Chapter6abbrev Sequence.TendsTo (a:Sequence) (L:) : Prop := ε > (0:), ε.EventuallyClose a Ltheorem Sequence.tendsTo_def (a:Sequence) (L:) : a.TendsTo L ε > (0:), ε.EventuallyClose a L := a:SequenceL:a.TendsTo L ε > 0, ε.EventuallyClose a L All goals completed! 🐙

Exercise 6.1.2

theorem declaration uses 'sorry'Sequence.tendsTo_iff (a:Sequence) (L:) : a.TendsTo L ε > 0, N, n N, |a n - L| ε := a:SequenceL:a.TendsTo L ε > 0, N, n N, |a.seq n - L| ε All goals completed! 🐙
noncomputable def seq_6_1_6 : Sequence := (fun (n:) 1-(10:)^(-(n:)-1):Sequence)

Examples 6.1.6

example : (0.1:).CloseSeq seq_6_1_6 1 := Real.CloseSeq 0.1 seq_6_1_6 1 (n : ), dist (1 - 10 ^ (-n - 1)) 1 0.1 n:dist (1 - 10 ^ (-n - 1)) 1 0.1 n:10 ^ (-n - 1) 10 ^ (-1) n:1 10n:-n - 1 -1 n:1 10n:-n - 1 -1 All goals completed! 🐙

Examples 6.1.6

example : ¬ (0.01:).CloseSeq seq_6_1_6 1 := ¬Real.CloseSeq 1e-2 seq_6_1_6 1 h:Real.CloseSeq 1e-2 seq_6_1_6 1False; specialize h 0 (h:Real.CloseSeq 1e-2 seq_6_1_6 10 seq_6_1_6.m All goals completed! 🐙); h:10⁻¹ 1e-2False; All goals completed! 🐙

Examples 6.1.6

declaration uses 'sorry'example : (0.01:).EventuallyClose seq_6_1_6 1 := Real.EventuallyClose 1e-2 seq_6_1_6 1 All goals completed! 🐙

Examples 6.1.6

declaration uses 'sorry'example : seq_6_1_6.TendsTo 1 := seq_6_1_6.TendsTo 1 All goals completed! 🐙

Proposition 6.1.7 (Uniqueness of limits)

theorem Sequence.tendsTo_unique (a:Sequence) {L L':} (h:L L') : ¬ (a.TendsTo L a.TendsTo L') := a:SequenceL:L':h:L L'¬(a.TendsTo L a.TendsTo L') -- This proof is written to follow the structure of the original text. a:SequenceL:L':h:L L'this:a.TendsTo L a.TendsTo L'False a:SequenceL:L':h:L L'hL:a.TendsTo LhL':a.TendsTo L'False replace h : L - L' 0 := a:SequenceL:L':h:L L'¬(a.TendsTo L a.TendsTo L') All goals completed! 🐙 replace h : |L-L'| > 0 := a:SequenceL:L':h:L L'¬(a.TendsTo L a.TendsTo L') All goals completed! 🐙 a:SequenceL:L':hL:a.TendsTo LhL':a.TendsTo L'h:|_fvar.112475 - _fvar.112476| > 0 := ?_mvar.115371ε: := |_fvar.112475 - _fvar.112476| / 3False have : ε > 0 := a:SequenceL:L':h:L L'¬(a.TendsTo L a.TendsTo L') All goals completed! 🐙 a:SequenceL:L':hL: ε > 0, N, n N, |a.seq n - L| εhL': ε > 0, N, n N, |a.seq n - L'| εh:|L - L'| > 0ε: := |_fvar.112475 - _fvar.112476| / 3:ε > 0False a:SequenceL:L':hL': ε > 0, N, n N, |a.seq n - L'| εh:|L - L'| > 0ε: := |_fvar.112475 - _fvar.112476| / 3:ε > 0hL: N, n N, |a.seq n - L| εFalse; a:SequenceL:L':hL': ε > 0, N, n N, |a.seq n - L'| εh:|L - L'| > 0ε: := |_fvar.112475 - _fvar.112476| / 3:ε > 0N:hN: n N, |a.seq n - L| εFalse a:SequenceL:L':h:|L - L'| > 0ε: := |_fvar.112475 - _fvar.112476| / 3:ε > 0N:hN: n N, |a.seq n - L| εhL': N, n N, |a.seq n - L'| εFalse; a:SequenceL:L':h:|L - L'| > 0ε: := |_fvar.112475 - _fvar.112476| / 3:ε > 0N:hN: n N, |a.seq n - L| εM:hM: n M, |a.seq n - L'| εFalse a:SequenceL:L':h:|L - L'| > 0ε: := |_fvar.112475 - _fvar.112476| / 3:ε > 0N:hN: n N, |a.seq n - L| εM:hM: n M, |a.seq n - L'| εn: := max _fvar.119324 _fvar.119339False specialize hN n (a:SequenceL:L':h:|L - L'| > 0ε: := |_fvar.112475 - _fvar.112476| / 3:ε > 0N:hN: n N, |a.seq n - L| εM:hM: n M, |a.seq n - L'| εn: := max _fvar.119324 _fvar.119339n N All goals completed! 🐙) specialize hM n (a:SequenceL:L':h:|L - L'| > 0ε: := |_fvar.112475 - _fvar.112476| / 3:ε > 0N:M:hM: n M, |a.seq n - L'| εn: := max _fvar.119324 _fvar.119339hN:|a.seq n - L| εn M All goals completed! 🐙) have : |L-L'| 2 * |L-L'|/3 := calc _ = dist L L' := a:SequenceL:L':h:|L - L'| > 0ε: := |_fvar.112475 - _fvar.112476| / 3:ε > 0N:M:n: := max _fvar.119324 _fvar.119339hN:|a.seq n - L| εhM:|a.seq n - L'| ε|L - L'| = dist L L' All goals completed! 🐙 _ dist L (a.seq n) + dist (a.seq n) L' := dist_triangle _ _ _ _ ε + ε := a:SequenceL:L':h:|L - L'| > 0ε: := |_fvar.112475 - _fvar.112476| / 3:ε > 0N:M:n: := max _fvar.119324 _fvar.119339hN:|a.seq n - L| εhM:|a.seq n - L'| εdist L (a.seq n) + dist (a.seq n) L' ε + ε a:SequenceL:L':h:|L - L'| > 0ε: := |_fvar.112475 - _fvar.112476| / 3:ε > 0N:M:n: := max _fvar.119324 _fvar.119339hN:dist (a.seq n) L εhM:dist (a.seq n) L' εdist L (a.seq n) + dist (a.seq n) L' ε + ε; a:SequenceL:L':h:|L - L'| > 0ε: := |_fvar.112475 - _fvar.112476| / 3:ε > 0N:M:n: := max _fvar.119324 _fvar.119339hN:dist L (a.seq n) εhM:dist (a.seq n) L' εdist L (a.seq n) + dist (a.seq n) L' ε + ε; All goals completed! 🐙 _ = 2 * |L-L'|/3 := a:SequenceL:L':h:|L - L'| > 0ε: := |_fvar.112475 - _fvar.112476| / 3:ε > 0N:M:n: := max _fvar.119324 _fvar.119339hN:|a.seq n - L| εhM:|a.seq n - L'| εε + ε = 2 * |L - L'| / 3 All goals completed! 🐙 All goals completed! 🐙

Definition 6.1.8

abbrev Sequence.Convergent (a:Sequence) : Prop := L, a.TendsTo L

Definition 6.1.8

theorem Sequence.convergent_def (a:Sequence) : a.Convergent L, a.TendsTo L := a:Sequencea.Convergent L, a.TendsTo L All goals completed! 🐙

Definition 6.1.8

abbrev Sequence.Divergent (a:Sequence) : Prop := ¬ a.Convergent

Definition 6.1.8

theorem Sequence.divergent_def (a:Sequence) : a.Divergent ¬ a.Convergent := a:Sequencea.Divergent ¬a.Convergent All goals completed! 🐙
open Classical in /-- Definition 6.1.8. We give the limit of a sequence the junk value of 0 if it is not convergent. -/ noncomputable abbrev lim (a:Sequence) : := if h: a.Convergent then h.choose else 0

Definition 6.1.8

theorem Sequence.lim_def {a:Sequence} (h: a.Convergent) : a.TendsTo (lim a) := a:Sequenceh:a.Convergenta.TendsTo (lim a) a:Sequenceh:a.Convergenta.TendsTo (Exists.choose ); All goals completed! 🐙

Definition 6.1.8

theorem Sequence.lim_eq {a:Sequence} {L:} : a.TendsTo L a.Convergent lim a = L := a:SequenceL:a.TendsTo L a.Convergent lim a = L a:SequenceL:a.TendsTo L a.Convergent lim a = La:SequenceL:a.Convergent lim a = L a.TendsTo L a:SequenceL:a.TendsTo L a.Convergent lim a = L a:SequenceL:h:a.TendsTo La.Convergent lim a = L; a:SequenceL:h:a.TendsTo Leq:a.Convergent lim a LFalse have : a.Convergent := a:SequenceL:a.TendsTo L a.Convergent lim a = L a:SequenceL:h:a.TendsTo Leq:a.Convergent lim a L L, a.TendsTo L; All goals completed! 🐙 a:SequenceL:h:a.TendsTo Lthis:Chapter6.Sequence.Convergent _fvar.130151 := ?_mvar.131784eq:?_mvar.131814 := Chapter6.Sequence.tendsTo_unique _fvar.130151 (@_fvar.131778 _fvar.131785)False a:SequenceL:h:a.TendsTo Leq:?_mvar.131814 := Chapter6.Sequence.tendsTo_unique _fvar.130151 (@_fvar.131778 _fvar.131785)this:a.TendsTo (lim a)False; All goals completed! 🐙 a:SequenceL:h:a.Convergenta.TendsTo (lim a); All goals completed! 🐙

Proposition 6.1.11

theorem Sequence.lim_harmonic : ((fun (n:) (n+1:)⁻¹):Sequence).Convergent lim ((fun (n:) (n+1:)⁻¹):Sequence) = 0 := (↑fun n => (n + 1)⁻¹).Convergent (lim fun n => (n + 1)⁻¹) = 0 -- This proof is written to follow the structure of the original text. ε > 0, N, n N, |(↑fun n => (n + 1)⁻¹).seq n - 0| ε ε::ε > 0 N, n N, |(↑fun n => (n + 1)⁻¹).seq n - 0| ε ε::ε > 0N:hN:1 / ε < N N, n N, |(↑fun n => (n + 1)⁻¹).seq n - 0| ε; ε::ε > 0N:hN:1 / ε < N n N, |(↑fun n => (n + 1)⁻¹).seq n - 0| ε; ε::ε > 0N:hN:1 / ε < Nn:hn:n N|(↑fun n => (n + 1)⁻¹).seq n - 0| ε have hNpos : (N:) > 0 := (↑fun n => (n + 1)⁻¹).Convergent (lim fun n => (n + 1)⁻¹) = 0 ε::ε > 0N:hN:1 / ε < Nn:hn:n N0 < 1 / ε; All goals completed! 🐙 ε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < N|(↑fun n => (n + 1)⁻¹).seq n - 0| ε have hnpos : n 0 := (↑fun n => (n + 1)⁻¹).Convergent (lim fun n => (n + 1)⁻¹) = 0 All goals completed! 🐙 ε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := ?_mvar.136678|n.toNat + 1|⁻¹ ε calc _ (N:)⁻¹ := ε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))|n.toNat + 1|⁻¹ (↑N)⁻¹ ε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))N |n.toNat + 1|ε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))0 < |n.toNat + 1|ε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))0 < N ε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))N |n.toNat + 1|ε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))0 < |n.toNat + 1|ε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))0 < N try All goals completed! 🐙 calc _ (n:) := ε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))N n All goals completed! 🐙 _ = (n.toNat:) := ε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))n = n.toNat All goals completed! 🐙 _ = n.toNat := rfl _ (n.toNat:) + 1 := ε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))n.toNat n.toNat + 1 All goals completed! 🐙 _ _ := le_abs_self _ _ ε := ε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))(↑N)⁻¹ ε ε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))ε⁻¹ Nε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))0 < Nε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))0 < ε ε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))ε⁻¹ Nε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))0 < Nε::ε > 0N:hN:1 / ε < Nn:hn:n NhNpos:0 < Nhnpos:_fvar.134321 0 := le_of_not_gt fun a => Mathlib.Tactic.Linarith.lt_irrefl (Eq.mp (congrArg (fun _a => _a < 0) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.mul_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 2)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 2)))) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0))) (Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 2).rawCast + 0)))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134321 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_lt (Int.negOfNat 2).rawCast (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_zero_add (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.atom_pf _fvar.134259) (Mathlib.Tactic.Ring.sub_pf (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul _fvar.134259 (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero) (Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_zero_add (_fvar.134259 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 2)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134259 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))) (Mathlib.Tactic.Ring.sub_congr (Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf _fvar.134321) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 1))) (Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))) (Mathlib.Tactic.Ring.sub_pf Mathlib.Tactic.Ring.neg_zero (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + (_fvar.134321 ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0)))) (Mathlib.Tactic.Ring.add_pf_add_overlap_zero (Mathlib.Tactic.Ring.add_overlap_pf_zero _fvar.134321 (Nat.rawCast 1) (Mathlib.Meta.NormNum.IsInt.to_isNat (Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.ofNat 0))))) (Mathlib.Tactic.Ring.add_pf_zero_add 0)))) (Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0))))) (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.add_lt_of_neg_of_le (Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one) (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le _fvar.134324)) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr _fvar.136638))) (Mathlib.Tactic.Linarith.sub_nonpos_of_le (Int.add_one_le_iff.mpr a))))0 < ε try All goals completed! 🐙 ε::ε > 0N:hN:ε⁻¹ < Nn:hn:n NhNpos:0 < Nhnpos:n 0ε⁻¹ N; All goals completed! 🐙

Proposition 6.1.12 / Exercise 6.1.5

theorem declaration uses 'sorry'Sequence.IsCauchy.convergent {a:Sequence} (h:a.Convergent) : a.IsCauchy := a:Sequenceh:a.Convergenta.IsCauchy All goals completed! 🐙

Example 6.1.13

declaration uses 'sorry'example : ¬ (0.1:).EventuallySteady ((fun n (-1:)^n):Sequence) := ¬Real.EventuallySteady 0.1 fun n => (-1) ^ n All goals completed! 🐙

Example 6.1.13

declaration uses 'sorry'example : ¬ ((fun n (-1:)^n):Sequence).IsCauchy := ¬(↑fun n => (-1) ^ n).IsCauchy All goals completed! 🐙

Example 6.1.13

declaration uses 'sorry'example : ¬ ((fun n (-1:)^n):Sequence).Convergent := ¬(↑fun n => (-1) ^ n).Convergent All goals completed! 🐙

Proposition 6.1.15 / Exercise 6.1.6 (Formal limits are genuine limits)

theorem declaration uses 'sorry'Sequence.lim_eq_LIM {a: } (h: (a:Chapter5.Sequence).IsCauchy) : ((a:Chapter5.Sequence):Sequence).TendsTo (Chapter5.Real.equivR (Chapter5.LIM a)) := a: h:(↑a).IsCauchy(↑a).TendsTo (Chapter5.Real.equivR (Chapter5.LIM a)) All goals completed! 🐙

Definition 6.1.16

abbrev Sequence.BoundedBy (a:Sequence) (M:) : Prop := n, |a n| M

Definition 6.1.16

lemma Sequence.boundedBy_def (a:Sequence) (M:) : a.BoundedBy M n, |a n| M := a:SequenceM:a.BoundedBy M (n : ), |a.seq n| M All goals completed! 🐙

Definition 6.1.16

abbrev Sequence.IsBounded (a:Sequence) : Prop := M 0, a.BoundedBy M

Definition 6.1.16

lemma Sequence.isBounded_def (a:Sequence) : a.IsBounded M 0, a.BoundedBy M := a:Sequencea.IsBounded M 0, a.BoundedBy M All goals completed! 🐙
theorem declaration uses 'sorry'Sequence.bounded_of_cauchy {a:Sequence} (h: a.IsCauchy) : a.IsBounded := a:Sequenceh:a.IsCauchya.IsBounded All goals completed! 🐙

Corollary 6.1.17

theorem declaration uses 'sorry'Sequence.bounded_of_convergent {a:Sequence} (h: a.Convergent) : a.IsBounded := a:Sequenceh:a.Convergenta.IsBounded All goals completed! 🐙

Example 6.1.18

declaration uses 'sorry'example : ¬ ((fun (n:) (n+1:)):Sequence).IsBounded := ¬(↑fun n => n + 1).IsBounded All goals completed! 🐙

Example 6.1.18

declaration uses 'sorry'example : ¬ ((fun (n:) (n+1:)):Sequence).Convergent := ¬(↑fun n => n + 1).Convergent All goals completed! 🐙
instance Sequence.inst_add : Add Sequence where add a b := { m := min a.m b.m seq n := a n + b n vanish n hn := a:Sequenceb:Sequencen:hn:n < min a.m b.ma.seq n + b.seq n = 0 All goals completed! 🐙 }@[simp] theorem Sequence.add_eval {a b: Sequence} (n:) : (a + b) n = a n + b n := rfltheorem Sequence.add_coe (a b: ) : (a:Sequence) + (b:Sequence) = (fun n a n + b n) := a: b: a + b = fun n => a n + b n a: b: (a + b).m = (↑fun n => a n + b n).ma: b: n:(a + b).seq n = (↑fun n => a n + b n).seq n; a: b: n:(a + b).seq n = (↑fun n => a n + b n).seq n a: b: n:h:n 0(a + b).seq n = (↑fun n => a n + b n).seq na: b: n:h:¬n 0(a + b).seq n = (↑fun n => a n + b n).seq n a: b: n:h:n 0(a + b).seq n = (↑fun n => a n + b n).seq na: b: n:h:¬n 0(a + b).seq n = (↑fun n => a n + b n).seq n All goals completed! 🐙

Theorem 6.1.19(a) (limit laws). The Unknown identifier `tendsTo`tendsTo version is more usable than the Chapter6.lim (a : Sequence) : lim version in applications.

theorem declaration uses 'sorry'Sequence.tendsTo_add {a b:Sequence} {L M:} (ha: a.TendsTo L) (hb: b.TendsTo M) : (a+b).TendsTo (L+M) := a:Sequenceb:SequenceL:M:ha:a.TendsTo Lhb:b.TendsTo M(a + b).TendsTo (L + M) All goals completed! 🐙
theorem declaration uses 'sorry'Sequence.lim_add {a b:Sequence} (ha: a.Convergent) (hb: b.Convergent) : (a + b).Convergent lim (a + b) = lim a + lim b := a:Sequenceb:Sequenceha:a.Convergenthb:b.Convergent(a + b).Convergent lim (a + b) = lim a + lim b All goals completed! 🐙instance Sequence.inst_mul : Mul Sequence where mul a b := { m := min a.m b.m seq n := a n * b n vanish n hn := a:Sequenceb:Sequencen:hn:n < min a.m b.ma.seq n * b.seq n = 0 All goals completed! 🐙 }@[simp] theorem Sequence.mul_eval {a b: Sequence} (n:) : (a * b) n = a n * b n := rfltheorem Sequence.mul_coe (a b: ) : (a:Sequence) * (b:Sequence) = (fun n a n * b n) := a: b: a * b = fun n => a n * b n a: b: (a * b).m = (↑fun n => a n * b n).ma: b: n:(a * b).seq n = (↑fun n => a n * b n).seq n; a: b: n:(a * b).seq n = (↑fun n => a n * b n).seq n a: b: n:h:n 0(a * b).seq n = (↑fun n => a n * b n).seq na: b: n:h:¬n 0(a * b).seq n = (↑fun n => a n * b n).seq n a: b: n:h:n 0(a * b).seq n = (↑fun n => a n * b n).seq na: b: n:h:¬n 0(a * b).seq n = (↑fun n => a n * b n).seq n All goals completed! 🐙

Theorem 6.1.19(b) (limit laws). The Unknown identifier `tendsTo`tendsTo version is more usable than the Chapter6.lim (a : Sequence) : lim version in applications.

theorem declaration uses 'sorry'Sequence.tendsTo_mul {a b:Sequence} {L M:} (ha: a.TendsTo L) (hb: b.TendsTo M) : (a * b).TendsTo (L * M) := a:Sequenceb:SequenceL:M:ha:a.TendsTo Lhb:b.TendsTo M(a * b).TendsTo (L * M) All goals completed! 🐙
theorem declaration uses 'sorry'Sequence.lim_mul {a b:Sequence} (ha: a.Convergent) (hb: b.Convergent) : (a * b).Convergent lim (a * b) = lim a * lim b := a:Sequenceb:Sequenceha:a.Convergenthb:b.Convergent(a * b).Convergent lim (a * b) = lim a * lim b All goals completed! 🐙instance Sequence.inst_smul : SMul Sequence where smul c a := { m := a.m seq n := c * a n vanish n hn := c:a:Sequencen:hn:n < a.mc * a.seq n = 0 All goals completed! 🐙 }@[simp] theorem Sequence.smul_eval {a: Sequence} (c: ) (n:) : (c a) n = c * a n := rfltheorem Sequence.smul_coe (c:) (a: ) : (c (a:Sequence)) = (fun n c * a n) := c:a: c a = fun n => c * a n c:a: (c a).m = (↑fun n => c * a n).mc:a: n:(c a).seq n = (↑fun n => c * a n).seq n; c:a: n:(c a).seq n = (↑fun n => c * a n).seq n c:a: n:h:n 0(c a).seq n = (↑fun n => c * a n).seq nc:a: n:h:¬n 0(c a).seq n = (↑fun n => c * a n).seq n c:a: n:h:n 0(c a).seq n = (↑fun n => c * a n).seq nc:a: n:h:¬n 0(c a).seq n = (↑fun n => c * a n).seq n All goals completed! 🐙

Theorem 6.1.19(c) (limit laws). The Unknown identifier `tendsTo`tendsTo version is more usable than the Chapter6.lim (a : Sequence) : lim version in applications.

theorem declaration uses 'sorry'Sequence.tendsTo_smul (c:) {a:Sequence} {L:} (ha: a.TendsTo L) : (c a).TendsTo (c * L) := c:a:SequenceL:ha:a.TendsTo L(c a).TendsTo (c * L) All goals completed! 🐙
theorem declaration uses 'sorry'Sequence.lim_smul (c:) {a:Sequence} (ha: a.Convergent) : (c a).Convergent lim (c a) = c * lim a := c:a:Sequenceha:a.Convergent(c a).Convergent lim (c a) = c * lim a All goals completed! 🐙instance Sequence.inst_sub : Sub Sequence where sub a b := { m := min a.m b.m seq n := a n - b n vanish n hn := a:Sequenceb:Sequencen:hn:n < min a.m b.ma.seq n - b.seq n = 0 All goals completed! 🐙 }@[simp] theorem Sequence.sub_eval {a b: Sequence} (n:) : (a - b) n = a n - b n := rfltheorem Sequence.sub_coe (a b: ) : (a:Sequence) - (b:Sequence) = (fun n a n - b n) := a: b: a - b = fun n => a n - b n a: b: (a - b).m = (↑fun n => a n - b n).ma: b: n:(a - b).seq n = (↑fun n => a n - b n).seq n; a: b: n:(a - b).seq n = (↑fun n => a n - b n).seq n a: b: n:h:n 0(a - b).seq n = (↑fun n => a n - b n).seq na: b: n:h:¬n 0(a - b).seq n = (↑fun n => a n - b n).seq n a: b: n:h:n 0(a - b).seq n = (↑fun n => a n - b n).seq na: b: n:h:¬n 0(a - b).seq n = (↑fun n => a n - b n).seq n All goals completed! 🐙

Theorem 6.1.19(d) (limit laws). The Unknown identifier `tendsTo`tendsTo version is more usable than the Chapter6.lim (a : Sequence) : lim version in applications.

theorem declaration uses 'sorry'Sequence.tendsTo_sub {a b:Sequence} {L M:} (ha: a.TendsTo L) (hb: b.TendsTo M) : (a - b).TendsTo (L - M) := a:Sequenceb:SequenceL:M:ha:a.TendsTo Lhb:b.TendsTo M(a - b).TendsTo (L - M) All goals completed! 🐙
theorem declaration uses 'sorry'Sequence.LIM_sub {a b:Sequence} (ha: a.Convergent) (hb: b.Convergent) : (a - b).Convergent lim (a - b) = lim a - lim b := a:Sequenceb:Sequenceha:a.Convergenthb:b.Convergent(a - b).Convergent lim (a - b) = lim a - lim b All goals completed! 🐙noncomputable instance Sequence.inst_inv : Inv Sequence where inv a := { m := a.m seq n := (a n)⁻¹ vanish n hn := a:Sequencen:hn:n < a.m(a.seq n)⁻¹ = 0 All goals completed! 🐙 }@[simp] theorem Sequence.inv_eval {a: Sequence} (n:) : (a⁻¹) n = (a n)⁻¹ := rfltheorem Sequence.inv_coe (a: ) : (a:Sequence)⁻¹ = (fun n (a n)⁻¹) := a: (↑a)⁻¹ = fun n => (a n)⁻¹ a: (↑a)⁻¹.m = (↑fun n => (a n)⁻¹).ma: n:(↑a)⁻¹.seq n = (↑fun n => (a n)⁻¹).seq n; a: n:(↑a)⁻¹.seq n = (↑fun n => (a n)⁻¹).seq n a: n:h:n 0(↑a)⁻¹.seq n = (↑fun n => (a n)⁻¹).seq na: n:h:¬n 0(↑a)⁻¹.seq n = (↑fun n => (a n)⁻¹).seq n a: n:h:n 0(↑a)⁻¹.seq n = (↑fun n => (a n)⁻¹).seq na: n:h:¬n 0(↑a)⁻¹.seq n = (↑fun n => (a n)⁻¹).seq n All goals completed! 🐙

Theorem 6.1.19(e) (limit laws). The Unknown identifier `tendsTo`tendsTo version is more usable than the Chapter6.lim (a : Sequence) : lim version in applications.

theorem declaration uses 'sorry'Sequence.tendsTo_inv {a:Sequence} {L:} (ha: a.TendsTo L) (hnon: L 0) : (a⁻¹).TendsTo (L⁻¹) := a:SequenceL:ha:a.TendsTo Lhnon:L 0a⁻¹.TendsTo L⁻¹ All goals completed! 🐙
theorem declaration uses 'sorry'Sequence.lim_inv {a:Sequence} (ha: a.Convergent) (hnon: lim a 0) : (a⁻¹).Convergent lim (a⁻¹) = (lim a)⁻¹ := a:Sequenceha:a.Convergenthnon:lim a 0a⁻¹.Convergent lim a⁻¹ = (lim a)⁻¹ All goals completed! 🐙noncomputable instance Sequence.inst_div : Div Sequence where div a b := { m := min a.m b.m seq n := a n / b n vanish n hn := a:Sequenceb:Sequencen:hn:n < min a.m b.ma.seq n / b.seq n = 0 All goals completed! 🐙 }@[simp] theorem Sequence.div_eval {a b: Sequence} (n:) : (a / b) n = a n / b n := rfltheorem Sequence.div_coe (a b: ) : (a:Sequence) / (b:Sequence) = (fun n a n / b n) := a: b: a / b = fun n => a n / b n a: b: (a / b).m = (↑fun n => a n / b n).ma: b: n:(a / b).seq n = (↑fun n => a n / b n).seq n; a: b: n:(a / b).seq n = (↑fun n => a n / b n).seq n a: b: n:h:n 0(a / b).seq n = (↑fun n => a n / b n).seq na: b: n:h:¬n 0(a / b).seq n = (↑fun n => a n / b n).seq n a: b: n:h:n 0(a / b).seq n = (↑fun n => a n / b n).seq na: b: n:h:¬n 0(a / b).seq n = (↑fun n => a n / b n).seq n All goals completed! 🐙

Theorem 6.1.19(f) (limit laws). The Unknown identifier `tendsTo`tendsTo version is more usable than the Chapter6.lim (a : Sequence) : lim version in applications.

theorem declaration uses 'sorry'Sequence.tendsTo_div {a b:Sequence} {L M:} (ha: a.TendsTo L) (hb: b.TendsTo M) (hnon: M 0) : (a / b).TendsTo (L / M) := a:Sequenceb:SequenceL:M:ha:a.TendsTo Lhb:b.TendsTo Mhnon:M 0(a / b).TendsTo (L / M) All goals completed! 🐙
theorem declaration uses 'sorry'Sequence.lim_div {a b:Sequence} (ha: a.Convergent) (hb: b.Convergent) (hnon: lim b 0) : (a / b).Convergent lim (a / b) = lim a / lim b := a:Sequenceb:Sequenceha:a.Convergenthb:b.Convergenthnon:lim b 0(a / b).Convergent lim (a / b) = lim a / lim b All goals completed! 🐙instance Sequence.inst_max : Max Sequence where max a b := { m := min a.m b.m seq n := max (a n) (b n) vanish n hn := a:Sequenceb:Sequencen:hn:n < min a.m b.mmax (a.seq n) (b.seq n) = 0 All goals completed! 🐙 }@[simp] theorem Sequence.max_eval {a b: Sequence} (n:) : (a b) n = (a n) (b n) := rfltheorem Sequence.max_coe (a b: ) : (a:Sequence) (b:Sequence) = (fun n max (a n) (b n)) := a: b: a b = fun n => max (a n) (b n) a: b: (a b).m = (↑fun n => max (a n) (b n)).ma: b: n:(a b).seq n = (↑fun n => max (a n) (b n)).seq n; a: b: n:(a b).seq n = (↑fun n => max (a n) (b n)).seq n a: b: n:h:n 0(a b).seq n = (↑fun n => max (a n) (b n)).seq na: b: n:h:¬n 0(a b).seq n = (↑fun n => max (a n) (b n)).seq n a: b: n:h:n 0(a b).seq n = (↑fun n => max (a n) (b n)).seq na: b: n:h:¬n 0(a b).seq n = (↑fun n => max (a n) (b n)).seq n All goals completed! 🐙

Theorem 6.1.19(g) (limit laws). The Unknown identifier `tendsTo`tendsTo version is more usable than the Chapter6.lim (a : Sequence) : lim version in applications.

theorem declaration uses 'sorry'Sequence.tendsTo_max {a b:Sequence} {L M:} (ha: a.TendsTo L) (hb: b.TendsTo M) : (max a b).TendsTo (max L M) := a:Sequenceb:SequenceL:M:ha:a.TendsTo Lhb:b.TendsTo M(a b).TendsTo (max L M) All goals completed! 🐙
theorem declaration uses 'sorry'Sequence.lim_max {a b:Sequence} (ha: a.Convergent) (hb: b.Convergent) : (max a b).Convergent lim (max a b) = max (lim a) (lim b) := a:Sequenceb:Sequenceha:a.Convergenthb:b.Convergent(a b).Convergent lim (a b) = max (lim a) (lim b) All goals completed! 🐙instance Sequence.inst_min : Min Sequence where min a b := { m := min a.m b.m seq n := min (a n) (b n) vanish n hn := a:Sequenceb:Sequencen:hn:n < min a.m b.mmin (a.seq n) (b.seq n) = 0 All goals completed! 🐙 }@[simp] theorem Sequence.min_eval {a b: Sequence} (n:) : (a b) n = (a n) (b n) := rfltheorem Sequence.min_coe (a b: ) : (a:Sequence) (b:Sequence) = (fun n min (a n) (b n)) := a: b: a b = fun n => min (a n) (b n) a: b: (a b).m = (↑fun n => min (a n) (b n)).ma: b: n:(a b).seq n = (↑fun n => min (a n) (b n)).seq n; a: b: n:(a b).seq n = (↑fun n => min (a n) (b n)).seq n a: b: n:h:n 0(a b).seq n = (↑fun n => min (a n) (b n)).seq na: b: n:h:¬n 0(a b).seq n = (↑fun n => min (a n) (b n)).seq n a: b: n:h:n 0(a b).seq n = (↑fun n => min (a n) (b n)).seq na: b: n:h:¬n 0(a b).seq n = (↑fun n => min (a n) (b n)).seq n All goals completed! 🐙

Theorem 6.1.19(h) (limit laws)

theorem declaration uses 'sorry'Sequence.tendsTo_min {a b:Sequence} {L M:} (ha: a.TendsTo L) (hb: b.TendsTo M) : (min a b).TendsTo (min L M) := a:Sequenceb:SequenceL:M:ha:a.TendsTo Lhb:b.TendsTo M(a b).TendsTo (min L M) All goals completed! 🐙
theorem declaration uses 'sorry'Sequence.lim_min {a b:Sequence} (ha: a.Convergent) (hb: b.Convergent) : (min a b).Convergent lim (min a b) = min (lim a) (lim b) := a:Sequenceb:Sequenceha:a.Convergenthb:b.Convergent(a b).Convergent lim (a b) = min (lim a) (lim b) All goals completed! 🐙

Exercise 6.1.1

theorem declaration uses 'sorry'Sequence.mono_if {a: } (ha: n, a (n+1) > a n) {n m:} (hnm: m > n) : a m > a n := a: ha: (n : ), a (n + 1) > a nn:m:hnm:m > na m > a n All goals completed! 🐙

Exercise 6.1.3

theorem declaration uses 'sorry'Sequence.tendsTo_of_from {a: Sequence} {c:} (m:) : a.TendsTo c (a.from m).TendsTo c := a:Sequencec:m:a.TendsTo c (a.from m).TendsTo c All goals completed! 🐙

Exercise 6.1.4

theorem declaration uses 'sorry'Sequence.tendsTo_of_shift {a: Sequence} {c:} (k:) : a.TendsTo c (Sequence.mk' a.m (fun n : {n // n a.m} a (n+k))).TendsTo c := a:Sequencec:k:a.TendsTo c (mk' a.m fun n => a.seq (n + k)).TendsTo c All goals completed! 🐙

Exercise 6.1.7

theorem declaration uses 'sorry'Sequence.isBounded_of_rat (a: Chapter5.Sequence) : a.IsBounded (a:Sequence).IsBounded := a:Chapter5.Sequencea.IsBounded (↑a).IsBounded All goals completed! 🐙

Exercise 6.1.9

theorem declaration uses 'sorry'Sequence.lim_div_fail : a b, a.Convergent b.Convergent lim b = 0 ¬ ((a / b).Convergent lim (a / b) = lim a / lim b) := a b, a.Convergent b.Convergent lim b = 0 ¬((a / b).Convergent lim (a / b) = lim a / lim b) All goals completed! 🐙
theorem declaration uses 'sorry'Chapter5.Sequence.IsCauchy_iff (a:Chapter5.Sequence) : a.IsCauchy ε > (0:), N a.n₀, n N, m N, |a n - a m| ε := a:Chapter5.Sequencea.IsCauchy ε > 0, N a.n₀, n N, m N, |a.seq n - a.seq m| ε All goals completed! 🐙end Chapter6-- additional definitions for exercise 6.1.10 abbrev Real.SeqCloseSeq (ε: ) (a b: Chapter5.Sequence) : Prop := n, n a.n₀ n b.n₀ ε.Close (a n) (b n)abbrev Real.SeqEventuallyClose (ε: ) (a b: Chapter5.Sequence): Prop := N, ε.SeqCloseSeq (a.from N) (b.from N)-- extended definition of rational sequences equivalence but with positive real ε abbrev Chapter5.Sequence.RatEquiv (a b: ) : Prop := (ε:), ε > 0 ε.SeqEventuallyClose (a:Chapter5.Sequence) (b:Chapter5.Sequence)namespace Chapter6

Exercise 6.1.10

theorem declaration uses 'sorry'Chapter5.Sequence.equiv_rat (a b: ) : Chapter5.Sequence.Equiv a b Chapter5.Sequence.RatEquiv a b := a: b: Chapter5.Sequence.Equiv a b Chapter5.Sequence.RatEquiv a b All goals completed! 🐙
end Chapter6