Discovery vs Invention

While telephone is an invention which undergoes changes as science advances with time, gravity is a discovery which is very fundamental. The explanation for why gravity exists in universe, changes from time to time with the explanation given by Newton to Einstein, existence of gravity is what makes us down to earth is a fundamental truth. Along the same lines people argue whether math is invented or discovered. The discovery side says irrespective of whether universe exists or not 2 + 3 is always 5, and the universe works under a set of rules. On the invention side of math argue, that math is invented by the human brain because its sophisticates and math just happened to work flawlessly.

Ignoramus et ignorabimus

Euclid axiomitized geometry with a specific set of rules which worked well. And hence people wanted to formalise all of math in a similar basis. David Hilbert made one such attempt. There existed a Latin quote for limits of scientific knowledge which goes by

Ignoramus et ignorabimus

meaning “we do not know and will not know”. Hilbert outright came up with another epic quote in German opposing it,

Wir müssen wissen. Wir werden wissen.

meaning, “We must know, We will know”. In fact Hilbert literally took these lines to his grave. And so the effort for formalising math paved the way for rise of meta mathematics.

Hilbert & Entscheidungsproblem

Hilbert proposed the Entscheidungsproblem (also called Decision Problem), which is, given a statement whether it can be answered with a “Yes” / “No” which is universally valid in all contexts by an algorithm.

Alonzo Church & Alan Turing solutions

The search for the nature of mathematics gave us the golden year of 1936, where the Decision Problem got a negative answer i.e no such algorithm exists. Alonzo Church came up with lambda calculus and showed no 2 expressions in it can be proved to be equivalent. And in the same year Alan Turing came up with Turing machine and proved the existence of Halting problem. So the Decision Problem got 2 answers independently.

Kurt Godel’s incompleteness theorem

Due to the relevance in computer science and modern day functional languages almost everyone is aware of Turing and Church’s work. But not many know that their work were influenced by Kurt Godel’s incompleteness theorems.

The key take away of the incompleteness theorems is that any system capable of performing arithmetics is incomplete i.e

There maybe statements in the system that hold true, but cannot be proved with the basic rules that set it up

This is very well seen in the scenario of Set Theory & its paradox. While Kurt Godel literally proved something so fundamental to nature of mathematics, the process in which he did it during his time is literally breathtaking. He converted every logical statement into numbers so that logic itself can be reduced to that of arithmetics (process called as Godel numbering). While this might seem to be out of the age during his time, we now live in a world where every line of code we write is compiled down to bytes which are literally numbers. Even before there was an “idea” of programming language yet to be “discovered” by Alan Turing after his post World War II research, Kurt Godel kind of used to prove the nature of math itself.

Legacy of Kurt Godel

After the World war II, Godel had relocated to USA. Also he is a very close friend of Albert Einstein. While applying for the citizenship for the country in 1947, Godel had told Einstein that there is a contradiction in the US constitution which might allow dictatorship. Godel literally went on to formally verify the laws of US constitution and explained about it to the Judge who was examining his citizenship form.

Tribute to the legacy

We are in the age of programming languages and static type systems. While as Godel pointed out systems capable of arithmetic are incomplete in itself. And so lets put our favourite languages to the logical test!

The paradoxical fixed point operator using lambda expression

const Y = f => (x => x(x))(x => f(y => x(x)(y)))

And also if you are on a strongly typed language you can represent the Liar’s paradox in your type system and prove its inconsistency i.e represent the following sentence in the type system

A: A is false The above statement can neither be proved true / false. But some strongly typed languages still allow them giving inconsistent results. Like the below typescript version of Liar’s paradox

// credit to Haskell implementation: https://www.cs.unm.edu/~stelleg/liar.html type Not<X> = (x: X) => false type Liar = {

val: Not<Liar>

} let liarIsFalse: Not<Liar> = (x: Liar) => x.val(x); const absurd: false = liarIsFalse({

val: liarIsFalse

});

And Happy birthday Kurt Godel!