{
 "what": "The replay of a third party's Lean proof that joins the two claimed refutations of the Exponential Time Hypothesis: TSavo's Bridge.ethIsFalse_of_claim : OAI.Algorithms.SubexponentialSAT.SqrtLogSpace.Claim → MainResults.ETHIsFalse (github.com/TSavo/eth-bridge @ 34f9ca20; OpenAI's challenge statement as a proposition implies Anthropic's ETHIsFalse), built inside Anthropic's eth project at 16a5ce41 as its README says, decided by tools/record-eth-tsavo.js from a GitHub-hosted run of .github/workflows/eth-tsavo.yml. CERTIFIED here means the statements are the two labs' own (checked byte for byte against our pins), the theorem states exactly Claim → ETHIsFalse, uses only propext, Classical.choice and Quot.sound, and two independently written kernels accept it. It does NOT mean that ETH is false: the implication needs OpenAI's Claim, which OpenAI proved (certs/eth-kernel.json) on another Lean and Mathlib (see gaps), and no machine checks that MainResults.ETH is the textbook hypothesis (corpus/eth-refutation/readings/).",
 "campaign": "eth-refutation; the TSavo bridge lane (the claim was posted on anthropics/formal-math#36 with a request for a check); pins recorded before any run (corpus/eth-refutation/tsavo/pins.json)",
 "words": {
  "CERTIFIED": "the statement checks pass on the run's bytes; Comparator exit 0 with \"Your solution is okay!\"; Lean's kernel and nanoda both accept; lake build Bridge exit 0; #print axioms (our file) names only propext, Classical.choice, Quot.sound for both theorems",
  "REFUTED": "a kernel rejects the solution, reproduced by a second run",
  "REFUSED": "no decision, with the exact reason (resources, a build failure, bytes differing from the pins, a statement check, Comparator stopping on its own check, kernels disagreeing, or one kernel rejection not yet reproduced)"
 },
 "claim": {
  "repository": "https://github.com/TSavo/eth-bridge",
  "commit": "34f9ca204bed7fa6c595e56966773726e98dd3fd",
  "author": "TSavo (written with Claude, per its README and commits)",
  "license": "Apache-2.0",
  "theorems": [
   "Bridge.ethIsFalse_of_claim",
   "Bridge.two_proofs_one_statement"
  ],
  "config": {
   "challenge_module": "BridgeChallenge",
   "solution_module": "Bridge.Main",
   "theorem_names": [
    "Bridge.ethIsFalse_of_claim"
   ],
   "definition_names": [],
   "permitted_axioms": [
    "propext",
    "Quot.sound",
    "Classical.choice"
   ],
   "enable_nanoda": true
  },
  "configSha256": "4025a0425e235e12e97109e742f7c4242b9b433d945b2a19e6cf1dd6ec01290a",
  "pinnedFiles": 12,
  "pinnedListSha256": "cf31a000adc6d34224fd41af8799e9f0c6f6dde3fed82c7c0eef61013e1f2d0e"
 },
 "project": {
  "repository": "https://github.com/anthropics/formal-math",
  "commit": "16a5ce41304fcdaea4e0be7c132e1c361dc26da5",
  "toolchain": "leanprover/lean4:v4.33.1",
  "mathlib": "0df444a360eaa60ab8c11dca51a86af692955474"
 },
 "word": "CERTIFIED",
 "why": "the statement checks pass on the run's bytes; Comparator exit 0 with \"Your solution is okay!\" on TSavo's config (with the declared lakefile amendment); Lean's kernel and nanoda both accept; lake build Bridge exit 0; both theorems' axioms are among propext, Classical.choice, Quot.sound",
 "stage": null,
 "gaps": [
  "TSavo's README build does not run Comparator on TSavo's own config: on the README's lakefile (Anthropic's, plus [[lean_lib]] Bridge, srcDir \"bridge\", globs [\"Bridge.+\"]) Comparator stops at \"Building BridgeChallenge\" because Lake reports unknown target `BridgeChallenge` (exit 1): the glob Bridge.+ names Bridge and its submodules, and BridgeChallenge is neither. The replay declares ONE amendment, a [[lean_lib]] named BridgeChallenge with srcDir \"bridge\" appended to the lakefile (no Lean byte and no config byte changes), and decides on the run with it. TSavo's README says Anthropic's CI script accepted the bridge on 2026-10-27; the lakefile that run used must have made BridgeChallenge resolvable, and the README does not show how.",
  "The seam between the two lanes is the Lean and Mathlib version: the bridge's Claim is OpenAI's challenge text re-elaborated on Lean v4.33.1 and Anthropic's Mathlib 0df444a3, while OpenAI's proof (certs/eth-kernel.json) is of exact_count_and_sat on Lean v4.34.1 and Mathlib d13f23b7. The source text is the same byte for byte (the statement check); that the two elaborate to the same term is not checked here, so OpenAI's theorem and TSavo's implication compose by reading, not by one kernel.",
  "Comparator decides Bridge.ethIsFalse_of_claim only (the config's one theorem). Bridge.two_proofs_one_statement = ⟨MainResults.ethIsFalse, ethIsFalse_of_claim⟩ is checked by one kernel (Lean's, in lake build) and by its axiom print.",
  "A stale comment: bridge/Bridge/Main.lean's header still says \"Each `sorry` below is one of the four lemmas named in the plan\"; no sorry remains outside comments (the census).",
  "leanchecker --fresh was not run on this join (the eth-kernel lane replayed both claims' own proofs with it, not the join); the rule stands on Lean's kernel and nanoda inside Comparator."
 ],
 "closes": "What the theorem moves out of prose, if CERTIFIED: our reading of OpenAI's claim (corpus/eth-refutation/readings/first.md §I.4) needs B1 (a PrimitiveMachine simulated with polynomial overhead) and B2 (a plain 3-CNF rewritten into encodeCNF in polynomial time), both by eye. TSavo proves, in Lean, B1 into Anthropic's model (a PrimitiveMachine as a Groundwork.Stepped computation, compiled to a Mathlib FinTM2 machine by Anthropic's exists_tm, its state size bounded by OpenAI's own visited-space bound) and B2 from Anthropic's plain 3-CNF code (a polynomial-time map from Sat3.enc to encodeCNF, insertion sort proved equal to Finset.sort), then Anthropic's own lemma WidthThree.ethFails_of_subexpTM carries Sat3.SubexpTM to MainResults.ETHIsFalse, so OpenAI's Claim lands on Anthropic's ETHIsFalse. What stays prose is then Anthropic's own step from FinTM2 on encClauses to the textbook hypothesis (B1′, B2′ of the same reading), the step certs/eth-bridge.json also leaves to prose. Only ClaimAt 3 is used.",
 "statementChecks": {
  "tree": {
   "files": 12,
   "pinned": 12,
   "ok": true
  },
  "openaiStatement": {
   "file": "bridge/Bridge/OpenAIStatement.lean",
   "against": "openai/math@7ef5c0cc lean/ComparatorChallenges/SubexponentialSAT.lean",
   "pinned": "4183b2057cff350d66848215ff7167196dfc20e1891b598fdddea59077a76685",
   "rebuilt": "4183b2057cff350d66848215ff7167196dfc20e1891b598fdddea59077a76685",
   "statementLines": 23,
   "hkMentioned": false,
   "hkLines": [],
   "tacticBlockInStatement": false,
   "reads": "Claim = ∀ k : ℕ, 2 ≤ k → ClaimAt k, ClaimAt k = the 23 statement lines of exact_count_and_sat; the 23 lines never name hk, so ∀ (k) (hk : 2 ≤ k), S k and ∀ k, 2 ≤ k → ClaimAt k are the same proposition up to unfolding ClaimAt",
   "change": "theorem exact_count_and_sat (k : ℕ) (hk : 2 ≤ k) : <23 lines> := by sorry  →  def ClaimAt (k : ℕ) : Prop := <the same 23 lines>, plus def Claim : Prop := ∀ k : ℕ, 2 ≤ k → ClaimAt k; undoing it gives the pinned bytes"
  },
  "mainResults": {
   "pinned": "47f78a9550d95b37d8718dd1ee16ae824da893a5e17c319f737e6d0a5ed24944",
   "got": "47f78a9550d95b37d8718dd1ee16ae824da893a5e17c319f737e6d0a5ed24944"
  },
  "lakefile": {
   "pinned": {
    "pinned": "3a116ef40830945191c63be8b953f621e4dbd03240398327c6d92ed4d269046b",
    "got": "3a116ef40830945191c63be8b953f621e4dbd03240398327c6d92ed4d269046b"
   },
   "asBuilt": {
    "layout": "readme+challenge-lib",
    "sha256": "d305881906d24b5bb3bb814b60ddbb17758209107e6eb9d95073a0e4676d6610",
    "readmeBlock": "[[lean_lib]]\nname = \"Bridge\"\nsrcDir = \"bridge\"\nglobs = [\"Bridge.+\"]"
   }
  },
  "challenge": {
   "text": "import MainResults import Bridge.OpenAIStatement theorem Bridge.ethIsFalse_of_claim (h : OAI.Algorithms.SubexponentialSAT.SqrtLogSpace.Claim) : MainResults.ETHIsFalse := by sorry",
   "expected": "import MainResults import Bridge.OpenAIStatement theorem Bridge.ethIsFalse_of_claim (h : OAI.Algorithms.SubexponentialSAT.SqrtLogSpace.Claim) : MainResults.ETHIsFalse := by sorry",
   "ok": true
  },
  "config": {
   "ok": true,
   "content": {
    "challenge_module": "BridgeChallenge",
    "solution_module": "Bridge.Main",
    "theorem_names": [
     "Bridge.ethIsFalse_of_claim"
    ],
    "definition_names": [],
    "permitted_axioms": [
     "propext",
     "Quot.sound",
     "Classical.choice"
    ],
    "enable_nanoda": true
   }
  },
  "census": {
   "leanFiles": [
    "bridge/Bridge/BitLength.lean",
    "bridge/Bridge/FrontEnd.lean",
    "bridge/Bridge/Joint.lean",
    "bridge/Bridge/Main.lean",
    "bridge/Bridge/OpenAIStatement.lean",
    "bridge/BridgeChallenge.lean"
   ],
   "forbiddenOutsideComments": [],
   "challengeHole": [
    {
     "file": "bridge/BridgeChallenge.lean",
     "line": 12,
     "what": "sorry"
    }
   ],
   "mentionsInComments": [
    {
     "file": "bridge/Bridge/Main.lean",
     "what": "sorry",
     "count": 1
    },
    {
     "file": "bridge/BridgeChallenge.lean",
     "what": "sorry",
     "count": 1
    }
   ]
  },
  "controls": "every red control refused by the check it targets; the clean copy passes (controls-gate.txt)"
 },
 "anthropicModules": {
  "note": "Bridge.Main and Bridge.Joint import Anthropic's UNTRUSTED proof development (eth/proof/**), every file pinned in pins.json; its constants that the bridge theorem reaches are inside the solution export, so Comparator replays them in both kernels here; the kernel lane (certs/eth-kernel.json) already replayed the whole development for Anthropic's own theorems",
  "directImports": [
   "MainResults",
   "Solution",
   "ThreeSatRateStatement",
   "ToTuring.Closure.Basic",
   "ToTuring.Closure.Cases",
   "ToTuring.Closure.Fold",
   "ToTuring.Lib.Bool",
   "ToTuring.Lib.Int",
   "ToTuring.Lib.List1",
   "ToTuring.Lib.List1b",
   "ToTuring.Lib.List2",
   "ToTuring.Lib.List3",
   "ToTuring.Lib.Nat1",
   "ToTuring.Lib.Nat1b",
   "ToTuring.Lib.Nat2",
   "ToTuring.Lib.Table",
   "ToTuring.Lib.Unary",
   "ToTuring.Machine.Host",
   "ToTuring.Poly.Decode",
   "ToTuring.Poly.Sat",
   "WidthThree.Rates"
  ],
  "bridgeMain": {
   "count": 76,
   "modules": [
    "ClauseBoundStatement",
    "CountKSatStatement",
    "FixedWidthVariableBoundStatement",
    "Groundwork.Net.Calculus",
    "Groundwork.Net.Defs",
    "Groundwork.Net.Net",
    "KSatStatement",
    "MainResults",
    "MainTheoremFormsStatement",
    "NetworkStatements",
    "PaddedDescent.Params",
    "PaddedDescent.RateLemmas",
    "PaperSentencesStatement",
    "StepMachines.Math.Formula",
    "StepMachines.Math.SatArith",
    "StepMachines.Math.SatNet",
    "StepMachines.Math.Sparsify",
    "StepMachines.Math.SparsifyCount",
    "StepMachines.Math.SparsifyList",
    "StepMachines.Math.SparsifyProg",
    "StepMachines.Math.SparsifyStep",
    "StepMachines.Math.SparsifyTree",
    "StepMachines.Prog.Brute",
    "StepMachines.Prog.Chunks",
    "StepMachines.Prog.Comb",
    "StepMachines.Prog.Count",
    "StepMachines.Prog.CountNet",
    "StepMachines.Prog.Decode",
    "StepMachines.Prog.Range",
    "StepMachines.Prog.Sat",
    "StepMachines.Prog.Spec",
    "StepMachines.Prog.Stepped",
    "StepMachines.Prog.Walk",
    "StepMachineStatements",
    "ThmEveryDeltaStatement",
    "ThreeSatRateStatement",
    "ThreeSatStatement",
    "ToTuring.Bound",
    "ToTuring.Closure.Basic",
    "ToTuring.Closure.Cases",
    "ToTuring.Closure.Fold",
    "ToTuring.Enc",
    "ToTuring.EncLemmas",
    "ToTuring.EndLemmas",
    "ToTuring.Lib.Bool",
    "ToTuring.Lib.Int",
    "ToTuring.Lib.List1",
    "ToTuring.Lib.List1b",
    "ToTuring.Lib.List2",
    "ToTuring.Lib.List3",
    "ToTuring.Lib.Nat1",
    "ToTuring.Lib.Nat1b",
    "ToTuring.Lib.Nat2",
    "ToTuring.Lib.Table",
    "ToTuring.Lib.Unary",
    "ToTuring.Machine.Host",
    "ToTuring.Machine.Lift",
    "ToTuring.Poly.Basic",
    "ToTuring.Poly.Comb",
    "ToTuring.Poly.Decode",
    "ToTuring.Poly.IsPoly",
    "ToTuring.Poly.Sat",
    "ToTuring.Poly.Sparsify",
    "ToTuring.Poly.Walk",
    "ToTuring.Poly.Words",
    "ToTuring.PolyT",
    "ToTuring.TM.Frag",
    "ToTuring.TM.Move",
    "ToTuring.TM.Ops",
    "ToTuring.TM.Rename",
    "ToTuring.TM.Run",
    "ToTuring.TM.Stacks",
    "ToTuring.TM.Tree",
    "UniformInKStatement",
    "VariableBound.Paper.Arith",
    "WidthThree.Rates"
   ]
  },
  "bridgeJoint": {
   "count": 810,
   "includesSolution": true
  }
 },
 "comparator": {
  "deciding": "amended",
  "readme": {
   "exit": 1,
   "okay": false,
   "kernels": [],
   "stages": [
    "Building BridgeChallenge"
   ],
   "unknownChallenge": true,
   "lakeErrors": [
    "error: unknown target `BridgeChallenge`"
   ]
  },
  "amended": {
   "exit": 0,
   "okay": true,
   "kernels": [
    "Lean default kernel accepts the solution",
    "nanoda kernel accepts the solution"
   ],
   "stages": [
    "Building BridgeChallenge",
    "Exporting #[Quot, Quot.mk, Quot.lift, Quot.ind, Bridge.ethIsFalse_of_claim, propext, Quot.sound, Classical.choice, Nat.add, Nat.sub, Nat.mul, Nat.pow, Nat.gcd, Nat.div, Nat.mod, Nat.beq, Nat.ble, Nat.land, Nat.lor, Nat.xor, Nat.shiftLeft, Nat.shiftRight, String.ofList, Char.ofNat, List, eagerReduce, Nat, String, String.mk, Char, optParam, autoParam, semiOutParam, outParam] from BridgeChallenge",
    "Building Bridge.Main",
    "Exporting #[Quot, Quot.mk, Quot.lift, Quot.ind, Bridge.ethIsFalse_of_claim, propext, Quot.sound, Classical.choice, Nat.add, Nat.sub, Nat.mul, Nat.pow, Nat.gcd, Nat.div, Nat.mod, Nat.beq, Nat.ble, Nat.land, Nat.lor, Nat.xor, Nat.shiftLeft, Nat.shiftRight, String.ofList, Char.ofNat, List, eagerReduce, Nat, String, String.mk, Char, optParam, autoParam, semiOutParam, outParam] from Bridge.Main",
    "Running nanoda kernel on solution",
    "Running Lean default kernel on solution."
   ]
  },
  "amendment": "[[lean_lib]]\nname = \"BridgeChallenge\"\nsrcDir = \"bridge\"\n"
 },
 "axiomsPrinted": [
  {
   "theorem": "Bridge.ethIsFalse_of_claim",
   "axioms": [
    "propext",
    "Classical.choice",
    "Quot.sound"
   ]
  },
  {
   "theorem": "Bridge.two_proofs_one_statement",
   "axioms": [
    "propext",
    "Classical.choice",
    "Quot.sound"
   ]
  }
 ],
 "decider": "Comparator leanprover/comparator d03acab1 (tag v4.34.0) built with Lean v4.34.1; lean4export 15f6055e (tag v4.33.0) built with the claim's v4.33.1; landrun 811cfff5; nanoda ammkrn/nanoda_lib 3a240721 with the issue44 patch and a 1 GiB stack: the Anthropic row of certs/eth-kernel.json, on a GitHub-hosted runner, both clones checked against the pins before anything ran",
 "declaredChanges": [
  "enable_nanoda: true on TSavo's config, as on every config this campaign runs: TSavo ships true, so the JSON Comparator reads is TSavo's content unchanged",
  "GLIBC_TUNABLES=glibc.malloc.mmap_max=0:glibc.malloc.arena_max=1 for every Lean step (the value the eth-kernel lane declared; a malloc setting, never what Lean checks)",
  "nanoda as the eth-kernel lane builds it (issue44 patch, 1 GiB stack; nanoda.patch kept with the run)",
  "Comparator's Lean kernel is v4.34.1 replaying a v4.33.1 export, as in the eth-kernel lane's Anthropic row",
  "Comparator runs BEFORE lake build Bridge (its README's second assumption: nothing outside the sandbox has built the solution); TSavo's README runs lake build Bridge first",
  "the ONE amendment to TSavo's build: [[lean_lib]] name = \"BridgeChallenge\" srcDir = \"bridge\" appended to the lakefile after the README's block, applied only because Comparator on the README's lakefile could not resolve the challenge module (the run's amendment.txt)"
 ],
 "trustBase": "the two kernels (Lean's inside Comparator, nanoda), lean4export, Comparator's comparison code, landrun's Landlock sandbox (--best-effort; the runner's LSM list is in machine.txt), the Mathlib cache fetched by lake exe cache get, Anthropic's lakefile, and GitHub's runner; the statement files are trusted only because they are byte-checked against the two labs' pinned files",
 "run": {
  "id": 40789891989,
  "url": "https://github.com/carlostoledo1891/cert-machine/actions/runs/40789891989",
  "commit": "0be9482b4e561957e030c2e1527f0da383d6ff44",
  "branch": "eth-tsavo-replay",
  "createdAt": "2026-10-28T23:48:39Z",
  "conclusion": "success",
  "jobs": [
   {
    "name": "tools",
    "conclusion": "success",
    "startedAt": "2026-10-28T23:48:42Z",
    "completedAt": "2026-10-28T23:50:39Z"
   },
   {
    "name": "replay",
    "conclusion": "success",
    "startedAt": "2026-10-28T23:50:42Z",
    "completedAt": "2026-10-29T00:12:16Z"
   }
  ]
 },
 "machine": [
  "runner: GitHub Actions 1000003214 Linux X64, image ubuntu24 20261026.354.1",
  "cpus: 4",
  "MemTotal:       16367524 kB",
  "SwapTotal:       3145724 kB",
  "vm.max_map_count: 262144",
  "kernel: 7.0.0-1017-azure",
  "landlock: lockdown,capability,landlock,yama,apparmor,ima,evm",
  "/dev/root       145G   41G  104G  29% /"
 ],
 "env": [
  "toolchain: leanprover/lean4:v4.33.1",
  "Lean (version 4.33.1, x86_64-unknown-linux-gnu, commit 819816b2e0a3bf405af45ae5c7af2491d8f5bee6, Release)",
  "Lake version 5.0.0-src+819816b (Lean version 4.33.1)",
  "lean prefix: /home/runner/.elan/toolchains/leanprover--lean4---v4.33.1",
  "comparator: d03acab154d269c06e60e4de7e4cc85deebff94b built with leanprover/lean4:v4.34.1",
  "lean4export: 15f6055e299ad5b89345e533cc2192f4cc00f659 built with leanprover/lean4:v4.33.1",
  "nanoda: 3a2407216ee84a75f9e1aead6803d0578be06ae7, build issue44-stack1g",
  "landrun: 811cfff51ceaf3d9843708aa6d22e9b84ccac8b4",
  "GLIBC_TUNABLES: glibc.malloc.mmap_max=0:glibc.malloc.arena_max=1",
  "commit: 0be9482b4e561957e030c2e1527f0da383d6ff44",
  "run: 40789891989 attempt 1"
 ],
 "steps": {
  "cache": {
   "exit": 0,
   "seconds": 95,
   "timedOut": false,
   "maxRssKB": 1027040,
   "usedMemPeakKB": 1561204
  },
  "comparator-readme": {
   "exit": 1,
   "seconds": 2,
   "timedOut": false,
   "maxRssKB": 847452,
   "usedMemPeakKB": null
  },
  "comparator-amended": {
   "exit": 0,
   "seconds": 148,
   "timedOut": false,
   "maxRssKB": 7384408,
   "usedMemPeakKB": 2677312
  },
  "build": {
   "exit": 0,
   "seconds": 908,
   "timedOut": false,
   "maxRssKB": 7498600,
   "usedMemPeakKB": 2964572
  },
  "axioms": {
   "exit": 0,
   "seconds": 5,
   "timedOut": false,
   "maxRssKB": 7471420,
   "usedMemPeakKB": null
  }
 },
 "logs": "corpus/eth-refutation/tsavo/runs/40789891989",
 "runs": [
  {
   "run": 40789891989,
   "at": "2026-10-28T23:48:39Z",
   "commit": "0be9482b4e561957e030c2e1527f0da383d6ff44",
   "word": "CERTIFIED",
   "why": "the statement checks pass on the run's bytes; Comparator exit 0 with \"Your solution is okay!\" on TSavo's config (with the declared lakefile amendment); Lean's kernel and nanoda both accept; lake build Bridge exit 0; both theorems' axioms are among propext, Classical.choice, Quot.sound"
  }
 ]
}
