The lean prover system is getting gaining a lot of popularity:

- Quanta magazine called it one of the 5 most important progressions in math of 2020: original article
- In use at many universities to teach topics in mathematics: e.g. lambda calculus

- Integrates a theorem prover and a programming language
- Based on dependent type theory

(Specifically, calculus of inductive constructions)- Every expression has a type
- countable hierarchy of non-cumulative universes and inductive types: link

\(\alpha\)

Type

Type 1

.

Type

.

\(\alpha\)

Type

Type 1

.

- Integrates a theorem prover and a programming language
- Based on dependent type theory

(Specifically, calculus of inductive constructions)

Uses 'Propositions as Types' paradigm (Curry-Howard isomorphism)

then:

~p ≡ p -> false

p \(\Rightarrow\) q ≡ p -> q

p \(\land\) q ≡ (p, q)

p \(\lor\) q ≡ Either p q

p and q are propositions:

p : Prop q : Prop

Proving p \(\Rightarrow\) q \(\Rightarrow\) p is the same as providing an implementation for a function of type p \(\rightarrow\) q \(\rightarrow\) p

Tactics are instructions on how to build a proof. They offer a gateway to to L\(\exists\forall\)N automated reasoning capabilities.

An introduction to tactics is given in the natural number game.

We'll go through it if time allows.

inductive foo : Sort u

| constructor₁ : ... → foo

| constructor₂ : ... → foo

...

| constructorₙ : ... → foo

(Almost*) all types are a form of inductive types:

* All user-defined, and all built-in except for the universes and the dependent type constructor \(\Pi\), that I kept hidden.

Every type automatically comes with its own *eliminator* and based on that, we can recurse (of which induce is considered a special form)

- Very strong and generic type system
- Many different ways of writing the same thing (Steep learning curve!)
- Many language versions, not clearly marked
- Fancy symbol usage in syntax