Binary twofold covering codes: K(8,1,2) ≥ 61, verified in Lean 4

A machine-checked lower bound for multiple covering codes, and an elementary theorem for all even n that improves the published lower bound at five tabulated positions.

Hanyu Yang · ORCID 0009-0005-0419-4070
DOI 10.5281/zenodo.22217672 · source repository · OEIS A004045 · 3 September 2026

Abstract

A binary code C ⊆ F2n is a twofold covering of radius 1 if every point of F2n lies within Hamming distance 1 of at least two codewords; K(n,1,2) denotes the least size of such a code. We prove that for even n

|C| ≥ ⌈ 3·2^(n+1) / (3n+2) ⌉

by a half-page parity refinement of the covering-excess method of Johnson and van Wee. The bound strictly improves the best published lower bound for every even n ≥ 6, and gives the exact value K(6,1,2) = 20 with no computer search, where the published value came from integer programming.

The case n = 8 is the first unknown term of OEIS A004045, where the published record was 59 ≤ K(8,1,2) ≤ 64. A second, computational argument refutes |C| = 60, and that argument is formalised in Lean 4 with zero sorrys.

Result: 61 ≤ K(8,1,2) ≤ 64

The five published lower bounds this improves

npublished lower boundthis workgain
85960+1
10188192+4
12640647+7
1421952235+40
1677837865+82

Published lower bounds are those of Krotov and Potapov (2021). The ratio to the old bound tends to 1, but the additive gap grows like (2/3)·2n/n² and is unbounded, so the improvement does not run out.

The formal statement

le_card_of_isDoubleCover : ∀ (C : Finset V), IsDoubleCover C → 61 ≤ C.card
  depends on axioms: [propext, Classical.choice, Quot.sound]

No sorryAx and no native_decide. The trusted base is Lean's kernel plus the four definitions the statement mentions transitively — V, dist, cov, IsDoubleCover — which the author has read. Every declaration's axiom trace is printed by lake build Mcov.Audit.

What is not established

Reproducing it

git clone https://github.com/SeverinVisionary/oeis-a004045
cd oeis-a004045 && ./reproduce.sh

Twelve self-asserting checks, about a minute, Python standard library only apart from one step needing SciPy for small LP control cases; non-zero exit on any failure. The Lean development is a separate build of about four minutes.

Read further