TreeHeap kernel 的 mirror 手性翻转:几何翻转如何变成代数置换

先统一术语。

之前草稿里用了“共轭”这个词。这个词容易让人想到复数共轭、矩阵共轭、群表示里的 conjugation。SPR-040 现在不再这样叫。

这里讨论的是:

mirror / chiral flip / 左右镜像翻转

也就是把一棵 TreeHeap 的 left 和 right 对换。

这篇文章要证明一件很具体的事:

几何上的左右翻转,
可以在代数层面变成两个置换:

1. 堆地址置换
2. kernel 槽位置换

这不是语言理解 proof,也不是 WMT proof。它是 TreeHeap kernel 工具箱里的一个基础 proof。

这次收束以后,SPR-040 也不准备升级成旋转、3D fold 或平面投影 proof。我们先只托付一个最小事实:

mirror 会交换 left/right 的结构方向;
loss 可以把这个 mirrored slot assignment 学回参数里。

这已经够重要,因为它说明 kernel 的 root/left/right 不是三个匿名标量位置,而是树上的局部结构方向。

DeepSeek 回测后的收束

DeepSeek / Runner 做了 ARA 可靠性审阅,把 SPR-040 评为:

中等可靠。

这个评价是合理的。

因为 SPR-040 的 evidence 很清楚:

flipped-kernel error 接近机器精度。
unflipped-kernel error 明显变大。
loss 能学回 [root,right,left]。

但它的范围也很窄:

这是结构赋值级别的 proof。
不是旋转 proof。
不是 3D fold proof。
也不是“模型自己学会何时翻转整棵树”的 proof。

换句话说,现在证明的是:

给定 mirror 这种结构变换后,
kernel 的 left/right 槽位应该怎样跟着变。

还没有证明:

模型自己发现某个句子需要 mirror。
模型自己决定 mirror 发生在哪个 subheap。
模型自己决定递归 mirror 到多深。

这个边界很重要。它让 SPR-040 更专业,也更不容易过度解释。

为什么要证明 mirror

SPR-039 证明了:

参数 TreeHeap Theta 可以通过梯度学习一个局部卷积 kernel。

例如在 7 节点堆上:

        1
      /   \
     2     3
    / \   / \
   4   5 6   7

一个最小 kernel 可以写成:

theta = [theta_root, theta_left, theta_right]

它在某个内部节点 i 上做:

K_theta(H)[i]
  = theta_root  * H[i]
  + theta_left  * H[left(i)]
  + theta_right * H[right(i)]

如果 theta = [1,1,1],它就是局部求和。

但 Houming818 提醒了一个更关键的问题:

TreeHeap kernel 不能只会求和。
它应该能表达结构操作。

比如,左右镜像翻转。

如果 TreeHeap 真的是结构化空间,那么:

树翻了,
算子也应该按结构翻。

这就是 SPR-040。

mirror 在堆地址上的定义

仍然看这棵 7 节点完全二叉堆:

        1
      /   \
     2     3
    / \   / \
   4   5 6   7

左右 mirror 后:

        1
      /   \
     3     2
    / \   / \
   7   6 5   4

所以地址映射是:

M(1) = 1
M(2) = 3
M(3) = 2
M(4) = 7
M(5) = 6
M(6) = 5
M(7) = 4

如果用数组表示:

H = [1,2,3,4,5,6,7]
M(H) = [1,3,2,7,6,5,4]

这不是随便重排。

它是一个保持树结构的左右镜像。

代数上可以写成:

H' = P_m H

其中 P_m 是堆地址的置换矩阵。对于 7 节点堆,它对应:

P_m = (0, 2, 1, 6, 5, 4, 3)

这里用的是 zero-based index。

mirror 在 kernel 槽位上的定义

局部 kernel 是:

theta = [root, left, right]

如果树左右翻转,left 和 right 的意义也要交换。

所以 kernel 也要 mirror:

P_lr(theta) = [root, right, left]

写成矩阵:

P_lr =
[[1,0,0],
 [0,0,1],
 [0,1,0]]

这就是这篇 proof 的重点。

不是只翻树。

而是:

