### Why Computable Functions are Continuous

An explanation without fancy computer science or topology

Imagine a turing machine running forever on an infinite input tape of binary digits, and writing to an output tape of binary digits. This defines a computable function $f : \mathbf{R} \to \mathbf{R}$.1

We assume all turing machines preform no "tape reversals", i.e. once digit $k$ is output it cannot be changed later on. If there were arbitrary tape reversals then the halting problem would prevent us from ever knowing when the first $k$ digits have been output.

Let $x \in \mathbf{R}$ and $\epsilon > 0$. We want a $\delta > 0$ so $|x - y| < \delta$ implies $|f(x)-f(y)|<\epsilon$.

Compute $f(x)$. at step $n$ our turing machine has computed $k \le n$ digits of $f(x)$ using (at most!) the first $n$ digits of $x$, meaning any $y \in \mathbf{R}$ with the first $n$ digits in common with $x$ must have the first $k$ digits of $f(y)$ equal to $f(x)$! 2

Setting $k$ such that $k$-digit agreement implies $\epsilon$-closeness, and letting $n$ be the timestep when we finish computing the first $k$ digits allows us to define $\delta$ small enough so the first $n$ digits must agree, finally giving us $|x-y|<\delta \Rightarrow |f(x)-f(y)|<\epsilon$.

1. Technically $\mathbf{R}$ is only computable numbers (in the output at least, input too if you're defining stuff reasonably (e.g. so computable inverses exist))
2. The reason $f(y)$ has also computed $k$ digits after $n$ steps is that $y$ looks the same as $x$ when restricted to $n$ timesteps (since the first $n$ digits agree!), we are assuming "no tape reversals" (after reading more digits of $y$ we decide to go back and edit the first $k$ digits) in our argument.