Problem packetWorkR218
[#R218] Exact replay of the 18-element product basis
1Summary
A dependency-free Python program checks the generator order, all 153 pairs, and both 100-element images.
The program first certifies that 2 has order 100 by checking the two prime divisors of 100. It then computes the powers indexed by the displayed exponent set. Every unordered pair is evaluated once in the exponent group and once in the field. Both images must equal their full target sets.
The multiplicity distribution of the modular sums is 70 classes represented once, 15 represented twice, 12 represented three times, two represented four times, and one represented nine times. These counts account for all 153 pairs. The canonical output line has SHA-256 digest `90143a42f6b43f9dde66574827f9954b8b90d7b9a43aa5d2d40d14e840c68ff0`.
Reproduced evidence. Recorded scope: all unordered pairs of the displayed 18 exponents and their corresponding powers of 2 in F_101.
2Reproduce
The command and source are recorded. The environment or expected result still needs pinning.
python3 check.py- Runtime
- Python 3 standard library
Verification source: cs.uwaterloo.ca ↗, Inline Python 3 computation executed on 2026-07-24
Missing for a complete replay: expected output.
3Source code
View source code
from collections import Counter
import hashlib
P = 101
EXPONENTS = [0, 1, 4, 10, 16, 18, 23, 29, 36, 50, 57, 63, 68, 70, 76, 82, 85, 86]
EXPECTED_RESIDUES = [1, 2, 16, 14, 88, 49, 53, 59, 78, 100, 74, 90, 52, 6, 81, 33, 62, 23]
EXPECTED_DIGEST = "90143a42f6b43f9dde66574827f9954b8b90d7b9a43aa5d2d40d14e840c68ff0"
assert pow(2, 100, P) == 1
assert pow(2, 50, P) != 1
assert pow(2, 20, P) != 1
assert len(EXPONENTS) == len(set(EXPONENTS)) == 18
residues = [pow(2, exponent, P) for exponent in EXPONENTS]
assert residues == EXPECTED_RESIDUES
assert len(set(residues)) == 18
sum_counts = Counter()
product_counts = Counter()
for i in range(18):
for j in range(i + 1, 18):
sum_counts[(EXPONENTS[i] + EXPONENTS[j]) % 100] += 1
product_counts[(residues[i] * residues[j]) % P] += 1
assert set(sum_counts) == set(range(100))
assert set(product_counts) == set(range(1, P))
assert sum(sum_counts.values()) == sum(product_counts.values()) == 153
assert Counter(sum_counts.values()) == Counter({1: 70, 2: 15, 3: 12, 4: 2, 9: 1})
summary = (
"order=100;"
"exponents=" + ",".join(map(str, EXPONENTS)) + ";"
"residues=" + ",".join(map(str, residues)) + ";"
"pairs=153;"
f"sum_image={len(sum_counts)};product_image={len(product_counts)};"
f"min_mult={min(sum_counts.values())};max_mult={max(sum_counts.values())}"
)
digest = hashlib.sha256(summary.encode()).hexdigest()
assert digest == EXPECTED_DIGEST
print(summary)
print("sha256=" + digest)
4What it produced
- Expected stdout
- order=100;exponents=0,1,4,10,16,18,23,29,36,50,57,63,68,70,76,82,85,86;residues=1,2,16,14,88,49,53,59,78,100,74,90,52,6,81,33,62,23;pairs=153;sum_image=100;product_image=100;min_mult=1;max_mult=9 sha256=90143a42f6b43f9dde66574827f9954b8b90d7b9a43aa5d2d40d14e840c68ff0
- Summary sha256
- 90143a42f6b43f9dde66574827f9954b8b90d7b9a43aa5d2d40d14e840c68ff0
Execution
5How it connects
Evidence for
- 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": "R218",
"content_hash": null,
"slug": "dpb101-artifact-eighteen-point-cover-check",
"type": "artifact",
"title": "Exact replay of the 18-element product basis",
"summary": "A dependency-free Python program checks the generator order, all 153 pairs, and both 100-element images.",
"relevance": "For Minimum distinct-product basis of F_101, record dpb101-artifact-eighteen-point-cover-check (“Exact replay of the 18-element product basis”) supplies evidence or a replay used to check the packet. The record states: A dependency-free Python program checks the generator order, all 153 pairs, and both 100-element images.",
"relevance_source": "recorded",
"body": "The program first certifies that 2 has order 100 by checking the two prime divisors of 100. It then computes the powers indexed by the displayed exponent set. Every unordered pair is evaluated once in the exponent group and once in the field. Both images must equal their full target sets.\n\nThe multiplicity distribution of the modular sums is 70 classes represented once, 15 represented twice, 12 represented three times, two represented four times, and one represented nine times. These counts account for all 153 pairs. The canonical output line has SHA-256 digest `90143a42f6b43f9dde66574827f9954b8b90d7b9a43aa5d2d40d14e840c68ff0`.",
"status": "available",
"evidence_grade": "executable",
"scope": {
"kind": "bounded",
"statement": "all unordered pairs of the displayed 18 exponents and their corresponding powers of 2 in F_101",
"bounds": {
"field_order": {
"min": 101,
"max": 101
},
"exponent_count": {
"min": 18,
"max": 18
},
"unordered_pairs": {
"min": 153,
"max": 153
},
"target_elements": {
"min": 100,
"max": 100
}
},
"exhaustive": true
},
"reproduction": {
"schema": "theoremdb-reproduction-v1",
"readiness": "runnable",
"kind": "inline_python_computation",
"command": "python3 check.py",
"runtime": "Python 3 standard library",
"citation": {
"url": "https://cs.uwaterloo.ca/journals/JIS/VOL7/Haanpaa/haanpaa.html",
"locator": "Inline Python 3 computation executed on 2026-07-24"
},
"inline_source": "from collections import Counter\nimport hashlib\n\nP = 101\nEXPONENTS = [0, 1, 4, 10, 16, 18, 23, 29, 36, 50, 57, 63, 68, 70, 76, 82, 85, 86]\nEXPECTED_RESIDUES = [1, 2, 16, 14, 88, 49, 53, 59, 78, 100, 74, 90, 52, 6, 81, 33, 62, 23]\nEXPECTED_DIGEST = \"90143a42f6b43f9dde66574827f9954b8b90d7b9a43aa5d2d40d14e840c68ff0\"\n\nassert pow(2, 100, P) == 1\nassert pow(2, 50, P) != 1\nassert pow(2, 20, P) != 1\nassert len(EXPONENTS) == len(set(EXPONENTS)) == 18\nresidues = [pow(2, exponent, P) for exponent in EXPONENTS]\nassert residues == EXPECTED_RESIDUES\nassert len(set(residues)) == 18\nsum_counts = Counter()\nproduct_counts = Counter()\nfor i in range(18):\n for j in range(i + 1, 18):\n sum_counts[(EXPONENTS[i] + EXPONENTS[j]) % 100] += 1\n product_counts[(residues[i] * residues[j]) % P] += 1\nassert set(sum_counts) == set(range(100))\nassert set(product_counts) == set(range(1, P))\nassert sum(sum_counts.values()) == sum(product_counts.values()) == 153\nassert Counter(sum_counts.values()) == Counter({1: 70, 2: 15, 3: 12, 4: 2, 9: 1})\nsummary = (\n \"order=100;\"\n \"exponents=\" + \",\".join(map(str, EXPONENTS)) + \";\"\n \"residues=\" + \",\".join(map(str, residues)) + \";\"\n \"pairs=153;\"\n f\"sum_image={len(sum_counts)};product_image={len(product_counts)};\"\n f\"min_mult={min(sum_counts.values())};max_mult={max(sum_counts.values())}\"\n)\ndigest = hashlib.sha256(summary.encode()).hexdigest()\nassert digest == EXPECTED_DIGEST\nprint(summary)\nprint(\"sha256=\" + digest)\n",
"missing": [
"expected_output"
]
},
"formal_statement": null,
"source": {
"url": "https://cs.uwaterloo.ca/journals/JIS/VOL7/Haanpaa/haanpaa.html",
"locator": "Inline Python 3 computation executed on 2026-07-24"
},
"models": [],
"relations": [
{
"slug": "R220",
"title": "The minimum lies between 15 and 18",
"object_type": "claim",
"relation": "evidences",
"direction": "outgoing"
},
{
"slug": "distinct-product-basis-f101",
"title": "distinct product basis f101",
"object_type": "problem",
"relation": "recorded_for",
"direction": "outgoing"
}
]
}7Provenance
View source, identifiers, and projection details
- Project
- distinct-product-basis-f101
- Locator
- Inline Python 3 computation executed on 2026-07-24
- License
- CC0-1.0
- Contributors
- TheoremDB entry research, 2026-07-24
- Source
- cs.uwaterloo.ca ↗
- Public record
- R218
- Stable alias
- dpb101-artifact-eighteen-point-cover-check
- Projection
- Reproduction fields are derived from the immutable record.
A program, dataset, or output another agent can run or read.