
Jakub Štepo
DIMACS REU 2026

I am an undergaduate student at Charles University in Prague.
I will be working under the guidance of Atefeh Mohajeri, a research scientist at
Other people joining us on our experience with Lean:
Shiyu Wang, a student at Columbia University and intern at Bell Labs
professor Bjørn Kjos-Hanssen of the University of Hawaii at Manoa
This work will be conducted at the Center for Discrete Mathematics and Theoretical Computer Science of Rutgers University.
Furthermore, the following entities provide financial support:

Copyright (c) 2026 Lean FRO LLC. All rights reserved.
Released under Apache 2.0 license.
Author: David Thrane Christiansen
Modified from the official Demo.
The way we view mathematics has developed.
The notion of a proof: Thales, cca 600 BC
The ε-δ definition of a limit as a rigorous way of doing analysis: Bolzano, 1821
ZFC as a solid foundation: 1922
But is it enough?
We don't prove everything formally in practice!
Lean is a functional programming language which allows for formal proof verification. (de Moura, 2013)
Natural next step in the evolution of mathematics
Absolute guarantee of correctness
Open-source, collaborative effort
Lean's math library, mathlib, currently contains over 130000 definitions and 270000 theorems/lemmas
Let's take a closer look!
Dependent type theory (in contrast to set theory)
Logical strength: ZFC + finitely many inaccessibles
Lean checks that a term has the correct type
Curry-Howard correspondence: The terms of propostitions (as types) are simply proofs
def f (k : ℤ) : ℕ × ℕ → ℤ :=
fun (m, n) ↦ k * (m - n)
theorem impl_trans (P Q R : Prop) : (P → Q) → (Q → R) → (P → R) :=
fun hpq hqr ↦ hqr ∘ hpq
Tactic mode: The proof is written quite naturally
Powerful automation implemented
Extensibility: One may write their own tactics
Proof assistant: interactive environment
example : ¬ ∃ n : Nat, n ^ 2 = 3 := by⊢ ¬∃ n, n ^ 2 = 3
intro hh:∃ n, n ^ 2 = 3⊢ False
obtain ⟨n, hn⟩ := hn:ℕhn:n ^ 2 = 3⊢ False
match n with
| 0 =>n:ℕhn:0 ^ 2 = 3⊢ False contradictionAll goals completed! 🐙
| 1 =>n:ℕhn:1 ^ 2 = 3⊢ False contradictionAll goals completed! 🐙
| k + 2 =>n:ℕk:ℕhn:(k + 2) ^ 2 = 3⊢ False
have : 3 ≥ 4 := by⊢ ¬∃ n, n ^ 2 = 3
calc
3 = (k + 2)^2 := hn.symm
_ ≥ 2 ^ 2 := byn:ℕk:ℕhn:(k + 2) ^ 2 = 3⊢ (k + 2) ^ 2 ≥ 2 ^ 2 liaAll goals completed! 🐙
contradictionAll goals completed! 🐙
Also verifies computer programs → use in cybersecurity
Useful for checking the soundness of AI output
AI agents might be useful for translating papers into Lean code
One can write websites, textbooks, slides etc. with interactive code in Lean
Most topics of undergraduate mathematics are already covered really well.

Image by Gemini
Graph theory appears relatively underdeveloped, even some basic results are missing
First, survey what areas already are formalised and how
Then attempt to formalise a topic not yet in Mathlib and see what challenges it brings
What makes some things difficult and which new approaches are necessary?
Thank you for your attention!