第一个角度下的 CNOT 门的共轭变换规则详解
对于 CNOT(c,t)\text{CNOT}(c,t)CNOT(c,t)(控制位 ccc,目标位 ttt),有以下标准的共轭关系:
- Zt →CNOT(c,t) ZcZtZ_t \;\xrightarrow{\text{CNOT}(c,t)}\; Z_c Z_tZtCNOT(c,t) ZcZt
- Xc →CNOT(c,t) XcXtX_c \;\xrightarrow{\text{CNOT}(c,t)}\; X_c X_tXcCNOT(c,t) XcXt
下面分别解释 Zt →CNOT(c,t) ZcZtZ_t \;\xrightarrow{\text{CNOT}(c,t)}\; Z_c Z_tZtCNOT(c,t) ZcZt 的含义,和 Xc →CNOT(c,t) XcXtX_c \;\xrightarrow{\text{CNOT}(c,t)}\; X_c X_tXcCNOT(c,t) XcXt 的含义。
一、符号约定
这里的箭头 →CNOT(c,t)\xrightarrow{\text{CNOT}(c,t)}CNOT(c,t) 表示共轭变换(conjugation),即:
A →U B⟺UAU†=BA \;\xrightarrow{U}\; B \quad\Longleftrightarrow\quad U A U^\dagger = BAU B⟺UAU†=B
因此两个关系严格表述为:
- CNOT(c,t)⋅Zt⋅CNOT(c,t)†=ZcZt\text{CNOT}(c,t) \cdot Z_t \cdot \text{CNOT}(c,t)^\dagger = Z_c Z_tCNOT(c,t)⋅Zt⋅CNOT(c,t)†=ZcZt
- CNOT(c,t)⋅Xc⋅CNOT(c,t)†=XcXt\text{CNOT}(c,t) \cdot X_c \cdot \text{CNOT}(c,t)^\dagger = X_c X_tCNOT(c,t)⋅Xc⋅CNOT(c,t)†=XcXt
二、Zt →CNOT(c,t) ZcZtZ_t \;\xrightarrow{\text{CNOT}(c,t)}\; Z_c Z_tZtCNOT(c,t) ZcZt 的含义
物理含义
对 目标位 ttt 施加 ZZZ 算符,经过 CNOT 门的前后共轭变换后,等效于对 控制位 ccc 和目标位 ttt 同时 施加 ZZZ 算符。
直观理解
- ZZZ 算符给量子态施加一个相位(Z∣0⟩=∣0⟩Z|0\rangle = |0\rangleZ∣0⟩=∣0⟩, Z∣1⟩=−∣1⟩Z|1\rangle = -|1\rangleZ∣1⟩=−∣1⟩)。
- 在 CNOT 的视角下,ZZZ 作用在目标位上时,由于控制位和目标位的纠缠关联,这个相位操作"回溯"(back-propagate)到了控制位。
- 这是 Clifford 电路中相位传播的核心规则。
举例验证
考虑两比特态 ∣ψ⟩=∣1⟩c∣+⟩t|\psi\rangle = |1\rangle_c |+\rangle_t∣ψ⟩=∣1⟩c∣+⟩t,其中 ∣+⟩=∣0⟩+∣1⟩2|+\rangle = \frac{|0\rangle+|1\rangle}{\sqrt{2}}∣+⟩=2 ∣0⟩+∣1⟩。
路径一:先 ZtZ_tZt,再 CNOT
Zt∣ψ⟩=∣1⟩c⊗Z∣+⟩t=∣1⟩c∣−⟩tZ_t |\psi\rangle = |1\rangle_c \otimes Z|+\rangle_t = |1\rangle_c |-\rangle_tZt∣ψ⟩=∣1⟩c⊗Z∣+⟩t=∣1⟩c∣−⟩t
然后 CNOT:
CNOT(c,t) (∣1⟩c∣−⟩t)=∣1⟩c⊗X∣−⟩t=∣1⟩c(−∣−⟩t)=−∣1⟩c∣−⟩t\text{CNOT}(c,t) \, (|1\rangle_c |-\rangle_t) = |1\rangle_c \otimes X|-\rangle_t = |1\rangle_c (-|-\rangle_t) = -|1\rangle_c |-\rangle_tCNOT(c,t)(∣1⟩c∣−⟩t)=∣1⟩c⊗X∣−⟩t=∣1⟩c(−∣−⟩t)=−∣1⟩c∣−⟩t
路径二:先 CNOT,再 ZcZtZ_c Z_tZcZt
CNOT(c,t)∣ψ⟩=∣1⟩c⊗X∣+⟩t=∣1⟩c∣+⟩t\text{CNOT}(c,t) |\psi\rangle = |1\rangle_c \otimes X|+\rangle_t = |1\rangle_c |+\rangle_tCNOT(c,t)∣ψ⟩=∣1⟩c⊗X∣+⟩t=∣1⟩c∣+⟩t
然后 ZcZtZ_c Z_tZcZt:
ZcZt(∣1⟩c∣+⟩t)=(Z∣1⟩c)⊗(Z∣+⟩t)=(−∣1⟩c)⊗∣−⟩t=−∣1⟩c∣−⟩tZ_c Z_t (|1\rangle_c |+\rangle_t) = (Z|1\rangle_c) \otimes (Z|+\rangle_t) = (-|1\rangle_c) \otimes |-\rangle_t = -|1\rangle_c |-\rangle_tZcZt(∣1⟩c∣+⟩t)=(Z∣1⟩c)⊗(Z∣+⟩t)=(−∣1⟩c)⊗∣−⟩t=−∣1⟩c∣−⟩t
两条路径结果相同 ,验证了 UZtU†=ZcZtU Z_t U^\dagger = Z_c Z_tUZtU†=ZcZt。
三、Xc →CNOT(c,t) XcXtX_c \;\xrightarrow{\text{CNOT}(c,t)}\; X_c X_tXcCNOT(c,t) XcXt 的含义
物理含义
对 控制位 ccc 施加 XXX 算符(翻转),经过 CNOT 门的前后共轭变换后,等效于对 控制位 ccc 和目标位 ttt 同时 施加 XXX 算符。
直观理解
- XXX 是比特翻转算符(X∣0⟩=∣1⟩X|0\rangle = |1\rangleX∣0⟩=∣1⟩, X∣1⟩=∣0⟩X|1\rangle = |0\rangleX∣1⟩=∣0⟩)。
- 在 CNOT 门的视角下,翻转控制位 ccc 等效于:不仅翻转了 ccc 本身,由于 CNOT 的控制关系 ,目标位 ttt 也跟着被翻转了------这正是 CNOT 门"控制翻转"行为的体现。
举例验证
考虑两比特态 ∣ϕ⟩=∣0⟩c∣0⟩t|\phi\rangle = |0\rangle_c |0\rangle_t∣ϕ⟩=∣0⟩c∣0⟩t。
路径一:先 XcX_cXc,再 CNOT
Xc∣ϕ⟩=∣1⟩c∣0⟩tX_c |\phi\rangle = |1\rangle_c |0\rangle_tXc∣ϕ⟩=∣1⟩c∣0⟩t
然后 CNOT:
CNOT(c,t) (∣1⟩c∣0⟩t)=∣1⟩c∣1⟩t\text{CNOT}(c,t) \, (|1\rangle_c |0\rangle_t) = |1\rangle_c |1\rangle_tCNOT(c,t)(∣1⟩c∣0⟩t)=∣1⟩c∣1⟩t
路径二:先 CNOT,再 XcXtX_c X_tXcXt
CNOT(c,t)∣ϕ⟩=∣0⟩c∣0⟩t\text{CNOT}(c,t) |\phi\rangle = |0\rangle_c |0\rangle_tCNOT(c,t)∣ϕ⟩=∣0⟩c∣0⟩t
然后 XcXtX_c X_tXcXt:
XcXt(∣0⟩c∣0⟩t)=∣1⟩c∣1⟩tX_c X_t (|0\rangle_c |0\rangle_t) = |1\rangle_c |1\rangle_tXcXt(∣0⟩c∣0⟩t)=∣1⟩c∣1⟩t
两条路径结果相同 ,验证了 UXcU†=XcXtU X_c U^\dagger = X_c X_tUXcU†=XcXt。
四、总结对比
| 关系 | 作用位 | 共轭结果 | 物理本质 |
|---|---|---|---|
| Zt→ZcZtZ_t \to Z_c Z_tZt→ZcZt | 目标位 ttt 的 ZZZ | 传播到控制位 ccc | 相位回溯(Phase kickback) |
| Xc→XcXtX_c \to X_c X_tXc→XcXt | 控制位 ccc 的 XXX | 传播到目标位 ttt | 翻转前馈(Bit forward) |
这两条规则是 CNOT 门属于 Clifford 群 的核心体现,也是量子纠错码( stabilizer code )、量子线路优化和测量驱动的量子计算中频繁使用的基本恒等式。
第二个角度下的
一、规则
在 Heisenberg 图像 下,CNOT 门的共轭变换(即 CNOT†⋅(⋅)⋅CNOT\text{CNOT}^\dagger \cdot (\cdot) \cdot \text{CNOT}CNOT†⋅(⋅)⋅CNOT)结果如下:
| 输入算符 | 输出算符 |
|---|---|
| XcX_cXc | XcXtX_c X_tXcXt |
| XtX_tXt | XtX_tXt |
| ZcZ_cZc | ZcZ_cZc |
| ZtZ_tZt | ZcZtZ_c Z_tZcZt |
所以:
Zt →CNOT(c,t) ZcZt\boxed{Z_t \;\xrightarrow{\text{CNOT}(c,t)}\; Z_c Z_t}ZtCNOT(c,t) ZcZt
Xc →CNOT(c,t) XcXt\boxed{X_c \;\xrightarrow{\text{CNOT}(c,t)}\; X_c X_t}XcCNOT(c,t) XcXt
这两条完全对称,只是角色不同。
二、Xc→XcXtX_c \to X_c X_tXc→XcXt 的含义
正式表述
在 CNOT 门(控制 ccc,目标 ttt)之后作用 XcX_cXc,等价于在 CNOT 门之前作用 XcXtX_c X_tXcXt。
数学形式:
CNOT† (Xc⊗It) CNOT=Xc⊗Xt\text{CNOT}^\dagger \;(X_c \otimes I_t)\; \text{CNOT} = X_c \otimes X_tCNOT†(Xc⊗It)CNOT=Xc⊗Xt
因为 CNOT 是自逆(CNOT†=CNOT\text{CNOT}^\dagger = \text{CNOT}CNOT†=CNOT),也可以写:
CNOT (Xc⊗It)=(Xc⊗Xt) CNOT\text{CNOT} \;(X_c \otimes I_t) = (X_c \otimes X_t)\; \text{CNOT}CNOT(Xc⊗It)=(Xc⊗Xt)CNOT
物理含义
- 控制比特上的 X 错误 会向前传播到目标比特。
- 错误不是"消失并出现在别处",而是变成两个错误:控制上继续存在,目标上新出现。
举例
两个比特初始 ∣00⟩|00\rangle∣00⟩。
没有错误时 :
CNOT∣00⟩=∣00⟩\text{CNOT}|00\rangle = |00\rangleCNOT∣00⟩=∣00⟩
在 CNOT 之后 对控制比特作用 XcX_cXc:
Xc∣00⟩=∣10⟩X_c |00\rangle = |10\rangleXc∣00⟩=∣10⟩
现在问 :哪个错误在 CNOT 之前能得到相同最终态?
取 XcXtX_c X_tXcXt 作用在初始态:
XcXt∣00⟩=Xc∣01⟩=∣11⟩X_c X_t |00\rangle = X_c |01\rangle = |11\rangleXcXt∣00⟩=Xc∣01⟩=∣11⟩
然后 CNOT:
CNOT∣11⟩=∣10⟩\text{CNOT}|11\rangle = |10\rangleCNOT∣11⟩=∣10⟩
结果相同(∣10⟩|10\rangle∣10⟩)。✅
所以:CNOT 后的 XcX_cXc = CNOT 前的 XcXtX_c X_tXcXt。
三、Zt→ZcZtZ_t \to Z_c Z_tZt→ZcZt 的含义
正式表述
在 CNOT 门(控制 ccc,目标 ttt)之后作用 ZtZ_tZt,等价于在 CNOT 门之前作用 ZcZtZ_c Z_tZcZt。
数学形式:
CNOT† (Ic⊗Zt) CNOT=Zc⊗Zt\text{CNOT}^\dagger \;(I_c \otimes Z_t)\; \text{CNOT} = Z_c \otimes Z_tCNOT†(Ic⊗Zt)CNOT=Zc⊗Zt
或:
CNOT (Ic⊗Zt)=(Zc⊗Zt) CNOT\text{CNOT} \;(I_c \otimes Z_t) = (Z_c \otimes Z_t)\; \text{CNOT}CNOT(Ic⊗Zt)=(Zc⊗Zt)CNOT
物理含义
- 目标比特上的 Z 错误 会向后传播到控制比特。
- 结果同样是两个错误:目标上保留,控制上新出现。
举例
同初态 ∣00⟩|00\rangle∣00⟩。
在 CNOT 之后 对目标比特作用 ZtZ_tZt:
Zt∣00⟩=∣01⟩Z_t |00\rangle = |01\rangleZt∣00⟩=∣01⟩
问 :哪个错误在 CNOT 之前能得到相同最终态?
取 ZcZtZ_c Z_tZcZt 作用在初始态:
ZcZt∣00⟩=Zc∣01⟩=∣11⟩Z_c Z_t |00\rangle = Z_c |01\rangle = |11\rangleZcZt∣00⟩=Zc∣01⟩=∣11⟩
然后 CNOT:
CNOT∣11⟩=∣10⟩\text{CNOT}|11\rangle = |10\rangleCNOT∣11⟩=∣10⟩
得到 ∣10⟩|10\rangle∣10⟩,不等于 ∣01⟩|01\rangle∣01⟩。❌
等等------这说明我的例子错了。让我重新算。
重新严格举例(关键修正)
我们要验证:
CNOT⋅(Ic⊗Zt)=(Zc⊗Zt)⋅CNOT\text{CNOT} \cdot (I_c \otimes Z_t) = (Z_c \otimes Z_t) \cdot \text{CNOT}CNOT⋅(Ic⊗Zt)=(Zc⊗Zt)⋅CNOT
左边 :先作用 I⊗ZI \otimes ZI⊗Z,再 CNOT。
初始 ∣00⟩|00\rangle∣00⟩:
- I⊗Z∣00⟩=∣01⟩I \otimes Z |00\rangle = |01\rangleI⊗Z∣00⟩=∣01⟩
- CNOT∣01⟩=∣01⟩\text{CNOT}|01\rangle = |01\rangleCNOT∣01⟩=∣01⟩(因为控制=0,目标不变)
右边 :先 CNOT,再 Z⊗ZZ \otimes ZZ⊗Z。
初始 ∣00⟩|00\rangle∣00⟩:
- CNOT∣00⟩=∣00⟩\text{CNOT}|00\rangle = |00\rangleCNOT∣00⟩=∣00⟩
- Z⊗Z∣00⟩=Z∣0⟩⊗Z∣0⟩=(+1)∣0⟩⊗(+1)∣0⟩=∣00⟩Z \otimes Z |00\rangle = Z|0\rangle \otimes Z|0\rangle = (+1)|0\rangle \otimes (+1)|0\rangle = |00\rangleZ⊗Z∣00⟩=Z∣0⟩⊗Z∣0⟩=(+1)∣0⟩⊗(+1)∣0⟩=∣00⟩
得到 ∣00⟩|00\rangle∣00⟩ ≠ ∣01⟩|01\rangle∣01⟩??这显然不对,说明我选的初态不好------因为这些算符不是对角化 ∣00⟩|00\rangle∣00⟩。我们要找的是等式对任意态成立,不应该挑特殊态验证相等,而是验证矩阵。
我之前已经用矩阵验证过(上一轮),得到了 CNOT(I⊗Z)CNOT=Z⊗I\text{CNOT}(I\otimes Z)\text{CNOT} = Z \otimes ICNOT(I⊗Z)CNOT=Z⊗I,不是 Z⊗ZZ \otimes ZZ⊗Z。所以真正的矩阵结果是 :
CNOT⋅(I⊗Zt)⋅CNOT=Zc⊗It\text{CNOT} \cdot (I \otimes Z_t) \cdot \text{CNOT} = Z_c \otimes I_tCNOT⋅(I⊗Zt)⋅CNOT=Zc⊗It
四、核心矛盾:书上的 Zt→ZcZtZ_t \to Z_c Z_tZt→ZcZt 错了吗?
没有错。产生矛盾是因为我混淆了两个不同的 CNOT 方向。
关键区别
| 规则 | 控制 | 目标 | 方向 |
|---|---|---|---|
| Zt→ZcZtZ_t \to Z_c Z_tZt→ZcZt | ccc | ttt | 目标 Z 传回控制 |
| Zc→ZcZ_c \to Z_cZc→Zc | ccc | ttt | 控制 Z 不变 |
我刚刚验证的 CNOT(I⊗Z)CNOT=Z⊗I\text{CNOT}(I\otimes Z)\text{CNOT} = Z\otimes ICNOT(I⊗Z)CNOT=Z⊗I 是错的 (我在上一轮矩阵算错了,非常抱歉)。让我重新老老实实算一遍。
严格矩阵计算(正确版)
CNOT 矩阵(控制第1位,目标第2位,基序 ∣00⟩,∣01⟩,∣10⟩,∣11⟩|00\rangle,|01\rangle,|10\rangle,|11\rangle∣00⟩,∣01⟩,∣10⟩,∣11⟩):
CNOT=(1000010000010010)\text{CNOT} = \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \end{pmatrix}CNOT= 1000010000010010
I⊗ZI \otimes ZI⊗Z:
I⊗Z=(10000−1000010000−1)I \otimes Z = \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & -1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & -1 \end{pmatrix}I⊗Z= 10000−1000010000−1
计算 A=CNOT⋅(I⊗Z)A = \text{CNOT} \cdot (I \otimes Z)A=CNOT⋅(I⊗Z):
- 第1列(|00⟩):(I⊗Z)|00⟩=|00⟩ → CNOT→|00⟩ → (1,0,0,0)T(1,0,0,0)^T(1,0,0,0)T
- 第2列(|01⟩):(I⊗Z)|01⟩=-|01⟩ → CNOT→ -|01⟩ → (0,−1,0,0)T(0,-1,0,0)^T(0,−1,0,0)T
- 第3列(|10⟩):(I⊗Z)|10⟩=|10⟩ → CNOT→|11⟩ → (0,0,0,1)T(0,0,0,1)^T(0,0,0,1)T
- 第4列(|11⟩):(I⊗Z)|11⟩=-|11⟩ → CNOT→ -|10⟩ → (0,0,−1,0)T(0,0,-1,0)^T(0,0,−1,0)T
所以:
A=(10000−100000−10010)A = \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & -1 & 0 & 0 \\ 0 & 0 & 0 & -1 \\ 0 & 0 & 1 & 0 \end{pmatrix}A= 10000−100000100−10
再右乘 CNOT(因为 CNOT(I⊗Z)CNOT=A⋅CNOT\text{CNOT}(I\otimes Z)\text{CNOT} = A \cdot \text{CNOT}CNOT(I⊗Z)CNOT=A⋅CNOT):
计算 A⋅CNOTA \cdot \text{CNOT}A⋅CNOT:
- 第1列(|00⟩):CNOT|00⟩=|00⟩ → A|00⟩=第1列(1,0,0,0)T(1,0,0,0)^T(1,0,0,0)T
- 第2列(|01⟩):CNOT|01⟩=|01⟩ → A|01⟩=(0,−1,0,0)T(0,-1,0,0)^T(0,−1,0,0)T
- 第3列(|10⟩):CNOT|10⟩=|11⟩ → A|11⟩=(0,0,−1,0)T(0,0,-1,0)^T(0,0,−1,0)T
- 第4列(|11⟩):CNOT|11⟩=|10⟩ → A|10⟩=(0,0,0,1)T(0,0,0,1)^T(0,0,0,1)T
得到:
A⋅CNOT=(10000−10000−100001)A\cdot \text{CNOT} = \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & -1 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}A⋅CNOT= 10000−10000−100001
这是 Zc⊗ZtZ_c \otimes Z_tZc⊗Zt !
因为 Z⊗Z=diag(1,−1,−1,1)Z \otimes Z = \text{diag}(1, -1, -1, 1)Z⊗Z=diag(1,−1,−1,1)。
✅ 验证成功 :
CNOT⋅(I⊗Zt)⋅CNOT=Zc⊗Zt\text{CNOT} \cdot (I \otimes Z_t) \cdot \text{CNOT} = Z_c \otimes Z_tCNOT⋅(I⊗Zt)⋅CNOT=Zc⊗Zt
之前我矩阵算错,误写成 Z⊗IZ \otimes IZ⊗I,这里纠正。你是对的,书上的规则正确。
五、完整复述两条规则
1. Zt →CNOT(c,t) ZcZtZ_t \;\xrightarrow{\text{CNOT}(c,t)}\; Z_c Z_tZtCNOT(c,t) ZcZt
含义 :在 CNOT 门之后测量或作用 ZtZ_tZt(目标比特的 Z 算符),等价于在 CNOT 门之前测量或作用 ZcZtZ_c Z_tZcZt(控制比特与目标比特的 Z 算符的乘积)。
物理:Z 错误从目标向后传播到控制,且自身保留,变成两个 Z 错误。
举例 :初态 ∣+⟩c⊗∣0⟩t=∣00⟩+∣10⟩2|+\rangle_c \otimes |0\rangle_t = \frac{|00\rangle + |10\rangle}{\sqrt{2}}∣+⟩c⊗∣0⟩t=2 ∣00⟩+∣10⟩
- 先 CNOT,后 ZtZ_tZt:
CNOT → ∣00⟩+∣11⟩2\frac{|00\rangle + |11\rangle}{\sqrt{2}}2 ∣00⟩+∣11⟩,ZtZ_tZt → ∣00⟩−∣11⟩2\frac{|00\rangle - |11\rangle}{\sqrt{2}}2 ∣00⟩−∣11⟩- 先 ZcZtZ_c Z_tZcZt,后 CNOT:
ZcZtZ_c Z_tZcZt 作用初态 → ∣00⟩−∣10⟩2\frac{|00\rangle - |10\rangle}{\sqrt{2}}2 ∣00⟩−∣10⟩,CNOT → ∣00⟩−∣11⟩2\frac{|00\rangle - |11\rangle}{\sqrt{2}}2 ∣00⟩−∣11⟩ ✅
2. Xc →CNOT(c,t) XcXtX_c \;\xrightarrow{\text{CNOT}(c,t)}\; X_c X_tXcCNOT(c,t) XcXt
含义 :在 CNOT 门之后测量或作用 XcX_cXc(控制比特的 X 算符),等价于在 CNOT 门之前测量或作用 XcXtX_c X_tXcXt。
物理:X 错误从控制向前传播到目标,变成两个 X 错误。
举例 :初态 ∣0⟩c⊗∣+⟩t=∣00⟩+∣01⟩2|0\rangle_c \otimes |+\rangle_t = \frac{|00\rangle + |01\rangle}{\sqrt{2}}∣0⟩c⊗∣+⟩t=2 ∣00⟩+∣01⟩
- 先 CNOT,后 XcX_cXc:
CNOT → ∣00⟩+∣01⟩2\frac{|00\rangle + |01\rangle}{\sqrt{2}}2 ∣00⟩+∣01⟩,XcX_cXc → ∣10⟩+∣11⟩2\frac{|10\rangle + |11\rangle}{\sqrt{2}}2 ∣10⟩+∣11⟩- 先 XcXtX_c X_tXcXt,后 CNOT:
XcXtX_c X_tXcXt 作用初态 → ∣10⟩+∣11⟩2\frac{|10\rangle + |11\rangle}{\sqrt{2}}2 ∣10⟩+∣11⟩,CNOT(控制=1翻转目标)保持不变 ✅
结论
| 规则 | 方向 | 传播行为 |
|---|---|---|
| Zt→ZcZtZ_t \to Z_c Z_tZt→ZcZt | 目标 → 控制 | Z 错误向后传播 |
| Xc→XcXtX_c \to X_c X_tXc→XcXt | 控制 → 目标 | X 错误向前传播 |
这两条规则是完全对偶的。