FA-14556 / Numerics / Open access
Calkin wilf successors: next rational denominator · case 01
The exact calkin wilf successors result violates the stated contract at next rational denominator.
ROOT CAUSE
The next rational denominator step uses (a+1)*q-p instead of (2*a+1)*q-p.
VERIFIED REPAIR
Use (2*a+1)*q-p at the next rational denominator step.
Unsuccessful approach: The partial repair (2*a+1)*q+p still violates the next rational denominator invariant.
Case contract
Input positive count k<=50; return first k reduced positive rationals in Calkin-Wilf breadth-first order.
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):
p,q=1,1
out=[]
for _ in range(x):
out.append([p,q])
if q==0:return None
a=p//q
den=(a+1)*q-p
p,q=q,den
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[(2, [[1, 1], [1, 2]]), (1, [[1, 1]]), (50, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]]), (3, [[1, 1], [1, 2], [2, 1]]), (4, [[1, 1], [1, 2], [2, 1], [1, 3]]), (5, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2]]), (6, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3]]), (7, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1]])], [(3, [[1, 1], [1, 2], [2, 1]]), (5, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2]]), (1, [[1, 1]]), (50, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]]), (18, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7]]), (19, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3]]), (20, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8]]), (21, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5]])], [(4, [[1, 1], [1, 2], [2, 1], [1, 3]]), (8, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4]]), (1, [[1, 1]]), (50, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]]), (35, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4]]), (36, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11]]), (37, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7]]), (38, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10]])], [(5, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2]]), (11, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2]]), (1, [[1, 1]]), (50, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]]), (2, [[1, 1], [1, 2]]), (3, [[1, 1], [1, 2], [2, 1]]), (4, [[1, 1], [1, 2], [2, 1], [1, 3]]), (6, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3]])], [(6, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3]]), (14, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4]]), (1, [[1, 1]]), (50, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]]), (19, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3]]), (20, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8]]), (21, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5]]), (22, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7]])]]
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 | [[1, 1], [1, 1]] | [[1, 1], [1, 2]] | Failed |
| explicit oracle 1 | [[1, 1]] | [[1, 1]] | Passed |
| explicit oracle 2 | [[1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1]] | [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]] | Failed |
| explicit oracle 3 | [[1, 1], [1, 1], [1, 1]] | [[1, 1], [1, 2], [2, 1]] | Failed |
| explicit oracle 4 | [[1, 1], [1, 1], [1, 1], [1, 1]] | [[1, 1], [1, 2], [2, 1], [1, 3]] | Failed |
| explicit oracle 5 | [[1, 1], [1, 1], [1, 1], [1, 1], [1, 1]] | [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2]] | Failed |
| explicit oracle 6 | [[1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1]] | [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3]] | Failed |
| explicit oracle 7 | [[1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1]] | [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1]] | Failed |
SHA-256 / 14e640100bc0451701679686d00f26def1ef9f4c6c731cc4cadf0cde94ac0024
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):
p,q=1,1
out=[]
for _ in range(x):
out.append([p,q])
if q==0:return None
a=p//q
den=(2*a+1)*q+p
p,q=q,den
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[(2, [[1, 1], [1, 2]]), (1, [[1, 1]]), (50, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]]), (3, [[1, 1], [1, 2], [2, 1]]), (4, [[1, 1], [1, 2], [2, 1], [1, 3]]), (5, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2]]), (6, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3]]), (7, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1]])], [(3, [[1, 1], [1, 2], [2, 1]]), (5, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2]]), (1, [[1, 1]]), (50, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]]), (18, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7]]), (19, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3]]), (20, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8]]), (21, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5]])], [(4, [[1, 1], [1, 2], [2, 1], [1, 3]]), (8, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4]]), (1, [[1, 1]]), (50, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]]), (35, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4]]), (36, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11]]), (37, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7]]), (38, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10]])], [(5, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2]]), (11, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2]]), (1, [[1, 1]]), (50, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]]), (2, [[1, 1], [1, 2]]), (3, [[1, 1], [1, 2], [2, 1]]), (4, [[1, 1], [1, 2], [2, 1], [1, 3]]), (6, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3]])], [(6, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3]]), (14, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4]]), (1, [[1, 1]]), (50, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]]), (19, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3]]), (20, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8]]), (21, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5]]), (22, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7]])]]
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 | [[1, 1], [1, 4]] | [[1, 1], [1, 2]] | Failed |
| explicit oracle 1 | [[1, 1]] | [[1, 1]] | Passed |
| explicit oracle 2 | [[1, 1], [1, 4], [4, 5], [5, 9], [9, 14], [14, 23], [23, 37], [37, 60], [60, 97], [97, 157], [157, 254], [254, 411], [411, 665], [665, 1076], [1076, 1741], [1741, 2817], [2817, 4558], [4558, 7375], [7375, 11933], [11933, 19308], [19308, 31241], [31241, 50549], [50549, 81790], [81790, 132339], [132339, 214129], [214129, 346468], [346468, 560597], [560597, 907065], [907065, 1467662], [1467662, 2374727], [2374727, 3842389], [3842389, 6217116], [6217116, 10059505], [10059505, 16276621], [16276621, 26336126], [26336126, 42612747], [42612747, 68948873], [68948873, 111561620], [111561620, 180510493], [180510493, 292072113], [292072113, 472582606], [472582606, 764654719], [764654719, 1237237325], [1237237325, 2001892044], [2001892044, 3239129369], [3239129369, 5241021413], [5241021413, 8480150782], [8480150782, 13721172195], [13721172195, 22201322977], [22201322977, 35922495172]] | [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]] | Failed |
| explicit oracle 3 | [[1, 1], [1, 4], [4, 5]] | [[1, 1], [1, 2], [2, 1]] | Failed |
| explicit oracle 4 | [[1, 1], [1, 4], [4, 5], [5, 9]] | [[1, 1], [1, 2], [2, 1], [1, 3]] | Failed |
| explicit oracle 5 | [[1, 1], [1, 4], [4, 5], [5, 9], [9, 14]] | [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2]] | Failed |
| explicit oracle 6 | [[1, 1], [1, 4], [4, 5], [5, 9], [9, 14], [14, 23]] | [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3]] | Failed |
| explicit oracle 7 | [[1, 1], [1, 4], [4, 5], [5, 9], [9, 14], [14, 23], [23, 37]] | [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1]] | Failed |
SHA-256 / 9d6d1ea0ab6c3e2a2d70d6947019d484bf8207eeb5b239466d4981b3d79263dd
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):
p,q=1,1
out=[]
for _ in range(x):
out.append([p,q])
if q==0:return None
a=p//q
den=(2*a+1)*q-p
p,q=q,den
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[(2, [[1, 1], [1, 2]]), (1, [[1, 1]]), (50, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]]), (3, [[1, 1], [1, 2], [2, 1]]), (4, [[1, 1], [1, 2], [2, 1], [1, 3]]), (5, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2]]), (6, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3]]), (7, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1]])], [(3, [[1, 1], [1, 2], [2, 1]]), (5, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2]]), (1, [[1, 1]]), (50, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]]), (18, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7]]), (19, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3]]), (20, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8]]), (21, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5]])], [(4, [[1, 1], [1, 2], [2, 1], [1, 3]]), (8, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4]]), (1, [[1, 1]]), (50, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]]), (35, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4]]), (36, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11]]), (37, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7]]), (38, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10]])], [(5, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2]]), (11, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2]]), (1, [[1, 1]]), (50, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]]), (2, [[1, 1], [1, 2]]), (3, [[1, 1], [1, 2], [2, 1]]), (4, [[1, 1], [1, 2], [2, 1], [1, 3]]), (6, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3]])], [(6, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3]]), (14, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4]]), (1, [[1, 1]]), (50, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]]), (19, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3]]), (20, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8]]), (21, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5]]), (22, [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7]])]]
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 | [[1, 1], [1, 2]] | [[1, 1], [1, 2]] | Passed |
| explicit oracle 1 | [[1, 1]] | [[1, 1]] | Passed |
| explicit oracle 2 | [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]] | [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1], [1, 4], [4, 3], [3, 5], [5, 2], [2, 5], [5, 3], [3, 4], [4, 1], [1, 5], [5, 4], [4, 7], [7, 3], [3, 8], [8, 5], [5, 7], [7, 2], [2, 7], [7, 5], [5, 8], [8, 3], [3, 7], [7, 4], [4, 5], [5, 1], [1, 6], [6, 5], [5, 9], [9, 4], [4, 11], [11, 7], [7, 10], [10, 3], [3, 11], [11, 8], [8, 13], [13, 5], [5, 12], [12, 7], [7, 9], [9, 2], [2, 9], [9, 7], [7, 12]] | Passed |
| explicit oracle 3 | [[1, 1], [1, 2], [2, 1]] | [[1, 1], [1, 2], [2, 1]] | Passed |
| explicit oracle 4 | [[1, 1], [1, 2], [2, 1], [1, 3]] | [[1, 1], [1, 2], [2, 1], [1, 3]] | Passed |
| explicit oracle 5 | [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2]] | [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2]] | Passed |
| explicit oracle 6 | [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3]] | [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3]] | Passed |
| explicit oracle 7 | [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1]] | [[1, 1], [1, 2], [2, 1], [1, 3], [3, 2], [2, 3], [3, 1]] | Passed |
SHA-256 / 6a8d326cd09756f6f2e37630cfb7a5c8daff307613c3e2207a707fa1bdf91632
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:17.968138+00:00.
Case digest / 530a27a8eea42070ff2f28963d24927b967b6d0a0451386f97c62f50ec0a80e5