Searching for smallest one-point basis and verify in Lean4
A one-point basis is a single lambda term that can generate the entire untyped lambda calculus by itself through repeated application.
The currently known smallest one-point basis for untyped lambda calculus (in terms of Fokker size) have fokker size 7.
α = λλλ2 0 (1 (λ1))
B = λλλ2 (1 0) = α(α(α(α(α α) α))(α α) α)(α(α(α α)))
C = λλλ2 0 1 = α(α α α(α α α)(α α)(α α)) α α
K = λλ1 = α α(α(α α) α α α) α α
W = λλ1 0 0 = α α(α(α(α α) α))
I = λ0 = α(α(α(α α) α))(α(α α) α)
S = λλλ (2 0) (1 0) = α(α(α α(α α(α α))(α(α(α α(α α))))))α α
The Fokker size of a closed term is the number of abstractions and applications.
def fokker_size : (Term String) -> Nat
| bvar _ => 0
| fvar _ => 0
| abs t => 1 + fokker_size t
| app t1 t2 => 1 + fokker_size t1 + fokker_size t2
We are a collaborative project aim to
We use Lean 4 to formalize that all smaller closed lambda terms can't be a basis.
Our proof is based on cslib.
There are 5420 terms with Fokker size < 7. We have proved % are not bases by 4 simple deciders.
This repository is an intentional experiment in AI-native development.
We are especially hoping for AI assistance to help prove the remaining ~2000 terms are not bases.This project is quite suitable for AI-driven autonomous proof.
Counts for proved and unproved terms, grouped by priority and difficulty.
| Category | Detail | Count |
|---|---|---|
| Total | All terms with Fokker size < 7 | 5420 |
| Proved | Verified by the 4 deciders | 2814 |
| Unproved | Remaining cases | |
| Generation is FinSet | Priority: medium; Difficulty: easy | |
| Two vars are enough | Priority: high; Difficulty: medium | 23 |
| With beta-redex or eta-redex | Priority: low | 1469 |
| Others | Priority: high; Difficulty: unknown | 993 |
Although some terms are labelled as low priority, if you proved any of them, PRs are very welcome.
Examples:
Search History: