I'm trying to come up with concrete problems which can be solved via topos theory, and I've found a good case study which has been really instructive. I've spent the past few weeks trying to understand how it interacts with double negation sheaves, but I can't quite get it straight in my head. Hopefully somebody here will be able to help ^_^.
For completeness, recall the Weierstrass Approximation Theorem, which says
$$\forall f : C \big ( [0,1], \ \mathbb{R} \big ) . \ \forall \epsilon : \mathbb{R}_{> 0} . \ \exists p : \mathbb{R}[t] . \ \forall t : [0,1] . \ | f(t) - p(t) | < \epsilon$$
Now say we have a continuous family of functions $f_x : [0,1] \to \mathbb{R}$ instead. so $f : X \times [0,1] \to \mathbb{R}$ for some topological space $X$. It's reasonable to ask if the polynomials $p_x$ approximating $f_x$ vary continuously in $X$.
We might expect the Weierstrass Approximation Theorem to be constructive. After all, the argument by Bernstein Polynomials actually gives us a sequence in-hand of approximating polynomials.
Then, inside the topos $\mathsf{Sh}(X)$, the theorem is true, and externally we would be able to see that
For all $f : X \times [0,1] \to \mathbb{R}$ continuous, for all $\epsilon > 0$, there is an open cover $U_\alpha$ of $X$ and polynomials $p_\alpha$ with coefficients continuous on $U_\alpha$ so that $|f(x,t) - p_\alpha(x,t)| < \epsilon$ for every $t \in [0,1]$.
which gives us a local solution to our problem.
Unfortunately, in the usual proof that the bernstein polynomials really do approximate $f$ we do the standard analysis trick of separating into "good" and "bad" parts, then we show the good parts are small, and there aren't many bad parts. This uses LEM when we assert that every summand is either good or bad.
From here, it's reasonable to pass to the double negation sheaves $\mathsf{Sh}_{\lnot \lnot}(X)$, where the argument goes through... But I can't figure out how to externalize the claim! I know that $\mathsf{Sh}_{\lnot \lnot}(X)$ is equivalent to sheaves on the locale of regular opens. But usually this is a pointfree locale, and I'm not sure how the (dedekind) real numbers there (which, I think, are continuous maps from the locale of regular opens to the locale $\mathbb{R}$) relates to the real numbers in $\mathsf{Sh}(X)$ (which are continuous maps $X \to \mathbb{R}$). I've heard that truth in the double negation sheaves is the same as "truth on a dense open set", so that our claim reads something like "there is a dense open set $V$ and an open cover $U_\alpha$ of $V$ so that ...." but I'm still not sure if that works.
Any guidance on externalizing statements from the double negation sheaves would be fantastic! Ideally a concrete example like this, with some explanation as to how the translation goes.
(Also, I'm aware of the truly constructive proof in Bridges Constructive Functional Analysis, Chapter $4.3$, which gets us out of this hole. But this is a good case study in working with double negation sheaves, so I would still like to know how to externalize the claim in the more complicated way.)