We finished the last lesson by observing that mathematical definitions and theorems are organized in massive hierarchical structure.

Definitions and theorems are followed by definitions and theorems are followed by… you get the gist.

This begs the question: what’s at the bottom? In this lecture, we are diving deeper than the Mariana Trench, and get a glimpse of the existential horrors that lie deep down. Horrors that drove Cantor and Gödel insane, shaking an entire generation of mathematicians.

This lesson is going to be a bit psychedelic. I know, I promised you that I'll keep math down to Earth, but trust me, we really need this trip. By the end, we'll understand a truly key idea of mathematical thinking: that *a model* is not *the structure*.

It'll be all clear at the end. (Hopefully.)

# Sets and collections of things

Let’s go back to the very basics, back to a concept that even precedes numbers. Let’s talk about *sets*.

How would you *define* a set? The common wisdom sounds like the following.

**Definition.** (*Sets, the naive attempt.*) A set is a collection of things.

Sets are denoted by listing their elements in between curly braces, like *{42, ❤️, {1}}*. Yes, sets can be elements of sets as well.

If a set is really a collection of things, we can define particular sets by specifying their elements. This can be done via either explicitly enumerating it’s members, or specifying a parent set and a property which filters elements from the parent set. Let’s see an example to make it clear.

For instance, “the set of natural numbers” is given by

This is the former method: defining a set by explicitly enumerating its members.

To filter out, say, the even numbers less or equal to 10 from ℕ, we define the property

which is true precisely if $ n $ is an even natural number less or equal to 10. Thus, “the set of even numbers less or equal than 10” is given by

This is called the set-builder notation, an extremely convenient way of defining sets. If you are familiar with Python, you have already used it: the above is equivalent with

`E = {n for n in range(1, 11) if n % 2 == 0}`

a syntax inspired by the set-builder notation. You can open up a Python interpreter to quickly check if it indeed works, but here is the result:

Now, let’s see what’s wrong with all of this.

## Keep reading with a 7-day free trial

Subscribe to The Palindrome to keep reading this post and get 7 days of free access to the full post archives.