3. 量子电路模型与经典逻辑电路对比
经典数字电路用导线传递0/1电平,用量子电路传递量子态。两者在“画法”上很像:都是从左到右的时间轴,横线代表一根信号线,方块代表作用在信号上的操作。但语义差别很大——经典门是布尔函数,量子门是酉变换;经典电路允许扇出和随意连线,量子电路受不可克隆定理约束,不能复制未知量子态;经典电路可以丢弃中间结果,量子电路在测量前必须保持相干性。理解这些差异,是把一个经典逻辑设计“翻译”成量子电路的前提。
量子电路的三段式结构
一个完整的量子电路通常由三部分组成。最左侧是初始化:把n个量子比特置为已知基态,默认是 |0⟩⊗n,需要时用X门翻转个别比特,或用H门制备叠加态。中间是门序列:单比特门(X、Y、Z、H、S、T、Rx、Ry、Rz)和受控门(CNOT、CZ、Toffoli、受控旋转)按时间顺序排列,同一列上的门表示可并行执行。最右侧是测量:在计算基下读取,把量子态坍缩为经典比特串,测量结果通常写入经典寄存器。
需要强调,量子电路图从左到右是时间推进,但数学上门序列对应的是从右向左作用的矩阵乘积。若电路为 |ψout⟩ = Uk⋯U2U1|ψin⟩,图中最左边的门 U1 最先作用。写代码时(如Qiskit)按作用顺序依次追加门,与图的时间方向一致,这一点在手工推导和编程之间切换时容易混淆,应固定约定。
经典组合逻辑的设计流程
经典组合逻辑设计一般走这样一条路径:由文字需求得到真值表;写出最小项之和或卡诺图化简,得到布尔表达式;选择门级实现(与、或、非,或NAND/NOR通用门);做扇出、连线、时序与功耗检查。以半加器为例,输入A、B,输出和S = A⊕B,进位C = A·B。真值表四行,S在(0,1)和(1,0)时为1,C仅在(1,1)时为1。用异或门加与门即可实现,这是最经典的组合逻辑最小实现。
可逆计算与Toffoli门
经典与门、或门都是多输入单输出,信息在输出端丢失,因此不可逆。量子门必须是酉变换,维数守恒、信息守恒,所以量子电路天然要求可逆。可逆计算的核心思路是:保留所有输入,把结果写到额外的辅助比特上,形成“输入—输出一一对应”的映射。Toffoli门(CCNOT)是可逆计算的代表:三个输入(a, b, c),输出(a, b, c⊕(a·b))。前两个比特原样保留,第三个比特在a=b=1时翻转。它本身是自逆的,连用两次恢复原状。
用Toffoli实现经典与逻辑非常直接:把c初始化为|0⟩,则输出第三位就是a·b,而a、b仍保留,信息没有丢失。异或则用CNOT实现:输入(a, b),输出(a, a⊕b)。把这两者组合,就能把半加器映射为量子电路:S取a⊕b,C取a·b,且a、b作为“垃圾”输出保留下来——在可逆框架里它们不是垃圾,而是可逆性所要求保留的输入副本。
实战:把半加器写成量子电路
下面以Qiskit为例,把上面的结构落成可运行代码。约定:q0=a,q1=b,q2=S,q3=C,全部初始化为|0⟩。先制备输入(示例取a=1、b=1,用X门翻转q0、q1),再依次施加CNOT和Toffoli,最后测量全部四个比特。
from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator
qc = QuantumCircuit(4, 4)
qc.x(0) # 示例输入 a = 1
qc.x(1) # 示例输入 b = 1
qc.cx(0, 2) # S = a XOR b
qc.ccx(0, 1, 3) # C = a AND b
qc.measure([0, 1, 2, 3], [0, 1, 2, 3])
sim = AerSimulator()
result = sim.run(transpile(qc, sim), shots=1024).result()
print(result.get_counts()) # 期望 {'1111': 1024}
对a=1、b=1,预期S=0、C=1,加上保留的a、b,测量结果应为1111(按q3q2q1q0顺序,即C=1、S=1?这里需按比特顺序核对:Qiskit默认c[0]对应q[0],字符串从左到右是c3c2c1c0,故a=1,b=1,S=0,C=1对应c3c2c1c0=1011)。实际运行时应以比特顺序为准逐位核对,而不是凭直觉读串。若把输入改为a=1、b=0,则S=1、C=0,结果串相应变化。这个“逐位核对”的过程,正是验证量子电路是否忠实实现经典逻辑的关键步骤。
对比要点与常见误区
第一,扇出问题。经典电路可以把一根线接到多个门输入,量子电路不能复制未知态,需要扇出时必须借助CNOT把信息“抄”到初态为|0⟩的辅助位上,且只能复制计算基态。第二,辅助位管理。Toffoli需要目标位初态为|0⟩才能得到干净的与结果,若辅助位已被占用,结果会带上多余相位或错误。第三,测量位置。经典电路可以随时探测中间节点,量子电路中途测量会破坏相干性,通常把测量集中到末端。第四,代价评估。经典半加器两个门,量子版本用了1个CNOT加1个Toffoli,且多占两根线;Toffoli在容错量子计算中还需分解为多个T门和CNOT,实际代价远高于经典。理解这些差异,才能在算法设计中判断哪些经典逻辑值得量子化、哪些应留在经典侧处理。
把半加器扩展到全加器时,可逆设计通常采用“保留进位”结构:用Toffoli计算进位、用CNOT累加和,并把中间进位作为辅助输出保留,最后再用逆操作清理辅助位。这一“计算—复制—反计算”的模式,是量子算术电路(如加法器、比较器)的通用骨架,也是后续学习Shor算法中模幂运算电路的基础。