Pauli 可观测量

适用版本 · ArcQML 0.1.0

本页目录

PauliString

PauliString 表示若干 PauliOp 的张量积,只存储非 I 项,并按 qubit 下标排序。构造时检查 qubit 范围和重复量子比特。identity、single、x、y、z 提供快捷构造。两个 PauliString 在同一 qubit 上同时非 I 且 Pauli 不同的位置数量为偶数时对易。

P=Pn−1⊗⋯⊗P1⊗P0,Pq∈{I,X,Y,Z}.P=P_{n-1}\otimes\cdots\otimes P_1\otimes P_0, \qquad P_q\in\{I,X,Y,Z\}.

例如二量子比特的 X(0) 对应 I ⊗ X,将 |00⟩ 映射到 |01⟩。multiply(rhs) 返回 (复相位, 结果 PauliString)。这是 Pauli 代数辅助功能;SparsePauliOp 的公开系数则被限制为有限实数,因此可观测量期望值是实数。

SparsePauliOp 与编译缓存

SparsePauliOp 是 PauliTerm 的集合,每个 term 为有限实数 coefficient 和 PauliString。Hamiltonian、PauliSum、PauliObservable 是它的类型别名。构造时要求 num_qubits 非零且所有项的量子比特数一致;scale 和 simplify 也拒绝非有限因子或非法 tolerance。

H=∑jcjPj,cj∈R.H=\sum_j c_jP_j, \qquad c_j\in\mathbb{R}.

首次进行状态向量计算时,公开 Rust 层会为 SparsePauliOp 准备可复用的执行表示:对角项可以合并,非对角 Pauli 串会转换为位掩码,用于公开可观测量实现中的期望值及 H|ψ⟩ 计算。增加 term 会使已有缓存失效;clone 复制可观测量定义,但不复制执行缓存。因此,在训练循环中复用同一个 Hamiltonian,可以避免每轮重复准备相同的执行信息。

rust
let mut h = SparsePauliOp::single(2, 0usize, Pauli::Z, 0.5)?;
h.add_pauli_string(-1.0, PauliString::x(2, 1usize)?)?;
// H = 0.5 Z(0) − 1.0 X(1)

期望值语义

对于当前纯态,单态模拟器的 expectation_observable 返回 F64 标量 Tensor;batch 版本返回 shape 为 [B] 的 F64 Tensor,每个元素对应一行初态。期望值定义为:

⟨H⟩=Re⁡ ⁣(⟨ψ∣H∣ψ⟩).\langle H\rangle =\operatorname{Re}\!\left( \langle\psi\rvert H\lvert\psi\rangle \right).

run 创建的可微路径会用于伴随反向,以避免再次构造同一可观测量作用结果。