FA-89926 / Bytecode virtual machines / Open access
Call frames: arguments bound in pop order · case 01
Two-argument functions see their parameters swapped; sub(a, b) returns b - a.
ROOT CAUSE
The argument slice is reversed, so the last pushed argument lands in local 0.
THE FAILURE
The argument slice is reversed, so the last pushed argument lands in local 0.
Unsuccessful approach: Rotating the top value to the front is still pop-order thinking and also invents an argument for zero-arity calls.
Case contract
Instructions: push v, load k, store k, add/sub/mul (second-from-top op top), jz t, jmp t, call t nargs nlocals, ret, halt. call pops nargs values (the first pushed becomes local 0), appends zero locals up to nlocals, records return pc = call pc + 1, and raises ["StackOverflowError", frames] when the frame count already equals max_depth. ret pops the result, discards the callee frame, pushes the result on the caller stack and resumes at the saved pc. Each executed instruction costs one fuel; running out returns ["fuel", pc]; host faults are ["vm-fault"].
Why this case matters
Frame setup and teardown decide argument binding, return values and recursion limits in every stack VM.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(code, max_depth, fuel):
def run():
frames = [{'locals': [0] * 4, 'stack': [], 'ret': None}]
pc = 0
for _ in range(fuel):
f = frames[-1]
ins = code[pc]
op = ins[0]
if op == 'push':
f['stack'].append(ins[1])
pc += 1
elif op == 'load':
f['stack'].append(f['locals'][ins[1]])
pc += 1
elif op == 'store':
f['locals'][ins[1]] = f['stack'].pop()
pc += 1
elif op in ('add', 'sub', 'mul'):
b = f['stack'].pop()
a = f['stack'].pop()
f['stack'].append(a + b if op == 'add' else a - b if op == 'sub' else a * b)
pc += 1
elif op == 'jz':
pc = ins[1] if f['stack'].pop() == 0 else pc + 1
elif op == 'jmp':
pc = ins[1]
elif op == 'call':
target, nargs, nlocals = ins[1], ins[2], ins[3]
if len(frames) >= max_depth:
return ['StackOverflowError', len(frames)]
args = f['stack'][len(f['stack']) - nargs:][::-1]
del f['stack'][len(f['stack']) - nargs:]
frames.append({'locals': args + [0] * (nlocals - nargs), 'stack': [], 'ret': pc + 1})
pc = target
elif op == 'ret':
value = f['stack'].pop()
frames.pop()
frames[-1]['stack'].append(value)
pc = f['ret']
else:
return ['halt', f['stack']]
return ['fuel', pc]
try:
return run()
except (IndexError, TypeError):
return ['vm-fault']
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('two-argument call binds first argument to slot 0',
([['push', 21], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],
10,
100),
['halt', [18]]),
('zero-argument call keeps caller operand stack',
([['push', 8], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']], 10, 100),
['halt', [3]]),
('extra locals are zero-initialised after arguments',
([['push', 1],
['call', 3, 1, 2],
['halt'],
['load', 0],
['push', 3],
['add'],
['store', 1],
['load', 1],
['load', 0],
['mul'],
['ret']],
10,
100),
['halt', [4]]),
('regression: recursive factorial',
([['push', 3],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
500),
['halt', [6]]),
('recursion depth exactly at the limit',
([['push', 3],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
5,
500),
['halt', [6]]),
('recursion one frame over the limit',
([['push', 3],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
4,
500),
['StackOverflowError', 4]),
('control: fuel exhaustion',
([['push', 3],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
3),
['fuel', 4])],
[('two-argument call binds first argument to slot 0',
([['push', 22], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],
10,
100),
['halt', [19]]),
('zero-argument call keeps caller operand stack',
([['push', 9], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']], 10, 100),
['halt', [4]]),
('extra locals are zero-initialised after arguments',
([['push', 2],
['call', 3, 1, 2],
['halt'],
['load', 0],
['push', 3],
['add'],
['store', 1],
['load', 1],
['load', 0],
['mul'],
['ret']],
10,
100),
['halt', [10]]),
('regression: recursive factorial',
([['push', 4],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
500),
['halt', [24]]),
('recursion depth exactly at the limit',
([['push', 4],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
6,
500),
['halt', [24]]),
('recursion one frame over the limit',
([['push', 4],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
5,
500),
['StackOverflowError', 5]),
('control: fuel exhaustion',
([['push', 4],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
3),
['fuel', 4])],
[('two-argument call binds first argument to slot 0',
([['push', 23], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],
10,
100),
['halt', [20]]),
('zero-argument call keeps caller operand stack',
([['push', 10], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']],
10,
100),
['halt', [5]]),
('extra locals are zero-initialised after arguments',
([['push', 3],
['call', 3, 1, 2],
['halt'],
['load', 0],
['push', 3],
['add'],
['store', 1],
['load', 1],
['load', 0],
['mul'],
['ret']],
10,
100),
['halt', [18]]),
('regression: recursive factorial',
([['push', 2],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
500),
['halt', [2]]),
('recursion depth exactly at the limit',
([['push', 2],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
4,
500),
['halt', [2]]),
('recursion one frame over the limit',
([['push', 2],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
3,
500),
['StackOverflowError', 3]),
('control: fuel exhaustion',
([['push', 2],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
3),
['fuel', 4])],
[('two-argument call binds first argument to slot 0',
([['push', 24], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],
10,
100),
['halt', [21]]),
('zero-argument call keeps caller operand stack',
([['push', 11], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']],
10,
100),
['halt', [6]]),
('extra locals are zero-initialised after arguments',
([['push', 4],
['call', 3, 1, 2],
['halt'],
['load', 0],
['push', 3],
['add'],
['store', 1],
['load', 1],
['load', 0],
['mul'],
['ret']],
10,
100),
['halt', [28]]),
('regression: recursive factorial',
([['push', 3],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
500),
['halt', [6]]),
('recursion depth exactly at the limit',
([['push', 3],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
5,
500),
['halt', [6]]),
('recursion one frame over the limit',
([['push', 3],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
4,
500),
['StackOverflowError', 4]),
('control: fuel exhaustion',
([['push', 3],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
3),
['fuel', 4])],
[('two-argument call binds first argument to slot 0',
([['push', 25], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],
10,
100),
['halt', [22]]),
('zero-argument call keeps caller operand stack',
([['push', 12], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']],
10,
100),
['halt', [7]]),
('extra locals are zero-initialised after arguments',
([['push', 5],
['call', 3, 1, 2],
['halt'],
['load', 0],
['push', 3],
['add'],
['store', 1],
['load', 1],
['load', 0],
['mul'],
['ret']],
10,
100),
['halt', [40]]),
('regression: recursive factorial',
([['push', 4],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
500),
['halt', [24]]),
('recursion depth exactly at the limit',
([['push', 4],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
6,
500),
['halt', [24]]),
('recursion one frame over the limit',
([['push', 4],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
5,
500),
['StackOverflowError', 5]),
('control: fuel exhaustion',
([['push', 4],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
3),
['fuel', 4])]]
for label, args, expected in cases[N - 1]:
check(label, 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 |
|---|---|---|---|
| two-argument call binds first argument to slot 0 | ['halt', [-18]] | ['halt', [18]] | Failed |
| zero-argument call keeps caller operand stack | ['halt', [3]] | ['halt', [3]] | Passed |
| extra locals are zero-initialised after arguments | ['halt', [4]] | ['halt', [4]] | Passed |
| regression: recursive factorial | ['halt', [6]] | ['halt', [6]] | Passed |
| recursion depth exactly at the limit | ['halt', [6]] | ['halt', [6]] | Passed |
| recursion one frame over the limit | ['StackOverflowError', 4] | ['StackOverflowError', 4] | Passed |
| control: fuel exhaustion | ['fuel', 4] | ['fuel', 4] | Passed |
SHA-256 / 52948ce5717721bbf9565b6c24649b29ae04e0513675cb72c1f2e5138c8cfa99
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(code, max_depth, fuel):
def run():
frames = [{'locals': [0] * 4, 'stack': [], 'ret': None}]
pc = 0
for _ in range(fuel):
f = frames[-1]
ins = code[pc]
op = ins[0]
if op == 'push':
f['stack'].append(ins[1])
pc += 1
elif op == 'load':
f['stack'].append(f['locals'][ins[1]])
pc += 1
elif op == 'store':
f['locals'][ins[1]] = f['stack'].pop()
pc += 1
elif op in ('add', 'sub', 'mul'):
b = f['stack'].pop()
a = f['stack'].pop()
f['stack'].append(a + b if op == 'add' else a - b if op == 'sub' else a * b)
pc += 1
elif op == 'jz':
pc = ins[1] if f['stack'].pop() == 0 else pc + 1
elif op == 'jmp':
pc = ins[1]
elif op == 'call':
target, nargs, nlocals = ins[1], ins[2], ins[3]
if len(frames) >= max_depth:
return ['StackOverflowError', len(frames)]
args = [f['stack'][-1]] + f['stack'][len(f['stack']) - nargs:-1]
del f['stack'][len(f['stack']) - nargs:]
frames.append({'locals': args + [0] * (nlocals - nargs), 'stack': [], 'ret': pc + 1})
pc = target
elif op == 'ret':
value = f['stack'].pop()
frames.pop()
frames[-1]['stack'].append(value)
pc = f['ret']
else:
return ['halt', f['stack']]
return ['fuel', pc]
try:
return run()
except (IndexError, TypeError):
return ['vm-fault']
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('two-argument call binds first argument to slot 0',
([['push', 21], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],
10,
100),
['halt', [18]]),
('zero-argument call keeps caller operand stack',
([['push', 8], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']], 10, 100),
['halt', [3]]),
('extra locals are zero-initialised after arguments',
([['push', 1],
['call', 3, 1, 2],
['halt'],
['load', 0],
['push', 3],
['add'],
['store', 1],
['load', 1],
['load', 0],
['mul'],
['ret']],
10,
100),
['halt', [4]]),
('regression: recursive factorial',
([['push', 3],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
500),
['halt', [6]]),
('recursion depth exactly at the limit',
([['push', 3],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
5,
500),
['halt', [6]]),
('recursion one frame over the limit',
([['push', 3],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
4,
500),
['StackOverflowError', 4]),
('control: fuel exhaustion',
([['push', 3],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
3),
['fuel', 4])],
[('two-argument call binds first argument to slot 0',
([['push', 22], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],
10,
100),
['halt', [19]]),
('zero-argument call keeps caller operand stack',
([['push', 9], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']], 10, 100),
['halt', [4]]),
('extra locals are zero-initialised after arguments',
([['push', 2],
['call', 3, 1, 2],
['halt'],
['load', 0],
['push', 3],
['add'],
['store', 1],
['load', 1],
['load', 0],
['mul'],
['ret']],
10,
100),
['halt', [10]]),
('regression: recursive factorial',
([['push', 4],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
500),
['halt', [24]]),
('recursion depth exactly at the limit',
([['push', 4],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
6,
500),
['halt', [24]]),
('recursion one frame over the limit',
([['push', 4],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
5,
500),
['StackOverflowError', 5]),
('control: fuel exhaustion',
([['push', 4],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
3),
['fuel', 4])],
[('two-argument call binds first argument to slot 0',
([['push', 23], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],
10,
100),
['halt', [20]]),
('zero-argument call keeps caller operand stack',
([['push', 10], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']],
10,
100),
['halt', [5]]),
('extra locals are zero-initialised after arguments',
([['push', 3],
['call', 3, 1, 2],
['halt'],
['load', 0],
['push', 3],
['add'],
['store', 1],
['load', 1],
['load', 0],
['mul'],
['ret']],
10,
100),
['halt', [18]]),
('regression: recursive factorial',
([['push', 2],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
500),
['halt', [2]]),
('recursion depth exactly at the limit',
([['push', 2],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
4,
500),
['halt', [2]]),
('recursion one frame over the limit',
([['push', 2],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
3,
500),
['StackOverflowError', 3]),
('control: fuel exhaustion',
([['push', 2],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
3),
['fuel', 4])],
[('two-argument call binds first argument to slot 0',
([['push', 24], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],
10,
100),
['halt', [21]]),
('zero-argument call keeps caller operand stack',
([['push', 11], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']],
10,
100),
['halt', [6]]),
('extra locals are zero-initialised after arguments',
([['push', 4],
['call', 3, 1, 2],
['halt'],
['load', 0],
['push', 3],
['add'],
['store', 1],
['load', 1],
['load', 0],
['mul'],
['ret']],
10,
100),
['halt', [28]]),
('regression: recursive factorial',
([['push', 3],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
500),
['halt', [6]]),
('recursion depth exactly at the limit',
([['push', 3],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
5,
500),
['halt', [6]]),
('recursion one frame over the limit',
([['push', 3],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
4,
500),
['StackOverflowError', 4]),
('control: fuel exhaustion',
([['push', 3],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
3),
['fuel', 4])],
[('two-argument call binds first argument to slot 0',
([['push', 25], ['push', 3], ['call', 4, 2, 2], ['halt'], ['load', 0], ['load', 1], ['sub'], ['ret']],
10,
100),
['halt', [22]]),
('zero-argument call keeps caller operand stack',
([['push', 12], ['call', 4, 0, 1], ['sub'], ['halt'], ['load', 0], ['push', 5], ['add'], ['ret']],
10,
100),
['halt', [7]]),
('extra locals are zero-initialised after arguments',
([['push', 5],
['call', 3, 1, 2],
['halt'],
['load', 0],
['push', 3],
['add'],
['store', 1],
['load', 1],
['load', 0],
['mul'],
['ret']],
10,
100),
['halt', [40]]),
('regression: recursive factorial',
([['push', 4],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
500),
['halt', [24]]),
('recursion depth exactly at the limit',
([['push', 4],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
6,
500),
['halt', [24]]),
('recursion one frame over the limit',
([['push', 4],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
5,
500),
['StackOverflowError', 5]),
('control: fuel exhaustion',
([['push', 4],
['call', 3, 1, 1],
['halt'],
['load', 0],
['jz', 12],
['load', 0],
['load', 0],
['push', 1],
['sub'],
['call', 3, 1, 1],
['mul'],
['ret'],
['push', 1],
['ret']],
20,
3),
['fuel', 4])]]
for label, args, expected in cases[N - 1]:
check(label, 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 |
|---|---|---|---|
| two-argument call binds first argument to slot 0 | ['halt', [-18]] | ['halt', [18]] | Failed |
| zero-argument call keeps caller operand stack | ['halt', [-5]] | ['halt', [3]] | Failed |
| extra locals are zero-initialised after arguments | ['halt', [4]] | ['halt', [4]] | Passed |
| regression: recursive factorial | ['halt', [6]] | ['halt', [6]] | Passed |
| recursion depth exactly at the limit | ['halt', [6]] | ['halt', [6]] | Passed |
| recursion one frame over the limit | ['StackOverflowError', 4] | ['StackOverflowError', 4] | Passed |
| control: fuel exhaustion | ['fuel', 4] | ['fuel', 4] | Passed |
SHA-256 / dd329282b2cae5699cd59792a6e1d1f77f5cb21e05787c35b8e29cd0a4ece0cb
HELD IN THE MEMBER ARCHIVE
The verified repair and its recorded checks are member-only.
This mechanism has 7 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.
Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.
Member access is invitation-based. Sign in with your invited account to inspect the repair.
Sign in to the archive ↗Verification & scope
A deterministic, bounded teaching model of one bytecode virtual machine mechanism with a stipulated instruction encoding; it is not a production VM and claims no conformance to any real specification. 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:51:22.076708+00:00.
Case digest / ce979cfbaf08a58676609db0208330cf01be7b6dbe013941009dabd714efd1f1