FA-11496 / Static analysis soundness / Open access
Widening retains an escaping lower bound · case 01
Widening retains an escaping lower bound.
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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