FAILURE MAP
← Case archive

FA-11496 / Static analysis soundness / Open access

Widening retains an escaping lower bound · case 01

Widening retains an escaping lower bound.

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

ROOT CAUSE

A loop interval widening handles growth only at its upper endpoint.

VERIFIED REPAIR

Drop each bound independently when the next interval expands beyond that old bound.

Unsuccessful approach: Dropping both bounds whenever either grows terminates but destroys stable-bound precision.

Case contract

Widen finite old and next integer intervals; return [lower,upper], with None representing an unbounded endpoint. Preserve each old bound unless that direction expands.

Why this case matters

A deterministic offline analysis model exposing a specific soundness or precision boundary; it does not implement a complete language analyzer.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(old, new):
    return [old[0],None if new[1]>old[1] else old[1]]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('lower expands alone',solve([0,N],[-N,N]),[None,N])
check('upper expands alone',solve([0,N],[0,N+1]),[0,None])
check('both expand',solve([0,N],[-1,N+1]),[None,None])
check('equal',solve([0,N],[0,N]),[0,N])
check('narrower',solve([-N,N],[0,0]),[-N,N])
check('singleton expands right',solve([N,N],[N,N+1]),[N,None])
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
lower expands alone[0, 1][None, 1]Failed
upper expands alone[0, None][0, None]Passed
both expand[0, None][None, None]Failed
equal[0, 1][0, 1]Passed
narrower[-1, 1][-1, 1]Passed
singleton expands right[1, None][1, None]Passed

SHA-256 / a959b02322edb1a0aa9c72b809b0de5cf71e8ebbcc0e221d03cd945083e54c9a

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(old, new):
    return [None,None] if new[0]<old[0] or new[1]>old[1] else list(old)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('lower expands alone',solve([0,N],[-N,N]),[None,N])
check('upper expands alone',solve([0,N],[0,N+1]),[0,None])
check('both expand',solve([0,N],[-1,N+1]),[None,None])
check('equal',solve([0,N],[0,N]),[0,N])
check('narrower',solve([-N,N],[0,0]),[-N,N])
check('singleton expands right',solve([N,N],[N,N+1]),[N,None])
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
lower expands alone[None, None][None, 1]Failed
upper expands alone[None, None][0, None]Failed
both expand[None, None][None, None]Passed
equal[0, 1][0, 1]Passed
narrower[-1, 1][-1, 1]Passed
singleton expands right[None, None][1, None]Failed

SHA-256 / 75f2fcd4a93df0740966be3e165accf338adbfeed6ab87b8fd965407a244ea8e

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(old, new):
    return [None if new[0]<old[0] else old[0],None if new[1]>old[1] else old[1]]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('lower expands alone',solve([0,N],[-N,N]),[None,N])
check('upper expands alone',solve([0,N],[0,N+1]),[0,None])
check('both expand',solve([0,N],[-1,N+1]),[None,None])
check('equal',solve([0,N],[0,N]),[0,N])
check('narrower',solve([-N,N],[0,0]),[-N,N])
check('singleton expands right',solve([N,N],[N,N+1]),[N,None])
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
lower expands alone[None, 1][None, 1]Passed
upper expands alone[0, None][0, None]Passed
both expand[None, None][None, None]Passed
equal[0, 1][0, 1]Passed
narrower[-1, 1][-1, 1]Passed
singleton expands right[1, None][1, None]Passed

SHA-256 / 2db15f6cd81db9f29979cfefdd54611a2e2e0f4a6869d6772405734fede27d77

Verification & scope

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

Case digest / 337115f29d9dc812141d17faa2a1b5c6eb9d1a1fc33cb7b39e23c912bd8d516c