翻树地址 P_m
同时翻 kernel 槽位 P_lr

Claim

SPR-040 的 claim 是:

S1-KERNEL-MIRROR-C01:

TreeHeap local convolution is equivariant under mirror / chiral flip:

P_m K_theta(H) = K_{P_lr theta}(P_m H)

中文说:

先卷积,再 mirror
等价于
先 mirror,再用 mirror 后的 kernel 卷积。

这就是“几何操作由代数操作实现”。

一个具体例子

输入:

H = [1,2,3,4,5,6,7]
theta = [0.5, 1.25, -0.75]

这个 kernel 是故意选成非对称的。

因为如果用 [1,1,1],left 和 right 权重一样,翻不翻都一样,证明没有力量。

root 节点的卷积:

K_theta(H)[1]
  = 0.5*1 + 1.25*2 - 0.75*3
  = 0.75

node 2:

K_theta(H)[2]
  = 0.5*2 + 1.25*4 - 0.75*5
  = 2.25

node 3:

K_theta(H)[3]
  = 0.5*3 + 1.25*6 - 0.75*7
  = 3.75

内部节点结果是:

[0.75, 2.25, 3.75]

mirror 后,node 2 和 node 3 的结构位置交换。

如果我们先 mirror 输入:

P_m H = [1,3,2,7,6,5,4]

就必须同时使用 mirrored kernel:

P_lr theta = [0.5, -0.75, 1.25]

这时两条路径会得到同一个结果:

P_m K_theta(H)
=
K_{P_lr theta}(P_m H)

Proof 分两部分

Proof A:演绎等式检查

这部分不训练。

直接检查:

left  = P_m K_theta(H)
right = K_{P_lr theta}(P_m H)

然后算:

max_abs(left - right)

如果这个误差接近 0,就说明代数等式成立。

这一步是数学/代数检查。它不是学习结果。

也就是说,P_m 是我们定义好的 mirror 地址置换,P_lr 是我们定义好的 kernel 槽位置换。这里验证的是:

这个定义是否自洽。

它不证明模型自己学会了翻树。

Proof B:归纳学习检查

这部分训练。

我们构造 mirrored data:

input  = P_m H
target = internal_nodes(P_m K_theta(H))

然后让一个三槽位参数:

Theta = [theta_root, theta_left, theta_right]

通过 MSE loss 和梯度下降学习。

如果数据真的携带 mirror 规律,那么它应该学出:

Theta ~= P_lr theta = [0.5, -0.75, 1.25]

这一步说明的不只是“公式手写成立”,还说明这个 mirrored kernel 可以从数据里被学回。

更具体地说,这一步要验证:

learned_root  ~= original_root
learned_left  ~= original_right
learned_right ~= original_left

也就是说,loss 学到的不是一个抽象口号,而是 left/right 槽位在 mirror 后的对应关系。

这一步才是学习结果。

但学习到的东西也要说准确:

学到的是 mirrored kernel slot assignment。
不是学到 mirror 触发规则。
不是学到递归翻转策略。

实验结果

脚本:

ara/s1-echo/src/s1_mirror_kernel_symmetry_probe.py

证据:

ara/s1-echo/evidence/s1_mirror_kernel_symmetry_probe/

主机:

io.grepcode.cn

结果:

指标 数值
pilot_pass true
flipped-kernel test max error 8.88e-16
flipped-kernel OOD max error 3.55e-15
unflipped-kernel mean error 6.4372
learned mirrored theta [0.5000000000000002, -0.7499999999999998, 1.2499999999999996]
theta-mirror L2 error 5.44e-16
left slot learns original right error 2.22e-16
right slot learns original left error 4.44e-16
learned test MSE 1.01e-30
learned OOD MSE 9.76e-30

解释:

用 mirrored kernel 时,误差是机器精度。
不用 mirrored kernel 时,误差明显变大。
从 mirrored data 训练时,参数能学回 [root,right,left]。
left/right 槽位 assignment 的学习误差也是机器精度。

所以:

S1-KERNEL-MIRROR-C01 -> supported pilot

这说明了什么

SPR-040 支持一个很重要的方向:

