Equivalent Cauchy sequences
Analysis I, Section 5.2: Equivalent Cauchy sequences
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:
-
Notion of an ε-close and eventually ε-close sequences of rationals.
-
Notion of an equivalent Cauchy sequence of rationals.
Tips from past users
Users of the companion who have completed the exercises in this section are welcome to send their tips for future users in this section as PRs.
-
(Add tip here)
abbrev Rat.CloseSeq (ε: ℚ) (a b: Chapter5.Sequence) : Prop :=
∀ n, n ≥ a.n₀ → n ≥ b.n₀ → ε.Close (a n) (b n)abbrev Rat.EventuallyClose (ε: ℚ) (a b: Chapter5.Sequence) : Prop :=
∃ N, ε.CloseSeq (a.from N) (b.from N)namespace Chapter5Definition 5.2.1 ($ε$-close sequences)
lemma Rat.closeSeq_def (ε: ℚ) (a b: Sequence) :
ε.CloseSeq a b ↔ ∀ n, n ≥ a.n₀ → n ≥ b.n₀ → ε.Close (a n) (b n) := ε:ℚa:Sequenceb:Sequence⊢ ε.CloseSeq a b ↔ ∀ n ≥ a.n₀, n ≥ b.n₀ → ε.Close (a.seq n) (b.seq n) All goals completed! 🐙Example 5.2.2
example : (0.1:ℚ).CloseSeq ((fun n:ℕ ↦ ((-1)^n:ℚ)):Sequence)
((fun n:ℕ ↦ ((1.1:ℚ) * (-1)^n)):Sequence) := ⊢ Rat.CloseSeq 0.1 (↑fun n => (-1) ^ n) ↑fun n => 1.1 * (-1) ^ n All goals completed! 🐙Example 5.2.2
example : ¬ (0.1:ℚ).Steady ((fun n:ℕ ↦ ((-1)^n:ℚ)):Sequence) := ⊢ ¬Rat.Steady 0.1 ↑fun n => (-1) ^ n All goals completed! 🐙Example 5.2.2
example : ¬ (0.1:ℚ).Steady ((fun n:ℕ ↦ ((1.1:ℚ) * (-1)^n)):Sequence) := ⊢ ¬Rat.Steady 0.1 ↑fun n => 1.1 * (-1) ^ n All goals completed! 🐙Definition 5.2.3 (Eventually ε-close sequences)
lemma Rat.eventuallyClose_def (ε: ℚ) (a b: Sequence) :
ε.EventuallyClose a b ↔ ∃ N, ε.CloseSeq (a.from N) (b.from N) := ε:ℚa:Sequenceb:Sequence⊢ ε.EventuallyClose a b ↔ ∃ N, ε.CloseSeq (a.from N) (b.from N) All goals completed! 🐙Definition 5.2.3 (Eventually ε-close sequences)
lemma Rat.eventuallyClose_iff (ε: ℚ) (a b: ℕ → ℚ) :
ε.EventuallyClose (a:Sequence) (b:Sequence) ↔ ∃ N, ∀ n ≥ N, |a n - b n| ≤ ε := ε:ℚa:ℕ → ℚb:ℕ → ℚ⊢ ε.EventuallyClose ↑a ↑b ↔ ∃ N, ∀ n ≥ N, |a n - b n| ≤ ε All goals completed! 🐙Example 5.2.5
example : ¬ (0.1:ℚ).CloseSeq ((fun n:ℕ ↦ (1:ℚ)+10^(-(n:ℤ)-1)):Sequence)
((fun n:ℕ ↦ (1:ℚ)-10^(-(n:ℤ)-1)):Sequence) := ⊢ ¬Rat.CloseSeq 0.1 (↑fun n => 1 + 10 ^ (-↑n - 1)) ↑fun n => 1 - 10 ^ (-↑n - 1) All goals completed! 🐙example : (0.1:ℚ).EventuallyClose ((fun n:ℕ ↦ (1:ℚ)+10^(-(n:ℤ)-1)):Sequence)
((fun n:ℕ ↦ (1:ℚ)-10^(-(n:ℤ)-1)):Sequence) := ⊢ Rat.EventuallyClose 0.1 (↑fun n => 1 + 10 ^ (-↑n - 1)) ↑fun n => 1 - 10 ^ (-↑n - 1) All goals completed! 🐙example : (0.01:ℚ).EventuallyClose ((fun n:ℕ ↦ (1:ℚ)+10^(-(n:ℤ)-1)):Sequence)
((fun n:ℕ ↦ (1:ℚ)-10^(-(n:ℤ)-1)):Sequence) := ⊢ Rat.EventuallyClose 1e-2 (↑fun n => 1 + 10 ^ (-↑n - 1)) ↑fun n => 1 - 10 ^ (-↑n - 1) All goals completed! 🐙Definition 5.2.6 (Equivalent sequences)
abbrev Sequence.Equiv (a b: ℕ → ℚ) : Prop :=
∀ ε > (0:ℚ), ε.EventuallyClose (a:Sequence) (b:Sequence)Definition 5.2.6 (Equivalent sequences)
lemma Sequence.equiv_def (a b: ℕ → ℚ) :
Equiv a b ↔ ∀ (ε:ℚ), ε > 0 → ε.EventuallyClose (a:Sequence) (b:Sequence) := a:ℕ → ℚb:ℕ → ℚ⊢ Equiv a b ↔ ∀ ε > 0, ε.EventuallyClose ↑a ↑b All goals completed! 🐙Definition 5.2.6 (Equivalent sequences)
lemma Sequence.equiv_iff (a b: ℕ → ℚ) : Equiv a b ↔ ∀ ε > 0, ∃ N, ∀ n ≥ N, |a n - b n| ≤ ε := a:ℕ → ℚb:ℕ → ℚ⊢ Equiv a b ↔ ∀ ε > 0, ∃ N, ∀ n ≥ N, |a n - b n| ≤ ε
All goals completed! 🐙Proposition 5.2.8
lemma Sequence.equiv_example :
-- This proof is perhaps more complicated than it needs to be; a shorter version may be
-- possible that is still faithful to the original text.
Equiv (fun n:ℕ ↦ (1:ℚ)+10^(-(n:ℤ)-1)) (fun n:ℕ ↦ (1:ℚ)-10^(-(n:ℤ)-1)) := ⊢ Equiv (fun n => 1 + 10 ^ (-↑n - 1)) fun n => 1 - 10 ^ (-↑n - 1)
a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)⊢ Equiv a fun n => 1 - 10 ^ (-↑n - 1)
a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)⊢ Equiv a b
a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)⊢ ∀ ε > 0, ∃ N, ∀ n ≥ N, |a n - b n| ≤ ε
intro ε a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0⊢ ∃ N, ∀ n ≥ N, |a n - b n| ≤ ε
have hab (n:ℕ) : |a n - b n| = 2 * 10 ^ (-(n:ℤ)-1) := calc
_ = |((1:ℚ) + (10:ℚ)^(-(n:ℤ)-1)) - ((1:ℚ) - (10:ℚ)^(-(n:ℤ)-1))| := rfl
_ = |2 * (10:ℚ)^(-(n:ℤ)-1)| := a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0n:ℕ⊢ |1 + 10 ^ (-↑n - 1) - (1 - 10 ^ (-↑n - 1))| = |2 * 10 ^ (-↑n - 1)| All goals completed! 🐙
_ = _ := abs_of_nonneg (a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0n:ℕ⊢ 0 ≤ 2 * 10 ^ (-↑n - 1) All goals completed! 🐙)
have hab' (N:ℕ) : ∀ n ≥ N, |a n - b n| ≤ 2 * 10 ^(-(N:ℤ)-1) := ⊢ Equiv (fun n => 1 + 10 ^ (-↑n - 1)) fun n => 1 - 10 ^ (-↑n - 1)
intro n a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))N:ℕn:ℕhn:n ≥ N⊢ |a n - b n| ≤ 2 * 10 ^ (-↑N - 1); a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))N:ℕn:ℕhn:n ≥ N⊢ 2 * 10 ^ (-↑n - 1) ≤ 2 * 10 ^ (-↑N - 1); a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))N:ℕn:ℕhn:n ≥ N⊢ 1 ≤ 10; All goals completed! 🐙
have hN : ∃ N:ℕ, 2 * (10:ℚ) ^(-(N:ℤ)-1) ≤ ε := ⊢ Equiv (fun n => 1 + 10 ^ (-↑n - 1)) fun n => 1 - 10 ^ (-↑n - 1)
have hN' (N:ℕ) : 2 * (10:ℚ)^(-(N:ℤ)-1) ≤ 2/(N+1) := calc
_ = 2 / (10:ℚ)^(N+1) := a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ 2 * 10 ^ (-↑N - 1) = 2 / 10 ^ (N + 1)
a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ 10 ^ (-↑N - 1) * 10 ^ (N + 1) = 1
All goals completed! 🐙
_ ≤ _ := a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ 2 / 10 ^ (N + 1) ≤ 2 / (↑N + 1)
a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ ↑N + 1 ≤ 10 ^ (N + 1)
apply le_trans _ (pow_le_pow_left₀ (show 0 ≤ (2:ℚ) a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ 2 / 10 ^ (N + 1) ≤ 2 / (↑N + 1) All goals completed! 🐙)
(show (2:ℚ) ≤ 10 a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ 2 / 10 ^ (N + 1) ≤ 2 / (↑N + 1) All goals completed! 🐙) _)
a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ ↑N + 1 = ↑(N + 1)a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ 2 ^ (N + 1) = ↑(2 ^ (N + 1))a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ AddMonoidWithOne ℚa:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ AddLeftMono ℚa:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ ZeroLEOneClass ℚa:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ CharZero ℚ a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ ↑N + 1 = ↑(N + 1)a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ 2 ^ (N + 1) = ↑(2 ^ (N + 1))a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ AddMonoidWithOne ℚa:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ AddLeftMono ℚa:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ ZeroLEOneClass ℚa:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕ⊢ CharZero ℚ try All goals completed! 🐙
all_goals All goals completed! 🐙
a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))hN':∀ (N : ℕ), 2 * 10 ^ (-↑N - 1) ≤ 2 / (↑N + 1) :=
fun N =>
Trans.trans
(Eq.mpr
(id
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HMul.hMul rfl rfl) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.mul_eq_eval
(Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.trans (Eq.refl (10 ^ (-↑N - 1))) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (10 ^ (-↑N - 1))))
(Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, 10 ^ (-↑N - 1)) (mul_one ((1, 2) ::ᵣ []).eval)))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1)
(ne_of_gt
(pow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(N + 1)))
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (10 ^ (-↑N - 1))
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval 1 2
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (10 ^ (N + 1))
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (10 ^ (-↑N - 1)) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 10 ^ (N + 1)) ((1, 10 ^ (-↑N - 1)) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = 10 ^ (-↑N - 1))
(Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 10 ^ (-↑N - 1)) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, 10 ^ (-↑N - 1)).2 (1, 10 ^ (-↑N - 1)).1))
(Mathlib.Tactic.FieldSimp.zpow'_one (10 ^ (-↑N - 1)))))
(Mathlib.Tactic.FieldSimp.zpow'_one (10 ^ (N + 1)))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.trans (Eq.refl (10 ^ (N + 1))) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (10 ^ (N + 1))))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, 10 ^ (N + 1)) (div_one ((1, 2) ::ᵣ []).eval)))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (10 ^ (N + 1))
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval 1 2
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1)
(ne_of_gt
(pow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(N + 1)))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero 1
(Mathlib.Meta.NormNum.isNat_eq_false (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 0)) (Eq.refl false))
one_ne_zero))))
(of_eq_true
(Eq.trans
(congrFun'
(congrArg Eq
(Eq.trans
(Eq.trans
(congrArg (HMul.hMul (10 ^ (-↑N - 1)))
(Eq.trans (equiv_example._simp_1 10 (N + 1))
(congrArg (HPow.hPow 10) (Eq.trans (Nat.cast_add N 1) (congrArg (HAdd.hAdd ↑N) Nat.cast_one)))))
((fun m n =>
Eq.symm
(zpow_add₀
(have this :=
Mathlib.Meta.NormNum.isNat_eq_false (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 0)) (Eq.refl false);
this)
m n))
(-↑N - 1) (↑N + 1)))
(Eq.trans (congrArg (HPow.hPow 10) (Eq.trans (sub_add_add_cancel (-↑N) (↑N) 1) (neg_add_cancel ↑N)))
(zpow_zero 10))))
1)
(eq_self 1))))
(div_le_div₀
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))
(le_refl 2)
(Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' N)
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)) (Eq.refl (Nat.ble 1 1))))
(le_trans
(Eq.mpr
(eq_of_heq
((fun α self self' e'_2 a a' e'_3 a_1 a'_1 e'_4 =>
Eq.casesOn (motive := fun a_2 x => self' = a_2 → e'_2 ≍ x → (a ≤ a_1) ≍ (a' ≤ a'_1)) e'_2
(fun h =>
Eq.ndrec (motive := fun self' =>
∀ (e_2 : self = self'), e_2 ≍ Eq.refl self → (a ≤ a_1) ≍ (a' ≤ a'_1))
(fun e_2 h =>
Eq.casesOn (motive := fun a_2 x => a' = a_2 → e'_3 ≍ x → (a ≤ a_1) ≍ (a' ≤ a'_1)) e'_3
(fun h =>
Eq.ndrec (motive := fun a' => ∀ (e_3 : a = a'), e_3 ≍ Eq.refl a → (a ≤ a_1) ≍ (a' ≤ a'_1))
(fun e_3 h =>
Eq.casesOn (motive := fun a_2 x => a'_1 = a_2 → e'_4 ≍ x → (a ≤ a_1) ≍ (a ≤ a'_1)) e'_4
(fun h =>
Eq.ndrec (motive := fun a' =>
∀ (e_4 : a_1 = a'), e_4 ≍ Eq.refl a_1 → (a ≤ a_1) ≍ (a ≤ a'))
(fun e_4 h => HEq.refl (a ≤ a_1)) (Eq.symm h) e'_4)
(Eq.refl a'_1) (HEq.refl e'_4))
(Eq.symm h) e'_3)
(Eq.refl a') (HEq.refl e'_3))
(Eq.symm h) e'_2)
(Eq.refl self') (HEq.refl e'_2))
ℚ Rat.instPreorder.toLE Rat.instPartialOrder.toLE (Eq.refl Rat.instPreorder.toLE) (↑N + 1) (↑(N + 1))
(of_eq_true
(Eq.trans (congrArg (Eq (↑N + 1)) (Eq.trans (Nat.cast_add N 1) (congrArg (HAdd.hAdd ↑N) Nat.cast_one)))
(eq_self (↑N + 1))))
(2 ^ (N + 1)) (↑(2 ^ (N + 1)))
(of_eq_true (Eq.trans (congrArg (Eq (2 ^ (N + 1))) (Nat.cast_pow 2 (N + 1))) (eq_self (2 ^ (N + 1)))))))
(Nat.cast_le.mpr (Section_4_3.two_pow_geq (N + 1))))
(pow_le_pow_left₀
(have this :=
Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)) (Eq.refl true);
this)
(have this :=
Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true);
this)
(N + 1))))N:ℕhN:2 / ε < ↑N⊢ ∃ N, 2 * 10 ^ (-↑N - 1) ≤ ε
a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))hN':∀ (N : ℕ), 2 * 10 ^ (-↑N - 1) ≤ 2 / (↑N + 1) :=
fun N =>
Trans.trans
(Eq.mpr
(id
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HMul.hMul rfl rfl) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.mul_eq_eval
(Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.trans (Eq.refl (10 ^ (-↑N - 1))) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (10 ^ (-↑N - 1))))
(Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, 10 ^ (-↑N - 1)) (mul_one ((1, 2) ::ᵣ []).eval)))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1)
(ne_of_gt
(pow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(N + 1)))
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (10 ^ (-↑N - 1))
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval 1 2
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (10 ^ (N + 1))
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (10 ^ (-↑N - 1)) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 10 ^ (N + 1)) ((1, 10 ^ (-↑N - 1)) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = 10 ^ (-↑N - 1))
(Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 10 ^ (-↑N - 1)) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, 10 ^ (-↑N - 1)).2 (1, 10 ^ (-↑N - 1)).1))
(Mathlib.Tactic.FieldSimp.zpow'_one (10 ^ (-↑N - 1)))))
(Mathlib.Tactic.FieldSimp.zpow'_one (10 ^ (N + 1)))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.trans (Eq.refl (10 ^ (N + 1))) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (10 ^ (N + 1))))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, 10 ^ (N + 1)) (div_one ((1, 2) ::ᵣ []).eval)))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (10 ^ (N + 1))
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval 1 2
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1)
(ne_of_gt
(pow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(N + 1)))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero 1
(Mathlib.Meta.NormNum.isNat_eq_false (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 0)) (Eq.refl false))
one_ne_zero))))
(of_eq_true
(Eq.trans
(congrFun'
(congrArg Eq
(Eq.trans
(Eq.trans
(congrArg (HMul.hMul (10 ^ (-↑N - 1)))
(Eq.trans (equiv_example._simp_1 10 (N + 1))
(congrArg (HPow.hPow 10) (Eq.trans (Nat.cast_add N 1) (congrArg (HAdd.hAdd ↑N) Nat.cast_one)))))
((fun m n =>
Eq.symm
(zpow_add₀
(have this :=
Mathlib.Meta.NormNum.isNat_eq_false (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 0)) (Eq.refl false);
this)
m n))
(-↑N - 1) (↑N + 1)))
(Eq.trans (congrArg (HPow.hPow 10) (Eq.trans (sub_add_add_cancel (-↑N) (↑N) 1) (neg_add_cancel ↑N)))
(zpow_zero 10))))
1)
(eq_self 1))))
(div_le_div₀
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))
(le_refl 2)
(Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' N)
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)) (Eq.refl (Nat.ble 1 1))))
(le_trans
(Eq.mpr
(eq_of_heq
((fun α self self' e'_2 a a' e'_3 a_1 a'_1 e'_4 =>
Eq.casesOn (motive := fun a_2 x => self' = a_2 → e'_2 ≍ x → (a ≤ a_1) ≍ (a' ≤ a'_1)) e'_2
(fun h =>
Eq.ndrec (motive := fun self' =>
∀ (e_2 : self = self'), e_2 ≍ Eq.refl self → (a ≤ a_1) ≍ (a' ≤ a'_1))
(fun e_2 h =>
Eq.casesOn (motive := fun a_2 x => a' = a_2 → e'_3 ≍ x → (a ≤ a_1) ≍ (a' ≤ a'_1)) e'_3
(fun h =>
Eq.ndrec (motive := fun a' => ∀ (e_3 : a = a'), e_3 ≍ Eq.refl a → (a ≤ a_1) ≍ (a' ≤ a'_1))
(fun e_3 h =>
Eq.casesOn (motive := fun a_2 x => a'_1 = a_2 → e'_4 ≍ x → (a ≤ a_1) ≍ (a ≤ a'_1)) e'_4
(fun h =>
Eq.ndrec (motive := fun a' =>
∀ (e_4 : a_1 = a'), e_4 ≍ Eq.refl a_1 → (a ≤ a_1) ≍ (a ≤ a'))
(fun e_4 h => HEq.refl (a ≤ a_1)) (Eq.symm h) e'_4)
(Eq.refl a'_1) (HEq.refl e'_4))
(Eq.symm h) e'_3)
(Eq.refl a') (HEq.refl e'_3))
(Eq.symm h) e'_2)
(Eq.refl self') (HEq.refl e'_2))
ℚ Rat.instPreorder.toLE Rat.instPartialOrder.toLE (Eq.refl Rat.instPreorder.toLE) (↑N + 1) (↑(N + 1))
(of_eq_true
(Eq.trans (congrArg (Eq (↑N + 1)) (Eq.trans (Nat.cast_add N 1) (congrArg (HAdd.hAdd ↑N) Nat.cast_one)))
(eq_self (↑N + 1))))
(2 ^ (N + 1)) (↑(2 ^ (N + 1)))
(of_eq_true (Eq.trans (congrArg (Eq (2 ^ (N + 1))) (Nat.cast_pow 2 (N + 1))) (eq_self (2 ^ (N + 1)))))))
(Nat.cast_le.mpr (Section_4_3.two_pow_geq (N + 1))))
(pow_le_pow_left₀
(have this :=
Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)) (Eq.refl true);
this)
(have this :=
Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true);
this)
(N + 1))))N:ℕhN:2 / ε < ↑N⊢ 2 / (↑N + 1) ≤ ε
a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))hN':∀ (N : ℕ), 2 * 10 ^ (-↑N - 1) ≤ 2 / (↑N + 1) :=
fun N =>
Trans.trans
(Eq.mpr
(id
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HMul.hMul rfl rfl) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.mul_eq_eval
(Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.trans (Eq.refl (10 ^ (-↑N - 1))) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (10 ^ (-↑N - 1))))
(Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, 10 ^ (-↑N - 1)) (mul_one ((1, 2) ::ᵣ []).eval)))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1)
(ne_of_gt
(pow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(N + 1)))
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (10 ^ (-↑N - 1))
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval 1 2
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (10 ^ (N + 1))
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (10 ^ (-↑N - 1)) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 10 ^ (N + 1)) ((1, 10 ^ (-↑N - 1)) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = 10 ^ (-↑N - 1))
(Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 10 ^ (-↑N - 1)) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, 10 ^ (-↑N - 1)).2 (1, 10 ^ (-↑N - 1)).1))
(Mathlib.Tactic.FieldSimp.zpow'_one (10 ^ (-↑N - 1)))))
(Mathlib.Tactic.FieldSimp.zpow'_one (10 ^ (N + 1)))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.trans (Eq.refl (10 ^ (N + 1))) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (10 ^ (N + 1))))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, 10 ^ (N + 1)) (div_one ((1, 2) ::ᵣ []).eval)))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (10 ^ (N + 1))
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval 1 2
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1)
(ne_of_gt
(pow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(N + 1)))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero 1
(Mathlib.Meta.NormNum.isNat_eq_false (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 0)) (Eq.refl false))
one_ne_zero))))
(of_eq_true
(Eq.trans
(congrFun'
(congrArg Eq
(Eq.trans
(Eq.trans
(congrArg (HMul.hMul (10 ^ (-↑N - 1)))
(Eq.trans (equiv_example._simp_1 10 (N + 1))
(congrArg (HPow.hPow 10) (Eq.trans (Nat.cast_add N 1) (congrArg (HAdd.hAdd ↑N) Nat.cast_one)))))
((fun m n =>
Eq.symm
(zpow_add₀
(have this :=
Mathlib.Meta.NormNum.isNat_eq_false (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 0)) (Eq.refl false);
this)
m n))
(-↑N - 1) (↑N + 1)))
(Eq.trans (congrArg (HPow.hPow 10) (Eq.trans (sub_add_add_cancel (-↑N) (↑N) 1) (neg_add_cancel ↑N)))
(zpow_zero 10))))
1)
(eq_self 1))))
(div_le_div₀
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))
(le_refl 2)
(Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' N)
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)) (Eq.refl (Nat.ble 1 1))))
(le_trans
(Eq.mpr
(eq_of_heq
((fun α self self' e'_2 a a' e'_3 a_1 a'_1 e'_4 =>
Eq.casesOn (motive := fun a_2 x => self' = a_2 → e'_2 ≍ x → (a ≤ a_1) ≍ (a' ≤ a'_1)) e'_2
(fun h =>
Eq.ndrec (motive := fun self' =>
∀ (e_2 : self = self'), e_2 ≍ Eq.refl self → (a ≤ a_1) ≍ (a' ≤ a'_1))
(fun e_2 h =>
Eq.casesOn (motive := fun a_2 x => a' = a_2 → e'_3 ≍ x → (a ≤ a_1) ≍ (a' ≤ a'_1)) e'_3
(fun h =>
Eq.ndrec (motive := fun a' => ∀ (e_3 : a = a'), e_3 ≍ Eq.refl a → (a ≤ a_1) ≍ (a' ≤ a'_1))
(fun e_3 h =>
Eq.casesOn (motive := fun a_2 x => a'_1 = a_2 → e'_4 ≍ x → (a ≤ a_1) ≍ (a ≤ a'_1)) e'_4
(fun h =>
Eq.ndrec (motive := fun a' =>
∀ (e_4 : a_1 = a'), e_4 ≍ Eq.refl a_1 → (a ≤ a_1) ≍ (a ≤ a'))
(fun e_4 h => HEq.refl (a ≤ a_1)) (Eq.symm h) e'_4)
(Eq.refl a'_1) (HEq.refl e'_4))
(Eq.symm h) e'_3)
(Eq.refl a') (HEq.refl e'_3))
(Eq.symm h) e'_2)
(Eq.refl self') (HEq.refl e'_2))
ℚ Rat.instPreorder.toLE Rat.instPartialOrder.toLE (Eq.refl Rat.instPreorder.toLE) (↑N + 1) (↑(N + 1))
(of_eq_true
(Eq.trans (congrArg (Eq (↑N + 1)) (Eq.trans (Nat.cast_add N 1) (congrArg (HAdd.hAdd ↑N) Nat.cast_one)))
(eq_self (↑N + 1))))
(2 ^ (N + 1)) (↑(2 ^ (N + 1)))
(of_eq_true (Eq.trans (congrArg (Eq (2 ^ (N + 1))) (Nat.cast_pow 2 (N + 1))) (eq_self (2 ^ (N + 1)))))))
(Nat.cast_le.mpr (Section_4_3.two_pow_geq (N + 1))))
(pow_le_pow_left₀
(have this :=
Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)) (Eq.refl true);
this)
(have this :=
Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true);
this)
(N + 1))))N:ℕhN:2 / ε < ↑N⊢ 2 ≤ ε * (↑N + 1)
a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))hN':∀ (N : ℕ), 2 * 10 ^ (-↑N - 1) ≤ 2 / (↑N + 1) :=
fun N =>
Trans.trans
(Eq.mpr
(id
(Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HMul.hMul rfl rfl) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.mul_eq_eval
(Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.trans (Eq.refl (10 ^ (-↑N - 1))) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (10 ^ (-↑N - 1))))
(Mathlib.Tactic.FieldSimp.NF.mul_eq_eval₃ (1, 10 ^ (-↑N - 1)) (mul_one ((1, 2) ::ᵣ []).eval)))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval_cons_neg (-1)
(ne_of_gt
(pow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(N + 1)))
(Mathlib.Tactic.FieldSimp.NF.eval_mul_eval_cons 1 (10 ^ (-↑N - 1))
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval 1 2
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval [])))))))
rfl
(Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (10 ^ (N + 1))
(Mathlib.Tactic.FieldSimp.NF.cons_eq_div_of_eq_div 1 (10 ^ (-↑N - 1)) (Eq.symm (div_one 1))))
(Eq.trans (Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 10 ^ (N + 1)) ((1, 10 ^ (-↑N - 1)) ::ᵣ []))
(congr_arg₂ HMul.hMul
(Eq.mpr
(id
(congrArg (fun _a => _a = 10 ^ (-↑N - 1))
(Mathlib.Tactic.FieldSimp.NF.eval_cons (1, 10 ^ (-↑N - 1)) [])))
(Eq.trans (one_mul (Mathlib.Tactic.FieldSimp.zpow' (1, 10 ^ (-↑N - 1)).2 (1, 10 ^ (-↑N - 1)).1))
(Mathlib.Tactic.FieldSimp.zpow'_one (10 ^ (-↑N - 1)))))
(Mathlib.Tactic.FieldSimp.zpow'_one (10 ^ (N + 1)))))))
(Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul (Eq.trans (congr_arg₂ HDiv.hDiv rfl rfl) rfl)
(Eq.trans
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval
(Eq.trans (Eq.refl 2) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval 2))
(Eq.trans (Eq.refl (10 ^ (N + 1))) (Mathlib.Tactic.FieldSimp.NF.atom_eq_eval (10 ^ (N + 1))))
(Mathlib.Tactic.FieldSimp.NF.div_eq_eval₃ (1, 10 ^ (N + 1)) (div_one ((1, 2) ::ᵣ []).eval)))
(Eq.symm
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval (-1) (10 ^ (N + 1))
(Mathlib.Tactic.FieldSimp.NF.eval_cons_mul_eval 1 2
(one_mul (Mathlib.Tactic.FieldSimp.NF.eval []))))))
rfl (Mathlib.Tactic.FieldSimp.eq_div_of_eq_one_of_subst (Eq.symm (div_one 1)) rfl))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero (-1)
(ne_of_gt
(pow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(N + 1)))
(Mathlib.Tactic.FieldSimp.NF.cons_ne_zero 1
(Mathlib.Meta.NormNum.isNat_eq_false (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 0)) (Eq.refl false))
one_ne_zero))))
(of_eq_true
(Eq.trans
(congrFun'
(congrArg Eq
(Eq.trans
(Eq.trans
(congrArg (HMul.hMul (10 ^ (-↑N - 1)))
(Eq.trans (equiv_example._simp_1 10 (N + 1))
(congrArg (HPow.hPow 10) (Eq.trans (Nat.cast_add N 1) (congrArg (HAdd.hAdd ↑N) Nat.cast_one)))))
((fun m n =>
Eq.symm
(zpow_add₀
(have this :=
Mathlib.Meta.NormNum.isNat_eq_false (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 0)) (Eq.refl false);
this)
m n))
(-↑N - 1) (↑N + 1)))
(Eq.trans (congrArg (HPow.hPow 10) (Eq.trans (sub_add_add_cancel (-↑N) (↑N) 1) (neg_add_cancel ↑N)))
(zpow_zero 10))))
1)
(eq_self 1))))
(div_le_div₀
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)) (Eq.refl (Nat.ble 1 2))))
(le_refl 2)
(Right.add_pos_of_nonneg_of_pos (Nat.cast_nonneg' N)
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)) (Eq.refl (Nat.ble 1 1))))
(le_trans
(Eq.mpr
(eq_of_heq
((fun α self self' e'_2 a a' e'_3 a_1 a'_1 e'_4 =>
Eq.casesOn (motive := fun a_2 x => self' = a_2 → e'_2 ≍ x → (a ≤ a_1) ≍ (a' ≤ a'_1)) e'_2
(fun h =>
Eq.ndrec (motive := fun self' =>
∀ (e_2 : self = self'), e_2 ≍ Eq.refl self → (a ≤ a_1) ≍ (a' ≤ a'_1))
(fun e_2 h =>
Eq.casesOn (motive := fun a_2 x => a' = a_2 → e'_3 ≍ x → (a ≤ a_1) ≍ (a' ≤ a'_1)) e'_3
(fun h =>
Eq.ndrec (motive := fun a' => ∀ (e_3 : a = a'), e_3 ≍ Eq.refl a → (a ≤ a_1) ≍ (a' ≤ a'_1))
(fun e_3 h =>
Eq.casesOn (motive := fun a_2 x => a'_1 = a_2 → e'_4 ≍ x → (a ≤ a_1) ≍ (a ≤ a'_1)) e'_4
(fun h =>
Eq.ndrec (motive := fun a' =>
∀ (e_4 : a_1 = a'), e_4 ≍ Eq.refl a_1 → (a ≤ a_1) ≍ (a ≤ a'))
(fun e_4 h => HEq.refl (a ≤ a_1)) (Eq.symm h) e'_4)
(Eq.refl a'_1) (HEq.refl e'_4))
(Eq.symm h) e'_3)
(Eq.refl a') (HEq.refl e'_3))
(Eq.symm h) e'_2)
(Eq.refl self') (HEq.refl e'_2))
ℚ Rat.instPreorder.toLE Rat.instPartialOrder.toLE (Eq.refl Rat.instPreorder.toLE) (↑N + 1) (↑(N + 1))
(of_eq_true
(Eq.trans (congrArg (Eq (↑N + 1)) (Eq.trans (Nat.cast_add N 1) (congrArg (HAdd.hAdd ↑N) Nat.cast_one)))
(eq_self (↑N + 1))))
(2 ^ (N + 1)) (↑(2 ^ (N + 1)))
(of_eq_true (Eq.trans (congrArg (Eq (2 ^ (N + 1))) (Nat.cast_pow 2 (N + 1))) (eq_self (2 ^ (N + 1)))))))
(Nat.cast_le.mpr (Section_4_3.two_pow_geq (N + 1))))
(pow_le_pow_left₀
(have this :=
Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)) (Eq.refl true);
this)
(have this :=
Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true);
this)
(N + 1))))N:ℕhN:2 < ↑N * ε⊢ 2 ≤ ε * (↑N + 1)
All goals completed! 🐙
a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕhN:2 * 10 ^ (-↑N - 1) ≤ ε⊢ ∃ N, ∀ n ≥ N, |a n - b n| ≤ ε; a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕhN:2 * 10 ^ (-↑N - 1) ≤ ε⊢ ∀ n ≥ N, |a n - b n| ≤ ε; intro n a:ℕ → ℚ := fun n => 1 + 10 ^ (-↑n - 1)b:ℕ → ℚ := fun n => 1 - 10 ^ (-↑n - 1)ε:ℚhε:ε > 0hab:∀ (n : ℕ), |a n - b n| = 2 * 10 ^ (-↑n - 1) :=
fun n =>
Trans.trans
(Trans.trans rfl
(of_eq_true
(Eq.trans
(congr
(congrArg Eq
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_zero_add ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (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
((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(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_add
(Mathlib.Tactic.Ring.neg_mul (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℚ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1)))))))
Mathlib.Tactic.Ring.neg_zero))
(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.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_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℚ 1)
(Eq.refl 2))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0)))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(congrArg abs
(Eq.trans
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf'
(congrArg (HPow.hPow 10)
(Eq.trans
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf ↑n)
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑n) (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.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(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_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑n ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Eq.trans
(congr
(congrArg HAdd.hAdd
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(Eq.trans
(Eq.trans
(congr
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow ↑n) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one ↑n)))
(Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg
(congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1)))
(Mathlib.Tactic.RingNF.mul_neg (↑n) 1))
(congrArg Neg.neg (mul_one ↑n))))
0)
(add_zero (-↑n))))
(Mathlib.Tactic.RingNF.add_neg (-1) ↑n)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (10 ^ (-1 - ↑n)) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 2)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 2))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0)))
(Mathlib.Tactic.Ring.zero_mul ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((10 ^ (-1 - ↑n)) ^ Nat.rawCast 1 * Nat.rawCast 2 + 0))))
(Eq.trans
(congrFun'
(congrArg HAdd.hAdd
(congrFun'
(congrArg HMul.hMul
(Eq.trans (congrArg (HPow.hPow (10 ^ (-1 - ↑n))) Mathlib.Tactic.RingNF.nat_rawCast_1)
(pow_one (10 ^ (-1 - ↑n)))))
2))
0)
(add_zero (10 ^ (-1 - ↑n) * 2))))))
(eq_self |10 ^ (-1 - ↑n) * 2|))))
(abs_of_nonneg
(le_of_lt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(zpow_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10))
(Eq.refl (Nat.ble 1 10)))
(-↑n - 1)))))hab':∀ (N n : ℕ), n ≥ N → |a n - b n| ≤ 2 * 10 ^ (-↑N - 1) :=
fun N n hn =>
Eq.mpr (id (congrArg (fun _a => _a ≤ 2 * 10 ^ (-↑N - 1)) (hab n)))
(mul_le_mul_of_nonneg_left
(zpow_le_zpow_right₀
(Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 1))
(Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 10)) (Eq.refl true))
(sub_le_sub_right (neg_le_neg (Nat.mono_cast hn)) 1))
(le_of_lt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℚ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))))N:ℕhN:2 * 10 ^ (-↑N - 1) ≤ εn:ℕhn:n ≥ N⊢ |a n - b n| ≤ ε
All goals completed! 🐙Exercise 5.2.1
theorem Sequence.isCauchy_of_equiv {a b: ℕ → ℚ} (hab: Equiv a b) :
(a:Sequence).IsCauchy ↔ (b:Sequence).IsCauchy := a:ℕ → ℚb:ℕ → ℚhab:Equiv a b⊢ (↑a).IsCauchy ↔ (↑b).IsCauchy All goals completed! 🐙Exercise 5.2.2
theorem Sequence.isBounded_of_eventuallyClose {ε:ℚ} {a b: ℕ → ℚ} (hab: ε.EventuallyClose a b) :
(a:Sequence).IsBounded ↔ (b:Sequence).IsBounded := ε:ℚa:ℕ → ℚb:ℕ → ℚhab:ε.EventuallyClose ↑a ↑b⊢ (↑a).IsBounded ↔ (↑b).IsBounded All goals completed! 🐙end Chapter5