The lean prover system is getting gaining a lot of popularity:
\(\alpha\)
Type
Type 1
.
Type
.
\(\alpha\)
Type
Type 1
.
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)