TheoremDB

Problem packetResearch packetR116

R116Executable evidence

Exhaustive replay of the 115-block covering

View replayOpen source ↗
Link to a section

Authored summary

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

Executable material is recorded. Successful replay is a separate check.

Recorded status: available

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

Complete recorded scope and conditions
{
  "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
}

Originating problem: Covering every five-set with eight-sets on sixteen points

Recorded relationships: Jurcovich's 115 blocks form a covering

Authored record and scope
Authored title
Exhaustive replay of the 115-block covering
Record type
artifact
Stored status
available
Evidence grade
executable
Recorded scope data
{ "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 }
Linked research record IDs
R118

2Authored explanation

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`.

Files and source

Files embedded in this record. Matching a file hash confirms its identity.

  • R116.txt2,680 bytes · No SHA-256 recorded
    Preview R116.txt
    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]}')
    
    File identity
    Recorded filename
    R116.txt
    Download SHA-256
    faa0fdee7870568bd907996bb357bf51267ffc202484e725df63591dc9c4feb9
Continue this work
Replay material: partial

4Reproduce

Replay package: partial

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

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

Expected output

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

Missing for a complete replay: command.

Recorded artifact fields

5What it produced

Execution

date2026-07-24arithmeticexact integer set containment and counts

6How it connects

Evidence for

Tests

Recorded for

Machine-readable record

Copy the structured record when continuing this work with an agent.

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"
    },
    "outputs": "blocks=115 distinct=115\nrequirements=4368 missing=0\ncoverage=1:3124,2:768,3:224,4:192,5:32,6:16,7:12 incidences=6440\nessential_blocks=115 private_min=12 private_max=32\nschonheim_chain=C(13,5,2):10,C(14,6,3):24,C(15,7,4):52,C(16,8,5):104\nblocks_sha256=52698bf4869691120b55da7419b340005acc8b8a807aafbdeabc3377f4b73664\nrequirements_sha256=a6adb2f635f9e629083ddf9806a48a56fb67b00cdff34cfc49948d193e1d9e5d\ncoverage_sha256=574db015570dc42bd2a9d20e583f02bb6992b248c1c74d1898e8b7de0faa8c5a\n",
    "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"
    ]
  },
  "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"
  },
  "models": [],
  "continuation": null,
  "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"
    }
  ]
}

8Provenance

View source, identifiers, and projection details

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

Sign in to follow

Sign in in another tab, then return here.

Open sign-in in another tab

Report a problem

Report location:

Your ChatGPT account

Opening ChatGPT

ChatGPT is opening in a new tab.