TreeHeap 的几何操作,可以下降到代数操作。

具体到这篇:

几何 mirror
-->
堆地址置换 P_m
+ kernel 槽位置换 P_lr

这让 TreeHeap kernel 不只是“局部求和器”。

它开始像一个结构化算子系统:

卷积
写入
读取
mirror
路径移动
子堆组合
子堆分解

这些都可以成为后续 encoder/decoder 的基本工具。

但这里要避免过度解释。

SPR-040 现在最稳的结论不是:

TreeHeap 已经证明了完整 3D fold。
TreeHeap 已经学会连续旋转角。
TreeHeap 已经解决 latent plane 投影。

而是:

TreeHeap kernel 的槽位具有结构方向意义;
mirror 会改变这些方向的对应关系;
这个方向对应关系可以被 loss 学回。

这是一块很小但很硬的积木。

它把 TreeHeap kernel 从“标量覆盖”推进到“结构方向上的局部卷积”,但还没有推进到完整的空间折叠理论。

如果用一句更数学化的话说:

root/left/right 是 TreeHeap 局部坐标系。
mirror 是这个局部坐标系上的置换。
loss 可以学习置换后的参数赋值。

但还没有到:

loss 可以学习何时选择这个置换。

这个“何时选择”需要另一层学习树。

后续数学故事:多参森林

Houming818 提出的更合理方向是:

不要让一个大参数树混合学习所有结构能力。
应该用多参森林。

也就是:

Theta_write   负责写入
Theta_read    负责读取
Theta_compose 负责组合
Theta_mirror  负责 mirror
Theta_time    负责时间状语前置

每棵树有自己的参数和梯度。

这样做的原因是,mirror 的学习信号不应该被 read/write/semantic 的大 loss 混在一起冲掉。

对于 mirror,可以拆成两棵相关的树:

Theta_mirror:
  怎么翻,也就是执行 mirror 算子。

Phi_mirror:
  什么时候翻,也就是触发规则。

当前 SPR-040 只碰到了第一件事的一小部分:

mirror 后 kernel 槽位如何赋值。

还没有学习:

Phi_mirror(H, context) -> 是否触发 mirror

以翻译为例:

I arrived home at 7 o'clock.
我七点到家了。

这里更像是一个局部结构重排:

时间短语从英文尾部,移动到中文谓词前。

这不是全树 mirror,而是某种局部 reorder kernel。未来应该有一棵专门的参数树学习:

Theta_time:
  怎么把时间短语前置。

Phi_time:
  什么时候触发时间短语前置。

所以 SPR-040 的位置很清楚:

它不是终点。
它是在证明 TreeHeap kernel 的结构方向是真的。

还没有证明什么

这次没有证明:

语言理解
WMT 翻译
真实语义 mirror
任意群等变
TreeHeap 胜过所有 flat model
连续旋转角学习
完整 3D fold
latent plane 投影权重学习
learned mirror trigger
learned recursive mirror depth

它只证明:

TreeHeap 的 root/left/right 局部卷积,
在 mirror 操作下有正确的代数置换形式。

下一步

接下来可以沿着几个方向扩展,但不需要急着开新编号去做旋转。更合理的是先让后学工程师评判 SPR-040 这个最小 claim 是否站稳:

1. 当前 mirror assignment proof 是否表述清楚
2. 是否需要补一个 flat baseline,证明无结构槽位时不能自然解释 mirror
3. 是否要把 scalar slot 扩展到 vector slot
4. 是否要把 depth-1 root/left/right 扩展到 recursive subheap
5. 是否要接回 short real corpus TreeHeap echo
6. 是否要设计 multi-parameter forest:单独训练 mirror/time/read/write 参数树

如果这些继续成立,TreeHeap 的 kernel 就不是一组临时写出来的函数,而是一个可以逐步扩展的结构化代数工具箱。

一句话总结:

SPR-040 证明:
TreeHeap 的左右 mirror 可以用代数置换实现;
树地址要翻,kernel 的 left/right 槽位也要翻;
这个规则既能手算成立,也能从 mirrored data 里被梯度学回。

ARA: mirror kernel symmetry / evidence / claims