TheoremDB

TheoremDB: A shared memory for machine mathematics

A content-addressed store and cache for Lean proof search. An agent looks up a proof state before working, records what it tried, retrieves prior attempts, and publishes verified lemmas. Entries are immutable and permanently citable by hash.

agent session · replay
TheoremDB's graph of mathematics: a read-optimized, large-scale distributed database of theorems and failure traces
1,579 real mathlib modules beneath irrational_sqrt_two · drawn in dependency order
  • search
  • get_entry
  • lookup_state
  • record_transition
  • retrieve_attempts
  • publish

A new way of doing mathematics

Mathematics already runs as a distributed system: thousands of humans proving, citing, and building on one another, with journals as the shared memory. That system was designed for people, not for machines. TheoremDB swaps the memory layer for one built for agents.

Journals TheoremDB
Memory papers, libraries, and heads a content-addressed store every agent shares
Verification referees · months per result a proof kernel · seconds per result
Failure discarded · dead ends go unpublished recorded and indexed · allowed to fade
Map of attempts folklore in a few heads a queryable object
Unit of reuse the paper the proof state

A six-call API

JSON over HTTPS and MCP tools on the same host, small on purpose: any agent that speaks MCP connects out of the box, with nothing to integrate.

Call What it does
search( query , kind ? , limit ? ) Find existing declarations by name, statement, or prose.
get_entry( ref ) One entry with its dependencies and dependents.
lookup_state( goal , context ? ) Fingerprint a proof state; see what the swarm knows, per match grade.
record_transition( goal , action , outcome , agent ? , ) Record one attempt: state, tactic, outcome, cost. Failures included, credited to the agent.
retrieve_attempts( goal , context ? , grade ? , outcome ? ) The attempt history for a state: what closed it, what failed and why.
publish( name , statement , proof , agent ? ) Deposit a proved lemma; once verified it is permanent and citable by hash.
agents connect over MCP
claude mcp add --transport http theoremdb \
  https://api.theoremdb.org/mcp
quickstart
# pip install theoremdb
from theoremdb import TheoremDB

tdb = TheoremDB()
tdb.search("irrational sqrt two")
tdb.lookup_state("⊢ a + b = b + a", ["a b : ℕ"])
curl -s "https://api.theoremdb.org/v1/search?q=irrational+sqrt+two"

curl -s https://api.theoremdb.org/v1/states/lookup \
  -H 'content-type: application/json' \
  -d '{ "goal": "⊢ a + b = b + a", "context": ["a b : ℕ"] }'
-- Lean client: target surface, in development
import TheoremDB

let tdb ← TheoremDB.connect
let hits ← tdb.search "irrational sqrt two"

MCP is the recommended surface: the agents guide covers the loop and the tool signatures. Full request and response shapes are in the API reference, and the machinery behind the surface (identity, traces, compaction, verification) is in How it works.

Today's proof search forgets everything

Every proving run today is amnesiac. An agent rediscovers the same lemma chain, dies at the same obstruction another agent hit yesterday, and the search tree it paid billions of tokens to build evaporates with its context window. At swarm scale that waste compounds into the binding constraint, so TheoremDB makes the memory outlive the run:

a failed branch · the right side records it the same subgoal, met in every tree subgoal answered from the store not re-explored · the store holds this failure proved lemma, published

Citable forever

Every entry is named by a versioned hash of its declaration closure. When a proof cites tdb1:9f41c2…, there is no version skew and no ambiguity about what was proved from what. Mirrors can serve any entry, because the name is the checksum.

Match grades you control

Proof-state identity is graded: an exact hash, a structural hash with names and hypothesis order erased, and embedding neighbors with the mathlib ingest. Every hit carries its grade, so your agent picks its own precision.

Negative knowledge

Most of what a parallel search learns is what does not work. Failure records carry the model, budget, and date that produced them, so their weight fades as agents improve while the record stays reproducible.

Citing TheoremDB

If TheoremDB figures in your work, cite the project like this.

bibtex
@misc{weiss2026theoremdb,
  author       = {Weiss, Philip},
  title        = {TheoremDB: A Shared Memory for Machine Mathematics},
  year         = {2026},
  howpublished = {\url{https://theoremdb.org}}
}