In the paper "An injection from $\mathbb{N}^\mathbb{N}$ to $\mathbb{N}$" by @AndrejBauer, about the question whether there exists an injection $\mathbb{N}^\mathbb{N}\to\mathbb{N}$, we writes
"Classically there is no such injection, of course. Constructively, it is easy to see that it must be wildly discontinuous, if it exists. Thus we cannot hope to find one in any of the usual varieties of constructive mathematics, as they all satisfy some kind of continuity principle."
Question: Why does a constructive approach impose continuity?
Thoughts: Is it that the semantics of computer programs carry some topology? I can imagine this to be so, since the encoding of the function requires an underlying syntactically rigid framework, not just the implicit "subset of $\mathrm{dom}\times\mathrm{codom}$ with this and that property". I think this because came across the term "Scott continuity" before. But to be honest I never grasped the motivation behind formalizing the meanings of programming languages by constructing mathematical objects, to quote the Wikipedia article on Denotational semantics. It appears to me that if you write down functions in a formal langu
"Synthetic topology of data types and classical spaces" by Martin Escardo is an excellent (although quite long) source on the connection between programming languages and topology.
The central idea is that an observable property in a data type corresponds to an open set in a topological space. If $f : \mathbf{X} \to \mathbf{Y}$ is a computable function and $P$ some observable property for elements of $\mathbf{Y}$, then we get an observable property for elements of $\mathbf{X}$ as "If we apply $f$ to $x$, then the result has property $P$", i.e. as $f^{-1}(P)$. So preimages of observable properties under computable functions are observable properties - now replace "observable property" by "open set", and you get that any computable function is continuous.