BeeJSP is an open-source Python and Lean project for helping the mathematical community identify suitable problems, formalize valid mathematical results in Lean, and publish reproducible machine-checked evidence.
The initial problem source and submission path is The Justin Sun Prize.
Finding a candidate is not proving it. Compiling Lean is not enough either.
BeeJSP asks a stricter question:
Can we identify a worthwhile mathematical result, represent its exact meaning faithfully in Lean, prove it completely, independently reproduce the proof, and publish evidence another person can verify?
Modern AI systems can help with:
- mathematical research;
- theorem search;
- source analysis;
- Lean authoring;
- Mathlib discovery;
- proof decomposition;
- proof debugging;
- verification.
But there is a large gap between:
AI produced Lean code
and:
the original mathematical result
was represented faithfully
and completely machine-verified
BeeJSP is designed around closing that gap.
The target flow is:
Problem
→ Research
→ Screen
→ Select
→ Formalize
→ Verify
→ Reproduce
→ Publish
→ Submit when appropriate
The objective is useful public formal mathematics.
A prize is a possible outcome.
It is not the definition of success.
BeeJSP is built around one core chain:
original mathematical problem
↓
exact mathematical meaning
↓
exact Lean statement
↓
complete Lean proof
↓
Lean verification
↓
independent statement review
↓
reproducible public evidence
Every transition matters.
A proof can compile and still be wrong for the original task if the formal statement:
- omits a case;
- weakens the conclusion;
- restricts the domain;
- adds a stronger assumption;
- formalizes a convenient special case instead of the full problem.
Therefore:
lake build PASS
!=
original problem fully formalized
BeeJSP is currently establishing the repository and verification foundation.
Current project flow:
Repository foundation IN PROGRESS
Managed JSP reference IN PROGRESS
Python tooling foundation IN PROGRESS
Lean template IN PROGRESS
Problem scanner NEXT
TOP-5 candidate selection NEXT
First Lean spike NEXT
Complete formalization NEXT
Independent verification NEXT
Official submission NEXT
The first end-to-end project cycle is:
official JSP problem bank
→ deterministic candidate scanner
→ evidence-backed TOP-5
→ selected candidate
→ bounded Lean feasibility spike
→ complete proof
→ independent verification
→ immutable public evidence
→ optional official JSP submission
See docs/ROADMAP.md for the complete iteration contracts.
BeeJSP has three primary areas.
Python tooling will help inspect and normalize mathematical problem records.
Initial goals include:
- parse the JSP problem bank;
- normalize problem metadata;
- identify solved problems without recorded Lean formalizations;
- preserve upstream provenance;
- distinguish official facts from BeeJSP-derived analysis;
- avoid manually scanning hundreds of catalog entries.
Conceptually:
official problem records
→ normalized data
→ deterministic filters
→ candidate set
Not every mathematically solved problem is a good first formalization target.
BeeJSP evaluates candidates using evidence such as:
mathematical solution available?
complete proof available?
statement unambiguous?
Lean proof already exists?
another formalization in progress?
finite / constructive structure?
Mathlib support?
formalization complexity?
submission/process risk?
Candidate assessment helps prioritize work.
It does not establish mathematical truth.
Selected problems are formalized as independent Lean projects.
Conceptually:
proofs/
├── _template/
├── JSP-XXXXXX/
├── JSP-YYYYYY/
└── ...
Each real proof should contain enough information to reproduce:
problem
statement
proof
Lean toolchain
dependencies
verification
provenance
BeeJSP uses one public repository for the project.
We do not create a separate GitHub repository for every JSP problem.
Instead:
beesyst/beejsp
proofs/
├── JSP-XXXXXX/
├── JSP-YYYYYY/
└── JSP-ZZZZZZ/
Each proof is isolated as its own Lean/Lake project when required.
This gives BeeJSP one:
- development workflow;
- Issue system;
- review process;
- CI foundation;
- public provenance history;
- security model;
- contribution model.
while preserving proof-level isolation.
A completed BeeJSP formalization must satisfy more than compilation.
The formal theorem must preserve the required:
- domains;
- quantifiers;
- hypotheses;
- conclusion;
- cases;
- boundary assumptions;
- mathematical meaning.
Completed proof evidence must not depend on:
sorry
admit
or a custom unproved axiom introduced merely to bypass missing mathematics.
Each real proof pins its required Lean environment.
Typical proof metadata includes:
lean-toolchain
lakefile.toml
lake-manifest.json
where applicable.
The principal theorem receives the applicable axiom review.
The goal is not necessarily "no axioms whatsoever".
The goal is to ensure the theorem does not depend on an unexpected custom axiom that substitutes for missing proof.
A completed proof should make it possible to recover:
problem source
mathematical solution source
solver
formalizer
repository
exact commit
proof project
principal theorem
toolchain
dependencies
build evidence
axiom evidence
BeeJSP keeps the following roles distinct:
problem author / source
mathematical solver
Lean formalizer
independent verifier
These may be the same person.
They may also be completely different people.
Formalizing someone else's mathematical result does not transfer authorship of the mathematical discovery.
AI assistance does not erase original solver attribution.
AI may assist with:
- problem research;
- source organization;
- candidate screening;
- theorem translation;
- Lean coding;
- Mathlib search;
- proof decomposition;
- debugging;
- review;
- documentation.
AI output is not itself proof evidence.
The engineering loop remains:
propose
→ compile
→ inspect
→ correct
→ verify
The final mathematical claim must be grounded in:
source evidence
+
exact Lean statement
+
kernel-checked proof
+
independent review
BeeJSP keeps a selected read-only snapshot of official Justin Sun Prize material under:
docs/vendor/jsp/
Canonical source:
https://github.com/TheJustinSunPrize/awards
Canonical synchronization command:
./scripts/sync_jsp_docs.shEvery valid snapshot records:
docs/vendor/jsp/UPSTREAM_REF
docs/vendor/jsp/UPSTREAM_COMMIT
The vendor snapshot is:
- generated;
- pinned to an exact upstream revision;
- reviewable;
- reproducible;
- read-only.
It is not:
- a permanent fork;
- a Git submodule;
- live GitHub state;
- an independent official authority.
Correct model:
official JSP upstream
→ exact revision
→ BeeJSP managed snapshot
→ local research / planning / verification
BeeJSP is its own project.
The official JSP repository is an external source and contribution target.
Development happens here:
beesyst/beejsp
When a completed formalization is ready for official submission:
verified BeeJSP proof
→ exact public BeeJSP commit
→ fresh official rules
→ current official fork
→ contribution branch
→ official PR
The external fork is contribution transport.
It is not BeeJSP's architecture.
The managed JSP snapshot tells us what official source material looked like at a specific revision.
It does not prove current live state such as:
open PR
new Issue
another Lean attempt
external proof repository
recent merge
Therefore BeeJSP keeps these concepts separate:
docs/vendor/jsp/
→ pinned official reference
live GitHub research
→ current competition evidence
Before investing heavily in a candidate or submitting a proof, current competition state should be checked separately.
The first scanner is intended to reduce the current problem bank into a smaller set worth manual mathematical review.
A useful initial direction is:
Solved
+
no recorded Lean proof
+
complete mathematical solution available
+
reasonable Lean complexity
+
no known competing complete formalization
But no single catalog field is authoritative enough to select a proof by itself.
For example:
Solved
in a problem catalog does not automatically mean universal mathematical consensus.
And:
Lean proof: No
does not prove another formalizer is not already working on it.
BeeJSP therefore combines:
official record
+
mathematical source
+
live competition evidence
+
formalization feasibility
before committing to substantial proof work.
BeeJSP does not immediately spend weeks formalizing a difficult theorem.
For an uncertain candidate, the first proof iteration should test the hardest known boundary.
Examples:
- exact theorem representation;
- explicit counterexample;
- finite witness;
- hardest central lemma;
- specialized Mathlib support;
- computational verification boundary.
The spike ends with:
GO
or:
NO-GO
A well-supported NO-GO is a successful engineering result.
It prevents wasted formalization effort.
A real formalization lives under:
proofs/JSP-XXXXXX/
The exact internal layout depends on the mathematics.
A proof may evolve toward:
proofs/JSP-XXXXXX/
├── README.md
├── lean-toolchain
├── lakefile.toml
├── lake-manifest.json
├── Challenge.lean
├── Solution.lean
└── BeeJSP/
├── Definitions.lean
├── Lemmas.lean
└── Main.lean
This is not a mandatory framework.
Use the smallest structure that makes the proof understandable and reproducible.
Rule:
Add proof structure because the mathematics requires it, not because a framework template has empty folders available.
Proof implementation and proof verification are separate passes.
Independent verification checks:
original problem
vs
mathematical interpretation
vs
Lean definitions
vs
top-level theorem
and also verifies:
complete proof
Lean build
sorry/admit absence
axiom dependencies
toolchain
dependencies
provenance
attribution
reproduction
The verifier should not simply trust:
- the implementation report;
- generated documentation;
- AI reasoning;
- theorem name;
- successful compilation.
BeeJSP supports formalizations intended for The Justin Sun Prize.
External submission happens only after local proof completion.
Correct order:
formalize
→ independently verify
→ freeze public evidence
→ refresh official rules
→ check live competition
→ submit
Not:
open official PR
→ finish proof later
Before an actual JSP submission, BeeJSP rechecks current official:
- contribution rules;
- verification requirements;
- attribution rules;
- award/claim process;
- exact problem record.
See docs/SUBMISSION.md.
BeeJSP distinguishes states carefully.
BeeJSP proof complete
!=
official JSP verified
official PR opened
!=
official PR merged
official PR merged
!=
award approved
award approved
!=
payment completed
Public project status should reflect only evidence that actually exists.
BeeJSP has two implementation surfaces and one external-reference boundary.
Mathematical sources
│
▼
TheJustinSunPrize/awards
│
┌───────────┴───────────┐
│ │
▼ ▼
docs/vendor/jsp/ live external state
pinned reference PRs / Issues / repos
│ │
└───────────┬───────────┘
▼
BeeJSP tooling
discovery / selection
│
▼
Lean proof project
│
▼
reproducible verification
│
▼
public proof evidence
│
▼
optional JSP submission
- catalog ingestion;
- normalization;
- deterministic filtering;
- candidate tooling;
- competition analysis;
- reports;
- repository automation.
- exact mathematical statements;
- proof-local definitions;
- proof-local lemmas;
- complete proofs;
- machine-checking evidence.
- official problem records;
- official candidate records;
- official verification state;
- official eligibility/claim state;
- award decisions.
BeeJSP must not manufacture official status locally.
Python helps answer:
What should we work on?
Lean helps answer:
Is this exact formal theorem proved?
Python does not establish mathematical truth.
Lean compilation does not establish that the theorem chosen by Python faithfully matches the original problem.
Both layers need review.
Target project structure:
beejsp/
├── .agents/
│ ├── prompts/
│ └── skills/
├── .github/
│ ├── ISSUE_TEMPLATE/
│ ├── PULL_REQUEST_TEMPLATE/
│ ├── release-please/
│ └── workflows/
├── docs/
│ ├── ARCHITECTURE.md
│ ├── DEV_GUIDE.md
│ ├── FORMALIZATION.md
│ ├── ROADMAP.md
│ ├── SECURITY.md
│ ├── SUBMISSION.md
│ └── vendor/
│ └── jsp/
├── proofs/
│ └── _template/
├── scripts/
│ └── sync_jsp_docs.sh
├── src/
│ └── beejsp/
│ └── __init__.py
├── tests/
├── AGENTS.md
├── CHANGELOG.md
├── LICENSE
├── README.md
├── pyproject.toml
└── uv.lock
BeeJSP currently does not need:
start.sh
config/start.py
config/settings.yml
database/
server/
worker/
runtime storage/
There is no application runtime to configure or start.
The Python package follows the standard src layout:
src/beejsp/
src/beejsp/__init__.py remains byte-empty.
Do not use it for:
- re-exports;
- registration;
- initialization;
- version constants;
- hidden I/O.
Future modules should be introduced only when real work requires them.
Possible examples:
catalog.py
scanner.py
competition.py
scoring.py
report.py
These are not bootstrap requirements.
This must remain safe:
import beejspImporting the package must not unexpectedly:
- access the network;
- invoke Git;
- synchronize JSP upstream;
- run shell commands;
- build Lean;
- modify repository files;
- contact GitHub;
- load credentials.
BeeJSP processes external content.
That content is untrusted until reviewed.
Examples:
- public repositories;
- mathematical documents;
- Lean projects;
- GitHub data;
- catalog content;
- dependency metadata;
- downloaded files.
Core rules:
external content
!=
execution authority
vendor snapshot
!=
trusted executable code
proof evidence
!=
GitHub write authority
Do not commit:
- GitHub tokens;
- SSH keys;
- wallet private keys;
- seed phrases;
- KYC documents;
- tax documents;
- private payment information;
- unrelated personal data.
See docs/SECURITY.md.
Requirements:
- Python 3.14+
uv- Git
- Bash
- Lean/Lake tooling when working on formalizations
Install Python environment:
uv syncRun Python tests:
uv run pytest -qRun Ruff:
uv run ruff check .
uv run ruff format --check .Build Python package:
uv buildImport smoke:
uv run python -c "import beejsp; print(beejsp.__file__)"Show Python dependencies:
uv treeSynchronize JSP reference:
./scripts/sync_jsp_docs.shBuild the Lean template:
cd proofs/_template
lake buildBuild a real proof:
cd proofs/JSP-XXXXXX
lake buildDo not run or require:
uv lock --check
Significant work follows:
ROADMAP
→ planning
→ Issue
→ feature branch
→ implementation
→ tests / proof checks
→ independent verification
→ final read-only review
→ PR
→ merge
BeeJSP uses the same canonical agent pipeline for:
- Python tooling;
- repository automation;
- Lean formalizations;
- verification corrections.
There is no separate submission agent pipeline.
Repository-wide agent rules are defined in AGENTS.md.
BeeJSP tooling uses SemVer.
Version source of truth:
pyproject.toml
Release lifecycle is managed through release automation.
Ordinary:
- feature;
- fix;
- docs;
- proof;
- maintenance;
work does not manually edit the package version unless the task is explicitly release-related.
Important distinction:
BeeJSP version
→ software/tooling release
proof identity
→ exact repository source + commit + theorem
A package version is not mathematical proof provenance.
BeeJSP CI validates separate project boundaries.
Conceptually:
Python
→ tests
→ Ruff
→ package checks
JSP reference
→ managed metadata sanity
→ required reference files
Lean
→ template / proof build
→ pinned proof environment
Proof projects may intentionally use different pinned Lean toolchains.
Do not force every formalization onto one global Lean version solely for CI convenience.
The first BeeJSP cycle is deliberately small.
repository
→ Python/Lean foundation
→ managed JSP reference
problem-bank parser
→ candidate scanner
→ live competition evidence
→ TOP-5
→ one selected candidate
exact statement
→ bounded Lean spike
→ GO / NO-GO
→ complete proof
independent verification
→ immutable public evidence
→ current official JSP process
→ external contribution
After the first end-to-end proof, BeeJSP stops and evaluates what actually needs to become reusable.
It does not automatically continue building infrastructure merely because more iteration numbers are available.
See docs/ROADMAP.md.
docs/ROADMAP.md— project stages and iteration contractsdocs/ARCHITECTURE.md— project boundaries and repository architecturedocs/DEV_GUIDE.md— local Python, vendor and Lean developmentdocs/FORMALIZATION.md— statement, proof, reproducibility, axioms and attribution contractdocs/SECURITY.md— external-input, supply-chain, credential and private-data rulesdocs/SUBMISSION.md— official JSP contribution and claim preparationAGENTS.md— repository guidance for development agents
BeeJSP should produce useful mathematics before building a platform.
Current priority:
reproducible official reference
→ good candidate selection
→ exact theorem
→ complete Lean proof
→ independent verification
→ public evidence
Not:
database
→ generic agent framework
→ dashboard
→ hosted proof service
→ generic theorem platform
→ automatic claims
→ eventually prove something
New abstractions should appear only after real proofs demonstrate a repeated need.
BeeJSP succeeds when another person can take a mathematical result produced or formalized through this project and answer:
What exactly was claimed, where did it come from, who solved it, who formalized it, what exact Lean theorem represents it, and can I reproduce the proof myself?
with public, machine-checkable evidence.
That remains useful whether or not a prize is awarded.