Imports
import Mathlib.Tactic import Analysis.Appendix_B_1

Analysis I, Appendix B.2: The decimal representation of real numbers

An implementation of the decimal representation of Mathlib's real numbers ℝ.

This is separate from the way decimal numerals are already represented in Mathlib. We also represent the integer part of the natural numbers just by ℕ, avoiding using the decimal representation from the previous section, although we still retain the AppendixB.­Digit class.

namespace AppendixBstructure NNRealDecimal where intPart : ℕ fracPart : ℕ → Digitopen NNReal NNRealDecimalAppendixB.NNRealDecimal.mk (intPart : ℕ) (fracPart : ℕ → Digit) : NNRealDecimal#check mk
AppendixB.NNRealDecimal.mk (intPart : ℕ) (fracPart : ℕ → Digit) : NNRealDecimal
@[coe] noncomputable def NNRealDecimal.toNNReal (d:NNRealDecimal) : NNReal := d.intPart + ∑' i, (d.fracPart i) * (10:NNReal) ^ (-i-1:ℝ)noncomputable instance NNRealDecimal.instCoeNNReal : Coe NNRealDecimal NNReal where coe := toNNReal

Exercise B.2.1

theorem declaration uses `sorry`NNRealDecimal.toNNReal_conv (d:NNRealDecimal) : Summable fun i ↦ (d.fracPart i) * (10:NNReal) ^ (-i-1:ℝ) := d:NNRealDecimal⊢ Summable fun i ↦ ↑↑(d.fracPart i) * 10 ^ (-↑i - 1) All goals completed! 🐙
theorem NNRealDecimal.surj (x:NNReal) : ∃ d:NNRealDecimal, x = d := x:ℝ≥0⊢ ∃ d, x = ↑d -- This proof is written to follow the structure of the original text. x:ℝ≥0h:x = 0⊢ ∃ d, x = ↑dx:ℝ≥0h:¬x = 0⊢ ∃ d, x = ↑d x:ℝ≥0h:x = 0⊢ ∃ d, x = ↑d x:ℝ≥0h:x = 0⊢ x = ↑{ intPart := 0, fracPart := fun x ↦ 0 }; All goals completed! 🐙 x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊⊢ ∃ d, x = ↑d have hs (n:ℕ) : s n ≤ x * 10^n := Nat.floor_le (x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊n:ℕ⊢ 0 ≤ x * 10 ^ n All goals completed! 🐙) x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1⊢ ∃ d, x = ↑d have hdigit (n:ℕ) : ∃ a:Digit, s (n+1) = 10 * s n + (a:ℕ) := x:ℝ≥0⊢ ∃ d, x = ↑d have hl : (10:NNReal) * s n < s (n+1) + 1 := calc _ ≤ 10 * (x * 10^n) := x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1n:ℕ⊢ 10 * ↑(s n) ≤ 10 * (x * 10 ^ n) x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1n:ℕ⊢ ↑(s n) ≤ x * 10 ^ n; All goals completed! 🐙 _ = x * 10^(n+1) := x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1n:ℕ⊢ 10 * (x * 10 ^ n) = x * 10 ^ (n + 1) All goals completed! 🐙 _ < _ := hs' _ have hu : s (n+1) < (10:NNReal) * s n + 10 := calc _ ≤ x * 10^(n+1) := hs (n+1) _ = 10 * (x * 10^n) := x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1n:ℕhl:10 * ↑(s n) < ↑(s (n + 1)) + 1⊢ x * 10 ^ (n + 1) = 10 * (x * 10 ^ n) All goals completed! 🐙 _ < 10 * (s n + 1) := x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1n:ℕhl:10 * ↑(s n) < ↑(s (n + 1)) + 1⊢ 10 * (x * 10 ^ n) < 10 * (↑(s n) + 1) x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1n:ℕhl:10 * ↑(s n) < ↑(s (n + 1)) + 1⊢ x * 10 ^ n < ↑(s n) + 1; All goals completed! 🐙 _ = _ := x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1n:ℕhl:10 * ↑(s n) < ↑(s (n + 1)) + 1⊢ 10 * (↑(s n) + 1) = 10 * ↑(s n) + 10 All goals completed! 🐙 x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1n:ℕhl:10 * s n < s (n + 1) + 1hu:s (n + 1) < 10 * s n + 10⊢ ∃ a, s (n + 1) = 10 * s n + ↑a x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1n:ℕhl:10 * s n < s (n + 1) + 1hu:s (n + 1) < 10 * s n + 10d:ℕ := s (n + 1) - 10 * s n⊢ ∃ a, s (n + 1) = 10 * s n + ↑a have hd : d < 10 := x:ℝ≥0⊢ ∃ d, x = ↑d All goals completed! 🐙 have : s (n+1) = 10 * s n + d := x:ℝ≥0⊢ ∃ d, x = ↑d All goals completed! 🐙 All goals completed! 🐙 x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)⊢ ∃ d, x = ↑d x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }⊢ ∃ d, x = ↑d; x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }⊢ x = ↑d have hsum (n:ℕ) : s n * (10:NNReal)^(-n:ℝ) = s 0 + ∑ i ∈ .range n, a i * (10:NNReal)^(-i-1:ℝ) := x:ℝ≥0⊢ ∃ d, x = ↑d x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }⊢ ↑(s 0) * 10 ^ (-↑0) = ↑(s 0) + ∑ i ∈ Finset.range 0, ↑↑(a i) * 10 ^ (-↑i - 1)x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }n:ℕhn:↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)⊢ ↑(s (n + 1)) * 10 ^ (-↑(n + 1)) = ↑(s 0) + ∑ i ∈ Finset.range (n + 1), ↑↑(a i) * 10 ^ (-↑i - 1); x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }n:ℕhn:↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)⊢ ↑(s (n + 1)) * 10 ^ (-↑(n + 1)) = ↑(s 0) + ∑ i ∈ Finset.range (n + 1), ↑↑(a i) * 10 ^ (-↑i - 1) x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }n:ℕhn:↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)⊢ ↑(10 * s n + ↑(a n)) * 10 ^ (-↑(n + 1)) = ↑(s 0) + ∑ i ∈ Finset.range (n + 1), ↑↑(a i) * 10 ^ (-↑i - 1); calc _ = s n * (10:NNReal)^(-n:ℝ) + a n * 10^(-n-1:ℝ) := x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }n:ℕhn:↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)⊢ ↑(10 * s n + ↑(a n)) * 10 ^ (-↑(n + 1)) = ↑(s n) * 10 ^ (-↑n) + ↑↑(a n) * 10 ^ (-↑n - 1) x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }n:ℕhn:↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)⊢ 10 * ↑(s n) * 10 ^ (-1 + -↑n) + ↑↑(a n) * 10 ^ (-1 + -↑n) = ↑(s n) * 10 ^ (-↑n) + ↑↑(a n) * 10 ^ (-↑n - 1); x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }n:ℕhn:↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)⊢ ↑(s n) * 10 ^ (-1 - ↑n) * 10 + 10 ^ (-1 - ↑n) * ↑↑(a n) = ↑(s n) * 10 ^ (-↑n) + 10 ^ (-1 - ↑n) * ↑↑(a n); x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }n:ℕhn:↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)⊢ ↑(s n) * 10 ^ (-1 - ↑n) * 10 = ↑(s n) * 10 ^ (-↑n) x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }n:ℕhn:↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)⊢ ↑(s n) * 10 ^ (-1 - ↑n + 1) = ↑(s n) * 10 ^ (-↑n)x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }n:ℕhn:↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)⊢ 10 ≠ 0; x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }n:ℕhn:↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)⊢ 10 ≠ 0; All goals completed! 🐙 _ = s 0 + (∑ i ∈ .range n, a i * (10:NNReal)^(-i-1:ℝ) + a n * 10^(-n-1:ℝ)) := x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }n:ℕhn:↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)⊢ ↑(s n) * 10 ^ (-↑n) + ↑↑(a n) * 10 ^ (-↑n - 1) = ↑(s 0) + (∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1) + ↑↑(a n) * 10 ^ (-↑n - 1)) All goals completed! 🐙 _ = _ := x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }n:ℕhn:↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)⊢ ↑(s 0) + (∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1) + ↑↑(a n) * 10 ^ (-↑n - 1)) = ↑(s 0) + ∑ i ∈ Finset.range (n + 1), ↑↑(a i) * 10 ^ (-↑i - 1) x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }n:ℕhn:↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)⊢ ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1) + ↑↑(a n) * 10 ^ (-↑n - 1) = ∑ i ∈ Finset.range (n + 1), ↑↑(a i) * 10 ^ (-↑i - 1); x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }n:ℕhn:↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)⊢ ∑ i ∈ Finset.range (n + 1), ↑↑(a i) * 10 ^ (-↑i - 1) = ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1) + ↑↑(a n) * 10 ^ (-↑n - 1); All goals completed! 🐙 x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun x ↦ ↑(s 0) + ∑ i ∈ Finset.range x, ↑↑(d.fracPart i) * 10 ^ (-↑i - 1)) Filter.atTop (nhds (↑(s 0) + ∑' (i : ℕ), ↑↑(d.fracPart i) * 10 ^ (-↑i - 1)))⊢ x = ↑d x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun x ↦ ↑(s 0) + ∑ i ∈ Finset.range x, ↑↑(d.fracPart i) * 10 ^ (-↑i - 1)) Filter.atTop (nhds (↑(s 0) + ∑' (i : ℕ), ↑↑(d.fracPart i) * 10 ^ (-↑i - 1)))⊢ (fun x ↦ ↑(s 0) + ∑ i ∈ Finset.range x, ↑↑(d.fracPart i) * 10 ^ (-↑i - 1)) = fun n ↦ ↑(s n) * 10 ^ (-↑n)x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)⊢ x = ↑d x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun x ↦ ↑(s 0) + ∑ i ∈ Finset.range x, ↑↑(d.fracPart i) * 10 ^ (-↑i - 1)) Filter.atTop (nhds (↑(s 0) + ∑' (i : ℕ), ↑↑(d.fracPart i) * 10 ^ (-↑i - 1)))⊢ (fun x ↦ ↑(s 0) + ∑ i ∈ Finset.range x, ↑↑(d.fracPart i) * 10 ^ (-↑i - 1)) = fun n ↦ ↑(s n) * 10 ^ (-↑n) x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun x ↦ ↑(s 0) + ∑ i ∈ Finset.range x, ↑↑(d.fracPart i) * 10 ^ (-↑i - 1)) Filter.atTop (nhds (↑(s 0) + ∑' (i : ℕ), ↑↑(d.fracPart i) * 10 ^ (-↑i - 1)))n:ℕ⊢ ↑(↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(d.fracPart i) * 10 ^ (-↑i - 1)) = ↑(↑(s n) * 10 ^ (-↑n)); All goals completed! 🐙 x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)⊢ Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds x) x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)⊢ Filter.Tendsto (fun n ↦ x - 10 ^ (-↑n)) Filter.atTop (nhds x)x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)⊢ Filter.Tendsto (fun x_1 ↦ x) Filter.atTop (nhds x)x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)⊢ (fun n ↦ x - 10 ^ (-↑n)) ≤ fun n ↦ ↑(s n) * 10 ^ (-↑n)x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)⊢ (fun n ↦ ↑(s n) * 10 ^ (-↑n)) ≤ fun x_1 ↦ x x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)⊢ Filter.Tendsto (fun n ↦ x - 10 ^ (-↑n)) Filter.atTop (nhds x) x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)⊢ x = x - 0x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)⊢ Filter.Tendsto (fun n ↦ 10 ^ (-↑n)) Filter.atTop (nhds 0) x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)⊢ x = x - 0 All goals completed! 🐙 x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ 10 ^ (-↑n) = (1 / 10) ^ nx:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)⊢ 1 / 10 < 1 x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ 10 ^ (-↑n) = (1 / 10) ^ n All goals completed! 🐙 x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)⊢ 1 < 10; All goals completed! 🐙 x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)⊢ Filter.Tendsto (fun x_1 ↦ x) Filter.atTop (nhds x) All goals completed! 🐙 x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)⊢ (fun n ↦ x - 10 ^ (-↑n)) ≤ fun n ↦ ↑(s n) * 10 ^ (-↑n) x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ (fun n ↦ x - 10 ^ (-↑n)) n ≤ (fun n ↦ ↑(s n) * 10 ^ (-↑n)) n; x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ x ≤ ↑(s n) * 10 ^ (-↑n) + 10 ^ (-↑n); calc _ = (x * 10^n) * (10:NNReal)^(-n:ℝ) := x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ x = x * 10 ^ n * 10 ^ (-↑n) x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ x = x * 10 ^ (↑n + -↑n)x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ 10 ≠ 0; x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ 10 ≠ 0; All goals completed! 🐙 _ ≤ ((s n:NNReal) + 1)*(10:NNReal)^(-n:ℝ) := x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ x * 10 ^ n * 10 ^ (-↑n) ≤ (↑(s n) + 1) * 10 ^ (-↑n) x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ x * 10 ^ n ≤ ↑(s n) + 1; All goals completed! 🐙 _ = _ := x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ (↑(s n) + 1) * 10 ^ (-↑n) = ↑(s n) * 10 ^ (-↑n) + 10 ^ (-↑n) All goals completed! 🐙 x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ (fun n ↦ ↑(s n) * 10 ^ (-↑n)) n ≤ (fun x_1 ↦ x) n; x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ ↑(s n) * 10 ^ (-↑n) ≤ x; calc _ ≤ (x * 10^n) * (10:NNReal)^(-n:ℝ) := x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ ↑(s n) * 10 ^ (-↑n) ≤ x * 10 ^ n * 10 ^ (-↑n) x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ ↑(s n) ≤ x * 10 ^ n; All goals completed! 🐙 _ = x := x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ x * 10 ^ n * 10 ^ (-↑n) = x x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ x * 10 ^ (↑n + -↑n) = xx:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ 10 ≠ 0; x:ℝ≥0h:¬x = 0s:ℕ → ℕ := fun n ↦ ⌊x * 10 ^ n⌋₊hs:∀ (n : ℕ), ↑(s n) ≤ x * 10 ^ nhs':∀ (n : ℕ), x * 10 ^ n < ↑(s n) + 1a:ℕ → Digitha:∀ (n : ℕ), s (n + 1) = 10 * s n + ↑(a n)d:NNRealDecimal := { intPart := s 0, fracPart := a }hsum:∀ (n : ℕ), ↑(s n) * 10 ^ (-↑n) = ↑(s 0) + ∑ i ∈ Finset.range n, ↑↑(a i) * 10 ^ (-↑i - 1)this:Filter.Tendsto (fun n ↦ ↑(s n) * 10 ^ (-↑n)) Filter.atTop (nhds ↑d)n:ℕ⊢ 10 ≠ 0; All goals completed! 🐙

Proposition B.2.2

theorem NNRealDecimal.not_inj : (1:NNReal) = (mk 1 fun _ ↦ 0) ∧ (1:NNReal) = (mk 0 fun _ ↦ 9) := ⊢ 1 = ↑{ intPart := 1, fracPart := fun x ↦ 0 } ∧ 1 = ↑{ intPart := 0, fracPart := fun x ↦ 9 } -- This proof is written to follow the structure of the original text. ⊢ 1 = ∑' (i : ℕ), ↑↑9 * 10 ^ (-↑i - 1) this:Filter.Tendsto (fun n ↦ ∑ i ∈ Finset.range n, ↑↑({ intPart := 0, fracPart := fun x ↦ 9 }.fracPart i) * 10 ^ (-↑i - 1)) Filter.atTop (nhds (∑' (i : ℕ), ↑↑({ intPart := 0, fracPart := fun x ↦ 9 }.fracPart i) * 10 ^ (-↑i - 1)))⊢ 1 = ∑' (i : ℕ), ↑↑9 * 10 ^ (-↑i - 1) this:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))⊢ 1 = ∑' (i : ℕ), ↑↑9 * 10 ^ (-↑i - 1) this:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))⊢ Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds 1) this:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕ⊢ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))⊢ Filter.Tendsto (fun n ↦ 1 - 10 ^ (-↑n)) Filter.atTop (nhds 1) this:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕ⊢ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n) this:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))⊢ ∑ x ∈ Finset.range 0, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑0)this:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)⊢ ∑ x ∈ Finset.range (n + 1), ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑(n + 1)) this:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))⊢ ∑ x ∈ Finset.range 0, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑0) All goals completed! 🐙 this:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)⊢ 1 - 10 ^ (-↑n) + ↑↑9 * 10 ^ (-↑n - 1) = 1 - 10 ^ (-↑n - 1) have : (10:NNReal)^(-n:ℝ) = 10^(-n-1:ℝ) * 10 := ⊢ 1 = ↑{ intPart := 1, fracPart := fun x ↦ 0 } ∧ 1 = ↑{ intPart := 0, fracPart := fun x ↦ 9 } this:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)⊢ 10 ^ (-↑n) = 10 ^ (-↑n - 1 + 1)this:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)⊢ 10 ≠ 0; this:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)⊢ 10 ≠ 0; All goals completed! 🐙 this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ ↑(1 - 10 ^ (-↑n - 1) * 10) + ↑↑9 * 10 ^ (-↑n - 1) = ↑(1 - 10 ^ (-↑n - 1)) this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ ↑1 - ↑(10 ^ (-↑n - 1) * 10) + ↑↑9 * 10 ^ (-↑n - 1) = ↑1 - ↑(10 ^ (-↑n - 1))this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ 10 ^ (-↑n - 1) ≤ 1this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ 10 ^ (-↑n - 1) * 10 ≤ 1 this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ ↑1 - ↑(10 ^ (-↑n - 1) * 10) + ↑↑9 * 10 ^ (-↑n - 1) = ↑1 - ↑(10 ^ (-↑n - 1)) suffices h : ∀ c a : ℝ, c = 9 → 1 - a * 10 + c * a = 1 - a this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10h:∀ (c a : ℝ), c = 9 → 1 - a * 10 + c * a = 1 - a⊢ ↑1 - ↑(10 ^ (-↑n - 1) * 10) + ↑↑9 * 10 ^ (-↑n - 1) = ↑1 - ↑(10 ^ (-↑n - 1)) this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10h:∀ (c a : ℝ), c = 9 → 1 - a * 10 + c * a = 1 - a⊢ ↑↑9 = 9; All goals completed! 🐙 All goals completed! 🐙 this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ 10 ^ (-↑n - 1) ≤ 1 this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ 1 ≤ 10this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ -↑n - 1 ≤ 0; this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ -↑n - 1 ≤ 0; All goals completed! 🐙 this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ 10 ^ (-↑n - 1 + 1) ≤ 1this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ 10 ≠ 0 this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ 1 ≤ 10this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ -↑n - 1 + 1 ≤ 0this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ 10 ≠ 0; this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ -↑n - 1 + 1 ≤ 0this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ 10 ≠ 0; this✝:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))n:ℕhn:∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1) = 1 - 10 ^ (-↑n)this:10 ^ (-↑n) = 10 ^ (-↑n - 1) * 10⊢ 10 ≠ 0; All goals completed! 🐙 this:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))⊢ 1 = 1 - 0this:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))⊢ Filter.Tendsto (fun n ↦ 10 ^ (-↑n)) Filter.atTop (nhds 0); this:Filter.Tendsto (fun n ↦ ∑ x ∈ Finset.range n, ↑↑9 * 10 ^ (-↑x - 1)) Filter.atTop (nhds (∑' (x : ℕ), ↑↑9 * 10 ^ (-↑x - 1)))⊢ Filter.Tendsto (fun n ↦ 10 ^ (-↑n)) Filter.atTop (nhds 0) convert tendsto_pow_atTop_nhds_zero_of_lt_one (show (1/10:NNReal) < 1 ⊢ 1 = ↑{ intPart := 1, fracPart := fun x ↦ 0 } ∧ 1 = ↑{ intPart := 0, fracPart := fun x ↦ 9 } All goals completed! 🐙) with n All goals completed! 🐙
inductive RealDecimal where | pos : NNRealDecimal → RealDecimal | neg : NNRealDecimal → RealDecimalnoncomputable instance RealDecimal.instCoeReal : Coe RealDecimal ℝ where coe := fun d ↦ match d with | RealDecimal.pos d => d.toNNReal | RealDecimal.neg d => -(d.toNNReal:ℝ)theorem RealDecimal.surj (x:ℝ) : ∃ d:RealDecimal, x = d := x:ℝ⊢ ∃ d, x = match d with | pos d => ↑↑d | neg d => -↑↑d x:ℝh:0 ≤ x⊢ ∃ d, x = match d with | pos d => ↑↑d | neg d => -↑↑dx:ℝh:x < 0⊢ ∃ d, x = match d with | pos d => ↑↑d | neg d => -↑↑d x:ℝh:0 ≤ x⊢ ∃ d, x = match d with | pos d => ↑↑d | neg d => -↑↑d x:ℝh:0 ≤ xd:NNRealDecimalhd:x.toNNReal = ↑d⊢ ∃ d, x = match d with | pos d => ↑↑d | neg d => -↑↑d; x:ℝh:0 ≤ xd:NNRealDecimalhd:x.toNNReal = ↑d⊢ x = match pos d with | pos d => ↑↑d | neg d => -↑↑d; All goals completed! 🐙 x:ℝh:x < 0⊢ ∃ d, x = match d with | pos d => ↑↑d | neg d => -↑↑d x:ℝh:x < 0d:NNRealDecimalhd:(-x).toNNReal = ↑d⊢ ∃ d, x = match d with | pos d => ↑↑d | neg d => -↑↑d; x:ℝh:x < 0d:NNRealDecimalhd:(-x).toNNReal = ↑d⊢ x = match neg d with | pos d => ↑↑d | neg d => -↑↑d; All goals completed! 🐙

Exercise B.2.2

theorem declaration uses `sorry`RealDecimal.not_inj_one (d: RealDecimal) : (d:ℝ) = 1 ↔ (d = pos (mk 1 fun _ ↦ 0) ∨ d = pos (mk 0 fun _ ↦ 9)) := d:RealDecimal⊢ (match d with | pos d => ↑↑d | neg d => -↑↑d) = 1 ↔ d = pos { intPart := 1, fracPart := fun x ↦ 0 } ∨ d = pos { intPart := 0, fracPart := fun x ↦ 9 } All goals completed! 🐙

Exercise B.2.3

abbrev TerminatingDecimal (x:ℝ) : Prop := ∃ (n:ℤ) (m:ℕ), x = n / (10:ℝ)^m
theorem declaration uses `sorry`RealDecimal.not_inj_terminating {x:ℝ} (hx: TerminatingDecimal x) : ∃ d₁ d₂:RealDecimal, d₁ ≠ d₂ ∧ ∀ d: RealDecimal, d = x ↔ d = d₁ ∨ d = d₂ := x:ℝhx:TerminatingDecimal x⊢ ∃ d₁ d₂, d₁ ≠ d₂ ∧ ∀ (d : RealDecimal), (match d with | pos d => ↑↑d | neg d => -↑↑d) = x ↔ d = d₁ ∨ d = d₂ All goals completed! 🐙theorem declaration uses `sorry`RealDecimal.inj_nonterminating {x:ℝ} (hx: ¬TerminatingDecimal x) : ∃! d:RealDecimal, d = x := x:ℝhx:¬TerminatingDecimal x⊢ ∃! d, (match d with | pos d => ↑↑d | neg d => -↑↑d) = x All goals completed! 🐙/-- Exercise B.2.4. This is Corollary 8.3.4, but the intent is to rewrite the proof using the decimal system. -/ declaration uses `sorry`example : Uncountable ℝ := ⊢ Uncountable ℝ All goals completed! 🐙end AppendixB