# Project GPE: proof maps of OpenAI's openai/math papers (373 families catalogued, 5 digested)

[openai/math](https://github.com/openai/math) is a collection of 721 machine-written math manuscripts in 373 result
families. Project GPE catalogues all of them (title, abstract, discipline, PDF, Lean status) and turns some into
browsable proof maps: every definition, lemma and theorem, plus the major claims inside long proofs, each with a
plain-English statement, an explanation of why it is in the paper, a standard/routine/novel classification, and the
dependency edges between them. This page tells an agent how to read the catalog and the maps. Everything is read-only,
needs no key, and returns JSON.

Two ways in, same tools and same answers:

- **HTTP GET** (works with any fetch or curl): `https://project-gpe.vercel.app/api/v1`, described below.
- **MCP** (streamable HTTP): `https://project-gpe.vercel.app/api/mcp`. Add it as a remote MCP server; the tools are the ones below, each
  with an extra `paper` argument (the slug). The catalog endpoints are HTTP only.

## How to use it

1. `GET https://project-gpe.vercel.app/api/v1/papers` lists the papers with a map. Pick a slug. (To find a result that has no map yet, search the
   catalog: `GET https://project-gpe.vercel.app/api/v1/families?q=…`.)
2. `GET https://project-gpe.vercel.app/api/v1/papers/<slug>/get_overview` gives the summary, main results and the section layout.
3. Drill in with `get_node` (the explanation and direct edges) and `read_node` (the verbatim LaTeX statement and proof).
4. For "how does X lead to Y", call `trace`; a node's own edges are only its direct uses, so don't assemble chains by
   hand. `ancestors` gives everything a node rests on or supports.
5. Answer from what the tools return, and cite nodes with their `url` so the user can open them in the map.

Node ids look like `lem-greedy-hashes`; the paper's LaTeX labels (`lem:greedy-hashes`) work too. An unknown id comes back
as an error that lists close matches. Errors are `{ "error": "…" }` with status 400 (bad arguments) or 404 (unknown
paper, node, figure or family).

Example: `GET https://project-gpe.vercel.app/api/v1/papers/intmult/trace?from=<node>&to=<node>`

## Catalog

Every openai/math result family, built from the repository's own index (no model involved). A family has a 3-digit
code (`049`), a title and description, a discipline, its manuscripts, Lean status, and `digested`: the maps
made from its manuscripts (slug and counts), `[]` when none is mapped yet.

### list_families

`GET https://project-gpe.vercel.app/api/v1/families?…`

Families, filtered and paged. Each has number, code, title, description, discipline, members, has Lean, reasoning-trace
PDF (when there is one), and `digested`.

  - `q` (string, optional): case-insensitive text match against family titles and descriptions and manuscript titles and abstracts
  - `discipline` (string, optional): a discipline slug from list_disciplines, e.g. `combinatorics`
  - `digested` (`1` \| `0`, optional): only families with (or without) a map
  - `lean` (`1` \| `0`, optional): only families with (or without) a Lean formalization
  - `sort` (`flagship` \| `number` \| `title` \| `members`, optional): default `flagship` (featured families first, then mapped, then by number)
  - `limit` (integer, optional): default 50, max 400
  - `offset` (integer, optional)

### get_family

`GET https://project-gpe.vercel.app/api/v1/families/<code>`

One family (`049` or `49`) with every manuscript: title, abstract, publication date, PDF, source and README links,
Lean status, and the map's slug when one exists.

### list_disciplines

`GET https://project-gpe.vercel.app/api/v1/disciplines`

Catalog totals (families, manuscripts, disciplines, digested, Lean, the indexed commit) and each discipline's slug, name,
family count and digested count.

## Papers

- `intmult`: Integer multiplication below n log n (OpenAI), 95 nodes, family 109 (Theoretical computer science). https://project-gpe.vercel.app/intmult
- `logspace`: Exact Derandomization of Logarithmic Space: L = RL = BPL (OpenAI), 164 nodes, family 103 (Theoretical computer science). https://project-gpe.vercel.app/logspace
- `unit-distance`: A power saving for planar unit distances (OpenAI), 96 nodes, family 167 (Combinatorics). https://project-gpe.vercel.app/unit-distance
- `noncoordinate`: An explicit noncoordinate polynomial with affine three-space zero fibre (OpenAI), 12 nodes, family 049 (Algebraic and complex geometry). https://project-gpe.vercel.app/noncoordinate
- `eth`: The Exponential Time Hypothesis is False, 89 nodes, family 378 (Theoretical computer science). https://project-gpe.vercel.app/eth

## Tools

### list_papers

`GET https://project-gpe.vercel.app/api/v1/papers`

Every paper that has a proof map: slug, title, authors, source, node count and link; for openai/math manuscripts also `family` (number, code, title, discipline), `pdf_url`, `has_lean` and a one-line `headline` when the map has a summary.

### get_overview

`GET https://project-gpe.vercel.app/api/v1/papers/<slug>/get_overview`

A paper's summary and main results (with plain-English statements), its openai/math family and manuscript (PDF, Lean status), its sections with node counts, counts by kind, and its figures. Start here.

### list_nodes

`GET https://project-gpe.vercel.app/api/v1/papers/<slug>/list_nodes?…`

One line per node (id, kind, name, headline, section, classification) in paper order. Filter by section id or kind; pages of 50 by default (max 200), follow next_offset for more.

  - `section` (string, optional): Section id from get_overview
  - `kind` (`definition` \| `lemma` \| `proposition` \| `theorem` \| `corollary` \| `claim` \| `remark`, optional)
  - `offset` (integer, optional)
  - `limit` (integer, optional)

### get_node

`GET https://project-gpe.vercel.app/api/v1/papers/<slug>/get_node?…`

One node as the map explains it: plain-English statement, why it is in the paper, standard/routine/novel classification with its reason, friction notes, what it uses and what uses it, and a link.

  - `id` (string, required): Node id, e.g. lem-greedy-hashes, or a LaTeX label like lem:greedy-hashes

### read_node

`GET https://project-gpe.vercel.app/api/v1/papers/<slug>/read_node?…`

One node's verbatim LaTeX statement and proof (or claim span) from the paper's source with file and line numbers, plus the equations it references. Use it to quote a proof or check an exact step or constant.

  - `id` (string, required): Node id, e.g. lem-greedy-hashes, or a LaTeX label like lem:greedy-hashes

### search_paper

`GET https://project-gpe.vercel.app/api/v1/papers/<slug>/search_paper?…`

Case-insensitive search over the paper's LaTeX source, ignoring LaTeX punctuation (\sqrt{\log n} matches "sqrt log n"). Returns file:line, section, the node containing the line, and ±2 lines of context.

  - `query` (string, required): Words or a LaTeX fragment
  - `max` (integer, optional): Hits to return (default 10, max 15)

### trace

`GET https://project-gpe.vercel.app/api/v1/papers/<slug>/trace?…`

Up to 3 shortest dependency paths from a supporting node to a result that rests on it. Use it for "how does X lead to Y"; says when no path exists and whether the reverse holds.

  - `from` (string, required): The supporting node
  - `to` (string, required): The result

### ancestors

`GET https://project-gpe.vercel.app/api/v1/papers/<slug>/ancestors?…`

Everything a node rests on (direction "supported_by") or everything that rests on it ("supports"), grouped by distance.

  - `id` (string, required): Node id, e.g. lem-greedy-hashes, or a LaTeX label like lem:greedy-hashes
  - `direction` (`supports` \| `supported_by`, required)
  - `depth` (integer, optional): Levels to follow (default 3)

### view_figure

`GET https://project-gpe.vercel.app/api/v1/papers/<slug>/view_figure?…`

One figure: LaTeX caption, description, data summary for charts, page, section, the nodes it supports, and a link to the figure image when one was rendered (over MCP the image itself is attached).

  - `ref` (string, required): Figure id or label from get_overview, "Figure 2", or 2

### get_friction

`GET https://project-gpe.vercel.app/api/v1/papers/<slug>/get_friction?…`

Places where the map is uncertain about the paper: dependencies inferred from prose rather than cited, unresolved references, structure the pipeline was unsure of. Worst first, at most 100.

  - `severity` (`info` \| `warn` \| `high`, optional)
  - `kind` (`inferred_dep` \| `unresolved_ref` \| `structure_uncertain`, optional)
