FA-15796 / Numerics / Open access
Singular hensel root tree: root tree target modulus · case 01
The exact singular hensel root tree result violates the stated contract at root tree target modulus.
ROOT CAUSE
The root tree target modulus step uses mod+p instead of mod*p.
VERIFIED REPAIR
Use mod*p at the root tree target modulus step.
Unsuccessful approach: The partial repair mod*p*p still violates the root tree target modulus invariant.
Case contract
Input [polynomial coefficients,p,k], p prime and k>=1; enumerate all roots modulo p^k, including singular roots.
Why this case matters
Exact discrete arithmetic with observable algorithmic state; no floating point approximation is used.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
import itertools
from fractions import Fraction
N = 1
observations = []
def solve(x):
coeff,p,k=x
roots=[r for r in range(p) if sum(c*r**i for i,c in enumerate(coeff))%p==0];mod=p
for _ in range(1,k):
nextmod=mod+p
out=[]
for r in roots:
for digit in range(p):
s=r+digit*mod
if sum(c*s**i for i,c in enumerate(coeff))%nextmod==0:out.append(s)
roots=sorted(set(out));mod=nextmod
return [roots,mod]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[([[0, 0, 1], 2, 3], [[0, 4], 8]), ([[0, 0, 1], 2, 2], [[0, 2], 4]), ([[0, 0, 1], 2, 1], [[0], 2]), ([[-2, 1, 1], 7, 4], [[1, 2399], 2401]), ([[0, 0, 1], 2, 4], [[0, 4, 8, 12], 16]), ([[0, 0, 1], 3, 1], [[0], 3]), ([[0, 0, 1], 3, 2], [[0, 3, 6], 9]), ([[0, 0, 1], 3, 3], [[0, 9, 18], 27])], [([[0, 0, 1], 2, 4], [[0, 4, 8, 12], 16]), ([[0, 0, 1], 3, 2], [[0, 3, 6], 9]), ([[0, 0, 1], 2, 1], [[0], 2]), ([[-2, 1, 1], 7, 4], [[1, 2399], 2401]), ([[-1, 0, 1], 2, 2], [[1, 3], 4]), ([[-1, 0, 1], 2, 3], [[1, 3, 5, 7], 8]), ([[-1, 0, 1], 2, 4], [[1, 7, 9, 15], 16]), ([[-1, 0, 1], 3, 1], [[1, 2], 3])], [([[0, 0, 1], 3, 2], [[0, 3, 6], 9]), ([[0, 0, 1], 5, 2], [[0, 5, 10, 15, 20], 25]), ([[0, 0, 1], 2, 1], [[0], 2]), ([[-2, 1, 1], 7, 4], [[1, 2399], 2401]), ([[0, 2, 1], 2, 3], [[0, 2, 4, 6], 8]), ([[0, 2, 1], 2, 4], [[0, 6, 8, 14], 16]), ([[0, 2, 1], 3, 1], [[0, 1], 3]), ([[0, 2, 1], 3, 2], [[0, 7], 9])], [([[0, 0, 1], 3, 3], [[0, 9, 18], 27]), ([[0, 0, 1], 7, 2], [[0, 7, 14, 21, 28, 35, 42], 49]), ([[0, 0, 1], 2, 1], [[0], 2]), ([[-2, 1, 1], 7, 4], [[1, 2399], 2401]), ([[-4, 0, 1], 2, 4], [[2, 6, 10, 14], 16]), ([[-4, 0, 1], 3, 1], [[1, 2], 3]), ([[-4, 0, 1], 3, 2], [[2, 7], 9]), ([[-4, 0, 1], 3, 3], [[2, 25], 27])], [([[0, 0, 1], 3, 4], [[0, 9, 18, 27, 36, 45, 54, 63, 72], 81]), ([[-1, 0, 1], 2, 2], [[1, 3], 4]), ([[0, 0, 1], 2, 1], [[0], 2]), ([[-2, 1, 1], 7, 4], [[1, 2399], 2401]), ([[0, 0, 0, 1], 3, 1], [[0], 3]), ([[0, 0, 0, 1], 3, 2], [[0, 3, 6], 9]), ([[0, 0, 0, 1], 3, 3], [[0, 3, 6, 9, 12, 15, 18, 21, 24], 27]), ([[0, 0, 0, 1], 3, 4], [[0, 9, 18, 27, 36, 45, 54, 63, 72], 81])]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("explicit oracle %d" % i, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| explicit oracle 0 | [[0, 6], 6] | [[0, 4], 8] | Failed |
| explicit oracle 1 | [[0, 2], 4] | [[0, 2], 4] | Passed |
| explicit oracle 2 | [[0], 2] | [[0], 2] | Passed |
| explicit oracle 3 | [[1, 22, 61, 82, 85, 106, 145, 166, 169, 190, 229, 250, 253], 28] | [[1, 2399], 2401] | Failed |
| explicit oracle 4 | [[0, 12], 8] | [[0, 4, 8, 12], 16] | Failed |
| explicit oracle 5 | [[0], 3] | [[0], 3] | Passed |
| explicit oracle 6 | [[0, 6], 6] | [[0, 3, 6], 9] | Failed |
| explicit oracle 7 | [[0, 6, 12, 18], 9] | [[0, 9, 18], 27] | Failed |
SHA-256 / 0ea2847ae0752d52c4f053ec041a85fceab0733c623ba71d748a451e0264c557
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
import itertools
from fractions import Fraction
N = 1
observations = []
def solve(x):
coeff,p,k=x
roots=[r for r in range(p) if sum(c*r**i for i,c in enumerate(coeff))%p==0];mod=p
for _ in range(1,k):
nextmod=mod*p*p
out=[]
for r in roots:
for digit in range(p):
s=r+digit*mod
if sum(c*s**i for i,c in enumerate(coeff))%nextmod==0:out.append(s)
roots=sorted(set(out));mod=nextmod
return [roots,mod]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[([[0, 0, 1], 2, 3], [[0, 4], 8]), ([[0, 0, 1], 2, 2], [[0, 2], 4]), ([[0, 0, 1], 2, 1], [[0], 2]), ([[-2, 1, 1], 7, 4], [[1, 2399], 2401]), ([[0, 0, 1], 2, 4], [[0, 4, 8, 12], 16]), ([[0, 0, 1], 3, 1], [[0], 3]), ([[0, 0, 1], 3, 2], [[0, 3, 6], 9]), ([[0, 0, 1], 3, 3], [[0, 9, 18], 27])], [([[0, 0, 1], 2, 4], [[0, 4, 8, 12], 16]), ([[0, 0, 1], 3, 2], [[0, 3, 6], 9]), ([[0, 0, 1], 2, 1], [[0], 2]), ([[-2, 1, 1], 7, 4], [[1, 2399], 2401]), ([[-1, 0, 1], 2, 2], [[1, 3], 4]), ([[-1, 0, 1], 2, 3], [[1, 3, 5, 7], 8]), ([[-1, 0, 1], 2, 4], [[1, 7, 9, 15], 16]), ([[-1, 0, 1], 3, 1], [[1, 2], 3])], [([[0, 0, 1], 3, 2], [[0, 3, 6], 9]), ([[0, 0, 1], 5, 2], [[0, 5, 10, 15, 20], 25]), ([[0, 0, 1], 2, 1], [[0], 2]), ([[-2, 1, 1], 7, 4], [[1, 2399], 2401]), ([[0, 2, 1], 2, 3], [[0, 2, 4, 6], 8]), ([[0, 2, 1], 2, 4], [[0, 6, 8, 14], 16]), ([[0, 2, 1], 3, 1], [[0, 1], 3]), ([[0, 2, 1], 3, 2], [[0, 7], 9])], [([[0, 0, 1], 3, 3], [[0, 9, 18], 27]), ([[0, 0, 1], 7, 2], [[0, 7, 14, 21, 28, 35, 42], 49]), ([[0, 0, 1], 2, 1], [[0], 2]), ([[-2, 1, 1], 7, 4], [[1, 2399], 2401]), ([[-4, 0, 1], 2, 4], [[2, 6, 10, 14], 16]), ([[-4, 0, 1], 3, 1], [[1, 2], 3]), ([[-4, 0, 1], 3, 2], [[2, 7], 9]), ([[-4, 0, 1], 3, 3], [[2, 25], 27])], [([[0, 0, 1], 3, 4], [[0, 9, 18, 27, 36, 45, 54, 63, 72], 81]), ([[-1, 0, 1], 2, 2], [[1, 3], 4]), ([[0, 0, 1], 2, 1], [[0], 2]), ([[-2, 1, 1], 7, 4], [[1, 2399], 2401]), ([[0, 0, 0, 1], 3, 1], [[0], 3]), ([[0, 0, 0, 1], 3, 2], [[0, 3, 6], 9]), ([[0, 0, 0, 1], 3, 3], [[0, 3, 6, 9, 12, 15, 18, 21, 24], 27]), ([[0, 0, 0, 1], 3, 4], [[0, 9, 18, 27, 36, 45, 54, 63, 72], 81])]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("explicit oracle %d" % i, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| explicit oracle 0 | [[0, 8], 32] | [[0, 4], 8] | Failed |
| explicit oracle 1 | [[0], 8] | [[0, 2], 4] | Failed |
| explicit oracle 2 | [[0], 2] | [[0], 2] | Passed |
| explicit oracle 3 | [[1], 823543] | [[1, 2399], 2401] | Failed |
| explicit oracle 4 | [[0, 32], 128] | [[0, 4, 8, 12], 16] | Failed |
| explicit oracle 5 | [[0], 3] | [[0], 3] | Passed |
| explicit oracle 6 | [[0], 27] | [[0, 3, 6], 9] | Failed |
| explicit oracle 7 | [[0, 27, 54], 243] | [[0, 9, 18], 27] | Failed |
SHA-256 / 8ed8b2fceac62c3f743d07052d8a419d845e7b15e622478a5afa6e9af92b76c0
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
import itertools
from fractions import Fraction
N = 1
observations = []
def solve(x):
coeff,p,k=x
roots=[r for r in range(p) if sum(c*r**i for i,c in enumerate(coeff))%p==0];mod=p
for _ in range(1,k):
nextmod=mod*p
out=[]
for r in roots:
for digit in range(p):
s=r+digit*mod
if sum(c*s**i for i,c in enumerate(coeff))%nextmod==0:out.append(s)
roots=sorted(set(out));mod=nextmod
return [roots,mod]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[([[0, 0, 1], 2, 3], [[0, 4], 8]), ([[0, 0, 1], 2, 2], [[0, 2], 4]), ([[0, 0, 1], 2, 1], [[0], 2]), ([[-2, 1, 1], 7, 4], [[1, 2399], 2401]), ([[0, 0, 1], 2, 4], [[0, 4, 8, 12], 16]), ([[0, 0, 1], 3, 1], [[0], 3]), ([[0, 0, 1], 3, 2], [[0, 3, 6], 9]), ([[0, 0, 1], 3, 3], [[0, 9, 18], 27])], [([[0, 0, 1], 2, 4], [[0, 4, 8, 12], 16]), ([[0, 0, 1], 3, 2], [[0, 3, 6], 9]), ([[0, 0, 1], 2, 1], [[0], 2]), ([[-2, 1, 1], 7, 4], [[1, 2399], 2401]), ([[-1, 0, 1], 2, 2], [[1, 3], 4]), ([[-1, 0, 1], 2, 3], [[1, 3, 5, 7], 8]), ([[-1, 0, 1], 2, 4], [[1, 7, 9, 15], 16]), ([[-1, 0, 1], 3, 1], [[1, 2], 3])], [([[0, 0, 1], 3, 2], [[0, 3, 6], 9]), ([[0, 0, 1], 5, 2], [[0, 5, 10, 15, 20], 25]), ([[0, 0, 1], 2, 1], [[0], 2]), ([[-2, 1, 1], 7, 4], [[1, 2399], 2401]), ([[0, 2, 1], 2, 3], [[0, 2, 4, 6], 8]), ([[0, 2, 1], 2, 4], [[0, 6, 8, 14], 16]), ([[0, 2, 1], 3, 1], [[0, 1], 3]), ([[0, 2, 1], 3, 2], [[0, 7], 9])], [([[0, 0, 1], 3, 3], [[0, 9, 18], 27]), ([[0, 0, 1], 7, 2], [[0, 7, 14, 21, 28, 35, 42], 49]), ([[0, 0, 1], 2, 1], [[0], 2]), ([[-2, 1, 1], 7, 4], [[1, 2399], 2401]), ([[-4, 0, 1], 2, 4], [[2, 6, 10, 14], 16]), ([[-4, 0, 1], 3, 1], [[1, 2], 3]), ([[-4, 0, 1], 3, 2], [[2, 7], 9]), ([[-4, 0, 1], 3, 3], [[2, 25], 27])], [([[0, 0, 1], 3, 4], [[0, 9, 18, 27, 36, 45, 54, 63, 72], 81]), ([[-1, 0, 1], 2, 2], [[1, 3], 4]), ([[0, 0, 1], 2, 1], [[0], 2]), ([[-2, 1, 1], 7, 4], [[1, 2399], 2401]), ([[0, 0, 0, 1], 3, 1], [[0], 3]), ([[0, 0, 0, 1], 3, 2], [[0, 3, 6], 9]), ([[0, 0, 0, 1], 3, 3], [[0, 3, 6, 9, 12, 15, 18, 21, 24], 27]), ([[0, 0, 0, 1], 3, 4], [[0, 9, 18, 27, 36, 45, 54, 63, 72], 81])]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("explicit oracle %d" % i, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| explicit oracle 0 | [[0, 4], 8] | [[0, 4], 8] | Passed |
| explicit oracle 1 | [[0, 2], 4] | [[0, 2], 4] | Passed |
| explicit oracle 2 | [[0], 2] | [[0], 2] | Passed |
| explicit oracle 3 | [[1, 2399], 2401] | [[1, 2399], 2401] | Passed |
| explicit oracle 4 | [[0, 4, 8, 12], 16] | [[0, 4, 8, 12], 16] | Passed |
| explicit oracle 5 | [[0], 3] | [[0], 3] | Passed |
| explicit oracle 6 | [[0, 3, 6], 9] | [[0, 3, 6], 9] | Passed |
| explicit oracle 7 | [[0, 9, 18], 27] | [[0, 9, 18], 27] | Passed |
SHA-256 / 5424249fe7f19db7bf52588142876de306a071ac7202481e2748c948b105ae3b
Verification & scope
A deterministic bounded teaching model. Inputs are restricted to the explicit contract; this is not a production algebra library. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:39:30.163048+00:00.
Case digest / cb04957d5205aea65c5e1b8c9d1e369f86459c6bf54bfd9b1ded60082421769d