<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Machine-Checked Mathematics on RockB</title><link>https://baeseokjae.github.io/tags/machine-checked-mathematics/</link><description>Recent content in Machine-Checked Mathematics on RockB</description><image><title>RockB</title><url>https://baeseokjae.github.io/images/og-default.png</url><link>https://baeseokjae.github.io/images/og-default.png</link></image><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 30 Sep 2026 18:13:32 +0000</lastBuildDate><atom:link href="https://baeseokjae.github.io/tags/machine-checked-mathematics/index.xml" rel="self" type="application/rss+xml"/><item><title>Palomar Registry: Lean Verified Mathematics, Explained (2026 Guide)</title><link>https://baeseokjae.github.io/posts/palomar-lean-verified-mathematics/</link><pubDate>Wed, 30 Sep 2026 18:13:32 +0000</pubDate><guid>https://baeseokjae.github.io/posts/palomar-lean-verified-mathematics/</guid><description>Palomar is a registry of Lean 4 formalizations whose proofs pass a two-kernel machine check. Here is what it certifies, what it does not, and how to file.</description><content:encoded><![CDATA[<p>Palomar is a public, searchable registry of Lean 4 formalizations whose proofs have been machine-checked and whose statement was reviewed for fidelity to the informal claim. It is jointly incubated by the Lean Focused Research Organization (Lean FRO) and ICARM, announced publicly by Terence Tao on 18 August 2026, and it deliberately performs no human peer review.</p>
<p>That last clause is the part most coverage gets wrong, so it is worth stating before anything else: a Palomar entry certifies that a proof typechecks under two independent kernels, that no forbidden axiom was smuggled in, and that an automated reviewer found the Lean statement faithful to the stated informal one. It certifies nothing about whether the result is novel, interesting, or important.</p>
<h2 id="what-is-the-palomar-registry-and-what-is-it-explicitly-not">What Is the Palomar Registry, and What Is It Explicitly Not?</h2>
<p>Palomar is an append-only index of Lean formalizations that have cleared automated verification, each pointing at an immutable commit of a public repository. The name is a reference to the Palomar Observatory sky survey: a catalogue you consult, not a referee you argue with.</p>
<p>The registry&rsquo;s own manifesto states the motivation in unusually blunt terms. Since the start of 2026 the volume and complexity of machine-assisted proofs has risen substantially, and bold claims about machine-assisted resolution of famous problems have been announced with poor vetting, insufficient transparency, and inadequate context — eroding what counts as an established mathematical fact. Palomar is the response to that erosion.</p>
<p>What it is not requires its own list:</p>
<ul>
<li><strong>Not a peer-reviewed journal.</strong> The registry states plainly that it &ldquo;adds no human editorial step: no one here reads the mathematics the way a referee would.&rdquo;</li>
<li><strong>Not a preprint server.</strong> Its role in the publishing pipeline is analogous to a repository or arXiv, but an arXiv posting carries no verification claim at all, and a Palomar entry carries a specific, narrow, machine-checked one.</li>
<li><strong>Not a proof assistant.</strong> Palomar verifies Lean only. It does not replace Lean, Mathlib, or your own CI, and it is not run by any of them.</li>
<li><strong>Not a novelty certificate.</strong> Registration certifies neither novelty, nor relevance, nor complete agreement between the formal and informal statement.</li>
</ul>
<p>The useful mental model is a lighthouse rather than a courthouse. It tells you the rocks it can see. It does not tell you whether the ship is worth building.</p>
<h2 id="who-runs-palomar-lean-fro-icarm-and-the-scientific-board">Who Runs Palomar: Lean FRO, ICARM and the Scientific Board</h2>
<p>Palomar is jointly incubated by two organisations with different mandates. The Lean FRO is the engineering body behind Lean 4, Mathlib&rsquo;s tooling, and the Verso documentation system. ICARM, the Institute for Computer-Aided Reasoning in Mathematics, is the research-side institute; its directors Jeremy Avigad and Matthew Ballard are both on the board.</p>
<p>The initial scientific advisory board has nine members: Jeremy Avigad, Matthew Ballard, Jaume de Dios, Nestor Guillen, Bryna Kra, Kim Morrison, Terence Tao, Ravi Vakil and Akshay Venkatesh. Tao is not merely a signatory — he is one of four initial technical maintainers, alongside Matthew Ballard, Nestor Guillen and Jaume de Dios Pont.</p>
<p>That maintainer list matters for a practical reason. The registry&rsquo;s engineering is maintained by people who also work on the Lean ecosystem itself, which is why Palomar&rsquo;s requirements line up exactly with existing Mathlib Initiative standards rather than inventing a parallel format. The <code>formalization.yaml</code> standard it requires was developed by the Mathlib Initiative; the Comparator tool it runs is the Lean FRO&rsquo;s; the HTML rendering of main theorems is automatic via Verso.</p>
<p>There is an institutional tell in the ICARM announcement too. The stated strategic rationale is to keep mathematics central, independently auditable and publicly accessible — a formulation that reads less like a product pitch and more like a statement of what the incubators were afraid of losing.</p>
<h2 id="the-three-automated-checks-behind-every-entry">The Three Automated Checks Behind Every Entry</h2>
<p>Every registration passes three checks. Understanding which check does what is the whole game, because each one has a different failure mode and a different blind spot.</p>
<h3 id="check-1--mechanical-comparator-leans-kernel-and-nanoda">Check 1 — Mechanical: Comparator, Lean&rsquo;s Kernel and NanoDa</h3>
<p>This is the load-bearing check. Palomar uses the Lean FRO&rsquo;s Comparator tool to replay every exported proof, and it verifies through two kernels rather than one: Lean&rsquo;s own kernel and NanoDa, an independently implemented kernel.</p>
<p>Two kernels is the answer to the obvious objection that a single buggy checker could accept a false proof. The two implementations share no code lineage, so a soundness bug in one is unlikely to be reproduced by the other. The registry publishes the exact commit of each checker alongside the entry, so a reader who distrusts either one can inspect precisely what ran.</p>
<p>The mechanical gate also enforces the axiom policy. A proof can typecheck perfectly and still be worthless if it reaches for extra assumptions, so Comparator and the review pipeline reject four specific escape hatches:</p>
<ul>
<li><code>sorryAx</code> — a proof that is admitted without proof.</li>
<li><code>Lean.ofReduceBool</code> — a trusted-implementation escape in the kernel.</li>
<li>Any custom axiom defined by the submitter.</li>
<li>Any unnamed missing definition.</li>
</ul>
<p>The permitted set is exactly Lean&rsquo;s three standard axioms: <code>propext</code>, <code>Classical.choice</code> and <code>Quot.sound</code>. Those three are accepted because essentially all of ordinary mathematics already depends on them; anything beyond them is treated as a smuggled assumption rather than a foundation. This is why the registry&rsquo;s own framing describes the checks as covering three questions: that the proof typechecks, that there are no &ldquo;cheats&rdquo; such as extra axioms, and that the formal statement matches the informal claim.</p>
<h3 id="check-2--non-mechanical-the-llm-statement-fidelity-review">Check 2 — Non-mechanical: The LLM Statement-Fidelity Review</h3>
<p>This check exists because the mechanical gate cannot do it.</p>
<p>A kernel can verify that a Lean term has the type you declared. It cannot verify that the type you declared says what you told the world your theorem says. If you formalize a weak, trivially true statement and label it with a famous conjecture&rsquo;s name, every kernel in the world will happily accept it. That gap — between the formal statement and the informal claim people are actually talking about — is the honest limit of the entire system, and Palomar hands it to a language model by design.</p>
<p>The review is described as LLM judgement of whether the informal and formal statements match. It is not a proof check; if the translation is faithful, there is no proof to check a second time. The Hacker News thread raised this as a &ldquo;recursive verification&rdquo; worry — who verifies the verifier? — and the answer that emerged in discussion is the correct one: you check translation fidelity, not the proof again.</p>
<p>The published review is <strong>redacted</strong>. It records that no blocking problem was identified and carries every comment, but it withholds the numeric scores. The registry explains why: the same commit scored 5 and then 4 on one axis across two runs of the same policy. Rather than publish a number it cannot stand behind, Palomar dropped the number. That is an unusually honest piece of systems design, and it is the single best indicator of how the maintainers think about automated judgement.</p>
<h3 id="check-3--disclosure-formalizationyaml">Check 3 — Disclosure: formalization.yaml</h3>
<p>The third check is not a verification at all. It is a disclosure regime, and it is the reason Palomar can stay neutral about AI.</p>
<p>Every entry requires a <code>formalization.yaml</code> file conforming to the Mathlib Initiative standard, with fields for recording collaboration, AI use (which models, and budgets), and adherence to social standards around licensing, referencing and attribution. The maintainer-side launch post states the policy directly: Palomar has no opinions about use of AI — entries range from fully hand-written to autonomously formalized — but the method must be disclosed.</p>
<p>That single design choice defuses the argument that has consumed most of the AI-mathematics conversation. Palomar does not need to adjudicate whether an AI wrote the proof, because the registry&rsquo;s claim never depended on the provenance. The disclosure fields make provenance a matter of record rather than a matter of trust.</p>
<p>The editorial review adds one more gate that nobody expected from an automated registry: a research-interest floor. A language model must answer yes to two questions before a result is registrable — could this warrant a research paper or serious note, and can a credible research area and a plausible researcher type be identified. It is mild gatekeeping, but it is gatekeeping, and it exists to keep the registry from filling with formally correct trivia.</p>
<h2 id="the-repository-layout-palomar-requires">The Repository Layout Palomar Requires</h2>
<p>The submission contract is strict in a way that surprises people who expect a portal with a form. Palomar does not accept a link to your paper or your repository in general. It accepts a specific project layout at a specific commit.</p>
<h3 id="challenge-solution-and-comparatorjson">Challenge, Solution and comparator.json</h3>
<p>The required project files are:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 424 121"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='0' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='0' y='100' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='8' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='8' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='8' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='84' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='16' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='24' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='40' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='56' y='100' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>j</text>
<text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='96' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>j</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='100' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='128' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>#</text>
<text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>#</text>
<text text-anchor='middle' x='200' y='52' fill='currentColor' style='font-size:1em'>#</text>
<text text-anchor='middle' x='200' y='68' fill='currentColor' style='font-size:1em'>#</text>
<text text-anchor='middle' x='200' y='84' fill='currentColor' style='font-size:1em'>#</text>
<text text-anchor='middle' x='200' y='100' fill='currentColor' style='font-size:1em'>#</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='216' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='216' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='224' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='232' y='84' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='232' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='240' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='240' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='240' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='248' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='256' y='52' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='256' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='256' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='264' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='264' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='272' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='272' y='100' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='280' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='280' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='288' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='288' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='288' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='296' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='296' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='304' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='304' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='304' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='304' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='304' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='312' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='312' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='312' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='312' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='312' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='320' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='320' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='320' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='328' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='328' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='328' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='328' y='84' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='328' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='336' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='336' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='336' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='336' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='344' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='344' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='344' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='344' y='84' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='344' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='352' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='352' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='352' y='84' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='352' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='360' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='360' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='360' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='368' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='368' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='368' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='376' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='376' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='376' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='384' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='384' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='384' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='392' y='52' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='392' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='400' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='400' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='408' y='52' fill='currentColor' style='font-size:1em'>e</text>
</g>

    </svg>
  
