No programming theorem?

谢邀. 这里的 No-programming theorem 看起来 Michael Nielsen 很喜欢这么叫, 我甚至找到了他做的某个 Slides 上的说明:No programming theorem?

(吐槽: 把 Bill Gates 这么支持 Quantum Computing 的人叉掉真的好么......)看了看定义, 说的类似 No-cloning theorem. 简单的说, 就是任意的量子态不可能精确的复制, 除了系统的本征态. 不太严格的说, 考虑一个 CNOT 门和下面的初态(输入):No programming theorem?
我们想在第二个 Qubit 上复制它, 那么需要得到:No programming theorem?
即上式满足No programming theorem?
, 但是用 CNOT 作用输入可以得到No programming theorem?
也就是说, 能复制的只有No programming theorem?
No programming theorem?
而已.回到 No-programming theorem, No programming theorem?
的输入形式看起来非常像通用 Turing 机(Universal Turing Machine)的处理手法. 我们考虑比较简单的情况: No programming theorem?
只有一个 Qubit, 而No programming theorem?
是单比特量子门. 由于单比特量子门对应 Bloch Sphere 上的一个三维旋转, 所以对其进行 Euler 角分解, 考虑 Euler 角的而二进制形式. 那么, 我们可以把No programming theorem?
编码成一系列类似No programming theorem?
的旋转, 这里的No programming theorem?
表示编码中第No programming theorem?
位. 如果我们的程序是互相正交的, 也就是说由三个确定的旋转(z 轴, y 轴, z 轴)决定, 那么当然可以执行. 但是, 如果编码中允许叠加态, 也就是说这里的程序No programming theorem?
是多个单比特量子门的叠加的话. 考虑类似 CNOT 的实现, 不过这里的 target Qubit 对应的不是 Pauli X 门, 而是一个旋转. 相当于第一个 Qubit 之前是No programming theorem?
, 我们需要把第二个 Qubit 的东西拷贝上去, 那么套用上一段的结果即得. 当然, 对于 Fixed Array 覆盖所有单比特量子门已经不太现实了...不管你怎么编码, 我总是能让长度变得无穷大. 但即使是精度有限的情形, 这样的编码也不能把允许叠加的No programming theorem?
作用到第一个 Qubit 上. 于是简单的复制是不可能了, 但是 Programming 也不一定要能复制嘛?... Functional Programming 里面不是也不允许复制么, 大家的 Haskell 还不是写的好好的. 关于量子程序语言, 现在绝大多数成型的理论或者系统都是基于经典控制流的. 我曾经介绍过应明生老师在 CCCF 上写的一篇综述, 量子软件是否有位数之说? - Climber.pi 的回答. 简单的说, 可以类比成 FPGA 对应的硬件设计语言, 不同的是这里处理的是量子门(酉矩阵)的线路综合. 这种东西足够我们来实现量子算法了, 虽然就像是没有通用 Turing 机只有 Turing 机233. 但是基于量子控制流的那些就复杂得多(看看这里的 No-cloning theorem), 甚至有人为此引入了 Categorical Quantum Mechanics 之类的东西...有兴趣的话, 可以看看 Quipper 或者 ScaffCC, 前者是基于 Haskell 的, 后者是比较正常的 Imperative Programming. 关于前者还有篇科普, 里面对这种"Quantum data, classical control"的方式有很清楚的说明, 还给出了他们实现的几个 non-trivial 的量子算法:


推荐阅读