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}