</div>
<p>The <code>Challenge</code> module must be readable — it is where the formal statement lives, and it is what a reader is meant to be able to audit without wading through a proof. The <code>Solution</code> module is where the proof lives. That separation is structural, not stylistic: it is what lets the registry show a human the claim and let a machine handle the proof.</p>
<p>An official starter repository, <code>PalomarRegistry/PalomarTemplate</code>, provides the layout, pinned dependencies, documentation generation and CI checks. The registry also points at a complete worked example repository so you can see the shape of a finished submission rather than inferring it.</p>
<h3 id="sizing-rules-import-rules-and-the-allowed-axiom-set">Sizing Rules, Import Rules and the Allowed-Axiom Set</h3>
<p>Four constraints cause most of the friction in real submissions.</p>
<p><strong>Sizing.</strong> The Challenge source has a hard maximum of 1,000 lines and 100 KiB, with a warning threshold at 300 lines and 32 KiB — the registry would rather review 300 lines than 1,000. The checked-out repository itself is capped at 500 MiB. The soft limits are the practical target; if your statement needs more than 300 lines, the registry&rsquo;s implicit advice is that you have probably folded the proof into the statement.</p>
<p><strong>Imports.</strong> The Challenge module&rsquo;s transitive imports must resolve to Lean core plus the pinned, allowlisted Mathlib or Tau Ceti closure, and to nothing else. Dependencies used only by the Solution may be arbitrary pinned Git dependencies. The logic is that the reader-facing statement must not depend on code the reader cannot see, while the proof may lean on whatever helps.</p>
<p><strong>No back-imports.</strong> A project Palomar has already registered is <strong>not</strong> importable as a library on the basis of its registration, because each entry fixes a reviewable snapshot of its own statement. Registration is a citation, not an API.</p>
<p><strong>Immutability.</strong> Submissions are pinned to a full 40-character Git commit SHA from a public GitHub repository. Palomar checks that immutable snapshot, not a branch or a tag that can move underneath it. A short SHA is not accepted.</p>
<p>The allowed-axiom set is <code>propext</code>, <code>Classical.choice</code> and <code>Quot.sound</code>, as described above. Assumptions must be stated as explicit hypotheses in the Challenge statement rather than smuggled in as axioms — which is the correct discipline in any case, since an explicit hypothesis is visible to the reader and a custom axiom is not.</p>
<h2 id="how-to-submit-to-the-palomar-registry-step-by-step">How to Submit to the Palomar Registry, Step by Step</h2>
<p>The flow is short, and every step is a place where a real submission has failed.</p>
<ol>
<li><strong>Build the project locally and prove it clean.</strong> Run <code>lake build</code> and confirm the Challenge imports resolve only to core plus Mathlib or Tau Ceti. Confirm the Solution proves exactly the Challenge statement, with no weakening.</li>
<li><strong>Verify the axiom surface yourself.</strong> Before filing, run <code>#print axioms</code> on the main theorem. Every axiom that appears must be one of <code>propext</code>, <code>Classical.choice</code> or <code>Quot.sound</code>. If you see anything else, the mechanical gate will find it too, and you will have spent a cycle for nothing.</li>
<li><strong>Write <code>formalization.yaml</code>.</strong> Use the exact basename. A wrong filename is a filing error, and filing errors cost full submission cycles.</li>
<li><strong>Commit and take the full SHA.</strong> <code>git rev-parse HEAD</code> and copy all 40 characters. Do not use a tag or a branch name.</li>
<li><strong>Push to a public GitHub repository.</strong> GitHub is currently the only supported forge.</li>
<li><strong>Submit through the interactive site.</strong> The submission UI publishes its own <code>llms.txt</code>, which means agent-assisted submission is a supported path. Tao&rsquo;s own guidance is that modern AI agents are quite helpful with the mechanical details while human review before filing remains strongly recommended.</li>
<li><strong>Wait for the automated pipeline.</strong> Mechanical verification, the statement-fidelity review and the editorial review run in sequence.</li>
<li><strong>If registered, expect permanence.</strong> The record, the review, and the repository and commit enter Palomar&rsquo;s append-only canonical history.</li>
</ol>
<p>Two properties of that last step deserve separate emphasis, because people consistently underestimate them.</p>
<p><strong>Registration is effectively non-withdrawable.</strong> Withdrawal is not available once registered. The only paths are publishing a new version, a lawful-request process, or an exceptional retraction by a named Moderator of one exact version with a public tombstone. Version URLs must stay resolvable forever.</p>
<p><strong>There is no appeal for an individual result, by design.</strong> The registry&rsquo;s rationale is that reopening a few outcomes for whoever writes in would make the outcome depend on who complained. That is a defensible principle and a genuinely harsh user experience, and both things are true at once.</p>
<p>Palomar does keep a public preservation fork of every registered source, stored under the <code>PalomarArchive</code> GitHub organisation with a commit-hash-suffixed name. The fork&rsquo;s purpose is narrow and honest: it is a registry backup so that the entry remains inspectable if the original repository disappears. It is not a mirroring service and it is not a claim of ownership.</p>
<h2 id="what-the-registry-looks-like-at-scale-today">What the Registry Looks Like at Scale Today</h2>
<p>Around six weeks after launch, Palomar is no longer a thought experiment. As of 30 September 2026, the registry&rsquo;s machine-readable API reports 383 registered results across 304 source projects, while the home-page counters read 346 registered results and 270 source projects. The gap is not an error: the API counts every active version of every result, while the front page counts newest-only. Anyone comparing the two numbers should know which one they are reading.</p>
<p>Growth is faster than a casual reader would expect from an academic initiative. The newest 200 entries alone span 6 September to 30 September 2026 — about 25 days — which implies a run rate on the order of eight registrations per day.</p>
<p>The recent-entry data is more interesting than the totals:</p>
<table>
  <thead>
      <tr>
          <th>Metric</th>
          <th>Recent 200 entries</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Trust level</td>
          <td>199 &ldquo;high&rdquo;, 1 &ldquo;qualified&rdquo;</td>
      </tr>
      <tr>
          <td>Status</td>
          <td>200 &ldquo;registered&rdquo;</td>
      </tr>
      <tr>
          <td>Version 1</td>
          <td>183 entries</td>
      </tr>
      <tr>
          <td>Version 2</td>
          <td>13 entries</td>
      </tr>
      <tr>
          <td>Version 3</td>
          <td>3 entries</td>
      </tr>
      <tr>
          <td>Version 4</td>
          <td>1 entry</td>
      </tr>
      <tr>
          <td>Distinct authors</td>
          <td>145</td>
      </tr>
      <tr>
          <td>Most prolific author</td>
          <td>Arthur Freitas Ramos (18 entries)</td>
      </tr>
  </tbody>
