截断 Taylor 块编码(Truncated Taylor Block Encoding)

English · 简体中文

类别 C2 · 模块 oracq.algorithms.common.hamiltonian · 阶段 V2

概述

把矩阵指数的截断 Taylor 级数组装成块编码:给定生成元的块编码与阶数 \(d\),

\[ e^{-iHt} \;\approx\; \sum_{k=0}^{d} \frac{(-it)^k}{k!}\, H^k, \]

对 \(k\) 次幂 \(H^k\)(输入 BE 的 \(k\) 重乘积)与解析系数做线性组合。模块 docstring 将其定位为"可闭合的普通 Hamiltonian-function BE",供 QODE 求解器作为可注入的 hamiltonian_function 使用;它不要求 Hermitian,也不宣称是高效最优的 HamSim 算法,可替换为 QSP/HamSim 协议(见哈密顿量模拟协议)。

接口与输入模型

taylor_hamiltonian(hamiltonian, time, *, degree=2)

API 入口:taylor_hamiltonian

  • hamiltonian:BlockEncoding,演化生成元的块编码(input model 为 BE);数学语义(如厄米性)由调用方负责。

  • time:演化时间,有限实数。

  • degree:截断阶数 \(d\),非负整数,默认 2。

返回 BlockEncoding,零信号块约等于 \(\sum_k (-it)^k H^k / k!\)。模块属性:

属性

含义

algorithm

"truncated_taylor_hamiltonian_function"

degree / time

调用参数回显

be_alpha

LCU 归一化 \(\sum_{k=0}^{d} (\alpha t)^k / k!\)(\(\alpha\) 为输入 BE 归一化)

correctness / success_condition

"pending" / "signal == 0"

实现要点

幂序列迭代生成:从 \((1, I)\) 出发,product(hamiltonian, current) 逐次右乘得到 \(H^k\),系数解析取 \((-it)^k / k!\),随后整体经 lcu(powers) 组合。寄存器布局由 LCU 决定:target = Bits(width),signal 为 selector(\(\lceil\log_2(d+1)\rceil\) 位)与各项信号空间的拼接;复数系数的相位经全局相位门实现。

适用边界:门数随 \(d\) 线性放大(深幂链),本函数不做截断误差界分析,误差由调用方按 \(\lVert H\rVert t\) 与 \(d\) 自行评估;生成期校验 degree 为非负整数、time 为有限实数。

验证方案

类别 C2(近似连续语义,判定准则见 ../development/validation-plan.md §2)。与验证覆盖矩阵一致的说法是:hamiltonian.py 行未给本入口单列数值见证,本函数的证据来自被 ODE 求解器消费——

  • 结构:tests/core/test_differential.py:DifferentialStructureTests.test_four_methods_keep_input_oracles 以 degree=1 注入 lchs / cbmd / schrodingerization / carleman 四条路线,检查输入 oracle 槽位保留与 IR JSON 往返(登记于验证覆盖矩阵 ode 行)。

  • 数值:tests/core/test_sde.py:SolverContractTests.test_qode_problem_accepted_by_lchs 同样以 degree=1 注入 LCHS 契约并求解(登记于 sde 行)。截断精度本身的"误差 vs 阶数"直接对拍缺失。

  • 绑定:无独立绑定见证;LCU 组合子的绑定语义由 tests/core/test_language.py:BlockEncodingTests.test_alpha_survives_ir_serialization 覆盖(见块编码组合代数)。

已知缺口与计划阶段

与验证覆盖矩阵 hamiltonian.py 行一致:模块登记缺口为 Trotter 阶数误差率扫描(阶段 V2 收敛性扫描框架);本入口自身的 Taylor 截断误差对拍属于同类收敛性证据,待同一框架接入后补齐。

相关链接

数值验证

论文级数值验证脚本:tests/verification/verify_blockencoding.py(真实后端执行,无 mock、无 skip;2026-09-16 共 73 个案例全部通过),产物 out/verification/blockencoding.json。本页对应 taylor-block-encoding-d{1,2,3,4} 共 4 个案例,补上"截断精度本身的误差 vs 阶数直接对拍缺失"的登记缺口。

实验设计:输入生成元为 2×2 厄米矩阵 \(H=\begin{pmatrix}1.0&0.4\\0.4&-0.6\end{pmatrix}\)(经 matrix_pauli_encoding 编码,\(\alpha_{\rm in}=1.4\)),演化时间 \(t=0.7\),阶数 \(d=1..4\)。块语义为 \(\big(\sum_{k\le d}(-itH)^k/k!\big)/\alpha\),\(\alpha=\sum_{k\le d}(\alpha_{\rm in}t)^k/k!\)。两类误差分离报告:实现误差——reference 逐列提取的零信号块对照同阶截断级数(numpy 独立计算);方法误差——块对照 \(e^{-iHt}/\alpha\)(numpy 特征分解独立计算);另对照 be_alpha 与级数闭式,并以 rir-pysparq / adapter-pysparq 逐列交叉。

案例

阶数

实现误差

方法误差(信息性)

\(\alpha\) 偏差

后端交叉

taylor-block-encoding-d1

1

8.3e-17

1.41e-1

0

0

taylor-block-encoding-d2

2

1.8e-16

2.81e-2

0

0

taylor-block-encoding-d3

3

1.7e-16

5.20e-3

0

0

taylor-block-encoding-d4

4

1.9e-16

7.75e-4

0

0

方法误差按阶数单调下降(约 \((\alpha_{\rm in}t)^{d+1}/(d+1)!\) 量级,\(\alpha_{\rm in}t=0.98\)),实现误差始终处于机器精度——截断误差确实由调用方按 \(d\) 控制,组装本身不引入额外误差。

复现命令:

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

产物:out/verification/blockencoding.json。