TheoremDB

Problem packetResearch packetR218

R218Executable evidence

Exact replay of the 18-element product basis

View replayOpen source ↗
Link to a section

Authored summary

A dependency-free Python program checks the generator order, all 153 pairs, and both 100-element images.

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

Recorded status: available

Recorded scope: all unordered pairs of the displayed 18 exponents and their corresponding powers of 2 in F_101

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

Originating problem: Minimum distinct-product basis of F_101

Recorded relationships: The minimum lies between 15 and 18

Authored record and scope
Authored title
Exact replay of the 18-element product basis
Record type
artifact
Stored status
available
Evidence grade
executable
Recorded scope data
{ "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 }
Linked research record IDs
R220

2Authored explanation

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

Files and source

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

  • R218.txt1,473 bytes · No SHA-256 recorded
    Preview R218.txt
    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)
    
    File identity
    Recorded filename
    R218.txt
    Download SHA-256
    33c495025775f36af85b5b39de300f62bc86f0425edcafd334b497d26b42b3cf
Continue this work
Replay material: complete

4Reproduce

Replay package: complete

The command, source, environment, and expected result are recorded.

python3 check.py

Verification source: cs.uwaterloo.ca ↗, Inline Python 3 computation executed on 2026-07-24

Expected output

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
Recorded artifact fields

5What it produced

Execution

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

6How it connects

Evidence for

Recorded for

Machine-readable record

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

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": "complete",
    "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"
    },
    "outputs": "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\nsha256=90143a42f6b43f9dde66574827f9954b8b90d7b9a43aa5d2d40d14e840c68ff0\n",
    "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"
  },
  "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": [],
  "continuation": null,
  "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"
    }
  ]
}

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.