TheoremDB

Problem packetWorkR526

R526artifactStatus: availableEvidence: ReproducedReplay: completeexhaustive over its scope

[#R526] Exact affine-orbit replay through weight nineteen

View replay

1Summary

A deterministic Python, SymPy, and Z3 program reconstructs the 48 by 105 cyclotomic matrix and exhaustively enumerates the seven minimal affine-Galois orbits through weight 19.

The program reduces every monomial \(X^s\), for \(0\leq s<105\), modulo \(\Phi_{105}\) over the integers. A subset vanishes exactly when its 0-1 incidence vector lies in the kernel of the resulting 48 by 105 matrix. Translation lets the solver impose \(x_0=1\). At each weight, constraints exclude every previously found lower-weight minimal subset. Every new solution is canonicalized under all 5,040 affine maps, and every normalized image in that orbit is blocked. UNSAT after orbit blocking proves completeness at that weight. A Gray-code scan checks every proper nonempty subset of each representative. The output is deterministic and records the matrix digest, ranks, representatives, orbit sizes, stabilizers, and proper-subset checks.

Reproduced evidence. Recorded scope: exact replay of all distinct inclusion-minimal vanishing subsets of the 105th roots, modulo the affine-Galois action, at weights 1 through 19.

2Reproduce

Replay package: complete

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

python3 minimal105_replay.py
Entry point
Join source_lines with LF characters, append a final LF, save as minimal105_replay.py, and execute it
Runtime
CPython 3.9.6 with SymPy 1.14.0 and Z3 5.0.0
Dependencies
[ { "name": "CPython", "version": "3.9.6", "license": "Python-2.0" }, { "name": "SymPy", "version": "1.14.0", "license": "BSD-3-Clause" }, { "name": "Z3", "version": "5.0.0", "license": "MIT" } ]
Recorded runtime
449.95

Verification source: Inline deterministic replay prepared and executed on 2026-07-28 UTC

Expected output

{
  "source_sha256": "4104065977f4237e2ff98fb326d3bc2ee04586e825d70806c853c7d6d8d4d882",
  "stdout_sha256": "4e363e45bcbdd25eb06937f3a32609148314503f4443c345b50b7b481e0d0ccb",
  "replay_count": 2,
  "replays_byte_identical": true,
  "matrix_sha256": "669ac026c32d1396ec85f4a7348a848918221d9a9c19598428011eefcfcc2744",
  "matrix_shape": [
    48,
    105
  ],
  "matrix_rank": 48,
  "affine_group_order": 5040,
  "weights_checked": [
    1,
    19
  ],
  "orbit_count_by_weight": {
    "3": 1,
    "5": 1,
    "7": 1,
    "14": 1,
    "16": 1,
    "18": 2
  },
  "all_other_checked_weights_have_zero_orbits": true
}

3Source code

View source code
Source code
#!/usr/bin/env python3
import hashlib
import json
import math

import sympy as sp
import z3

N = 105
X = sp.symbols("x")
PHI = sp.Poly(sp.cyclotomic_poly(N, X), X, domain=sp.ZZ)
D = PHI.degree()
COLS = []
for exponent in range(N):
    remainder = sp.Poly(X**exponent, X, domain=sp.ZZ).rem(PHI)
    COLS.append(tuple(int(remainder.nth(i)) for i in range(D)))
UNITS = tuple(u for u in range(N) if math.gcd(u, N) == 1)


def vector_sum(subset):
    return tuple(sum(COLS[s][row] for s in subset) for row in range(D))


def image(subset, translation, unit):
    return tuple(sorted((translation + unit * s) % N for s in subset))


def orbit(subset):
    return {
        image(subset, translation, unit)
        for translation in range(N)
        for unit in UNITS
    }


def canonical(subset):
    return min(orbit(subset))


def proper_subset_check(subset):
    current = [0] * D
    previous_gray = 0
    full_mask = (1 << len(subset)) - 1
    for step in range(1, 1 << len(subset)):
        gray = step ^ (step >> 1)
        changed = gray ^ previous_gray
        position = changed.bit_length() - 1
        sign = 1 if gray & changed else -1
        for row, value in enumerate(COLS[subset[position]]):
            current[row] += sign * value
        if gray != full_mask and all(value == 0 for value in current):
            return False
        previous_gray = gray
    return True


BITS = [z3.Bool(f"x_{i}") for i in range(N)]
BASE = [
    z3.Sum([z3.If(BITS[col], COLS[col][row], 0) for col in range(N)]) == 0
    for row in range(D)
]
KNOWN_MINIMAL = set()
ROWS = []
for weight in range(1, 20):
    solver = z3.Solver()
    solver.set(random_seed=0)
    solver.add(BASE)
    solver.add(BITS[0])
    solver.add(z3.Sum([z3.If(bit, 1, 0) for bit in BITS]) == weight)
    for lower in sorted(KNOWN_MINIMAL):
        solver.add(z3.Or([z3.Not(BITS[i]) for i in lower]))
    representatives = set()
    while solver.check() == z3.sat:
        model = solver.model()
        subset = tuple(
            i for i, bit in enumerate(BITS) if z3.is_true(model.eval(bit))
        )
        assert vector_sum(subset) == (0,) * D
        representative = canonical(subset)
        representatives.add(representative)
        for normalized in sorted(item for item in orbit(representative) if 0 in item):
            solver.add(
                z3.Or(
                    [
                        bit != z3.BoolVal(i in normalized)
                        for i, bit in enumerate(BITS)
                    ]
                )
            )
    assert solver.check() == z3.unsat
    for representative in representatives:
        KNOWN_MINIMAL.update(orbit(representative))
    ROWS.append(
        {
            "weight": weight,
            "representatives": [
                {
                    "subset": list(representative),
                    "orbit_size": len(orbit(representative)),
                    "stabilizer_size": 5040 // len(orbit(representative)),
                    "proper_nonempty_subsets_checked": (1 << weight) - 2,
                    "proper_subset_check": proper_subset_check(representative),
                }
                for representative in sorted(representatives)
            ],
        }
    )

matrix_encoding = json.dumps(COLS, separators=(",", ":")).encode()
payload = {
    "schema": "minimal105-exhaustive-replay-v1",
    "environment": {
        "sympy": sp.__version__,
        "z3": z3.get_version_string(),
    },
    "cyclotomic_degree": D,
    "matrix_shape": [D, N],
    "matrix_rank": sp.Matrix(D, N, lambda row, col: COLS[col][row]).rank(),
    "matrix_sha256": hashlib.sha256(matrix_encoding).hexdigest(),
    "affine_group_order": N * len(UNITS),
    "weights": ROWS,
}
print(json.dumps(payload, sort_keys=True, separators=(",", ":")))

4What it produced

Time bound
720 seconds wall clock
Memory bound
2 GiB resident memory
Processor
Apple M4 arm64
Processor bound
one CPython process with no requested parallel solver workers
Storage bound
64 MiB for source and standard output; no disk-backed search state
Network requirements
none
Randomness
none; orbit enumeration and solver queries are deterministic
Arithmetic
exact integer polynomial reduction and Boolean satisfiability; no floating-point arithmetic
Source license
CC0-1.0
Stopping rule
Check every weight from 1 through 19, blocking each complete affine-Galois orbit until the solver returns UNSAT at that weight.
Execution date
2026-07-28
Arithmetic
exact integer polynomial remainders and Boolean satisfiability
Randomness
Z3 random_seed=0; no randomized sampling
Network required
no
Processor
Apple M4, arm64
Maximum resident set size bytes
145,506,304
Second replay runtime
10 minutes
Second replay maximum resident set size bytes
137,510,912
Through eighteen source sha256
cc20e6e804dabb18e692e44288ece1504108a08a5a7040a947af0c33cbf3f699
Through eighteen repeated stdout sha256
15dc69e261089d692c84a961308548874a5e002ffca5f8df488fbd29cb02fa62

Artifact storage bytes

source file3,787stdout file1,973source plus stdout5,760

5How it connects

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": "R526",
  "content_hash": null,
  "slug": "minimal105-artifact-exhaustive-replay-through-nineteen",
  "type": "artifact",
  "title": "Exact affine-orbit replay through weight nineteen",
  "summary": "A deterministic Python, SymPy, and Z3 program reconstructs the 48 by 105 cyclotomic matrix and exhaustively enumerates the seven minimal affine-Galois orbits through weight 19.",
  "relevance": "For Minimal vanishing sums of distinct 105th roots, record minimal105-artifact-exhaustive-replay-through-nineteen (“Exact affine-orbit replay through weight nineteen”) supplies evidence or a replay used to check the packet. The record states: A deterministic Python, SymPy, and Z3 program reconstructs the 48 by 105 cyclotomic matrix and exhaustively enumerates the seven minimal affine-Galois orbits through weight 19.",
  "relevance_source": "recorded",
  "body": "The program reduces every monomial \\(X^s\\), for \\(0\\leq s<105\\), modulo \\(\\Phi_{105}\\) over the integers. A subset vanishes exactly when its 0-1 incidence vector lies in the kernel of the resulting 48 by 105 matrix. Translation lets the solver impose \\(x_0=1\\). At each weight, constraints exclude every previously found lower-weight minimal subset. Every new solution is canonicalized under all 5,040 affine maps, and every normalized image in that orbit is blocked. UNSAT after orbit blocking proves completeness at that weight. A Gray-code scan checks every proper nonempty subset of each representative. The output is deterministic and records the matrix digest, ranks, representatives, orbit sizes, stabilizers, and proper-subset checks.",
  "status": "available",
  "evidence_grade": "executable",
  "scope": {
    "kind": "bounded",
    "statement": "exact replay of all distinct inclusion-minimal vanishing subsets of the 105th roots, modulo the affine-Galois action, at weights 1 through 19",
    "bounds": {
      "conductor": {
        "min": 105,
        "max": 105
      },
      "weight": {
        "min": 1,
        "max": 19
      }
    },
    "exhaustive": true
  },
  "reproduction": {
    "schema": "theoremdb-reproduction-v1",
    "readiness": "complete",
    "kind": "inline_python_exact_enumerator",
    "command": "python3 minimal105_replay.py",
    "entrypoint": "Join source_lines with LF characters, append a final LF, save as minimal105_replay.py, and execute it",
    "runtime": "CPython 3.9.6 with SymPy 1.14.0 and Z3 5.0.0",
    "citation": {
      "locator": "Inline deterministic replay prepared and executed on 2026-07-28 UTC"
    },
    "dependencies": [
      {
        "name": "CPython",
        "version": "3.9.6",
        "license": "Python-2.0"
      },
      {
        "name": "SymPy",
        "version": "1.14.0",
        "license": "BSD-3-Clause"
      },
      {
        "name": "Z3",
        "version": "5.0.0",
        "license": "MIT"
      }
    ],
    "outputs": {
      "source_sha256": "4104065977f4237e2ff98fb326d3bc2ee04586e825d70806c853c7d6d8d4d882",
      "stdout_sha256": "4e363e45bcbdd25eb06937f3a32609148314503f4443c345b50b7b481e0d0ccb",
      "replay_count": 2,
      "replays_byte_identical": true,
      "matrix_sha256": "669ac026c32d1396ec85f4a7348a848918221d9a9c19598428011eefcfcc2744",
      "matrix_shape": [
        48,
        105
      ],
      "matrix_rank": 48,
      "affine_group_order": 5040,
      "weights_checked": [
        1,
        19
      ],
      "orbit_count_by_weight": {
        "3": 1,
        "5": 1,
        "7": 1,
        "14": 1,
        "16": 1,
        "18": 2
      },
      "all_other_checked_weights_have_zero_orbits": true
    },
    "runtime_seconds": 449.95,
    "inline_source": [
      "#!/usr/bin/env python3",
      "import hashlib",
      "import json",
      "import math",
      "",
      "import sympy as sp",
      "import z3",
      "",
      "N = 105",
      "X = sp.symbols(\"x\")",
      "PHI = sp.Poly(sp.cyclotomic_poly(N, X), X, domain=sp.ZZ)",
      "D = PHI.degree()",
      "COLS = []",
      "for exponent in range(N):",
      "    remainder = sp.Poly(X**exponent, X, domain=sp.ZZ).rem(PHI)",
      "    COLS.append(tuple(int(remainder.nth(i)) for i in range(D)))",
      "UNITS = tuple(u for u in range(N) if math.gcd(u, N) == 1)",
      "",
      "",
      "def vector_sum(subset):",
      "    return tuple(sum(COLS[s][row] for s in subset) for row in range(D))",
      "",
      "",
      "def image(subset, translation, unit):",
      "    return tuple(sorted((translation + unit * s) % N for s in subset))",
      "",
      "",
      "def orbit(subset):",
      "    return {",
      "        image(subset, translation, unit)",
      "        for translation in range(N)",
      "        for unit in UNITS",
      "    }",
      "",
      "",
      "def canonical(subset):",
      "    return min(orbit(subset))",
      "",
      "",
      "def proper_subset_check(subset):",
      "    current = [0] * D",
      "    previous_gray = 0",
      "    full_mask = (1 << len(subset)) - 1",
      "    for step in range(1, 1 << len(subset)):",
      "        gray = step ^ (step >> 1)",
      "        changed = gray ^ previous_gray",
      "        position = changed.bit_length() - 1",
      "        sign = 1 if gray & changed else -1",
      "        for row, value in enumerate(COLS[subset[position]]):",
      "            current[row] += sign * value",
      "        if gray != full_mask and all(value == 0 for value in current):",
      "            return False",
      "        previous_gray = gray",
      "    return True",
      "",
      "",
      "BITS = [z3.Bool(f\"x_{i}\") for i in range(N)]",
      "BASE = [",
      "    z3.Sum([z3.If(BITS[col], COLS[col][row], 0) for col in range(N)]) == 0",
      "    for row in range(D)",
      "]",
      "KNOWN_MINIMAL = set()",
      "ROWS = []",
      "for weight in range(1, 20):",
      "    solver = z3.Solver()",
      "    solver.set(random_seed=0)",
      "    solver.add(BASE)",
      "    solver.add(BITS[0])",
      "    solver.add(z3.Sum([z3.If(bit, 1, 0) for bit in BITS]) == weight)",
      "    for lower in sorted(KNOWN_MINIMAL):",
      "        solver.add(z3.Or([z3.Not(BITS[i]) for i in lower]))",
      "    representatives = set()",
      "    while solver.check() == z3.sat:",
      "        model = solver.model()",
      "        subset = tuple(",
      "            i for i, bit in enumerate(BITS) if z3.is_true(model.eval(bit))",
      "        )",
      "        assert vector_sum(subset) == (0,) * D",
      "        representative = canonical(subset)",
      "        representatives.add(representative)",
      "        for normalized in sorted(item for item in orbit(representative) if 0 in item):",
      "            solver.add(",
      "                z3.Or(",
      "                    [",
      "                        bit != z3.BoolVal(i in normalized)",
      "                        for i, bit in enumerate(BITS)",
      "                    ]",
      "                )",
      "            )",
      "    assert solver.check() == z3.unsat",
      "    for representative in representatives:",
      "        KNOWN_MINIMAL.update(orbit(representative))",
      "    ROWS.append(",
      "        {",
      "            \"weight\": weight,",
      "            \"representatives\": [",
      "                {",
      "                    \"subset\": list(representative),",
      "                    \"orbit_size\": len(orbit(representative)),",
      "                    \"stabilizer_size\": 5040 // len(orbit(representative)),",
      "                    \"proper_nonempty_subsets_checked\": (1 << weight) - 2,",
      "                    \"proper_subset_check\": proper_subset_check(representative),",
      "                }",
      "                for representative in sorted(representatives)",
      "            ],",
      "        }",
      "    )",
      "",
      "matrix_encoding = json.dumps(COLS, separators=(\",\", \":\")).encode()",
      "payload = {",
      "    \"schema\": \"minimal105-exhaustive-replay-v1\",",
      "    \"environment\": {",
      "        \"sympy\": sp.__version__,",
      "        \"z3\": z3.get_version_string(),",
      "    },",
      "    \"cyclotomic_degree\": D,",
      "    \"matrix_shape\": [D, N],",
      "    \"matrix_rank\": sp.Matrix(D, N, lambda row, col: COLS[col][row]).rank(),",
      "    \"matrix_sha256\": hashlib.sha256(matrix_encoding).hexdigest(),",
      "    \"affine_group_order\": N * len(UNITS),",
      "    \"weights\": ROWS,",
      "}",
      "print(json.dumps(payload, sort_keys=True, separators=(\",\", \":\")))"
    ]
  },
  "formal_statement": null,
  "source": {
    "url": null,
    "locator": "Inline deterministic replay prepared and executed on 2026-07-28 UTC"
  },
  "models": [],
  "relations": [
    {
      "slug": "R531",
      "title": "There are seven affine-Galois orbits through weight nineteen",
      "object_type": "claim",
      "relation": "evidences",
      "direction": "outgoing"
    },
    {
      "slug": "R527",
      "title": "Enumerate exact affine orbits through weight nineteen",
      "object_type": "attempt",
      "relation": "uses",
      "direction": "incoming"
    },
    {
      "slug": "R528",
      "title": "Extend the exact sequential search to weight twenty",
      "object_type": "attempt",
      "relation": "uses",
      "direction": "incoming"
    },
    {
      "slug": "minimal-vanishing-105th-root-sums",
      "title": "minimal vanishing 105th root sums",
      "object_type": "problem",
      "relation": "recorded_for",
      "direction": "outgoing"
    }
  ]
}

7Provenance

View source, identifiers, and projection details
Project
minimal-vanishing-105th-root-sums-research
Locator
Inline deterministic replay prepared and executed on 2026-07-28 UTC
License
CC0-1.0
Public record
R526
Stable alias
minimal105-artifact-exhaustive-replay-through-nineteen
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.