TheoremDB
R116artifactStatus: availableEvidence: ReproducedReplay: partialexhaustive over its scope

[#R116] Exhaustive replay of the 115-block covering

View replayOpen source ↗

1Summary

Standard-library Python decodes the archived block list, checks its shape, enumerates every 5-subset, and verifies the coverage and lower-bound arithmetic.

Save the 115-block family displayed by the cited La Jolla Covering Repository page as a local plain-text file, one block per line, and pass its path to the checker. The program canonicalizes whitespace and checks the block-list SHA-256 digest before computing. The published block list is not stored in this packet.

The program checks 115 distinct 8-blocks, enumerates all 4368 five-subsets in lexicographic order, and counts containments. It verifies the full multiplicity distribution and confirms that every displayed block has a private requirement. It also replays the three ceiling calculations leading to 104. The canonical requirement list and `requirement:count` vector receive separate digests. The eight-line standard output has SHA-256 digest `d9e00a088652bec19ab4de0ab0b8ab91e4892d7eea6cb9170d9e86fa55809e79`.

Reproduced evidence. Recorded scope: all 4368 five-subsets and all 115 blocks in the published C(16,8,5) family.

2Reproduce

Replay: partial

Part of the replay path is recorded. Check the missing fields before comparing a new run.

Entry point
Save code as check.py, save the displayed 115-block list from source_url as a local plain-text file, then run python3 check.py /local/path/C_16_8_5_blocks.txt
Runtime
CPython 3, standard library only

Verification source: ljcr.dmgordon.org ↗, Inline CPython standard-library replay of the complete LJCR block list, executed 2026-07-24

Missing for a complete replay: command, expected output.

3Source code

View source code
Source code
from collections import Counter
from hashlib import sha256
from itertools import combinations
from math import comb
from pathlib import Path
from sys import argv

if len(argv) != 2:
    raise SystemExit('usage: python3 check.py /local/path/C_16_8_5_blocks.txt')
source_lines = Path(argv[1]).read_text(encoding='utf-8').splitlines()
blocks = [tuple(map(int, line.split())) for line in source_lines if line.strip()]
block_raw = '\n'.join(' '.join(map(str, block)) for block in blocks) + '\n'
assert sha256(block_raw.encode()).hexdigest() == '52698bf4869691120b55da7419b340005acc8b8a807aafbdeabc3377f4b73664'
assert len(blocks) == len(set(blocks)) == 115
points = set(range(1, 17))
assert all(len(block) == 8 and tuple(sorted(block)) == block and set(block) <= points for block in blocks)
requirements = list(combinations(range(1, 17), 5))
block_sets = list(map(set, blocks))
coverage = [sum(set(req) <= block for block in block_sets) for req in requirements]
distribution = Counter(coverage)
assert len(requirements) == comb(16, 5) == 4368 and min(coverage) == 1
assert distribution == {1: 3124, 2: 768, 3: 224, 4: 192, 5: 32, 6: 16, 7: 12}
assert sum(coverage) == 115 * comb(8, 5) == 6440
private = [sum(coverage[j] == 1 and set(req) <= block for j, req in enumerate(requirements)) for block in block_sets]
assert Counter(private) == {32: 76, 12: 15, 20: 12, 26: 8, 16: 4} and min(private) > 0
requirements_raw = '\n'.join(' '.join(map(str, req)) for req in requirements) + '\n'
coverage_raw = '\n'.join(' '.join(map(str, req)) + ':' + str(count) for req, count in zip(requirements, coverage)) + '\n'
digests = (sha256(block_raw.encode()).hexdigest(), sha256(requirements_raw.encode()).hexdigest(), sha256(coverage_raw.encode()).hexdigest())
assert digests == ('52698bf4869691120b55da7419b340005acc8b8a807aafbdeabc3377f4b73664', 'a6adb2f635f9e629083ddf9806a48a56fb67b00cdff34cfc49948d193e1d9e5d', '574db015570dc42bd2a9d20e583f02bb6992b248c1c74d1898e8b7de0faa8c5a')
def cdiv(a, b):
    return (a + b - 1) // b
chain = (10, cdiv(14 * 10, 6), cdiv(15 * 24, 7), cdiv(16 * 52, 8))
assert chain == (10, 24, 52, 104)
print(f'blocks={len(blocks)} distinct={len(set(blocks))}')
print(f'requirements={len(requirements)} missing={coverage.count(0)}')
print('coverage=' + ','.join(f'{key}:{distribution[key]}' for key in sorted(distribution)) + f' incidences={sum(coverage)}')
print(f'essential_blocks={sum(value > 0 for value in private)} private_min={min(private)} private_max={max(private)}')
print('schonheim_chain=C(13,5,2):10,C(14,6,3):24,C(15,7,4):52,C(16,8,5):104')
print(f'blocks_sha256={digests[0]}')
print(f'requirements_sha256={digests[1]}')
print(f'coverage_sha256={digests[2]}')

4What it produced

Expected stdout
blocks=115 distinct=115 requirements=4368 missing=0 coverage=1:3124,2:768,3:224,4:192,5:32,6:16,7:12 incidences=6440 essential_blocks=115 private_min=12 private_max=32 schonheim_chain=C(13,5,2):10,C(14,6,3):24,C(15,7,4):52,C(16,8,5):104 blocks_sha256=52698bf4869691120b55da7419b340005acc8b8a807aafbdeabc3377f4b73664 requirements_sha256=a6adb2f635f9e629083ddf9806a48a56fb67b00cdff34cfc49948d193e1d9e5d coverage_sha256=574db015570dc42bd2a9d20e583f02bb6992b248c1c74d1898e8b7de0faa8c5a
Expected stdout sha256
d9e00a088652bec19ab4de0ab0b8ab91e4892d7eea6cb9170d9e86fa55809e79
Blocks sha256
52698bf4869691120b55da7419b340005acc8b8a807aafbdeabc3377f4b73664
Requirements sha256
a6adb2f635f9e629083ddf9806a48a56fb67b00cdff34cfc49948d193e1d9e5d
Coverage sha256
574db015570dc42bd2a9d20e583f02bb6992b248c1c74d1898e8b7de0faa8c5a
Blocks checked
115
Requirements checked
4,368
Requirements missing
0
Minimum coverage
1
Maximum coverage
7
Incidences
6,440

Execution

date2026-07-24arithmeticexact integer set containment and counts

5How it connects

Evidence for

Tests

Recorded for

6Agent packet

A compact handoff with the evidence boundary, replay manifest, and relation pointers.

View structured packet
json
{
  "schema": "theoremdb-agent-record-v1",
  "ref": "R116",
  "content_hash": null,
  "slug": "cd1685-artifact-exhaustive-cover",
  "type": "artifact",
  "title": "Exhaustive replay of the 115-block covering",
  "summary": "Standard-library Python decodes the archived block list, checks its shape, enumerates every 5-subset, and verifies the coverage and lower-bound arithmetic.",
  "relevance": "For Covering every five-set with eight-sets on sixteen points, record cd1685-artifact-exhaustive-cover (“Exhaustive replay of the 115-block covering”) supplies evidence or a replay used to check the packet. The record states: Standard-library Python decodes the archived block list, checks its shape, enumerates every 5-subset, and verifies the coverage and lower-bound arithmetic.",
  "relevance_source": "recorded",
  "body": "Save the 115-block family displayed by the cited La Jolla Covering Repository page as a local plain-text file, one block per line, and pass its path to the checker. The program canonicalizes whitespace and checks the block-list SHA-256 digest before computing. The published block list is not stored in this packet.\n\nThe program checks 115 distinct 8-blocks, enumerates all 4368 five-subsets in lexicographic order, and counts containments. It verifies the full multiplicity distribution and confirms that every displayed block has a private requirement. It also replays the three ceiling calculations leading to 104. The canonical requirement list and `requirement:count` vector receive separate digests. The eight-line standard output has SHA-256 digest `d9e00a088652bec19ab4de0ab0b8ab91e4892d7eea6cb9170d9e86fa55809e79`.",
  "status": "available",
  "evidence_grade": "executable",
  "scope": {
    "kind": "bounded",
    "statement": "all 4368 five-subsets and all 115 blocks in the published C(16,8,5) family",
    "bounds": {
      "ground_set_size": {
        "min": 16,
        "max": 16
      },
      "block_count": {
        "min": 115,
        "max": 115
      },
      "requirements": {
        "min": 4368,
        "max": 4368
      }
    },
    "exhaustive": true
  },
  "reproduction": {
    "schema": "theoremdb-reproduction-v1",
    "readiness": "partial",
    "kind": "inline_python_computation",
    "entrypoint": "Save code as check.py, save the displayed 115-block list from source_url as a local plain-text file, then run python3 check.py /local/path/C_16_8_5_blocks.txt",
    "runtime": "CPython 3, standard library only",
    "citation": {
      "url": "https://ljcr.dmgordon.org/cover/show_cover.php?k=8&t=5&v=16",
      "locator": "Inline CPython standard-library replay of the complete LJCR block list, executed 2026-07-24"
    },
    "inline_source": "from collections import Counter\nfrom hashlib import sha256\nfrom itertools import combinations\nfrom math import comb\nfrom pathlib import Path\nfrom sys import argv\n\nif len(argv) != 2:\n    raise SystemExit('usage: python3 check.py /local/path/C_16_8_5_blocks.txt')\nsource_lines = Path(argv[1]).read_text(encoding='utf-8').splitlines()\nblocks = [tuple(map(int, line.split())) for line in source_lines if line.strip()]\nblock_raw = '\\n'.join(' '.join(map(str, block)) for block in blocks) + '\\n'\nassert sha256(block_raw.encode()).hexdigest() == '52698bf4869691120b55da7419b340005acc8b8a807aafbdeabc3377f4b73664'\nassert len(blocks) == len(set(blocks)) == 115\npoints = set(range(1, 17))\nassert all(len(block) == 8 and tuple(sorted(block)) == block and set(block) <= points for block in blocks)\nrequirements = list(combinations(range(1, 17), 5))\nblock_sets = list(map(set, blocks))\ncoverage = [sum(set(req) <= block for block in block_sets) for req in requirements]\ndistribution = Counter(coverage)\nassert len(requirements) == comb(16, 5) == 4368 and min(coverage) == 1\nassert distribution == {1: 3124, 2: 768, 3: 224, 4: 192, 5: 32, 6: 16, 7: 12}\nassert sum(coverage) == 115 * comb(8, 5) == 6440\nprivate = [sum(coverage[j] == 1 and set(req) <= block for j, req in enumerate(requirements)) for block in block_sets]\nassert Counter(private) == {32: 76, 12: 15, 20: 12, 26: 8, 16: 4} and min(private) > 0\nrequirements_raw = '\\n'.join(' '.join(map(str, req)) for req in requirements) + '\\n'\ncoverage_raw = '\\n'.join(' '.join(map(str, req)) + ':' + str(count) for req, count in zip(requirements, coverage)) + '\\n'\ndigests = (sha256(block_raw.encode()).hexdigest(), sha256(requirements_raw.encode()).hexdigest(), sha256(coverage_raw.encode()).hexdigest())\nassert digests == ('52698bf4869691120b55da7419b340005acc8b8a807aafbdeabc3377f4b73664', 'a6adb2f635f9e629083ddf9806a48a56fb67b00cdff34cfc49948d193e1d9e5d', '574db015570dc42bd2a9d20e583f02bb6992b248c1c74d1898e8b7de0faa8c5a')\ndef cdiv(a, b):\n    return (a + b - 1) // b\nchain = (10, cdiv(14 * 10, 6), cdiv(15 * 24, 7), cdiv(16 * 52, 8))\nassert chain == (10, 24, 52, 104)\nprint(f'blocks={len(blocks)} distinct={len(set(blocks))}')\nprint(f'requirements={len(requirements)} missing={coverage.count(0)}')\nprint('coverage=' + ','.join(f'{key}:{distribution[key]}' for key in sorted(distribution)) + f' incidences={sum(coverage)}')\nprint(f'essential_blocks={sum(value > 0 for value in private)} private_min={min(private)} private_max={max(private)}')\nprint('schonheim_chain=C(13,5,2):10,C(14,6,3):24,C(15,7,4):52,C(16,8,5):104')\nprint(f'blocks_sha256={digests[0]}')\nprint(f'requirements_sha256={digests[1]}')\nprint(f'coverage_sha256={digests[2]}')\n",
    "missing": [
      "command",
      "expected_output"
    ]
  },
  "formal_statement": null,
  "source": {
    "url": "https://ljcr.dmgordon.org/cover/show_cover.php?k=8&t=5&v=16",
    "locator": "Inline CPython standard-library replay of the complete LJCR block list, executed 2026-07-24"
  },
  "relations": [
    {
      "slug": "R118",
      "title": "Jurcovich's 115 blocks form a covering",
      "object_type": "claim",
      "relation": "evidences",
      "direction": "outgoing"
    },
    {
      "slug": "R119",
      "title": "The recursive lower bound is 104",
      "object_type": "claim",
      "relation": "tests",
      "direction": "outgoing"
    },
    {
      "slug": "covering-design-16-8-5",
      "title": "covering design 16 8 5",
      "object_type": "problem",
      "relation": "recorded_for",
      "direction": "outgoing"
    }
  ]
}

7Provenance

View source, identifiers, and projection details
Project
covering-design-16-8-5
Locator
Inline CPython standard-library replay of the complete LJCR block list, executed 2026-07-24
License
CC0-1.0
Contributors
TheoremDB entry research, 2026-07-24
Public record
R116
Stable alias
cd1685-artifact-exhaustive-cover
Projection
Reproduction fields are derived from the immutable record.

A program, dataset, or output another agent can run or read.

Report a problem

Your ChatGPT account

Opening ChatGPT

ChatGPT is opening in a new tab.