双因子分解块编码(Double Factorization)

English · 简体中文

类别 C2 · 模块 oracq.algorithms.input_model.lowrank · 阶段 V1

概述

量子化学电子哈密顿量的双因子分解(DF)把二体积分张量压缩为低秩形式

\[ H = \mathrm{scalar}\cdot I + \sum_r U_r\, \mathrm{diag}(g_r)\, U_r^\dagger , \]

每个秩项是对角谱 \(g_r\) 经旋转 \(U_r\) 共轭的厄米矩阵。实现依据 Berry et al. 2019 与 von Burg et al. 2021 的"低秩张量 → LCU → BE"管道(文献引用见模块 docstring):积分张量作为经典输入数据给出,本模块不做真实的化学积分计算,产出的块编码可直接进入 qubitization。

接口与输入模型

DoubleFactorization(scalar, rotations, spectra)
DoubleFactorization.from_symmetric(scalar, rotations, factors)
diagonalize_symmetric(matrix, *, tolerance=1e-12, max_sweeps=100)
double_factorized_encoding(df, *, name=None)

API 入口:DoubleFactorization、diagonalize_symmetric、double_factorized_encoding

  • DoubleFactorization:DF 输入模型(input model 为 CP——张量数据作为经典参数直接给出,即 algorithm-coverage 中"低秩张量(HAM)→ BE"管道)。rotations 为显式小酉矩阵(维度 2..32 内二的幂,按列正交校验酉性,容差 1e-9),spectra 为对应实谱;数据类的属性 width 给出目标量子位数,rank 给出秩项数。

  • from_symmetric:物理 DF 的经典预处理入口——接收显式酉 \(U_r\) 与实对称 \(G_r\),把 \(G_r = V_r\,\mathrm{diag}(g_r)\,V_r^{\mathsf T}\) 的特征向量矩阵折叠进旋转(\(U_r V_r\))。

  • diagonalize_symmetric:实对称矩阵的 Jacobi 特征分解,返回 (特征值, 特征向量矩阵);非对称输入在生成期抛 ValidationError。

  • double_factorized_encoding:组装 LCU 块编码(name 形参保留但当前不参与命名)。

返回 BlockEncoding,模块属性:

属性

含义

be_alpha

\(\lvert\mathrm{scalar}\rvert + \sum_r \lVert g_r\rVert_1\)(各谱 1-范数之和)

be_form

"double_factorization"

df_rank / lcu_terms

秩项数 / 外层 LCU 的非零项数

df_lambda

与 be_alpha 同值的 λ 口径报告

实现要点

外层 LCU 的 PREPARE 在秩指标 \(r\) 上,权重 \(\propto \lVert g_r\rVert_1\);scalar 非零时以 (scalar, identity) 并入同一 LCU,全部系数为零(含全零谱)时抛 ValidationError。每个秩项的项块编码是 \(U_r^\dagger\cdot\mathrm{diag}\cdot U_r\):对角部分在单比特 signal 上对每个基态 \(\lvert t\rangle\) 施加受控 \(R_y(\theta_t)\),\(\cos(\theta_t/2) = g_t/\alpha_r\)、\(\alpha_r = \sum_p\lvert g_p\rvert\) 取谱 1-范数,(0,0) 块恰为 \(\mathrm{diag}(g_r)/\alpha_r\);两侧共轭施加合成的 \(U_r\)。

\(U_r\) 由两能级分解合成:逐列消元为对角相位后按逆序回放,每个两能级酉经 ZYZ 分解(\(e^{i\varphi}R_z(\alpha)R_y(\beta)R_z(\gamma)\))加沿 Gray 路径的多控 X 转置实现。寄存器布局:项块编码为 target(n) | signal(1),外层 LCU 的 signal 为 selector(项数所需位数)拼接 work(1)。

适用边界:显式矩阵路径仅支持 2..32 维(不超过 5 个量子位)的验证小实例;大规模时 \(U_r\)/\(G_r\) 的谱与旋转角度表应改走 QRAM 数据绑定(见 prepare_select 的三层范式)。归一化口径上,单比特正定 \(g\) 的 DF α 等于 \(\mathrm{tr}(g)\),不引入 Pauli 展开的非对角冗余(紧性见证见验证节)。

验证方案

