If you wish to make an apple pie from scratch, you must first invent the universe.

GitHub | Twitter | My work is licensed under CC BY-SA 4.0 | Math equations are created with KaTeX under the MIT License

  1. Mathematics
    1.1 The Riemann Hypothesis and its relation to the distribution of prime numbers
  2. Computer Science
    2.1 The Multilayer Perceptron
    2.2 Cellular Automata
  3. Literature
    3.1 The Last Question by Isaac Asimov
    3.2 WebGL 3D Study


The Riemann Hypothesis and its relation to the distribution of prime numbers

QuantaMagazine | NumberPhile | 3Blue1Brown | Wikipedia | University of Exeter, Mr Watkin (mirror)

Last changed: 10.02.2021

This is the zeta function:

\(\zeta(z) = \sum\limits_{n=1}^{\infty} \frac{1}{n^z}\)

Here, \(z\) is a complex number \(z = a + ib\). How do we take a complex number to the power of a natural one?

Four mathematical rules are necessary to work that out. May \(x, y, a, b, m \in \mathbb{R}\) and \(m > 0\) and \(i = \sqrt{-1}\) then:

  1. \(x^{a+ib} = e^{ln(x^{a+ib})}\)
  2. \( = e^{(a+ib) * ln(x)}\)
  3. \( = e^{aln(x) + ibln(x)}\)
  4. \( = e^{aln(x)} * e^{ibln(x)}\)
  5. \( = e^{ln(x^a)} * e^{ibln(x)}\)
  6. \( = x^a * e^{ibln(x)}\)
  7. \( = x^a * (cos(bln(x)) + isin(bln(x))) \)
  8. \( = x^acos(bln(x)) + x^aisin(bln(x)))\)

Here is what the zeta function looks like in javascript:

function zeta(z, limit){
 var zres = new Complex(0, 0);
 for(var x = 1; x <= limit; x++){
  var ii = z.imaginary * Math.log(1/x);
  var pp = Math.pow(1/x, z.real);
  zres.real += pp * Math.cos(ii);
  zres.imaginary += pp * Math.sin(ii);
 return zres;

\(\zeta(z)\) converges for \(Re(z) > 1\). Try it out below. You can move and zoom the coordinate system if the simulation is running.

We get a more complete picture when observing how the zeta function changes the the entire complex plane by visualizing more points.

Enter an interval and the density of points.

The zeta function converges only for values \(Re(z) > 1\). By analytically continuing it to $$\zeta(z) = \frac{1}{z-1}\sum_{n=1}^{\infty}(\frac{n}{(n+1)^z} - \frac{n-z}{n^z})$$ we can expand the space for convergance to \(Re(z) > 0\) excluding \(Re(z) = 1\).

For some values in \(0 < Re(z) < 1\) the zeta function equals to zero. Riemann hypothesized that all those zeros have a real value of \(0.5\). Here the black dots along 0.5 are evaluated by the extended zeta function and rendered in red. Some of them converge to \(0 + 0i\). These are the non trivial zeta zeros.

The function $$\psi(x) = \sum_{n \leq x}^{} \Lambda(n)$$ was introduced by Chebyshev, which counts all powers of primes. Each \(p^k, k \in \mathbb{N}\) is weighted \(\log(p)\). (Seen in black)

This function can also be expressed with a sum of the non trivial zeta zeros \(\rho\). Thats all places the zeta function evaluates to 0,0 when its real input was between 0 and 1. $$\psi_{0}(x) = x - \ln(2\pi) - \sum_{\rho}^{\infty}{\frac{x^\rho}{\rho}} - \frac{1}{2}\ln(1-\frac{1}{x^2})$$

As all non trivial zeros come in conjugate pairs e.g. \(0.5 + 14.13i\) and \(0.5 - 14.13i\), the imaginary part cancels out and we are left with a real function. (Depicted in red)

All functions in javascript

Computer Science

The Multilayer Perceptron

The beginning of modern AI. Build of multiple interconnected nodes called neurons. One neuron takes in a bunch of values, adds them up and applies a function to the result. This then becomes the output of the neuron for either another input of a neuron in the next layer or part of the output of the entire system.

Cellular Automata

Wikipedia | Examples for rules | Mozilla's introduction to WebGL | Cellular Automata Subreddit Multidimensionality

Last changed: 01.03.2021

Let's start with the most famous cellular automation: the life-likes. Life-like cellular automaton are simulations with a distinct rulesets, leaning on Conway's Game of Life. The one shown below is EightLife. There are basically two rules in each ruleset. How many neighbouring cells a dead cell needs to be born (B) and how many neighbouring cells an alive cell needs to survive (S), in the next iteration of the simulation. All other cells will stay dead or turn so.

In Eightlife a dead cell needs three living neighbours to be born and an alive cell needs two, three, or eight to stay alive. These are expressed in a rulestring: B3/S2,3,8

You can try out different rulestrings here: e.g. B3/S4,5, B3,4/S8; Conway's: B3/S0,2,3

Things get more interesting when not just the direct neighbours influence a cells next state, but those two, three or more spaces away aswell.

Try out rulestrings: And set the radius:

e.g. Radius 2: B6,7/S5 | B6,7/S7,8,9; Radius 3: B9,7/S9; Radius 4: B15,10/S11,10,5; Radius 7: B18,22,21/S23,43,49(slowly degenerative) | B18,22,19/S23,43,49(stable); Radius 10: B38,50,70,45,61,91,90/S43,49,61(degenerative) | B60,38,50,70,45,61,91,90/S43,49,61(degenerative) | B60,38,46,50,70,61,91,90/S40,49,61,65,78,81,99 (very slowly degenerative); Radius 20: B60,38/S81,99(stable)

GLSL implementation of multi neighbor CA


The Last Question by Isaac Asimov


WebGL 3D Study

WebGLFundamentals | BlenderGuru

Last changed: 28.02.2021