L4 语义摘要与保持性

L4 给电路操作分类,生成可重复计算的内容引用,并对受支持的逐位置变换给出 保持性判决。这些是不同的问题:RZ(2*pi) 在测量统计分类中是恒等, 算符却比 I 多一个全局负号。下面的示例均在文档测试中执行。

分类、数据流与内容引用

annotate_circuit 为节点分配位置;build_semantic_summary 输出包含 操作结构、测量句柄和分类计数的 JSON 安全摘要。相同输入可得到相同哈希。

from qaiji import from_qasm3
from qaiji.core.semantics import (
    HandleStatus, SemanticIRHandle, annotate_circuit,
    build_dataflow_summary, build_semantic_summary, canonical_summary_hash,
)

circuit = from_qasm3("""OPENQASM 3.0;
include "stdgates.inc";
qubit[1] q;
bit[1] c;
h q[0];
c[0] = measure q[0];
""")
annotations = annotate_circuit(circuit)
dataflow = build_dataflow_summary(circuit)
assert len(annotations) == 2
assert dataflow["measurement_handles"][0].measurement_id == "m0"
assert dataflow["unitary_segment_count"] == 2

summary = build_semantic_summary(circuit=circuit, annotations=annotations)
digest = canonical_summary_hash(summary)
assert digest.startswith("sha256:")
assert digest == canonical_summary_hash(summary)
handle = SemanticIRHandle(
    summary=summary, content_hash=digest, status=HandleStatus.AVAILABLE,
)
assert canonical_summary_hash(handle.summary) == handle.content_hash

SemanticIRHandle 会深度冻结摘要;默认状态是 PLANNED,因此示例显式设置 AVAILABLE。内容哈希只标识摘要内容,不代表调度已获认证或物理结果已验证。 build_dataflow_summary 的条件边按寄存器名连接测量与条件,不检查门序; 条件可以先于匹配的测量而仍产生一条边。读前写入与结果就绪由 L2 原生调度 检查,见 原生调度的语义与边界。

保持性判决的范围

check_preservation 支持结构相等、CNOT/CX 别名和同位置整圈旋转等 R1–R4 情形。EXACT 与 UP_TO_PHASE 是可判定级别;无法证明的变换会返回 unsupported,不能将其当成通过。一个门展开成多个门或一般重排序不属于 这个逐位置判决域。语义层(L4) 给出完整接口与错误类型。

import math
from qaiji import Circuit
from qaiji.core.semantics import EquivLevel, MorphismType, check_preservation, classify_operation

original = Circuit(1)
original.rz(0, math.tau)
canonical = original.canonicalize()
assert classify_operation(original.gates[0])[0].morphism is MorphismType.IDENTITY
verdict = check_preservation(original, canonical, stage="canonicalize")
assert verdict.status == "passed"
assert verdict.equiv_level is EquivLevel.UP_TO_PHASE

此判决比较的是 L4 输入与变换后电路,不代替 L2 的规则、算符矩阵、资源和时序认证。