Plectis Atlas
Search

↑ and ↓ move, Enter opens, Esc closes.

Lean statement

Unbounded configuration gaps and additive hardness

Lean is a language for mathematical statements and proofs that a computer can verify. This page shows one statement file from OpenAI’s release, possible paper matches and independent reports. The code-like names below identify the definitions or theorems selected by the proof-verification settings.

Theorem selected for verification: OAI.BinPackingGap.main_results

Lean statement file: BinPackingGap.leanShow on the mapFamily 118. OpenAI lists this as a main result in its Lean catalogue.

The Lean statement

The lines of the Lean statement that state the theorem, then the definitions in the file that it uses.

theorem main_results :    (∀ c : ℕ, ∃ I : Instance, ∃ B : ℕ,      I.n = 5 * B ∧      (∀ i, (1 / 6 : ℚ) < I.size i ∧ I.size i < 1) ∧      B + c < opt I ∧ individualLP I = (B : ℝ) ∧ typeLP I = (B : ℝ)) ∧    (∀ c : Nat, PackingGapNPHard c) ∧    ((∃ c : Nat, Nonempty (AbsoluteAdditiveAlgorithm c)) ↔ PEqualsNP) ∧    (PEqualsNP → ∃ algorithm : AbsoluteAdditiveAlgorithm 0,    (∀ (items : RawInstance) (valid : items.Valid), ∃ packing : RawPacking,      algorithm.run (BinaryEncoding.rawInstanceBits items) = some packing ∧      packing.Feasible items ∧ packing.bins = opt (items.toInstance valid)) ∧    algorithm.run (BinaryEncoding.rawInstanceBits []) = some ⟨0, []⟩ ∧    (∀ input : List Bool, BinaryEncoding.decodeRawInstance input = none →      algorithm.run input = none) ∧    (∀ items : RawInstance, ¬ items.Valid →      algorithm.run (BinaryEncoding.rawInstanceBits items) = none))  := by  sorry

A Lean statement states the theorem and leaves its proof as sorry on purpose. OpenAI’s proof is in a separate solution module, and a program called Comparator checks that proof against this statement.

Definitions needed to read it

