经典比特靠重复来保护:用 111 发送 1,单次翻转之后多数仍然正确。量子比特不能简单地复制(没有哪个门能复制一个未知的状态),但它在计算基下的取值可以被*铺开*:两个受控非门把 a|0⟩ + b|1⟩ 变成 a|000⟩ + b|111⟩。这就是三量子比特的*比特翻转码*,最小的纠错码。 某一个量子比特被翻转之后,同样的两个受控非门可以解码:它们让 q[0] 保存数据(如果被击中的是 q[0],则数据已被翻转),让 q[1]、q[2] 分别保存它是否与 q[0] 不一致。之后由多数表决来纠正 q[0]。 这道练习是一个*生成器*(generator):`input uint err;` 让程序成为一族线路,每个取值对应一条。检查在 err = 0、1 和 2 上运行你的程序,每种情况都有自己的判定,三种情况都通过才算通过。在命令行中,每个命令都接受 `--input`: ```sh runnable cat > flip.qasm <<'QASM' OPENQASM 3.0; include "stdgates.inc"; input uint err; qubit[3] q; x q[err]; QASM wai-quantum instance flip.qasm --input err=2 ```