</table>
<p>Two things stand out. First, trust levels are overwhelmingly &ldquo;high&rdquo; — the &ldquo;qualified&rdquo; tier is rare enough to be a rounding error in this window, which suggests the mechanical gate is doing its filtering upstream. Second, corrections are uncommon: 183 of 200 entries are still at version 1, so the append-only design is not being churned by constant republication.</p>
<p>Subject concentration follows the shape of the formalization community rather than the shape of mathematics as a whole:</p>
<table>
  <thead>
      <tr>
          <th>arXiv category</th>
          <th>Entries in recent 200</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>math.NT (number theory)</td>
          <td>55</td>
      </tr>
      <tr>
          <td>math.CO (combinatorics)</td>
          <td>55</td>
      </tr>
      <tr>
          <td>math.LO (logic)</td>
          <td>25</td>
      </tr>
      <tr>
          <td>math.PR (probability)</td>
          <td>24</td>
      </tr>
      <tr>
          <td>math.DS (dynamical systems)</td>
          <td>17</td>
      </tr>
      <tr>
          <td>math.MG (metric geometry)</td>
          <td>14</td>
      </tr>
      <tr>
          <td>math.CA (classical analysis)</td>
          <td>11</td>
      </tr>
      <tr>
          <td>math.FA (functional analysis)</td>
          <td>11</td>
      </tr>
      <tr>
          <td>math.GR (group theory)</td>
          <td>10</td>
      </tr>
  </tbody>
