Let’s discover the beauties of Thomae’s function also named the popcorn function, the raindrop function or the modified Dirichlet function.
Thomae’s function is a real-valued function defined as:
\[f:
\left|\begin{array}{lrl}
\mathbb{R} & \longrightarrow & \mathbb{R} \\
x & \longmapsto & 0 \text{ if } x \in \mathbb{R} \setminus \mathbb{Q} \\
\frac{p}{q} & \longmapsto & \frac{1}{q} \text{ if } \frac{p}{q} \text{ in lowest terms and } q > 0
\end{array}\right.\]
\(f\) is periodic with period \(1\)
This is easy to prove as for \(x \in \mathbb{R} \setminus \mathbb{Q}\) we also have \(x+1 \in \mathbb{R} \setminus \mathbb{Q}\) and therefore \(f(x+1)=f(x)=0\). While for \(y=\frac{p}{q} \in \mathbb{Q}\) in lowest terms, \(y+1=\frac{p+q}{q}\) is also in lowest terms, hence \(f(y+1)=f(y)=\frac{1}{q}\).
\(f\) right-sided and left-sided limits vanish at all points
We select \(x \in \mathbb{R}\). For all \(\epsilon >0\) one can find \(N > 1\) integer with \(0 < \frac{1}{N} < \epsilon\). Taking \(a= \sup \{c \in \mathbb{Z} \text{ | } c \le x N\}\), we have \(x \in (\frac{a-1}{N},\frac{a+1}{N})\). Now consider: \[\begin{aligned} A &=\{y \in \mathbb{Q} \setminus \{x\} \text{ | } y=\frac{r}{s} \in (\frac{a-1}{N},\frac{a+1}{N}),\\ & \ r \in \mathbb{Z}, \ 0 < s \le N, \ \gcd(r,s) = 1\} \end{aligned}\] \(A\) is finite and by definition \(x \notin A\). If \(A\) is not empty, the distance \(D=d(x,A)\) of \(x\) to the set \(A\) is defined and strictly positive. If \(A\) is empty, we denote by \(B\) the interval \((\frac{a-1}{N},\frac{a+1}{N})\) otherwise we take \(B=(\frac{a-1}{N},\frac{a+1}{N}) \cap (x-D,x+D)\). In both cases, \(B\) is an open interval containing \(x\). By construction, \(B \setminus \{x\}\) contains no rational number \(\frac{r}{s}\) in lowest terms with \(s \le N\). Hence for all \(z \in B \setminus \{x\}\) we have \(0 \le f(z) < \frac{1}{N} < \epsilon\) which had to be demonstrated.
\(f\) is discontinuous at all rational numbers
Consider \(x=\frac{p}{q}\) in lowest terms. The sequence \(\displaystyle x_n=(1-\frac{1}{n \sqrt{2}})\frac{p}{q}\) converges to \(x\). For all \(n \ge 1\) integer, \(x_n\) is an irrational number as \(\sqrt{2}\) is irrational, hence \(f(x_n)=0\). Therefore \(\lim\limits_{n \to +\infty} f(x_n)=0\) while \(f(x)=f(\frac{p}{q})=\frac{1}{q} > 0\). More elegantly, we could have just notice that the irrational numbers are dense in \(\mathbb{R}\). Or, we could have used previous paragraph stating that both \(f\) left and right limits vanish.
\(f\) is continuous at all irrational numbers
Is clear as \(f\) vanishes at all irrational points \(x\) while both left and right \(f\) limits vanish at all points.
\(f\) has a local maximum at all rational points
Consider a rational number \(a=\frac{p}{q}\) in lowest terms. We have \(f(a)=\frac{1}{q}\). As \(\lim\limits_{x \to a^-} f(x) = \lim\limits_{x \to a^+} f(x) = 0\), for some \(\delta > 0\) we have \(0 \le f(x) \le \frac{f(a)}{2}\) when \(0 < \vert x-a \vert < \delta\). Finally \(0 \le f(x) \le f(a)\) for \(x \in (a - \delta, a + \delta)\).
\(f\) is Lebesgue integrable
Follows from the fact that \(f\) vanishes almost everywhere, the set of rational numbers having a Lebesgue measure equal to zero.
\(f\) is Riemann integrable on all intervals \([a,b]\)
This is a consequence of Lebesgue’s integrability condition as \(f\) is bounded (by \(1\)) and continuous almost everywhere. Or we can use the theorem stating that a regulated function is Riemann integrable.
Python code I used to generate Thomae’s function image
import matplotlib.pyplot as plt
import fractions as frac
from math import log
points=[[p/float(q),1/float(q),log(float(q))] \
for q in range(1,50) for p in range(0,q+1) \
if frac.gcd(p,q) == 1]
plt.axis('off')
x,y,color=zip(*points)
plt.scatter(x,y, c=color, s=3, edgecolor='none', cmap='winter')
plt.savefig('D:tmp/to.png', dpi=350, facecolor='#EEE1D0')
2 thoughts on “A function continuous at all irrationals and discontinuous at all rationals”