FAILURE MAP
← Case archive

FA-14946 / Numerics / Open access

Primitive pythagorean triples: opposite parameter parity · case 01

The exact primitive pythagorean triples result violates the stated contract at opposite parameter parity.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The opposite parameter parity step uses m%2==0 instead of (m-n)%2==0.

VERIFIED REPAIR

Use (m-n)%2==0 at the opposite parameter parity step.

Unsuccessful approach: The partial repair n%2==0 still violates the opposite parameter parity invariant.

Case contract

Input bound L>=1; return lexicographically sorted [a,b,c] with 0<a<b<c<=L, coprime a,b,c and a^2+b^2=c^2.

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):
    L=x;out=[]
    for m in range(2,math.isqrt(L)+2):
     for n in range(1,m):
      if math.gcd(m,n)!=1:continue
      if m%2==0:continue
      a,b,c=m*m-n*n,2*m*n,m*m+n*n
      a,b=sorted((a,b))
      if c<=L:out.append([a,b,c])
    return sorted(out)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[(5, [[3, 4, 5]]), (10, [[3, 4, 5]]), (1, []), (180, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]), (2, []), (3, []), (4, []), (6, [[3, 4, 5]])], [(6, [[3, 4, 5]]), (13, [[3, 4, 5], [5, 12, 13]]), (1, []), (180, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]), (18, [[3, 4, 5], [5, 12, 13], [8, 15, 17]]), (19, [[3, 4, 5], [5, 12, 13], [8, 15, 17]]), (20, [[3, 4, 5], [5, 12, 13], [8, 15, 17]]), (21, [[3, 4, 5], [5, 12, 13], [8, 15, 17]])], [(7, [[3, 4, 5]]), (16, [[3, 4, 5], [5, 12, 13]]), (1, []), (180, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]), (35, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [20, 21, 29]]), (36, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [20, 21, 29]]), (37, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [12, 35, 37], [20, 21, 29]]), (38, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [12, 35, 37], [20, 21, 29]])], [(8, [[3, 4, 5]]), (19, [[3, 4, 5], [5, 12, 13], [8, 15, 17]]), (1, []), (180, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]), (52, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [12, 35, 37], [20, 21, 29]]), (53, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [12, 35, 37], [20, 21, 29], [28, 45, 53]]), (54, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [12, 35, 37], [20, 21, 29], [28, 45, 53]]), (55, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [12, 35, 37], [20, 21, 29], [28, 45, 53]])], [(9, [[3, 4, 5]]), (22, [[3, 4, 5], [5, 12, 13], [8, 15, 17]]), (1, []), (180, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]), (69, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [16, 63, 65], [20, 21, 29], [28, 45, 53], [33, 56, 65]]), (70, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [16, 63, 65], [20, 21, 29], [28, 45, 53], [33, 56, 65]]), (71, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [16, 63, 65], [20, 21, 29], [28, 45, 53], [33, 56, 65]]), (72, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [16, 63, 65], [20, 21, 29], [28, 45, 53], [33, 56, 65]])]]
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 fixtureActualExpectedOutcome
explicit oracle 0[][[3, 4, 5]]Failed
explicit oracle 1[[6, 8, 10]][[3, 4, 5]]Failed
explicit oracle 2[][]Passed
explicit oracle 3[[5, 12, 13], [6, 8, 10], [9, 40, 41], [10, 24, 26], [13, 84, 85], [14, 48, 50], [16, 30, 34], [17, 144, 145], [18, 80, 82], [20, 21, 29], [22, 120, 122], [24, 70, 74], [26, 168, 170], [28, 45, 53], [32, 126, 130], [33, 56, 65], [36, 77, 85], [40, 42, 58], [44, 117, 125], [52, 165, 173], [56, 90, 106], [65, 72, 97], [66, 112, 130], [72, 154, 170], [78, 160, 178], [85, 132, 157], [88, 105, 137], [96, 110, 146]][[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]Failed
explicit oracle 4[][]Passed
explicit oracle 5[][]Passed
explicit oracle 6[][]Passed
explicit oracle 7[][[3, 4, 5]]Failed

SHA-256 / c2350d67af25541e053b541794ea8d912a3c4cc03133f4a295381c64b97752c8

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):
    L=x;out=[]
    for m in range(2,math.isqrt(L)+2):
     for n in range(1,m):
      if math.gcd(m,n)!=1:continue
      if n%2==0:continue
      a,b,c=m*m-n*n,2*m*n,m*m+n*n
      a,b=sorted((a,b))
      if c<=L:out.append([a,b,c])
    return sorted(out)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[(5, [[3, 4, 5]]), (10, [[3, 4, 5]]), (1, []), (180, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]), (2, []), (3, []), (4, []), (6, [[3, 4, 5]])], [(6, [[3, 4, 5]]), (13, [[3, 4, 5], [5, 12, 13]]), (1, []), (180, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]), (18, [[3, 4, 5], [5, 12, 13], [8, 15, 17]]), (19, [[3, 4, 5], [5, 12, 13], [8, 15, 17]]), (20, [[3, 4, 5], [5, 12, 13], [8, 15, 17]]), (21, [[3, 4, 5], [5, 12, 13], [8, 15, 17]])], [(7, [[3, 4, 5]]), (16, [[3, 4, 5], [5, 12, 13]]), (1, []), (180, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]), (35, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [20, 21, 29]]), (36, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [20, 21, 29]]), (37, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [12, 35, 37], [20, 21, 29]]), (38, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [12, 35, 37], [20, 21, 29]])], [(8, [[3, 4, 5]]), (19, [[3, 4, 5], [5, 12, 13], [8, 15, 17]]), (1, []), (180, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]), (52, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [12, 35, 37], [20, 21, 29]]), (53, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [12, 35, 37], [20, 21, 29], [28, 45, 53]]), (54, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [12, 35, 37], [20, 21, 29], [28, 45, 53]]), (55, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [12, 35, 37], [20, 21, 29], [28, 45, 53]])], [(9, [[3, 4, 5]]), (22, [[3, 4, 5], [5, 12, 13], [8, 15, 17]]), (1, []), (180, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]), (69, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [16, 63, 65], [20, 21, 29], [28, 45, 53], [33, 56, 65]]), (70, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [16, 63, 65], [20, 21, 29], [28, 45, 53], [33, 56, 65]]), (71, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [16, 63, 65], [20, 21, 29], [28, 45, 53], [33, 56, 65]]), (72, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [16, 63, 65], [20, 21, 29], [28, 45, 53], [33, 56, 65]])]]
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 fixtureActualExpectedOutcome
explicit oracle 0[[3, 4, 5]][[3, 4, 5]]Passed
explicit oracle 1[[3, 4, 5], [6, 8, 10]][[3, 4, 5]]Failed
explicit oracle 2[][]Passed
explicit oracle 3[[3, 4, 5], [6, 8, 10], [7, 24, 25], [8, 15, 17], [10, 24, 26], [11, 60, 61], [12, 35, 37], [14, 48, 50], [15, 112, 113], [16, 30, 34], [16, 63, 65], [18, 80, 82], [20, 99, 101], [22, 120, 122], [24, 70, 74], [24, 143, 145], [26, 168, 170], [32, 126, 130], [39, 80, 89], [40, 42, 58], [48, 55, 73], [51, 140, 149], [56, 90, 106], [60, 91, 109], [66, 112, 130], [72, 154, 170], [78, 160, 178], [96, 110, 146], [119, 120, 169]][[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]Failed
explicit oracle 4[][]Passed
explicit oracle 5[][]Passed
explicit oracle 6[][]Passed
explicit oracle 7[[3, 4, 5]][[3, 4, 5]]Passed

SHA-256 / 4b9fdd9aba4e1cbb4ef684c604208b282bfd281cc0fa091e2e53dc64c6c24146

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):
    L=x;out=[]
    for m in range(2,math.isqrt(L)+2):
     for n in range(1,m):
      if math.gcd(m,n)!=1:continue
      if (m-n)%2==0:continue
      a,b,c=m*m-n*n,2*m*n,m*m+n*n
      a,b=sorted((a,b))
      if c<=L:out.append([a,b,c])
    return sorted(out)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[(5, [[3, 4, 5]]), (10, [[3, 4, 5]]), (1, []), (180, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]), (2, []), (3, []), (4, []), (6, [[3, 4, 5]])], [(6, [[3, 4, 5]]), (13, [[3, 4, 5], [5, 12, 13]]), (1, []), (180, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]), (18, [[3, 4, 5], [5, 12, 13], [8, 15, 17]]), (19, [[3, 4, 5], [5, 12, 13], [8, 15, 17]]), (20, [[3, 4, 5], [5, 12, 13], [8, 15, 17]]), (21, [[3, 4, 5], [5, 12, 13], [8, 15, 17]])], [(7, [[3, 4, 5]]), (16, [[3, 4, 5], [5, 12, 13]]), (1, []), (180, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]), (35, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [20, 21, 29]]), (36, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [20, 21, 29]]), (37, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [12, 35, 37], [20, 21, 29]]), (38, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [12, 35, 37], [20, 21, 29]])], [(8, [[3, 4, 5]]), (19, [[3, 4, 5], [5, 12, 13], [8, 15, 17]]), (1, []), (180, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]), (52, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [12, 35, 37], [20, 21, 29]]), (53, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [12, 35, 37], [20, 21, 29], [28, 45, 53]]), (54, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [12, 35, 37], [20, 21, 29], [28, 45, 53]]), (55, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [12, 35, 37], [20, 21, 29], [28, 45, 53]])], [(9, [[3, 4, 5]]), (22, [[3, 4, 5], [5, 12, 13], [8, 15, 17]]), (1, []), (180, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]), (69, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [16, 63, 65], [20, 21, 29], [28, 45, 53], [33, 56, 65]]), (70, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [16, 63, 65], [20, 21, 29], [28, 45, 53], [33, 56, 65]]), (71, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [16, 63, 65], [20, 21, 29], [28, 45, 53], [33, 56, 65]]), (72, [[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [16, 63, 65], [20, 21, 29], [28, 45, 53], [33, 56, 65]])]]
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 fixtureActualExpectedOutcome
explicit oracle 0[[3, 4, 5]][[3, 4, 5]]Passed
explicit oracle 1[[3, 4, 5]][[3, 4, 5]]Passed
explicit oracle 2[][]Passed
explicit oracle 3[[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]][[3, 4, 5], [5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [11, 60, 61], [12, 35, 37], [13, 84, 85], [15, 112, 113], [16, 63, 65], [17, 144, 145], [20, 21, 29], [20, 99, 101], [24, 143, 145], [28, 45, 53], [33, 56, 65], [36, 77, 85], [39, 80, 89], [44, 117, 125], [48, 55, 73], [51, 140, 149], [52, 165, 173], [60, 91, 109], [65, 72, 97], [85, 132, 157], [88, 105, 137], [119, 120, 169]]Passed
explicit oracle 4[][]Passed
explicit oracle 5[][]Passed
explicit oracle 6[][]Passed
explicit oracle 7[[3, 4, 5]][[3, 4, 5]]Passed

SHA-256 / 5e2e1d25f369da84f74a4b5305fbf20423e1a01a5b0a649ace81ce67085e07b1

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:21.928658+00:00.

Case digest / f2beea15d70ab8b6fbfd9bc9d4df9cf062aa581984e2cae9326197e6ae082f2f