Pauli 可观测量
适用版本 · ArcQML 0.1.0
本页目录
PauliString
PauliString 表示若干 PauliOp 的张量积,只存储非 I 项,并按 qubit 下标排序。构造时检查 qubit 范围和重复量子比特。identity、single、x、y、z 提供快捷构造。两个 PauliString 在同一 qubit 上同时非 I 且 Pauli 不同的位置数量为偶数时对易。
例如二量子比特的 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。
首次进行状态向量计算时,公开 Rust 层会为 SparsePauliOp 准备可复用的执行表示:对角项可以合并,非对角 Pauli 串会转换为位掩码,用于公开可观测量实现中的期望值及 H|ψ⟩ 计算。增加 term 会使已有缓存失效;clone 复制可观测量定义,但不复制执行缓存。因此,在训练循环中复用同一个 Hamiltonian,可以避免每轮重复准备相同的执行信息。
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,每个元素对应一行初态。期望值定义为:
run 创建的可微路径会用于伴随反向,以避免再次构造同一可观测量作用结果。