Andrew Sneap, November 2021
In this file I define the limit for sequences of rational numbers,
and prove that 2/3^n converges by first proving the sandwich theorem,
and that 1/(n+1) converges to 0.
\begin{code}
{-# OPTIONS --safe --without-K --lossy-unification #-}
open import MLTT.Spartan renaming (_+_ to _∔_)
open import Notation.Order
open import UF.Base
open import UF.FunExt
open import UF.Subsingletons
open import UF.PropTrunc
open import Rationals.Type
open import Rationals.Addition
open import Rationals.Abs
open import Rationals.Multiplication
open import Rationals.Negation
open import Rationals.Order
open import Rationals.Positive hiding (_+_ ; _*_)
open import Rationals.FractionsOrder
open import Rationals.FractionsOperations renaming (_*_ to _𝔽*_) hiding (abs ; -_ ; _+_)
open import Naturals.Addition renaming (_+_ to _ℕ+_)
open import Naturals.Division
open import Naturals.Multiplication renaming (_*_ to _ℕ*_)
open import Naturals.Order
open import Naturals.Properties
open import Integers.Type hiding (abs)
open import Integers.Addition renaming (_+_ to _ℤ+_) hiding (_-_)
open import Integers.Order
open import Integers.Multiplication renaming (_*_ to _ℤ*_)
module Rationals.Limits
(fe : Fun-Ext)
(pe : Prop-Ext)
(pt : propositional-truncations-exist)
where
open import MetricSpaces.Rationals fe pe pt
_⟶_ : (f : ℕ → ℚ) → (L : ℚ) → 𝓤₀ ̇
f ⟶ L = (ε₊@(ε , _) : ℚ₊) → Σ N ꞉ ℕ , ((n : ℕ) → N ≤ n → abs (f n - L) < ε)
sandwich-theorem : (L : ℚ)
→ (f g h : ℕ → ℚ)
→ Σ N ꞉ ℕ , ((n : ℕ) → N ≤ n → f n ≤ g n ≤ h n)
→ f ⟶ L
→ h ⟶ L
→ g ⟶ L
sandwich-theorem L f g h (N , α) f⟶L h⟶L = γ
where
γ : g ⟶ L
γ ε₊@(ε , _) = γ' (f⟶L ε₊) (h⟶L ε₊)
where
γ' : Σ N₁ ꞉ ℕ , ((n : ℕ) → N₁ ≤ n → abs (f n - L) < ε)
→ Σ N₂ ꞉ ℕ , ((n : ℕ) → N₂ ≤ n → abs (h n - L) < ε)
→ Σ M ꞉ ℕ , ((n : ℕ) → M ≤ n → abs (g n - L) < ε)
γ' (N₁ , β) (N₂ , δ) = M , γ''
where
M : ℕ
M = max (max N₁ N₂) N
I : N ≤ M
I = max-≤-upper-bound' N (max N₁ N₂)
II : N₁ ≤ max N₁ N₂
II = max-≤-upper-bound N₁ N₂
III : N₂ ≤ max N₁ N₂
III = max-≤-upper-bound' N₂ N₁
IV : max N₁ N₂ ≤ M
IV = max-≤-upper-bound (max N₁ N₂) N
V : N₁ ≤ M
V = ≤-trans N₁ (max N₁ N₂) M II IV
VI : N₂ ≤ M
VI = ≤-trans N₂ (max N₁ N₂) M III IV
γ'' : (n : ℕ) → max (max N₁ N₂) N ≤ n → abs (g n - L) < ε
γ'' n l = ℚ<-to-abs (g n - L) ε (γ₁ , γ₂)
where
VII : - ε < f n - L < ε
VII = ℚ-abs-<-unpack (f n - L) ε (β n (≤-trans N₁ M n V l))
VIII : - ε < h n - L < ε
VIII = ℚ-abs-<-unpack (h n - L) ε (δ n (≤-trans N₂ M n VI l))
l₁ : f n ≤ g n ≤ h n
l₁ = α n (≤-trans N (max (max N₁ N₂) N) n I l)
IX : f n - L ≤ g n - L
IX = ℚ≤-addition-preserves-order (f n) (g n) (- L) (pr₁ l₁)
X : g n - L ≤ h n - L
X = ℚ≤-addition-preserves-order (g n) (h n) (- L) (pr₂ l₁)
γ₁ : - ε < g n - L
γ₁ = ℚ<-≤-trans (- ε) (f n - L) (g n - L) (pr₁ VII) IX
γ₂ : g n - L < ε
γ₂ = ℚ≤-<-trans (g n - L) (h n - L) ε X (pr₂ VIII)
0f : ℕ → ℚ
0f _ = 0ℚ
0f-converges : 0f ⟶ 0ℚ
0f-converges ε₊@(ε , 0<ε) = 0 , (λ n _ → 0<ε)
constant-sequence : (q : ℚ) → (n : ℕ) → ℚ
constant-sequence q n = q
constant-sequence-converges : (q : ℚ) → (constant-sequence q) ⟶ q
constant-sequence-converges q (ε , 0<ε) = 0 , γ
where
γ : (n : ℕ) → 0 ≤ n → abs (constant-sequence q n - q) < ε
γ n _ = transport (_< ε) I 0<ε
where
I : 0ℚ = abs (constant-sequence q n - q)
I = ℚ-zero-dist q ⁻¹
⟨2/3⟩^_ : ℕ → ℚ
⟨2/3⟩^ 0 = toℚ (pos 1 , 0)
⟨2/3⟩^ (succ n) = rec 2/3 (_* 2/3) n
⟨2/3⟩-to-mult : (n : ℕ) → ⟨2/3⟩^ (succ n) = (⟨2/3⟩^ n) * 2/3
⟨2/3⟩-to-mult 0 = refl
⟨2/3⟩-to-mult (succ n) = refl
⟨2/3⟩^n-positive : (n : ℕ) → 0ℚ < (⟨2/3⟩^ n)
⟨2/3⟩^n-positive 0 = 0 , refl
⟨2/3⟩^n-positive (succ n) = transport (0ℚ <_) γ II
where
I : 0ℚ < (⟨2/3⟩^ n)
I = ⟨2/3⟩^n-positive n
II : 0ℚ < (⟨2/3⟩^ n) * 2/3
II = ℚ<-pos-multiplication-preserves-order (⟨2/3⟩^ n) 2/3 I (1 , refl)
γ : (⟨2/3⟩^ n) * 2/3 = (⟨2/3⟩^ (succ n))
γ = ⟨2/3⟩-to-mult n ⁻¹
⟨2/3⟩-all-positive : (n : ℕ) → 0ℚ ≤ (⟨2/3⟩^ n)
⟨2/3⟩-all-positive n = γ
where
I : 0ℚ < (⟨2/3⟩^ n)
I = ⟨2/3⟩^n-positive n
γ : 0ℚ ≤ (⟨2/3⟩^ n)
γ = ℚ<-coarser-than-≤ 0ℚ (⟨2/3⟩^ n) I
⟨1/n⟩ : ℕ → ℚ
⟨1/n⟩ n = toℚ (pos 1 , n)
⟨1/sn⟩ : ℕ → ℚ
⟨1/sn⟩ 0 = 1ℚ
⟨1/sn⟩ (succ n) = ⟨1/n⟩ n
⟨1/n⟩-1 : ⟨1/n⟩ 0 = 1ℚ
⟨1/n⟩-1 = refl
⟨1/n⟩-1/2 : ⟨1/n⟩ 1 = 1/2
⟨1/n⟩-1/2 = refl
⟨1/2⟩^_ : ℕ → ℚ
⟨1/2⟩^ 0 = toℚ (pos 1 , 0)
⟨1/2⟩^ (succ n) = rec (1/2) (_* 1/2) n
⟨1/sn⟩-converges-lemma : (a n x q r : ℕ)
→ succ a = q ℕ* succ x ℕ+ r
→ r < succ x
→ succ q ≤ succ n
→ pos (succ a) < pos (succ n) ℤ* pos (succ x)
⟨1/sn⟩-converges-lemma a n x q r e l₁ l₂ = γ
where
x' = succ x
q' = succ q
a' = succ a
n' = succ n
I : pos r < pos x'
I = ℕ-order-respects-ℤ-order r x' l₁
II : pos (q ℕ* x') ℤ+ pos r < pos (q ℕ* x') ℤ+ pos x'
II = ℤ<-adding-left (pos r) (pos x') (pos (q ℕ* x')) I
III : pos (q ℕ* x') ℤ+ pos r = pos a'
III = pos (q ℕ* x') ℤ+ pos r =⟨ distributivity-pos-addition (q ℕ* x') r ⟩
pos (q ℕ* x' ℕ+ r) =⟨ ap pos (e ⁻¹) ⟩
pos a' ∎
IV : pos (q ℕ* x') ℤ+ pos x' = pos q' ℤ* pos x'
IV = pos (q ℕ* x') ℤ+ pos x' =⟨ i ⟩
pos x' ℤ+ pos (q ℕ* x') =⟨ ii ⟩
pos x' ℤ+ pos (x' ℕ* q) =⟨ iii ⟩
pos x' ℤ* pos q' =⟨ iv ⟩
pos q' ℤ* pos x' ∎
where
i = ℤ+-comm (pos (q ℕ* x')) (pos x')
ii = ap (λ ■ → pos x' ℤ+ (pos ■)) (mult-commutativity q x')
iii = ap (pos x' ℤ+_) (pos-multiplication-equiv-to-ℕ x' q ⁻¹)
iv = ℤ*-comm (pos x') (pos q')
V : pos a' < pos q' ℤ* pos x'
V = transport₂ _<_ III IV II
VI : pos q' ≤ pos n'
VI = ℕ≤-to-ℤ≤ q' n' l₂
VII : pos q' ℤ* pos x' ≤ pos n' ℤ* pos x'
VII = positive-multiplication-preserves-order' (pos q') (pos n') (pos x') ⋆ VI
γ : pos a' < pos n' ℤ* pos x'
γ = ℤ<-≤-trans (pos a') (pos q' ℤ* pos x') (pos n' ℤ* pos x') V VII
⟨1/sn⟩-converges : ⟨1/sn⟩ ⟶ 0ℚ
⟨1/sn⟩-converges (ε@((pos 0 , a) , p) , 0<ε) = 𝟘-elim γ
where
I : ε = 0ℚ
I = numerator-zero-is-zero ((pos 0 , a) , p) refl
II : 0ℚ < 0ℚ
II = transport (0ℚ <_) I 0<ε
γ : 𝟘
γ = ℚ<-irrefl 0ℚ II
⟨1/sn⟩-converges ε₊@(((negsucc x , a) , p) , 0<ε) = 𝟘-elim γ
where
γ : 𝟘
γ = negative-not-greater-than-zero x a 0<ε
⟨1/sn⟩-converges ε₊@(((pos (succ x) , a) , p) , 0<ε) = γ (division (succ a) x)
where
γ : Σ q ꞉ ℕ , Σ r ꞉ ℕ , (succ a = q ℕ* succ x ℕ+ r) × (r < succ x)
→ Σ N ꞉ ℕ , ((n : ℕ) → N ≤ n → abs (⟨1/sn⟩ n - 0ℚ) < ε₊)
γ (q , r , e , l₁) = succ q , γ'
where
γ' : (n : ℕ)
→ succ q < succ n
→ abs (⟨1/sn⟩ n - 0ℚ) <ℚ ((pos (succ x) , a) , p)
γ' 0 l₂ = 𝟘-elim l₂
γ' (succ n) l₂ = γ''
where
I : pos 0 = pos 0 ℤ* pos (succ n)
I = ℤ-zero-left-base (pos (succ n)) ⁻¹
II : pos 0 ℤ* pos (succ n) < pos 1
II = transport (_< pos 1) I (0 , refl)
III : 0ℚ < toℚ (pos 1 , n)
III = toℚ-< (pos 0 , 0) (pos 1 , n) II
IV : toℚ (pos 1 , n) = abs (⟨1/n⟩ n + 0ℚ)
IV = toℚ (pos 1 , n) =⟨ i ⟩
abs (toℚ (pos 1 , n)) =⟨ ii ⟩
abs (⟨1/n⟩ n + 0ℚ) ∎
where
i = abs-of-pos-is-pos' (toℚ (pos 1 , n)) III ⁻¹
ii = ap abs (ℚ-zero-right-neutral (⟨1/n⟩ n)) ⁻¹
V : toℚ (pos (succ x) , a) = ((pos (succ x) , a) , p)
V = toℚ-to𝔽 ((pos (succ x) , a) , p) ⁻¹
VI : pos (succ a) < pos (succ n) ℤ* pos (succ x)
VI = ⟨1/sn⟩-converges-lemma a n x q r e l₁ l₂
VII : (pos 1 , n) 𝔽< (pos (succ x) , a)
VII = positive-order-flip a n x 0 VI
VIII : toℚ (pos 1 , n) < toℚ (pos (succ x) , a)
VIII = toℚ-< (pos 1 , n) (pos (succ x) , a) VII
γ'' : abs (⟨1/n⟩ n - 0ℚ) <ℚ ((pos (succ x) , a) , p)
γ'' = transport₂ _<_ IV V VIII
⟨1/sn⟩-bounds-⟨2/3⟩-lemma : (n : ℕ)
→ (⟨1/sn⟩ (succ (succ n))) * 2/3
≤ ⟨1/sn⟩ (succ (succ (succ n)))
⟨1/sn⟩-bounds-⟨2/3⟩-lemma n = γ
where
n+2 = succ (succ n)
n+3 = succ (n+2)
1' = pos 1
2' = pos 2
3' = pos 3
6' = pos 6
n' = pos n
I : 2' ℤ* n' ℤ+ 6' = 2' ℤ* pos (n ℕ+ 3)
I = 2' ℤ* n' ℤ+ 6' =⟨ distributivity-mult-over-ℤ' n' 3' 2' ⁻¹ ⟩
2' ℤ* (n' ℤ+ 3') =⟨ ap (2' ℤ*_) (distributivity-pos-addition n 3) ⟩
2' ℤ* pos (n ℕ+ 3) ∎
II : 3' ℤ* n' ℤ+ 6' = 1' ℤ* pos (succ (pred (n+2 ℕ* 3)))
II = 3' ℤ* n' ℤ+ 6' =⟨ i ⟩
pos (3 ℕ* n) ℤ+ 6' =⟨ ii ⟩
pos (3 ℕ* n ℕ+ 6) =⟨ iii ⟩
pos (3 ℕ* n+2) =⟨ iv ⟩
pos (n+2 ℕ* 3) =⟨ v ⟩
pos (succ (pred (n+2 ℕ* 3))) =⟨ vi ⟩
1' ℤ* pos (succ (pred (n+2 ℕ* 3))) ∎
where
i = ap (_ℤ+ 6') (pos-multiplication-equiv-to-ℕ 3 n)
ii = distributivity-pos-addition (3 ℕ* n) 6
iii = ap pos (distributivity-mult-over-addition 3 n 2 ⁻¹)
iv = ap pos (mult-commutativity 3 n+2)
v = ap pos (succ-pred-multiplication (succ n) 2)
vi = ℤ-mult-left-id _ ⁻¹
III : pos 0 ≤ n'
III = ℤ-zero-least-pos n
IV : 2' ℤ* n' ≤ 3' ℤ* n'
IV = ℤ*-multiplication-order 2' 3' n' III (1 , refl)
V : 2' ℤ* n' ℤ+ 6' ≤ 3' ℤ* n' ℤ+ 6'
V = ℤ≤-adding' (2' ℤ* n') (3' ℤ* n') 6' IV
VI : 2' ℤ* pos n+3 ≤ 1' ℤ* pos (succ (pred (n+2 ℕ* 3)))
VI = transport₂ _≤_ I II V
VII : toℚ ((1' , succ n) 𝔽* (2' , 2)) ≤ toℚ (1' , n+2)
VII = toℚ-≤ ((1' , succ n) 𝔽* (2' , 2)) (1' , n+2) VI
VIII : toℚ ((1' , succ n) 𝔽* (2' , 2)) = toℚ (1' , succ n) * 2/3
VIII = toℚ-* (1' , succ n) (2' , 2)
γ : (⟨1/sn⟩ n+2) * 2/3 ≤ ⟨1/sn⟩ n+3
γ = transport (_≤ ⟨1/sn⟩ n+3) VIII VII
⟨1/sn⟩-bounds-⟨2/3⟩ : (n : ℕ) → (⟨2/3⟩^ n) ≤ ⟨1/sn⟩ n
⟨1/sn⟩-bounds-⟨2/3⟩ = ℕ-induction base step
where
base : 1ℚ ≤ 1ℚ
base = 0 , refl
step : (n : ℕ) → (⟨2/3⟩^ n) ≤ (⟨1/sn⟩ n) → (⟨2/3⟩^ succ n) ≤ ⟨1/sn⟩ (succ n)
step 0 IH = 1 , refl
step 1 IH = 1 , refl
step (succ (succ n)) IH = γ
where
S₁⦅n+2⦆ = ⟨2/3⟩^ (succ (succ n))
S₁⦅n+3⦆ = ⟨2/3⟩^ (succ (succ (succ n)))
S₂⦅n+2⦆ = ⟨1/sn⟩ (succ (succ n))
S₂⦅n+3⦆ = ⟨1/sn⟩ (succ (succ (succ n)))
I : S₁⦅n+2⦆ * 2/3 ≤ S₂⦅n+2⦆ * 2/3
I = ℚ≤-pos-multiplication-preserves-order' S₁⦅n+2⦆ S₂⦅n+2⦆ 2/3 IH (2 , refl)
II : S₂⦅n+2⦆ * 2/3 ≤ S₂⦅n+3⦆
II = ⟨1/sn⟩-bounds-⟨2/3⟩-lemma n
γ : S₁⦅n+3⦆ ≤ S₂⦅n+3⦆
γ = ℚ≤-trans (S₁⦅n+2⦆ * 2/3) (S₂⦅n+2⦆ * 2/3) S₂⦅n+3⦆ I II
⟨2/3⟩^n-squeezed : Σ N ꞉ ℕ , ((n : ℕ) → (N ≤ n) → (0f n ≤ ⟨2/3⟩^ n ≤ ⟨1/sn⟩ n))
⟨2/3⟩^n-squeezed = 1 , γ
where
γ : (n : ℕ) → 1 ≤ n → (0f n ≤ ⟨2/3⟩^ n ≤ ⟨1/sn⟩ n)
γ n l = γ₁ , γ₂
where
γ₁ : 0ℚ ≤ (⟨2/3⟩^ n)
γ₁ = ⟨2/3⟩-all-positive n
γ₂ : (⟨2/3⟩^ n) ≤ (⟨1/sn⟩ n)
γ₂ = ⟨1/sn⟩-bounds-⟨2/3⟩ n
⟨2/3⟩^n-converges : ⟨2/3⟩^_ ⟶ 0ℚ
⟨2/3⟩^n-converges =
sandwich-theorem
0ℚ 0f ⟨2/3⟩^_ ⟨1/sn⟩
⟨2/3⟩^n-squeezed
0f-converges
⟨1/sn⟩-converges
⟨2/3⟩^n<ε : (ε : ℚ₊) → Σ n ꞉ ℕ , (⟨2/3⟩^ n) < ε
⟨2/3⟩^n<ε ε = γ (⟨2/3⟩^n-converges ε)
where
γ : Σ N ꞉ ℕ , ((n : ℕ) → N ≤ n → abs ((⟨2/3⟩^ n) - 0ℚ) < ε)
→ Σ n ꞉ ℕ , (⟨2/3⟩^ n) < ε
γ (N , f) = N , γ'
where
I : abs ((⟨2/3⟩^ N) - 0ℚ) < ε
I = f N (≤-refl N)
II : 0ℚ < (⟨2/3⟩^ N)
II = ⟨2/3⟩^n-positive N
III : abs ((⟨2/3⟩^ N) - 0ℚ) = ⟨2/3⟩^ N
III = abs ((⟨2/3⟩^ N) + 0ℚ) =⟨ ap abs (ℚ-zero-right-neutral (⟨2/3⟩^ N)) ⟩
abs (⟨2/3⟩^ N) =⟨ abs-of-pos-is-pos' (⟨2/3⟩^ N) II ⟩
(⟨2/3⟩^ N) ∎
γ' : (⟨2/3⟩^ N) < ε
γ' = transport (_< ε) III I
⟨2/3⟩^n<ε-consequence : (ε (p , _) : ℚ₊) → Σ n ꞉ ℕ , (⟨2/3⟩^ n) * p < ε
⟨2/3⟩^n<ε-consequence (ε , 0<ε) (p , 0<p) = γ (⟨2/3⟩^n<ε (ε * p' , 0<εp'))
where
p-not-zero : ¬ (p = 0ℚ)
p-not-zero = ℚ<-positive-not-zero p 0<p
p' : ℚ
p' = ℚ*-inv p p-not-zero
0<p' : 0ℚ < p'
0<p' = ℚ-inv-preserves-pos p 0<p p-not-zero
0<εp' : 0ℚ < ε * p'
0<εp' = ℚ<-pos-multiplication-preserves-order ε p' 0<ε 0<p'
γ : Σ n ꞉ ℕ , (⟨2/3⟩^ n) < ε * p'
→ Σ n ꞉ ℕ , (⟨2/3⟩^ n) * p < ε
γ (n , l) = n , γ'
where
I : (⟨2/3⟩^ n) * p < ε * p' * p
I = ℚ<-pos-multiplication-preserves-order' (⟨2/3⟩^ n) (ε * p') p l 0<p
II : ε * p' * p = ε
II = ε * p' * p =⟨ ℚ*-assoc ε p' p ⟩
ε * (p' * p) =⟨ ap (ε *_) (ℚ*-comm p' p) ⟩
ε * (p * p') =⟨ ap (ε *_) (ℚ*-inverse-product p p-not-zero) ⟩
ε * 1ℚ =⟨ ℚ-mult-right-id ε ⟩
ε ∎
γ' : (⟨2/3⟩^ n) * p < ε
γ' = transport ((⟨2/3⟩^ n) * p <_) II I
\end{code}