Given by Jeremy Avigad, From CMU's Philosopy department We're doing veverything through a VSCode lecture. - Lean nicely formats things like natural number symbols - Copilot in vscode also looks pretty insane. Pretty sick preloading for what people anticipate We're proving the factorial ```lean def fac: N->N | 0=>1 | n+1 => (n+1) * fac n #check fac #print fac #eval fac 3 /- this will actually run the function -/ ``` These are functional definitions Lean is suprisingly a good programming language. Most of lean is written in lean ```lean theorem dvd_fac: \forall n, \forall i \leq n, i | fac n:= by intro n induction' n with n ih . simp: [fac] /-(now something is wrong. 1=0..? Turns out our theorem is false when i = 0!)-/ /-so change i to i+1-/ . intro i h rw[fac] rcases lt_or_eq_of_le (Nat.le_of_lt_succ N) with h1 | rfl . apply dvd_mulof_dvd_right apply ih _ h1 . dvd_mul_right #check dvd_fac /- it works! -/ ``` 'fac' is a program, and we just proved something about it. This is what software verification is all about. **ITP** is an interactive theorem prover