[#R116] Exhaustive replay of the 115-block covering
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
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
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
5How it connects
Evidence for
- claim
Tests
- claim
Recorded for
- problem
6Agent packet
A compact handoff with the evidence boundary, replay manifest, and relation pointers.
View structured packet
{
"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
- Source
- ljcr.dmgordon.org ↗
- 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.