</table>
<p>Number theory and combinatorics lead by a wide margin, which is exactly where recent machine-assisted results have clustered and where Mathlib&rsquo;s coverage is deepest.</p>
<h3 id="cost-accounting-at-a-level-academic-infrastructure-rarely-publishes">Cost accounting at a level academic infrastructure rarely publishes</h3>
<p>Palomar publishes its operating costs, which is unusual enough to be a story in itself. The current aggregate run rate is <strong>$7,608.20 per year</strong>, or $634.02 per month, broken down as follows:</p>
<table>
  <thead>
      <tr>
          <th>Cost centre</th>
          <th>Annual</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>OpenAI (review pipeline)</td>
          <td>$6,008.76</td>
      </tr>
      <tr>
          <td>GitHub Actions</td>
          <td>$1,516.44</td>
      </tr>
      <tr>
          <td>Cloudflare Workers Paid</td>
          <td>$60.00</td>
      </tr>
      <tr>
          <td>Domains</td>
          <td>$23.00</td>
      </tr>
      <tr>
          <td><strong>Total</strong></td>
          <td><strong>$7,608.20</strong></td>
      </tr>
  </tbody>
</table>
<p>The LLM review is by a wide margin the dominant cost, which is the price of the statement-fidelity check. More notable: the published forecast annualises the observed rate to 10,342 submissions, 6,388 completed reviews and 3,248 registrations per year — meaning roughly half of completed reviews end in registration, and the other half are refused.</p>
<p>Palomar also publishes an independent billing reconciliation. Retained conversation logs reprice to $911.61 against $926.80 of OpenAI billed model cost over the same complete-day window, a coverage of 98.4%. The registry states that it refuses to publish a refreshed estimate below 90% coverage. For anyone who has tried to audit an AI-mediated pipeline, this is the most interesting artifact on the site: an infrastructure operator publicly grading its own accounting and setting a floor below which it will not report.</p>
<h2 id="what-a-palomar-entry-does-not-certify">What a Palomar Entry Does Not Certify</h2>
<p>This is the section to read if you are about to cite a Palomar entry.</p>
<p>When you write &ldquo;this is on Palomar&rdquo;, you are entitled to claim exactly four things:</p>
<ol>
<li>The proof typechecks under Lean&rsquo;s kernel and the independent NanoDa kernel, at the published commits.</li>
<li>No disallowed axiom appears in the dependency trace — no <code>sorryAx</code>, no <code>Lean.ofReduceBool</code>, no custom axiom, no unnamed missing definition.</li>
<li>An automated reviewer found the formal statement faithful to the stated informal claim, and recorded no blocking problem.</li>
<li>The artifact is pinned to an immutable public commit, preserved in a registry fork.</li>
</ol>
<p>You are <strong>not</strong> entitled to claim:</p>
<ul>
<li><strong>Novelty.</strong> The registry is explicit that it certifies neither novelty nor relevance. A well-known theorem formalized cleanly is a perfectly valid entry.</li>
<li><strong>Correctness of the informal claim as stated in prose.</strong> The fidelity check is automated and fallible. It is a screen, not a proof.</li>
<li><strong>Human endorsement.</strong> No referee read the mathematics. The scientific advisory board lends governance, not per-entry review.</li>
<li><strong>Error-freedom of the surrounding project.</strong> Palomar verifies the Challenge and Solution modules under the stated import restrictions. It does not audit your repository.</li>
<li><strong>Anything about other proof assistants.</strong> Palomar currently verifies Lean only.</li>
</ul>
<p>The registry is also explicit that its checks fall well short of human peer review. That admission comes from the people who built it, which is why the honest framing is &ldquo;machine-checked and statement-screened&rdquo; rather than &ldquo;verified mathematics&rdquo; in the colloquial sense of the phrase.</p>
<h2 id="practical-failure-modes-and-lessons-from-real-submissions">Practical Failure Modes and Lessons From Real Submissions</h2>
<p>The theory is clean; the practice is where people lose days. Practitioner write-ups have documented failure modes that are worth internalising before you file.</p>
<p><strong>A correct proof can still be refused.</strong> One documented submission cleared the mechanical gate clean — proof typechecked, axioms clean — and was then refused by the editorial review. Refusals are private, and there is no appeal. The refusal reasons were not published, which is by design rather than an oversight, but it means a submitter can spend a cycle and learn nothing specific from the outcome.</p>
<p><strong>A filing error can cost a full cycle.</strong> The same practitioner account documents an expensive filing mistake that consumed roughly 4 hours and 45 minutes of queue and verification time despite mathematically correct content. The registry&rsquo;s pipeline is not cheap to re-run, and a bad filename or a stray import burns the whole run.</p>
<p><strong>The import surface is the most common structural mistake.</strong> If your Challenge module transitively reaches anything outside Lean core plus the pinned Mathlib or Tau Ceti closure, the submission fails mechanically. Solution-only dependencies may be arbitrary pinned Git dependencies, so the fix is usually to move the heavy imports into the Solution — but the Challenge must stand alone against the allowlisted closure.</p>
<p><strong>The <code>formalization.yaml</code> basename is exact.</strong> This is a small, irritating, entirely avoidable failure, and it is documented repeatedly by people who hit it.</p>
<p><strong>GitHub-only is a real constraint.</strong> The main objection cluster in the Hacker News discussion — 186 points and 39 comments — was the hard dependency on GitHub: availability, single point of failure, and no support for other forges. The mitigation is real but partial. Palomar uses GitHub as a costless immutable datastore and forks every registered source into the preservation archive, so a deleted upstream repository does not erase the entry. It does not fix the fact that you must have a public GitHub repository to register in the first place.</p>
<h2 id="palomar-vs-the-rest-of-the-formal-mathematics-stack">Palomar vs the Rest of the Formal-Mathematics Stack</h2>
<p>Palomar is often described imprecisely in comparison pieces, so it is worth being exact about what sits next to what.</p>
<table>
  <thead>
      <tr>
          <th>System</th>
          <th>What it is</th>
          <th>What Palomar adds or lacks relative to it</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>arXiv</strong></td>
          <td>Preprint server, no verification claim</td>
          <td>Palomar claims machine-checking and statement review; arXiv claims nothing</td>
      </tr>
      <tr>
          <td><strong>Mathlib</strong></td>
          <td>The Lean 4 mathematics library</td>
          <td>Palomar verifies against Mathlib; Mathlib does not index proofs of standalone results</td>
      </tr>
      <tr>
          <td><strong>Tau Ceti</strong></td>
          <td>Mathlib-adjacent allowlisted project</td>
          <td>Palomar accepts its closure as an allowed import for the Challenge</td>
      </tr>
      <tr>
          <td><strong>CSLib</strong></td>
          <td>Computer-science-oriented Lean library</td>
          <td>Complementary; Palomar is the registry layer, CSLib is content</td>
      </tr>
      <tr>
          <td><strong>Hex</strong></td>
          <td>Lean formalization project infrastructure</td>
          <td>Complementary tooling ecosystem</td>
      </tr>
      <tr>
          <td><strong>Reservoir</strong></td>
          <td>Lean package index</td>
          <td>Reservoir catalogues packages; Palomar catalogues verified statements</td>
      </tr>
      <tr>
          <td><strong>theoremdb.org</strong></td>
          <td>Theorem database</td>
          <td>Lacks the Comparator and <code>formalization.yaml</code> gate; a listing, not a verification</td>
      </tr>
      <tr>
          <td><strong>Metamath&rsquo;s metamath.org</strong></td>
          <td>Centralised verified set, different assistant</td>
          <td>Same family of idea, different proof assistant and a single canonical set</td>
      </tr>
  </tbody>
