A sequence converges to L if, for every ε > 0, all but finitely many terms lie within ε of L. Completeness guarantees that every bounded monotone sequence converges and every Cauchy sequence converges.
Convergence: the epsilon-N definition
A sequence (a_n) converges to L if for every ε > 0, there exists N such that for all n ≥ N, |a_n - L| < ε. The key: you pick any ε, no matter how small, and I produce an N that works.
Scheme
; Sequence a_n = 1/n converges to 0; For any epsilon, find N such that 1/n < epsilon for all n >= N
(define (find-N epsilon)
(let loop ((n 1))
(if (< (/ 1.0 n) epsilon) n (loop (+ n 1)))))
(display "epsilon = 0.1, N = ")
(display (find-N 0.1)) (newline)
(display "epsilon = 0.01, N = ")
(display (find-N 0.01)) (newline)
(display "epsilon = 0.001, N = ")
(display (find-N 0.001)) (newline)
; Verify: all terms past N are within epsilon
(define (verify-convergence epsilon)
(let* ((N (find-N epsilon))
(checks (list N (+ N 1) (+ N 5) (+ N 50))))
(for-each (lambda (n)
(display " a_")
(display n)
(display " = ")
(display (/ 1.0 n))
(display (if (< (/ 1.0 n) epsilon) " < epsilon"" >= epsilon"))
(newline))
checks)))
(display "Checking epsilon = 0.05:") (newline)
(verify-convergence 0.05)
Python
# Convergence of 1/n to 0importmathdef find_N(epsilon):
returnmath.ceil(1 / epsilon)
for eps in [0.1, 0.01, 0.001]:
N = find_N(eps)
print(f"eps={eps}, N={N}, a_N={1/N:.6f} < {eps}: {1/N < eps}")
Limit theorems
Limits respect arithmetic: if a_n → a and b_n → b, then a_n + b_n → a + b, a_n * b_n → a * b, and (if b ≠ 0) a_n / b_n → a / b. The squeeze theorem: if a_n ≤ c_n ≤ b_n and both a_n and b_n converge to L, then c_n → L.
Every bounded, monotone sequence converges. If a sequence is increasing and bounded above, it converges to its supremum. This is a direct consequence of the completeness axiom.
Scheme
; Monotone convergence: a_n = sum_{k=1}^{n} 1/k!; Increasing and bounded above by 3, converges to e
(define (factorial n)
(if (<= n 1) 1 (* n (factorial (- n 1)))))
(define (partial-e n)
(let loop ((k 0) (sum 0.0))
(if (> k n) sum
(loop (+ k 1) (+ sum (/ 1.0 (factorial k)))))))
(display "Partial sums of 1/k! (converging to e):") (newline)
(for-each (lambda (n)
(display " n=")
(display n)
(display ": ")
(display (partial-e n))
(newline))
(list 1251015))
(display "Bounded above by 3? ")
(display (< (partial-e 15) 3))
Python
# Python equivalentimportmathdef partial_e(n):
returnsum(1/math.factorial(k) for k inrange(n + 1))
print("Partial sums of 1/k! (converging to e):")
for n in [1, 2, 5, 10, 15]:
print(" n=" + str(n) + ":", partial_e(n))
print("Bounded above by 3?", partial_e(15) < 3)
Bolzano-Weierstrass theorem
Every bounded sequence has a convergent subsequence. This is the Bolzano-Weierstrass theorem, the key compactness result for sequences. Even if a sequence doesn't converge (like (-1)^n), some subsequence does.
# Python equivalent
a = lambda n: (1if n % 2 == 0else -1) * (1 + 1/n)
print("Full sequence (diverges):")
for n inrange(1, 9):
print(" a_" + str(n) + " =", a(n))
print("Even subsequence (converges to 1):")
for k in [1, 2, 5, 10, 50, 100]:
n = 2 * k
print(" a_" + str(n) + " =", a(n))
Cauchy sequences
A sequence is Cauchy if its terms get arbitrarily close to each other: for every ε, there exists N such that |a_m - a_n| < ε for all m, n ≥ N. In the reals, a sequence converges if and only if it is Cauchy. This equivalence is another way to state completeness.
Scheme
; Cauchy criterion: terms get close to each other; a_n = sum_{k=1}^{n} 1/k^2 is Cauchy (converges to pi^2/6)
(define (partial-sum n)
(let loop ((k 1) (s 0.0))
(if (> k n) s
(loop (+ k 1) (+ s (/ 1.0 (* k k)))))))
; Check Cauchy: |a_m - a_n| for large m, n
(display "Cauchy check for sum 1/k^2:") (newline)
(let* ((a100 (partial-sum 100))
(a200 (partial-sum 200))
(a500 (partial-sum 500))
(a1000 (partial-sum 1000)))
(display " |a_200 - a_100| = ")
(display (abs (- a200 a100))) (newline)
(display " |a_500 - a_200| = ")
(display (abs (- a500 a200))) (newline)
(display " |a_1000 - a_500| = ")
(display (abs (- a1000 a500))) (newline)
(display " a_1000 = ")
(display a1000) (newline)
(display " pi^2/6 = ")
(display (/ (* 3.1415926535897933.141592653589793) 6.0)))
🔢 Discrete Math Ch.2 — sequences and recurrences: the combinatorial counterpart to analytic limits
📐 Calculus Ch.3 — informal limits in calculus made rigorous here
Translation notes
We compute convergence numerically but the real content is the proofs. The epsilon-N definition is an existence statement: "there exists N such that..." Our code finds a specific N, which is stronger than existence but weaker than a proof that it always works.