类别 C2(近似连续语义,判定准则见 ../development/validation-plan.md §2):块编码的零信号块须与目标哈密顿量在容差内一致。三层证据:

  • 结构:tests/core/test_lowrank.py:DiagonalizeSymmetricTests.test_reconstructs_factor(\(V\,\mathrm{diag}(\lambda)\,V^{\mathsf T}\) 重构与特征向量正交性,places = 10)与 test_rejects_non_symmetric;DoubleFactorizationTests 的构造属性断言(be_form、df.rank == 1 / df.width == 1);ThcTests.test_invalid_inputs_fail_at_generation 覆盖 DF 负例(空秩项、谱长度不符、非酉旋转、scalar 非数值、from_symmetric 数量不一致)。

  • 数值:DoubleFactorizationTests.test_single_rank_block_equals_hamiltonian——单秩 DF 经 assert_block_equals 与 \(G\) 逐列对拍(places = 9);test_scalar_and_rotated_ranks——scalar 与 Hadamard 旋转的第二秩,期望矩阵在测试内独立组装后对拍,α 与 \(\lvert\mathrm{scalar}\rvert + \sum_r\lVert g_r\rVert_1\) 对拍(places = 10);test_feeds_qubitization_walk——产物进入 transforms.qubitization_walk 后无未绑定槽,寄存器为 ["target", "signal"]。

  • 绑定:DoubleFactorizationTests.test_matches_pauli_encoding_block——同一哈密顿量的 DF 编码与 Pauli LCU 编码经 block_column helper 逐列跨 BE 对拍(places = 9),覆盖两条独立编码路径的一致性。

α 紧性见证(V1 新增):test_alpha_matches_closed_form_eigenvalues 用 2×2 闭式特征值 \(\lambda_\pm = (t \pm \sqrt{t^2-4d})/2\)(\(t\) 为迹、\(d\) 为行列式)独立计算 \(\sum\lvert\lambda\rvert\) 与 be.alpha 对拍(places = 10,实测 2.0);test_df_alpha_tighter_than_pauli 取非对角主导的正定 \(g\),实测 DF α = 1.4 ≤ Pauli LCU α = 1.5(理论条件:单比特 PSD 矩阵上 Pauli α − DF α = \(\lvert g_{01}\rvert + \lvert\Delta/2\rvert - \mathrm{tr}/2\),非对角主导时为正)。

已知缺口与计划阶段

无已知缺口,阶段 V1 见证已齐(块对拍 + 闭式特征值与 Pauli 对照的 α 紧性 + 跨编码绑定一致性 + qubitization 衔接)。

相关链接

数值验证

论文级数值验证脚本:tests/verification/verify_blockencoding.py(真实后端执行,无 mock、无 skip;2026-09-16 共 73 个案例全部通过),产物 out/verification/blockencoding.json。本页对应 diagonalize-symmetric-*、df-encoding-* 与 diagonal-be-* 共 11 个案例(对角块编码 _diagonal_encoding 即 DF 秩项的内核)。

实验设计:

  1. 对角 BE 多规模(_diagonal_encoding,论文点名的 diagonal BE):三组谱(混合符号、含零元、三角函数生成)dim ∈ {2, 4, 8} 走 OriginIR-ext + UniQC to_matrix 全幺正提取((0,0) 块对照 \(\mathrm{diag}(g)/\alpha\) 并报告失败分支泄漏),dim ∈ {16, 32, 64} 走 reference + rir-pysparq 逐列;另有公开组装一致性案例——同一对角谱经 double_factorized_encoding(恒等旋转、双秩同谱)与直连对角 BE 的块逐元一致。

  2. Jacobi 特征分解:随机实对称矩阵 dim ∈ {2, 4, 8, 16, 32},特征值对照 numpy.linalg.eigh,并检验重构 \(V\mathrm{diag}(\lambda)V^{\mathsf T}\) 与正交性。

  3. DF 块编码多秩多规模:2×2 双秩 + scalar(from_symmetric 预处理,全幺正提取)、4×4 三秩随机正交旋转(全幺正提取)、8×8 双秩(reference + rir);期望矩阵由 numpy 独立组装,α 对照 \(|\mathrm{scalar}|+\sum_r\lVert g_r\rVert_1\) 闭式。

案例

规模

后端路径

指标

数值

diagonal-be-unitary-d2/d4/d8

dim 2/4/8,α=2.0/3.25/4.0

originir-ext + to_matrix,三后端交叉

max_error

5.6e-17 / 5.6e-17 / 1.1e-16

diagonal-be-wide-d16/d32/d64

dim 16/32/64

reference + rir

max_error

1.1e-16 / 1.0e-16 / 1.1e-16

diagonal-be-public-df-d4

dim 4(双路径)

reference

max_error

5.6e-17

diagonalize-symmetric-d2..d32

5 组

经典独立对拍

重构 / 特征值 / 正交性误差

≤6.2e-13 / ≤5.7e-14 / ≤7.3e-15

df-encoding-rank2-scalar-d2

rank 2 + scalar,α=5.05

to_matrix + 三路径

max_error / α−闭式

4.4e-16 / −8.9e-16

df-encoding-rank3-d4

rank 3,α=8.24

to_matrix + reference

max_error

1.6e-15

df-encoding-rank2-d8

rank 2 + scalar 0.7

reference + rir

max_error

1.2e-15

复现命令:

PYTHONPATH=src <含 pysparq+uniqc 的解释器> tests/verification/verify_blockencoding.py

产物:out/verification/blockencoding.json。