</table>
<p>The honest summary of the comparison table is that Palomar is not competing with any of these. It is the only layer in the stack whose job is to make a verified statement citable at a fixed commit with a public record of what was and was not checked.</p>
<h3 id="where-the-registry-may-go-next">Where the registry may go next</h3>
<p>Palomar currently verifies Lean only, but the project is explicit that expansion to other proof assistants is open and it publishes the requirements any expansion would have to meet: an existing verification pipeline, a statement/solution separation, HTML rendering, dependency display, a security review, a CI cost assessment, and a working sample of 10 to 100 projects. That is a demanding bar, and publishing it is a way of saying the door is open without pretending the work is small.</p>
<p>One detail in the design suggests the maintainers expect a long horizon: entry IDs and version URLs are meant to stay resolvable permanently. The example entry <code>PALOMAR-2026-08-13-000001</code> is Tao&rsquo;s own test submission — his formalization of the proof of Sendov&rsquo;s conjecture — and it is a deliberate reference implementation as much as a registration.</p>
<h2 id="should-you-submit-the-honest-incentive-question">Should You Submit? The Honest Incentive Question</h2>
<p>The most-repeated question in the community discussion was simple: what is the incentive to file at all?</p>
<p>The answer given in-thread is the arXiv analogy, and it holds up. Nobody is compelled to post to arXiv either. Researchers do it because a stable, citable artifact beats an announcement on a social platform. Palomar&rsquo;s version of that argument is sharper, because the artifact it produces is machine-checkable: a link to a Palomar entry conveys a specific verification claim that a link to a blog post, a repository, or a thread does not.</p>
<p>The maintainers&rsquo; own social-media catchphrase — &ldquo;But is it on Palomar?&rdquo; — has become a de facto trust marker for AI-era mathematics claims, and that is the incentive in its most compressed form. In a year when machine-assisted proofs of famous problems are being announced at a rate nobody can vet by hand, having a registry entry is the difference between a claim and a checkable claim.</p>
<p>The counter-arguments are real and should be weighed honestly:</p>
<ul>
<li><strong>Permanence is a commitment.</strong> Non-withdrawable registration means a mistaken statement is on the record forever, in an append-only history you cannot appeal.</li>
<li><strong>Cost is asymmetric.</strong> Filing costs you a build, a disclosure file, and a verification cycle that can run hours. Registration costs Palomar about $1.90 per completed review at current rates — trivial for them, not trivial for you.</li>
<li><strong>Refusals are opaque.</strong> A clean mechanical pass can still be refused with no public reason and no appeal path.</li>
<li><strong>The claim is narrower than the headline.</strong> If you need novelty or human endorsement, Palomar is the wrong instrument.</li>
</ul>
<p>The reasonable position for most people is the one the registry itself implies. If you have a Lean formalization that stands alone against the allowlisted closure, that typechecks with clean axioms, and that you are willing to have pinned permanently — file it. It costs a few hours and produces the only kind of mathematics artifact in 2026 that a reader can re-verify without trusting anyone&rsquo;s prose, including yours.</p>
<h2 id="faq">FAQ</h2>
<p><strong>What is the Palomar registry in one sentence?</strong></p>
<p>Palomar is a public, append-only registry of Lean 4 formalizations whose proofs have been machine-checked through Lean&rsquo;s kernel and the independent NanoDa kernel, with an automated review of whether the formal statement matches the informal claim. It is incubated by the Lean FRO and ICARM and performs no human peer review.</p>
<p><strong>Does a Palomar entry mean the mathematics has been peer reviewed?</strong></p>
<p>No. The registry states that it adds no human editorial step and that no one there reads the mathematics the way a referee would. A Palomar entry certifies machine-checking, a clean axiom surface, and an automated statement-fidelity screen. It certifies neither novelty, nor relevance, nor human endorsement.</p>
<p><strong>How do I submit to the Palomar registry?</strong></p>
<p>Push a public GitHub repository containing <code>lakefile.toml</code>, a committed <code>lake-manifest.json</code>, <code>lean-toolchain</code>, a readable <code>Challenge.lean</code>, a proved <code>Solution.lean</code>, <code>comparator.json</code> and <code>formalization.yaml</code>. Verify locally with <code>lake build</code> and <code>#print axioms</code>, take the full 40-character commit SHA, and submit that immutable snapshot through the interactive site. Registration is permanent once accepted.</p>
<p><strong>Which axioms does Palomar allow?</strong></p>
<p>Only Lean&rsquo;s three standard axioms: <code>propext</code>, <code>Classical.choice</code> and <code>Quot.sound</code>. It rejects <code>sorryAx</code>, <code>Lean.ofReduceBool</code>, any custom axiom, and any unnamed missing definition. Anything beyond the three standard axioms must be stated as an explicit hypothesis in the Challenge statement rather than added as an axiom.</p>
<p><strong>Why are Palomar&rsquo;s review scores withheld?</strong></p>
<p>Because the same commit scored 5 and then 4 on one axis across two runs of the same review policy. Rather than publish a number it cannot reproduce, Palomar publishes the review with every comment included, records whether a blocking problem was found, and withholds the scores. It is a deliberate refusal to attach false precision to an automated judgement.</p>
<h2 id="sources-and-further-reading">Sources and Further Reading</h2>
<ul>
<li>Terence Tao, &ldquo;Palomar: A Registry of Lean Verified Mathematics&rdquo;, 18 August 2026 — <a href="https://terrytao.wordpress.com/2026/08/18/palomar-a-registry-of-lean-verified-mathematics/">https://terrytao.wordpress.com/2026/08/18/palomar-a-registry-of-lean-verified-mathematics/</a></li>
<li>Palomar statement and manifesto — <a href="https://palomar-registry.org/statement">https://palomar-registry.org/statement</a></li>
<li>Palomar about and verification model — <a href="https://palomar-registry.org/about">https://palomar-registry.org/about</a></li>
<li>Palomar submission requirements — <a href="https://palomar-registry.org/how-to-submit">https://palomar-registry.org/how-to-submit</a></li>
<li>Palomar cost and workload accounting — <a href="https://palomar-registry.org/costs">https://palomar-registry.org/costs</a></li>
<li>ICARM institutional announcement, 21 August 2026 — <a href="https://icarm.io/news/announcing-palomar-a-registry-of-lean-verified-mathematics/">https://icarm.io/news/announcing-palomar-a-registry-of-lean-verified-mathematics/</a></li>
<li>Kim Morrison, launch post — <a href="https://kim-em.github.io/blog/2026-8-19-announcing-the-palomar-registry/">https://kim-em.github.io/blog/2026-8-19-announcing-the-palomar-registry/</a></li>
<li>Hacker News discussion (186 points, 39 comments) — <a href="https://news.ycombinator.com/item?id=49355968">https://news.ycombinator.com/item?id=49355968</a></li>
<li>Registry data API — <a href="https://data.palomar-registry.org/api/v1/results">https://data.palomar-registry.org/api/v1/results</a></li>
<li>Entry PALOMAR-2026-08-13-000001 (Sendov&rsquo;s conjecture) — <a href="https://palomar-registry.org/entry?id=PALOMAR-2026-08-13-000001&amp;version=1">https://palomar-registry.org/entry?id=PALOMAR-2026-08-13-000001&amp;version=1</a></li>
</ul>
]]></content:encoded></item></channel></rss>