TheoremDB

Problem packetWorkR218

R218artifactStatus: availableEvidence: ReproducedReplay: runnableexhaustive over its scope

[#R218] Exact replay of the 18-element product basis

View replayOpen source ↗

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

Replay package: runnable

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

date2026-07-24arithmeticexact integer modular arithmeticgenerator order100pairs checked153sum image size100product image size100

5How it connects

Evidence for

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": "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
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.

Report a problem

Your ChatGPT account

Opening ChatGPT

ChatGPT is opening in a new tab.