量子门、位序与相干性¶
学过采样后,再看双量子比特的结果怎样写成字符串。量子比特编号、基态数组索引和字符串位置是相关的约定,不能直接当作同一个标签。应读取这次运行返回的位序元数据。
X 门交换 0 和 1。在两个量子比特的线路中,只对第 0 个施加 X 门。这个不对称状态能帮助判断字符串顺序;Bell 态的对称结果 00、11 则做不到。
"""Use an asymmetric circuit to inspect bit order and compare Bell coherence."""
from __future__ import annotations
import json
import numpy as np
from cascaqit import Circuit
def experiment() -> dict[str, object]:
result = (
Circuit(2).x(0).measure_all().run(shots=16, seed=21, return_probabilities=True)
)
bell = np.array([1, 0, 0, 1], dtype=complex) / np.sqrt(2)
coherent = np.outer(bell, bell.conj())
mixture = np.diag([0.5, 0.0, 0.0, 0.5])
x = np.array([[0, 1], [1, 0]])
xx = np.kron(x, x)
return {
"asymmetric_counts": result.counts,
"bit_order": result.metadata["bitstring_ordering"]["qubit_order"],
"bell_z_probabilities": np.diag(coherent).real.tolist(),
"mixture_z_probabilities": np.diag(mixture).tolist(),
"bell_xx": float(np.trace(coherent @ xx).real),
"mixture_xx": float(np.trace(mixture @ xx).real),
}
if __name__ == "__main__":
print(json.dumps(experiment(), sort_keys=True))
python examples/learning/foundations/gates_and_ordering.py
{
"asymmetric_counts": {
"10": 16
},
"bell_xx": 0.9999999999999998,
"bell_z_probabilities": [
0.4999999999999999,
0.0,
0.0,
0.4999999999999999
],
"bit_order": [
"q0",
"q1"
],
"mixture_xx": 0.0,
"mixture_z_probabilities": [
0.5,
0.0,
0.0,
0.5
]
}
用 bit_order 解读 asymmetric_counts,再把 X 门移到第 1 个量子比特,预测新字符串。理想情况下,每次实验的 16 个样本应完全一致。比起猜测 SDK 是否采用其他工具的惯例,这个实验更直接。
关联并不代表量子态的全部信息¶
后半段计算比较 ( |00⟩ + |11⟩ )/√2 与各占一半的 |00⟩、|11⟩ 经典混合态。它们在 Z 基下的概率相同,但 Bell 态密度矩阵中有非对角相干项,混合态没有。
密度矩阵 ρ 中,可观测量 O 的期望值为 Tr(ρO)。脚本计算 XX,Bell 态的结果为一,混合态为零。这是直接的矩阵计算,不是后端返回的有限 shots 估计。
练习:把 Bell 态中的加号改为减号,Z 概率和 XX 各会怎样变化?
答案
Z 概率不变,XX 变为 −1,因为相对相位改变了。只看一张 Z 基计数直方图,或颠倒字符串顺序,都无法表达这个相位差异。
继续学习 Hamiltonian 与可观测量,或构建 SDK 中的 Bell 线路。
相关概念:位序。