Local definitions the statement names, followed through the definitions they name in turn. The match is by name in the source text, so a name reached only through notation can be missed; the full file is below.

  • definition OAI.BinPackingGames.Foundations.Complexity.encodeWord line 9

    def encodeWord (n : Nat) : List Bool := List.replicate n true ++ [false]
  • definition OAI.BinPackingGames.Foundations.Complexity.MachineFiniteAlphabet.FiniteAlphabet line 17

    def FiniteAlphabet (M : FinTM2) : Prop := ∀ k, Finite (M.Γ k)
  • definition OAI.BinPackingGames.Foundations.Complexity.CookLevin.pairBits line 23

    def pairBits (input : List Bool × List Bool) : List Bool :=  encodeWord input.1.length ++ input.1 ++ input.2
  • structure OAI.BinPackingGames.Foundations.Complexity.CookLevin.NPVerifier line 26

    structure NPVerifier where  witnessBound : Polynomial Nat  verify : (List Bool × List Bool) → Bool  computation : Turing.TM2ComputableInPolyTime pairBits (fun bit => [bit]) verify  finiteAlphabet : (k : computation.tm.K) → Fintype (computation.tm.Γ k)
  • definition OAI.BinPackingGames.Foundations.Complexity.CookLevin.NPVerifier.Accepts line 32

    def NPVerifier.Accepts (verifier : NPVerifier) (input : List Bool) : Prop :=  ∃ witness : List Bool,    witness.length ≤ verifier.witnessBound.eval input.length ∧    verifier.verify (input, witness) = true
  • definition OAI.BinPackingGames.Foundations.Complexity.CookLevin.InNP line 37

    def InNP (language : List Bool → Prop) : Prop :=  ∃ verifier : NPVerifier, ∀ input, language input ↔ verifier.Accepts input
  • definition OAI.BinPackingCompleteness.BinaryEncoding.bitsValue line 44

    def bitsValue : List Bool → Nat  | [] => 0  | b :: bits => Nat.bit b (bitsValue bits)
  • definition OAI.BinPackingCompleteness.BinaryEncoding.frame line 48

    def frame : List Bool → List Bool  | [] => [false]  | b :: bits => true :: b :: frame bits
  • definition OAI.BinPackingCompleteness.BinaryEncoding.parseFrame line 52

    def parseFrame : List Bool → Option (List Bool × List Bool)  | false :: rest => some ([], rest)  | true :: b :: rest => do      let (bits, trailing) ← parseFrame rest      return (b :: bits, trailing)  | _ => none
  • definition OAI.BinPackingCompleteness.BinaryEncoding.nameBits line 59

    def nameBits (name : Nat) : List Bool := frame name.bits
  • definition OAI.BinPackingCompleteness.BinaryEncoding.parseName line 61

    def parseName (input : List Bool) : Option (Nat × List Bool) := do  let (digits, rest) ← parseFrame input  let name := bitsValue digits  if digits = name.bits then some (name, rest) else none
  • structure OAI.BinPackingGap.Instance line 72

    structure Instance where  n : ℕ  size : Fin n → ℚ  size_pos : ∀ i, 0 < size i  size_le_one : ∀ i, size i ≤ 1
  • abbreviation OAI.BinPackingGap.Instance.Item line 80

    abbrev Item (I : Instance) := Fin I.n
  • structure OAI.BinPackingGap.Packing line 84

    structure Packing (I : Instance) (b : ℕ) where  assignment : I.Item → Fin b  capacity : ∀ j, (∑ i, if assignment i = j then I.size i else 0) ≤ 1
  • definition OAI.BinPackingGap.HasPacking line 88

    def HasPacking (I : Instance) (b : ℕ) : Prop := Nonempty (Packing I b)
  • definition OAI.BinPackingGap.opt line 106

    noncomputable def opt (I : Instance) : ℕ := by  classical  exact Nat.find (exists_packing I)
  • definition OAI.BinPackingGap.IndividualConfiguration line 110

    def IndividualConfiguration (I : Instance) :=  {H : Finset I.Item // ∑ i ∈ H, I.size i ≤ 1}
  • definition OAI.BinPackingGap.NumericalSize line 116

    def NumericalSize (I : Instance) := ↥(Finset.univ.image I.size)
  • definition OAI.BinPackingGap.NumericalSize.multiplicity line 130

    def multiplicity (s : NumericalSize I) : ℕ :=  (Finset.univ.filter fun i : I.Item => I.size i = s.val).card
  • definition OAI.BinPackingGap.TypeConfiguration line 141

    def TypeConfiguration (I : Instance) :=  {c : NumericalSize I → ℕ // ∑ s, s.val * (c s : ℚ) ≤ 1}
  • definition OAI.BinPackingGap.FractionalCover.Feasible line 183

    def Feasible (a : C → I → ℝ) (d : I → ℝ) (w : C → ℝ) : Prop :=  (∀ c, 0 ≤ w c) ∧ ∀ i, d i ≤ ∑ c, a c i * w c
  • definition OAI.BinPackingGap.FractionalCover.objective line 186

    def objective (w : C → ℝ) : ℝ := ∑ c, w c
  • definition OAI.BinPackingGap.FractionalCover.objectiveSet line 188

    def objectiveSet (a : C → I → ℝ) (d : I → ℝ) : Set ℝ :=  {v | ∃ w, Feasible a d w ∧ objective w = v}
  • definition OAI.BinPackingGap.FractionalCover.value line 191

    def value (a : C → I → ℝ) (d : I → ℝ) : ℝ :=  sInf (objectiveSet a d)

34 more definitions are reached the same way; the full file lists them.

Possible paper match, with no recorded review

Atlas selected this possible match by comparing words in the Lean statement with every statement in the family. No review of whether the statements mean the same thing is recorded.

Words of the Lean statement, its names split into words, that also appear in the theorem: finite, gap, individual, fractional, configuration, lp, 1/6, rational and five more. Shared only with the release’s name for the Lean statement or OpenAI’s note on it: copies, whose, optimum, equality and unbounded.

Theorem 1.2 of Additive hardness and unbounded configuration gaps in bin packing

Theorem (Unbounded configuration gap)

For every integer c\ge0, there is a finite rational bin-packing instance I and an integer B such that every item size exceeds 1/6 and

\LP(I)=B, \qquad \OPT(I)>B+c.

The equality for the fractional optimum also holds for the configuration LP whose patterns are subsets of the individual item copies.

Section 1, Introduction Read it in the paper TeX source, line 87
Show the TeX
For every integer $c\ge0$, there is a finite rational bin-packing instance
$I$ and an integer $B$ such that every item size exceeds $1/6$ and
\begin{equation}
  \LP(I)=B,
  \qquad \OPT(I)>B+c.
\end{equation}
The equality for the fractional optimum also holds for the configuration
LP whose patterns are subsets of the individual item copies.

Other possible paper matches, closest wording first

  • Theorem 1.3 of Additive hardness and unbounded configuration gaps in bin packing. Words of the Lean statement, its names split into words, that also appear in the theorem: additive, pairs, hard, np, 1/6, rational and four more. Shared only with the release’s name for the Lean statement or OpenAI’s note on it: distinguish, greater and hardness.
  • Theorem 3.1 of Additive hardness and unbounded configuration gaps in bin packing. Words of the Lean statement, its names split into words, that also appear in the theorem: length, real, encoding, list, capacity, output and 13 more. Shared only with the release’s name for the Lean statement or OpenAI’s note on it: deterministic.
  • Corollary 1.4 of Additive hardness and unbounded configuration gaps in bin packing. Words of the Lean statement, its names split into words, that also appear in the theorem: algorithm, absolute, time, polynomial, np, opt and one more. Shared only with the release’s name for the Lean statement or OpenAI’s note on it: deterministic.
  • Proposition 5.1 of Additive hardness and unbounded configuration gaps in bin packing. Words of the Lean statement, its names split into words, that also appear in the theorem: eq, value, configuration, lp and opt. Shared only with the release’s name for the Lean statement or OpenAI’s note on it: constructed.
  • Proposition 6.1 of Additive hardness and unbounded configuration gaps in bin packing. Words of the Lean statement, its names split into words, that also appear in the theorem: soundness, reduction, cover, input, size, packs and one more.
  • Proposition 4.1 of Additive hardness and unbounded configuration gaps in bin packing. Words of the Lean statement, its names split into words, that also appear in the theorem: cover, input, size, packed and bins. Shared only with the release’s name for the Lean statement or OpenAI’s note on it: constructed.

How Atlas selects possible matches: it compares words in the Lean statement with every statement in the family. It also splits Lean names into words. The release’s label and note receive less weight; a main theorem wins a close match. If the Lean wording yields no clear match, Atlas uses the catalogue description. This selects passages to compare; it does not establish that they mean the same thing.

Reported Comparator runs

One independent group reports that Comparator accepted a run for this Lean statement file: MathVet. Each group reports its own Comparator run for this statement file. Atlas has not repeated the runs.

For a configured theorem, Comparator tests whether OpenAI’s proof proves the exact Lean statement. Some files instead configure definitions for comparison by name and type. Acceptance does not establish that the statement means the same thing as the paper’s theorem.

Carlos Toledo’s cert-machine

How they ran it, in their words

Every Comparator challenge re-run on Linux with nanoda switched on, decided by a preregistered rule; every family’s challenge statements read against OpenAI’s headline, clause by clause. Decider: Comparator (leanprover/comparator d03acab1 = tag v4.34.0, built with the release’s toolchain v4.34.1), lean4export 076e8e57, landrun 811cfff5, nanoda_lib 3a240721 — on GitHub’s Linux runners (.github/workflows/openai-math-kernel.yml), one j…

  • No verdict reached Their term: “REFUSED”.

    Re-run through Comparator did not reach a verdict (Lean’s default kernel accepts the solution; the nanoda replay stopped: fatal runtime error: stack overflow, aborting).

    Reported 10 October 2026, at the release version shown here. Original verification report

MathVet

How they ran it, in their words

An independent, model-assisted, pre-referee reading of each family’s challenge statements against its headline claim under a published rubric (PROTOCOL.md), with its own Comparator runs per challenge. Its protocol describes a planned error-rate study; this import does not establish that the study has been completed.

  • Accepted Their term: “comparator-pass”.

    Re-run through Comparator: accepted.

    Reported 10 October 2026, at the release version shown here. Original verification report

What an accepted Comparator run would establish

If Comparator is run under this configuration and accepts, the solution proves the configured theorem using only the allowed axioms, and the Lean kernel accepts every step.

This configuration lists no definition holes, so every definition the statement uses is compared as it is written in this file.

Allowed axioms: propext, Quot.sound, Classical.choice

Acceptance leaves open whether the Lean statement means the same thing as the paper’s theorem, whether the paper’s other claims are correct, and whether the result is new. Those questions require comparing the definitions and statements, reviewing the paper’s arguments, and reading the earlier literature.

Do family 118’s Lean statements express the advertised result?

These assessments compare all the family’s Lean statements with the whole result OpenAI describes in its catalogue. They do not assess this statement alone. Each group uses its own published rules.

MathVet and cert-machine agree on how much of the advertised result the Lean statements express.

  • MathVet

    Finds the whole advertised result stated or implied Their term: “full”.

    The challenge statements imply the headline claim after unpacking definitions or one routine step. Their record

    Their note: None; P/NP are defined by Mathlib TM2 poly-time deciders and the certificate definition (InNP).

    Definitions the group asks readers to compare with the paper: PEqualsNP := ClassP = ClassNP with ClassP via TM2ComputableInPolyTime deciders (+ finite alphabet) and ClassNP via CookLevin.InNP certificate verifiers; LP values are sInf over fractional covers (nonempty, bounded below)

  • Carlos Toledo’s cert-machine

    Finds the whole advertised result stated or implied Their term: “MATCHES”.

    The challenge statements state the headline as OpenAI wrote it. Their record

Read the complete assessments on the family page.

OpenAI’s own note on what this Lean statement covers

“For every integer $c\ge0$, there are an integer $B$ and a rational instance with $5B$ items whose individual-copy and size-type configuration-LP values both equal $B$, but whose integral optimum is greater than $B+c$. Distinguishing a packing in $B$ bins from the absence of one in $B+c$ bins is NP-hard for each fixed $c$. A deterministic polynomial-time algorithm with a fixed absolute additive allowance exists exactly when $P=NP$; under that equality, an optimal algorithm is constructed.”

An AI agent drafted an interpretation of that note, classifying this statement as “states a paper’s theorem as the paper does”. No human review of the draft is recorded.

Supporting material

The complete Lean statement file

378 lines, copied from release version fd4aeeb. A name defined in this file links to its line; pointing at the name shows its definition.

Declared in this fileOpenAI’s library at fd4aeebOther linked names open the current documentation for Mathlib, Lean’s mathematical library.

Links in the file: 152 to its own declarations, 221 to Mathlib’s documentation. 2 declared names also link to the same declaration in OpenAI’s library. 2 identifiers stay plain because they resolve to no single declaration: variables Lean binds automatically, notation, or names the scan of the pinned sources did not find. OpenAI uses Mathlib version d13f23b. The linked documentation describes the current version, so names that have since changed may be missing there.

import Mathlibnamespace OAInoncomputable sectionnamespace BinPackingGames.Foundations.Complexitydef encodeWord (n : Nat) : List Bool := List.replicate n true ++ [false]end BinPackingGames.Foundations.Complexitynamespace BinPackingGames.Foundations.Complexity.MachineFiniteAlphabetopen Turingdef FiniteAlphabet (M : FinTM2) : Prop := ∀ k, Finite (M.Γ k)end BinPackingGames.Foundations.Complexity.MachineFiniteAlphabetnamespace BinPackingGames.Foundations.Complexity.CookLevindef pairBits (input : List Bool × List Bool) : List Bool :=  encodeWord input.1.length ++ input.1 ++ input.2structure NPVerifier where  witnessBound : Polynomial Nat  verify : (List Bool × List Bool) → Bool  computation : Turing.TM2ComputableInPolyTime pairBits (fun bit => [bit]) verify  finiteAlphabet : (k : computation.tm.K) → Fintype (computation.tm.Γ k)def NPVerifier.Accepts (verifier : NPVerifier) (input : List Bool) : Prop :=  ∃ witness : List Bool,    witness.length ≤ verifier.witnessBound.eval input.length ∧    verifier.verify (input, witness) = truedef InNP (language : List Bool → Prop) : Prop :=  ∃ verifier : NPVerifier, ∀ input, language input ↔ verifier.Accepts inputend BinPackingGames.Foundations.Complexity.CookLevinnamespace BinPackingCompleteness.BinaryEncodingdef bitsValue : List Bool → Nat  | [] => 0  | b :: bits => Nat.bit b (bitsValue bits)def frame : List Bool → List Bool  | [] => [false]  | b :: bits => true :: b :: frame bitsdef parseFrame : List Bool → Option (List Bool × List Bool)  | false :: rest => some ([], rest)  | true :: b :: rest => do      let (bits, trailing) ← parseFrame rest      return (b :: bits, trailing)  | _ => nonedef nameBits (name : Nat) : List Bool := frame name.bitsdef parseName (input : List Bool) : Option (Nat × List Bool) := do  let (digits, rest) ← parseFrame input  let name := bitsValue digits  if digits = name.bits then some (name, rest) else noneend BinPackingCompleteness.BinaryEncodingnamespace BinPackingGapopen scoped BigOperatorsstructure Instance where  n : ℕ  size : Fin n → ℚ  size_pos : ∀ i, 0 < size i  size_le_one : ∀ i, size i ≤ 1namespace Instanceabbrev Item (I : Instance) := Fin I.nend Instancestructure Packing (I : Instance) (b : ℕ) where  assignment : I.Item → Fin b  capacity : ∀ j, (∑ i, if assignment i = j then I.size i else 0) ≤ 1def HasPacking (I : Instance) (b : ℕ) : Prop := Nonempty (Packing I b)def singletonPacking (I : Instance) : Packing I I.n where  assignment i := i  capacity j := by    have hsum : (∑ i, if i = j then I.size i else 0) = I.size j := by      calc        (∑ i, if i = j then I.size i else 0) =            (if j = j then I.size j else 0) :=          Finset.sum_eq_single j (fun i _ hij => ite_eq_right hij)            (fun h => False.elim (h (Finset.mem_univ _)))        _ = I.size j := ite_eq_left rfl    rw [hsum]    exact I.size_le_one jtheorem exists_packing (I : Instance) : ∃ b, HasPacking I b :=  ⟨I.n, ⟨singletonPacking I⟩⟩noncomputable def opt (I : Instance) : ℕ := by  classical  exact Nat.find (exists_packing I)def IndividualConfiguration (I : Instance) :=  {H : Finset I.Item // ∑ i ∈ H, I.size i ≤ 1}noncomputable instance (I : Instance) : Fintype (IndividualConfiguration I) :=  inferInstanceAs (Fintype {H : Finset I.Item // ∑ i ∈ H, I.size i ≤ 1})def NumericalSize (I : Instance) := ↥(Finset.univ.image I.size)instance (I : Instance) : Fintype (NumericalSize I) :=  inferInstanceAs (Fintype ↥(Finset.univ.image I.size))namespace NumericalSizevariable {I : Instance}theorem positive (s : NumericalSize I) : 0 < s.val := by  obtain ⟨i, _, hi⟩ := Finset.mem_image.mp s.property  rw [← hi]  exact I.size_pos idef multiplicity (s : NumericalSize I) : ℕ :=  (Finset.univ.filter fun i : I.Item => I.size i = s.val).carddef capacityBound (s : NumericalSize I) : ℕ :=  Classical.choose (exists_nat_gt (1 / s.val))theorem capacityBound_spec (s : NumericalSize I) : 1 / s.val < (s.capacityBound : ℚ) :=  Classical.choose_spec (exists_nat_gt (1 / s.val))end NumericalSizedef TypeConfiguration (I : Instance) :=  {c : NumericalSize I → ℕ // ∑ s, s.val * (c s : ℚ) ≤ 1}namespace TypeConfigurationvariable {I : Instance}theorem count_lt_bound (c : TypeConfiguration I) (s : NumericalSize I) :    c.val s < s.capacityBound := by  have hterm : s.val * (c.val s : ℚ) ≤ ∑ t, t.val * (c.val t : ℚ) := by    exact Finset.single_le_sum (fun t _ => mul_nonneg (le_of_lt t.positive) (Nat.cast_nonneg _))      (Finset.mem_univ s)  have hquot : (c.val s : ℚ) ≤ 1 / s.val := by    apply (le_div_iff₀ s.positive).mpr    simpa [mul_comm] using hterm.trans c.property  have hlt := hquot.trans_lt s.capacityBound_spec  exact_mod_cast hltdef boundedCounts (c : TypeConfiguration I) : ∀ s : NumericalSize I, Fin s.capacityBound :=  fun s => ⟨c.val s, c.count_lt_bound s⟩theorem boundedCounts_injective :    Function.Injective      (boundedCounts : TypeConfiguration I → ∀ s : NumericalSize I, Fin s.capacityBound) := by  intro c d h  apply Subtype.ext  funext s  exact congrArg Fin.val (congrFun h s)instance : Finite (TypeConfiguration I) := by  classical  exact Finite.of_injective boundedCounts boundedCounts_injectiveinstance : Fintype (TypeConfiguration I) := Fintype.ofFinite _end TypeConfigurationnamespace FractionalCoveropen Setvariable {I C : Type*} [Fintype I] [Fintype C]def Feasible (a : C → I → ℝ) (d : I → ℝ) (w : C → ℝ) : Prop :=  (∀ c, 0 ≤ w c) ∧ ∀ i, d i ≤ ∑ c, a c i * w cdef objective (w : C → ℝ) : ℝ := ∑ c, w cdef objectiveSet (a : C → I → ℝ) (d : I → ℝ) : Set ℝ :=  {v | ∃ w, Feasible a d w ∧ objective w = v}def value (a : C → I → ℝ) (d : I → ℝ) : ℝ :=  sInf (objectiveSet a d)end FractionalCoverdef individualMatrix (I : Instance) (H : IndividualConfiguration I) (i : I.Item) : ℝ :=  if i ∈ H.val then 1 else 0def individualLP (I : Instance) : ℝ :=  FractionalCover.value (individualMatrix I) (fun _ => 1)def typeMatrix (I : Instance) (c : TypeConfiguration I) (s : NumericalSize I) : ℝ :=  c.val sdef typeLP (I : Instance) : ℝ :=  FractionalCover.value (typeMatrix I) (fun s => (s.multiplicity : ℝ))abbrev RawInstance := List (ℕ × ℕ)abbrev RawReductionOutput := ℕ × RawInstancenamespace RawInstancedef Valid (r : RawInstance) : Prop :=  ∀ q ∈ r, 0 < q.1 ∧ q.1 ≤ q.2def ratValue (q : ℕ × ℕ) : ℚ := (q.1 : ℚ) / (q.2 : ℚ)theorem den_pos {r : RawInstance} (hr : r.Valid) {q : ℕ × ℕ} (hq : q ∈ r) :    0 < q.2 := lt_of_lt_of_le (hr q hq).1 (hr q hq).2def toInstance (r : RawInstance) (hr : r.Valid) : Instance where  n := r.length  size i := ratValue (r.get i)  size_pos i := div_pos (Nat.cast_pos.mpr (hr _ (List.get_mem r i)).1)    (Nat.cast_pos.mpr (den_pos hr (List.get_mem r i)))  size_le_one i := (div_le_one₀ (Nat.cast_pos.mpr (den_pos hr (List.get_mem r i)))).mpr    (Nat.cast_le.mpr (hr _ (List.get_mem r i)).2)end RawInstancestructure RawPacking where  bins : ℕ  assignments : List ℕnamespace RawPackingdef load (r : RawInstance) (a : List ℕ) (j : ℕ) : ℚ :=  ((r.zip a).map fun qa =>    if qa.2 = j then RawInstance.ratValue qa.1 else 0).sumdef Feasible (r : RawInstance) (p : RawPacking) : Prop :=  p.assignments.length = r.length ∧  (∀ j ∈ p.assignments, j < p.bins) ∧  ∀ j < p.bins, load r p.assignments j ≤ 1end RawPackingnamespace BinaryEncodingabbrev natBits := BinPackingCompleteness.BinaryEncoding.nameBitsabbrev parseNat := BinPackingCompleteness.BinaryEncoding.parseNamedef listBits {α : Type} (encode : α → List Bool) : List α → List Bool  | [] => [false]  | a :: rest => true :: (encode a ++ listBits encode rest)def pairBits {α β : Type} (ea : α → List Bool) (eb : β → List Bool)    (p : α × β) : List Bool := ea p.1 ++ eb p.2def optionBits {α : Type} (encode : α → List Bool) : Option α → List Bool  | none => [false]  | some a => true :: encode aabbrev Parser (α : Type) := List Bool → Option (α × List Bool)def parsePair {α β : Type} (pa : Parser α) (pb : Parser β) : Parser (α × β) :=  fun input => do    let (a, rest) ← pa input    let (b, suffix) ← pb rest    return ((a, b), suffix)def parseListAux {α : Type} (parse : Parser α) : Nat → Parser (List α)  | 0, _ => none  | _ + 1, [] => none  | _ + 1, false :: rest => some ([], rest)  | fuel + 1, true :: rest => do    let (a, rest) ← parse rest    let (as, suffix) ← parseListAux parse fuel rest    return (a :: as, suffix)def parseList {α : Type} (parse : Parser α) : Parser (List α) :=  fun input => parseListAux parse input.length inputdef decode {α : Type} (parse : Parser α) (input : List Bool) : Option α := do  let (a, rest) ← parse input  if rest.isEmpty then some a else nonedef rawInstanceBits (r : RawInstance) : List Bool :=  listBits (pairBits natBits natBits) rdef assignmentBits (a : List Nat) : List Bool := listBits natBits adef rawPackingBits (p : RawPacking) : List Bool :=  natBits p.bins ++ assignmentBits p.assignmentsdef packingResultBits (p : Option RawPacking) : List Bool := optionBits rawPackingBits pdef rawReductionOutputBits (out : RawReductionOutput) : List Bool :=  natBits out.1 ++ rawInstanceBits out.2def parseRawInstance : Parser RawInstance := parseList (parsePair parseNat parseNat)def decodeRawInstance := decode parseRawInstanceend BinaryEncodingsectionopen Turing BinPackingGames.Foundations.Complexityabbrev BitLanguage := List Bool → Propdef InP (L : BitLanguage) : Prop :=  ∃ decider : List Bool → Bool,  ∃ computation : TM2ComputableInPolyTime      (id : List Bool → List Bool) (fun b => [b]) decider,    MachineFiniteAlphabet.FiniteAlphabet computation.tm ∧    ∀ x, L x ↔ decider x = truedef ClassP : Set BitLanguage := {L | InP L}def ClassNP : Set BitLanguage := {L | CookLevin.InNP L}def PEqualsNP : Prop := ClassP = ClassNPstructure AbsoluteAdditiveAlgorithm (c : Nat) where  run : List Bool → Option RawPacking  computation : TM2ComputableInPolyTime (id : List Bool → List Bool)    BinaryEncoding.packingResultBits run  finiteAlphabet : MachineFiniteAlphabet.FiniteAlphabet computation.tm  guarantee : ∀ (r : RawInstance) (hr : r.Valid), ∃ p : RawPacking,    run (BinaryEncoding.rawInstanceBits r) = some p ∧    RawPacking.Feasible r p ∧ p.bins ≤ opt (r.toInstance hr) + cstructure PackingGapReduction (c : Nat) (L : BitLanguage) where  reduce : List Bool → RawReductionOutput  computation : TM2ComputableInPolyTime (id : List Bool → List Bool)    BinaryEncoding.rawReductionOutputBits reduce  finiteAlphabet : MachineFiniteAlphabet.FiniteAlphabet computation.tm  valid : ∀ x, (reduce x).2.Valid  itemCount : ∀ x, (reduce x).2.length = 5 * (reduce x).1  itemLower : ∀ x i,    (1 / 6 : ℚ) < ((reduce x).2.toInstance (valid x)).size i  completeness : ∀ x, L x →    HasPacking ((reduce x).2.toInstance (valid x)) (reduce x).1  soundness : ∀ x, ¬L x →    ¬HasPacking ((reduce x).2.toInstance (valid x)) ((reduce x).1 + c)def PackingGapNPHard (c : Nat) : Prop :=  ∀ L : BitLanguage, CookLevin.InNP L → Nonempty (PackingGapReduction c L)endtheorem main_results :    (∀ c : ℕ, ∃ I : Instance, ∃ B : ℕ,      I.n = 5 * B ∧      (∀ i, (1 / 6 : ℚ) < I.size i ∧ I.size i < 1) ∧      B + c < opt I ∧ individualLP I = (B : ℝ) ∧ typeLP I = (B : ℝ)) ∧    (∀ c : Nat, PackingGapNPHard c) ∧    ((∃ c : Nat, Nonempty (AbsoluteAdditiveAlgorithm c)) ↔ PEqualsNP) ∧    (PEqualsNP → ∃ algorithm : AbsoluteAdditiveAlgorithm 0,    (∀ (items : RawInstance) (valid : items.Valid), ∃ packing : RawPacking,      algorithm.run (BinaryEncoding.rawInstanceBits items) = some packing ∧      packing.Feasible items ∧ packing.bins = opt (items.toInstance valid)) ∧    algorithm.run (BinaryEncoding.rawInstanceBits []) = some ⟨0, []⟩ ∧    (∀ input : List Bool, BinaryEncoding.decodeRawInstance input = none →      algorithm.run input = none) ∧    (∀ items : RawInstance, ¬ items.Valid →      algorithm.run (BinaryEncoding.rawInstanceBits items) = none))  := by  sorryend BinPackingGapendend OAI
Every extracted statement of the accompanying papers

The statements the atlas extracted automatically from each accompanying paper’s TeX source, with links to the full sources.

Additive hardness and unbounded configuration gaps in bin packing

Theorem (Unbounded configuration gap)

For every integer c\ge0, there is a finite rational bin-packing instance I and an integer B such that every item size exceeds 1/6 and

\LP(I)=B, \qquad \OPT(I)>B+c.

The equality for the fractional optimum also holds for the configuration LP whose patterns are subsets of the individual item copies.

Section 1, Introduction Read it in the paper TeX source, line 87
Show the TeX
For every integer $c\ge0$, there is a finite rational bin-packing instance
$I$ and an integer $B$ such that every item size exceeds $1/6$ and
\begin{equation}
  \LP(I)=B,
  \qquad \OPT(I)>B+c.
\end{equation}
The equality for the fractional optimum also holds for the configuration
LP whose patterns are subsets of the individual item copies.
Theorem (Constant-additive hardness)

For every fixed integer c\ge0, it is NP-hard to distinguish pairs (I,B) such that I packs into B bins from pairs such that I cannot be packed into B+c bins. Here B is an integer supplied with the instance, the item sizes are rational, and every item size is strictly greater than 1/6.

Section 1, Introduction Read it in the paper TeX source, line 106
Show the TeX
For every fixed integer $c\ge0$, it is NP-hard to distinguish pairs $(I,B)$
such that $I$ packs into $B$ bins from pairs such that $I$ cannot be packed
into $B+c$ bins.  Here $B$ is an integer supplied with the instance,
the item sizes are rational, and every item size is strictly greater
than $1/6$.
Corollary

A deterministic polynomial-time algorithm that always uses at most \OPT(I)+C bins for some absolute constant C exists if and only if \classP=\classNP.

Section 1, Introduction Read it in the paper TeX source, line 114
Show the TeX
A deterministic polynomial-time algorithm that always uses at most
$\OPT(I)+C$ bins for some absolute constant $C$ exists if and only if
$\classP=\classNP$.
Configuration and file facts
OpenAI’s Lean catalogue
OpenAI lists this as a main result in its Lean catalogue.
Allowed axioms
propext, Quot.sound, Classical.choiceThe axioms this configuration allows a proof to use. A replay shows which of them a proof uses.
Imports
Mathlib
Imports from outside Mathlib
None
Local vocabulary
68 local vocabulary declarations
Lines of Lean, without comments or blank lines
229
Second proof-verification program (nanoda)
Off in OpenAI's configuration.

Statement comparison

A shareable summary of this page: the proposed paper match, what the Lean statement expresses, and which reviews are recorded.

Plectis Atlas

Unbounded configuration gaps and additive hardness

Family 118: Bin packing and unbounded configuration-LP gaps

Candidate pairing

Theorem (Unbounded configuration gap)

For every integer c\ge0, there is a finite rational bin-packing instance I and an integer B such that every item size exceeds 1/6 and

\LP(I)=B, \qquad \OPT(I)>B+c.

The equality for the fractional optimum also holds for the configuration LP whose patterns are subsets of the individual item copies.

Additive hardness and unbounded configuration gaps in bin packing

TeX label thm:unbounded-gap, build/source/introduction.tex, line 87

The Lean statement says

theorem main_results :    (∀ c : ℕ, ∃ I : Instance, ∃ B : ℕ,      I.n = 5 * B ∧      (∀ i, (1 / 6 : ℚ) < I.size i ∧ I.size i < 1) ∧      B + c < opt I ∧ individualLP I = (B : ℝ) ∧ typeLP I = (B : ℝ)) ∧    (∀ c : Nat, PackingGapNPHard c) ∧    ((∃ c : Nat, Nonempty (AbsoluteAdditiveAlgorithm c)) ↔ PEqualsNP) ∧    (PEqualsNP → ∃ algorithm : AbsoluteAdditiveAlgorithm 0,    (∀ (items : RawInstance) (valid : items.Valid), ∃ packing : RawPacking,      algorithm.run (BinaryEncoding.rawInstanceBits items) = some packing ∧      packing.Feasible items ∧ packing.bins = opt (items.toInstance valid)) ∧    algorithm.run (BinaryEncoding.rawInstanceBits []) = some ⟨0, []⟩ ∧    (∀ input : List Bool, BinaryEncoding.decodeRawInstance input = none →      algorithm.run input = none) ∧    (∀ items : RawInstance, ¬ items.Valid →      algorithm.run (BinaryEncoding.rawInstanceBits items) = none))  := by  sorry

A Lean statement states the theorem and leaves its proof as sorry on purpose. OpenAI’s proof is in a separate solution module, and a program called Comparator checks that proof against this statement.

Atlas selected this possible match because the two statements share words. No review of whether they mean the same thing is recorded.One independent group reports that Comparator accepted a run for this file at the release version shown here.Statement review: none recorded

68 local vocabulary declarationsAllowed axioms: propext, Quot.sound, Classical.choiceopenai/math at fd4aeebwcook04.github.io/plectis-atlas/statements/BinPackingGap.html

Recorded comparisons with the paper

Atlas records no contributed comparison of this statement with the paper.

Contributed Comparator run reports

Atlas records no contributed report of running Comparator for this statement file.

Compare this statement with the paperShare a Comparator run reportSuggest a change