FA-91311 / Quantum circuit simulation / Open access
Register expansion resolves measure targets among quantum registers · case 01
measure q[0] -> c[0] reports "unknown-register" for the creg c.
ROOT CAUSE
The destination operand is looked up in the qreg table instead of the creg table.
THE FAILURE
The destination operand is looked up in the qreg table instead of the creg table.
Unsuccessful approach: The attempted repair merges both tables, so a qreg name is accepted as a measurement destination.
Case contract
Input a list of OpenQASM-2-like statements: "qreg n[k];", "creg n[k];", gate statements "g a,b;" and "measure a -> b;" where operands are whole registers or "n[i]". Registers are flattened in declaration order per kind (qubits and clbits have separate counters). Whole-register operands broadcast; a single qubit operand is reused across the broadcast. Return [[g, [flat qubits]] or ["measure", q, c]...] or [error, statement index] with errors "unknown-register", "index-out-of-range", "size-mismatch".
Why this case matters
Front-end register flattening decides which physical qubits every later pass touches; offset or broadcast slips silently rewire circuits.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import re
N = 1
observations = []
def solve(x):
qregs, cregs = {}, {}
nq = nc = 0
out = []
def ref(tok, regs):
m = re.fullmatch(r'([a-z]\w*)(?:\[(\d+)\])?', tok.strip())
name, idx = m.group(1), m.group(2)
if name not in regs:
raise KeyError('unknown-register')
off, size = regs[name]
if idx is None:
return [off + i for i in range(size)]
if int(idx) >= size:
raise KeyError('index-out-of-range')
return [off + int(idx)]
for no, stmt in enumerate(x):
s = stmt.strip().rstrip(';').strip()
head, _, rest = s.partition(' ')
try:
if head in ('qreg', 'creg'):
m = re.fullmatch(r'([a-z]\w*)\[(\d+)\]', rest.strip())
size = int(m.group(2))
if head == 'qreg':
qregs[m.group(1)] = (nq, size)
nq += size
else:
cregs[m.group(1)] = (nc, size)
nc += size
elif head == 'measure':
src, dst = rest.split('->')
qs, cs = ref(src, qregs), ref(dst, qregs)
if len(qs) != len(cs):
raise KeyError('size-mismatch')
out += [['measure', a, b] for a, b in zip(qs, cs)]
else:
args = [ref(t, qregs) for t in rest.split(',')]
width = max(len(a) for a in args)
if any(len(a) not in (1, width) for a in args):
raise KeyError('size-mismatch')
for i in range(width):
out.append([head, [a[0] if len(a) == 1 else a[i] for a in args]])
except KeyError as e:
return [e.args[0], no]
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: two registers broadcast', ['qreg q[2];', 'qreg r[2];', 'creg c[2];', 'cx q,r;', 'measure r -> c;'], [['cx', [0, 2]], ['cx', [1, 3]], ['measure', 2, 0], ['measure', 3, 1]]], ['regression: measure size mismatch', ['qreg q[3];', 'creg c[2];', 'measure q -> c;'], ['size-mismatch', 2]], ['regression: measure into qreg name', ['qreg q[1];', 'qreg r[1];', 'measure q[0] -> r[0];'], ['unknown-register', 2]], ['control: creg declared between qregs', ['qreg a[1];', 'creg c[2];', 'qreg b[2];', 'h b[1];'], [['h', [2]]]], ['control: index equals size', ['qreg q[2];', 'h q[2];'], ['index-out-of-range', 1]], ['control: second register overflow', ['qreg q[2];', 'qreg r[2];', 'x r[3];'], ['index-out-of-range', 2]], ['control: single control broadcast target', ['qreg q[1];', 'qreg r[3];', 'cx q[0],r;'], [['cx', [0, 1]], ['cx', [0, 2]], ['cx', [0, 3]]]]], [['regression: random program 0', ['qreg q[2];', 'creg c[2];', 'h q[0];', 'measure q[1] -> c[0];'], [['h', [0]], ['measure', 1, 0]]], ['regression: random program 1', ['qreg q[3];', 'creg c[2];', 'h q;', 'measure q[0] -> c;'], ['size-mismatch', 3]], ['regression: measure into qreg name', ['qreg q[1];', 'qreg r[1];', 'measure q[0] -> r[0];'], ['unknown-register', 2]], ['control: register control single target', ['qreg q[3];', 'qreg r[1];', 'cx q,r[0];'], [['cx', [0, 3]], ['cx', [1, 3]], ['cx', [2, 3]]]], ['control: unknown register', ['qreg q[1];', 'h z[0];'], ['unknown-register', 1]], ['control: random program 2', ['qreg q[3];', 'creg c[3];', 'qreg r[1];', 'creg d[1];', 'h q[1];'], [['h', [1]]]], ['control: random program 3', ['qreg q[2];', 'creg c[2];', 'h q[1];'], [['h', [1]]]]], [['regression: random program 5', ['qreg q[1];', 'creg c[3];', 'qreg r[1];', 'creg d[3];', 'cx r[0],q[0];', 'measure r -> d[0];', 'cx q[0],q[0];', 'cx r[0],r;'], [['cx', [1, 0]], ['measure', 1, 3], ['cx', [0, 0]], ['cx', [1, 1]]]], ['regression: random program 8', ['qreg q[2];', 'qreg r[1];', 'qreg s[2];', 'creg c[2];', 'cx r[0],s[1];', 'h s;', 'measure q[1] -> c[1];', 'h s;'], [['cx', [2, 4]], ['h', [3]], ['h', [4]], ['measure', 1, 1], ['h', [3]], ['h', [4]]]], ['regression: measure into qreg name', ['qreg q[1];', 'qreg r[1];', 'measure q[0] -> r[0];'], ['unknown-register', 2]], ['control: random program 6', ['qreg q[3];', 'creg c[2];', 'cx q[2],q;'], [['cx', [2, 0]], ['cx', [2, 1]], ['cx', [2, 2]]]], ['control: random program 7', ['qreg q[1];', 'creg c[3];', 'x q;', 'cx q,q[1];', 'cx q[0],q[0];', 'cx q[0],q;'], ['index-out-of-range', 3]], ['control: random program 9', ['qreg q[1];', 'qreg r[1];', 'qreg s[1];', 'creg c[2];', 'h q[0];'], [['h', [0]]]], ['control: random program 12', ['qreg q[3];', 'creg c[1];', 'qreg r[2];', 'creg d[3];', 'x q;', 'h r;', 'x r[1];'], [['x', [0]], ['x', [1]], ['x', [2]], ['h', [3]], ['h', [4]], ['x', [4]]]]], [['regression: random program 11', ['qreg q[2];', 'creg c[1];', 'qreg r[1];', 'creg d[3];', 'measure q -> d[2];', 'x r[0];', 'x q;', 'measure q[0] -> d[0];'], ['size-mismatch', 4]], ['regression: random program 13', ['qreg q[2];', 'qreg r[2];', 'qreg s[1];', 'creg c[2];', 'cx r[0],q;', 'measure q[0] -> c[1];', 'cx r[1],r;', 'measure r[0] -> c;'], ['size-mismatch', 7]], ['regression: measure into qreg name', ['qreg q[1];', 'qreg r[1];', 'measure q[0] -> r[0];'], ['unknown-register', 2]], ['control: random program 14', ['qreg q[3];', 'creg c[2];', 'qreg r[2];', 'creg d[3];', 'qreg s[2];', 'x r[1];', 'x q;', 'x r[0];', 'cx s[0],r;'], [['x', [4]], ['x', [0]], ['x', [1]], ['x', [2]], ['x', [3]], ['cx', [5, 3]], ['cx', [5, 4]]]], ['control: random program 15', ['qreg q[1];', 'qreg r[2];', 'qreg s[3];', 'creg c[2];', 'x q;', 'h r[1];', 'cx s[2],r[1];', 'cx r[1],q[0];'], [['x', [0]], ['h', [2]], ['cx', [5, 2]], ['cx', [2, 0]]]], ['control: random program 16', ['qreg q[2];', 'creg c[2];', 'qreg r[1];', 'qreg s[2];', 'creg d[1];', 'cx s,q;', 'x r[0];'], [['cx', [3, 0]], ['cx', [4, 1]], ['x', [2]]]], ['control: random program 18', ['qreg q[1];', 'creg c[2];', 'qreg r[1];', 'creg d[2];', 'qreg s[2];', 'cx q,r[0];'], [['cx', [0, 1]]]]], [['regression: random program 19', ['qreg q[1];', 'qreg r[1];', 'qreg s[2];', 'creg c[3];', 'measure s[0] -> c;', 'h q[0];'], ['size-mismatch', 4]], ['regression: random program 20', ['qreg q[1];', 'qreg r[3];', 'creg c[3];', 'qreg s[2];', 'creg d[1];', 'measure s[0] -> c[2];', 'measure r[0] -> d[0];', 'measure q[0] -> d;'], [['measure', 4, 2], ['measure', 1, 3], ['measure', 0, 3]]], ['regression: measure into qreg name', ['qreg q[1];', 'qreg r[1];', 'measure q[0] -> r[0];'], ['unknown-register', 2]], ['control: random program 22', ['qreg q[1];', 'qreg r[3];', 'creg c[2];', 'qreg s[3];', 'creg d[1];', 'cx q[0],s[1];'], [['cx', [0, 5]]]], ['control: random program 23', ['qreg q[3];', 'creg c[1];', 'x q[0];'], [['x', [0]]]], ['control: random program 26', ['qreg q[2];', 'creg c[3];', 'qreg r[1];', 'creg d[1];', 'h r[0];'], [['h', [2]]]], ['control: random program 27', ['qreg q[1];', 'qreg r[3];', 'creg c[1];', 'x q;'], [['x', [0]]]]]]
for label, args, expected in fixtures[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 |
|---|---|---|---|
| regression: two registers broadcast | ['unknown-register', 4] | [['cx', [0, 2]], ['cx', [1, 3]], ['measure', 2, 0], ['measure', 3, 1]] | Failed |
| regression: measure size mismatch | ['unknown-register', 2] | ['size-mismatch', 2] | Failed |
| regression: measure into qreg name | [['measure', 0, 1]] | ['unknown-register', 2] | Failed |
| control: creg declared between qregs | [['h', [2]]] | [['h', [2]]] | Passed |
| control: index equals size | ['index-out-of-range', 1] | ['index-out-of-range', 1] | Passed |
| control: second register overflow | ['index-out-of-range', 2] | ['index-out-of-range', 2] | Passed |
| control: single control broadcast target | [['cx', [0, 1]], ['cx', [0, 2]], ['cx', [0, 3]]] | [['cx', [0, 1]], ['cx', [0, 2]], ['cx', [0, 3]]] | Passed |
SHA-256 / 3ffdfa054e1e0458587fd29fd2dbf07c22fa9fc886003a9d6bbef701d6125a29
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import re
N = 1
observations = []
def solve(x):
qregs, cregs = {}, {}
nq = nc = 0
out = []
def ref(tok, regs):
m = re.fullmatch(r'([a-z]\w*)(?:\[(\d+)\])?', tok.strip())
name, idx = m.group(1), m.group(2)
if name not in regs:
raise KeyError('unknown-register')
off, size = regs[name]
if idx is None:
return [off + i for i in range(size)]
if int(idx) >= size:
raise KeyError('index-out-of-range')
return [off + int(idx)]
for no, stmt in enumerate(x):
s = stmt.strip().rstrip(';').strip()
head, _, rest = s.partition(' ')
try:
if head in ('qreg', 'creg'):
m = re.fullmatch(r'([a-z]\w*)\[(\d+)\]', rest.strip())
size = int(m.group(2))
if head == 'qreg':
qregs[m.group(1)] = (nq, size)
nq += size
else:
cregs[m.group(1)] = (nc, size)
nc += size
elif head == 'measure':
src, dst = rest.split('->')
qs, cs = ref(src, qregs), ref(dst, {**qregs, **cregs})
if len(qs) != len(cs):
raise KeyError('size-mismatch')
out += [['measure', a, b] for a, b in zip(qs, cs)]
else:
args = [ref(t, qregs) for t in rest.split(',')]
width = max(len(a) for a in args)
if any(len(a) not in (1, width) for a in args):
raise KeyError('size-mismatch')
for i in range(width):
out.append([head, [a[0] if len(a) == 1 else a[i] for a in args]])
except KeyError as e:
return [e.args[0], no]
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: two registers broadcast', ['qreg q[2];', 'qreg r[2];', 'creg c[2];', 'cx q,r;', 'measure r -> c;'], [['cx', [0, 2]], ['cx', [1, 3]], ['measure', 2, 0], ['measure', 3, 1]]], ['regression: measure size mismatch', ['qreg q[3];', 'creg c[2];', 'measure q -> c;'], ['size-mismatch', 2]], ['regression: measure into qreg name', ['qreg q[1];', 'qreg r[1];', 'measure q[0] -> r[0];'], ['unknown-register', 2]], ['control: creg declared between qregs', ['qreg a[1];', 'creg c[2];', 'qreg b[2];', 'h b[1];'], [['h', [2]]]], ['control: index equals size', ['qreg q[2];', 'h q[2];'], ['index-out-of-range', 1]], ['control: second register overflow', ['qreg q[2];', 'qreg r[2];', 'x r[3];'], ['index-out-of-range', 2]], ['control: single control broadcast target', ['qreg q[1];', 'qreg r[3];', 'cx q[0],r;'], [['cx', [0, 1]], ['cx', [0, 2]], ['cx', [0, 3]]]]], [['regression: random program 0', ['qreg q[2];', 'creg c[2];', 'h q[0];', 'measure q[1] -> c[0];'], [['h', [0]], ['measure', 1, 0]]], ['regression: random program 1', ['qreg q[3];', 'creg c[2];', 'h q;', 'measure q[0] -> c;'], ['size-mismatch', 3]], ['regression: measure into qreg name', ['qreg q[1];', 'qreg r[1];', 'measure q[0] -> r[0];'], ['unknown-register', 2]], ['control: register control single target', ['qreg q[3];', 'qreg r[1];', 'cx q,r[0];'], [['cx', [0, 3]], ['cx', [1, 3]], ['cx', [2, 3]]]], ['control: unknown register', ['qreg q[1];', 'h z[0];'], ['unknown-register', 1]], ['control: random program 2', ['qreg q[3];', 'creg c[3];', 'qreg r[1];', 'creg d[1];', 'h q[1];'], [['h', [1]]]], ['control: random program 3', ['qreg q[2];', 'creg c[2];', 'h q[1];'], [['h', [1]]]]], [['regression: random program 5', ['qreg q[1];', 'creg c[3];', 'qreg r[1];', 'creg d[3];', 'cx r[0],q[0];', 'measure r -> d[0];', 'cx q[0],q[0];', 'cx r[0],r;'], [['cx', [1, 0]], ['measure', 1, 3], ['cx', [0, 0]], ['cx', [1, 1]]]], ['regression: random program 8', ['qreg q[2];', 'qreg r[1];', 'qreg s[2];', 'creg c[2];', 'cx r[0],s[1];', 'h s;', 'measure q[1] -> c[1];', 'h s;'], [['cx', [2, 4]], ['h', [3]], ['h', [4]], ['measure', 1, 1], ['h', [3]], ['h', [4]]]], ['regression: measure into qreg name', ['qreg q[1];', 'qreg r[1];', 'measure q[0] -> r[0];'], ['unknown-register', 2]], ['control: random program 6', ['qreg q[3];', 'creg c[2];', 'cx q[2],q;'], [['cx', [2, 0]], ['cx', [2, 1]], ['cx', [2, 2]]]], ['control: random program 7', ['qreg q[1];', 'creg c[3];', 'x q;', 'cx q,q[1];', 'cx q[0],q[0];', 'cx q[0],q;'], ['index-out-of-range', 3]], ['control: random program 9', ['qreg q[1];', 'qreg r[1];', 'qreg s[1];', 'creg c[2];', 'h q[0];'], [['h', [0]]]], ['control: random program 12', ['qreg q[3];', 'creg c[1];', 'qreg r[2];', 'creg d[3];', 'x q;', 'h r;', 'x r[1];'], [['x', [0]], ['x', [1]], ['x', [2]], ['h', [3]], ['h', [4]], ['x', [4]]]]], [['regression: random program 11', ['qreg q[2];', 'creg c[1];', 'qreg r[1];', 'creg d[3];', 'measure q -> d[2];', 'x r[0];', 'x q;', 'measure q[0] -> d[0];'], ['size-mismatch', 4]], ['regression: random program 13', ['qreg q[2];', 'qreg r[2];', 'qreg s[1];', 'creg c[2];', 'cx r[0],q;', 'measure q[0] -> c[1];', 'cx r[1],r;', 'measure r[0] -> c;'], ['size-mismatch', 7]], ['regression: measure into qreg name', ['qreg q[1];', 'qreg r[1];', 'measure q[0] -> r[0];'], ['unknown-register', 2]], ['control: random program 14', ['qreg q[3];', 'creg c[2];', 'qreg r[2];', 'creg d[3];', 'qreg s[2];', 'x r[1];', 'x q;', 'x r[0];', 'cx s[0],r;'], [['x', [4]], ['x', [0]], ['x', [1]], ['x', [2]], ['x', [3]], ['cx', [5, 3]], ['cx', [5, 4]]]], ['control: random program 15', ['qreg q[1];', 'qreg r[2];', 'qreg s[3];', 'creg c[2];', 'x q;', 'h r[1];', 'cx s[2],r[1];', 'cx r[1],q[0];'], [['x', [0]], ['h', [2]], ['cx', [5, 2]], ['cx', [2, 0]]]], ['control: random program 16', ['qreg q[2];', 'creg c[2];', 'qreg r[1];', 'qreg s[2];', 'creg d[1];', 'cx s,q;', 'x r[0];'], [['cx', [3, 0]], ['cx', [4, 1]], ['x', [2]]]], ['control: random program 18', ['qreg q[1];', 'creg c[2];', 'qreg r[1];', 'creg d[2];', 'qreg s[2];', 'cx q,r[0];'], [['cx', [0, 1]]]]], [['regression: random program 19', ['qreg q[1];', 'qreg r[1];', 'qreg s[2];', 'creg c[3];', 'measure s[0] -> c;', 'h q[0];'], ['size-mismatch', 4]], ['regression: random program 20', ['qreg q[1];', 'qreg r[3];', 'creg c[3];', 'qreg s[2];', 'creg d[1];', 'measure s[0] -> c[2];', 'measure r[0] -> d[0];', 'measure q[0] -> d;'], [['measure', 4, 2], ['measure', 1, 3], ['measure', 0, 3]]], ['regression: measure into qreg name', ['qreg q[1];', 'qreg r[1];', 'measure q[0] -> r[0];'], ['unknown-register', 2]], ['control: random program 22', ['qreg q[1];', 'qreg r[3];', 'creg c[2];', 'qreg s[3];', 'creg d[1];', 'cx q[0],s[1];'], [['cx', [0, 5]]]], ['control: random program 23', ['qreg q[3];', 'creg c[1];', 'x q[0];'], [['x', [0]]]], ['control: random program 26', ['qreg q[2];', 'creg c[3];', 'qreg r[1];', 'creg d[1];', 'h r[0];'], [['h', [2]]]], ['control: random program 27', ['qreg q[1];', 'qreg r[3];', 'creg c[1];', 'x q;'], [['x', [0]]]]]]
for label, args, expected in fixtures[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 |
|---|---|---|---|
| regression: two registers broadcast | [['cx', [0, 2]], ['cx', [1, 3]], ['measure', 2, 0], ['measure', 3, 1]] | [['cx', [0, 2]], ['cx', [1, 3]], ['measure', 2, 0], ['measure', 3, 1]] | Passed |
| regression: measure size mismatch | ['size-mismatch', 2] | ['size-mismatch', 2] | Passed |
| regression: measure into qreg name | [['measure', 0, 1]] | ['unknown-register', 2] | Failed |
| control: creg declared between qregs | [['h', [2]]] | [['h', [2]]] | Passed |
| control: index equals size | ['index-out-of-range', 1] | ['index-out-of-range', 1] | Passed |
| control: second register overflow | ['index-out-of-range', 2] | ['index-out-of-range', 2] | Passed |
| control: single control broadcast target | [['cx', [0, 1]], ['cx', [0, 2]], ['cx', [0, 3]]] | [['cx', [0, 1]], ['cx', [0, 2]], ['cx', [0, 3]]] | Passed |
SHA-256 / ff6a4287c5c53ce37d03641548ec01835bbc2d06b51e8e88424c62c7d88524db
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 with a stipulated toy contract; amplitudes are rounded to fixed decimals for strict JSON output. It is not a production quantum SDK and claims no standards conformance. 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:34.823379+00:00.
Case digest / a33176ee143305f288809d123ba149bbac97864e1818259c8e5a575c9cd0eebf