图样作为标记
Wolfram 四类、Martinez glider 目录、以及为什么图样识别跟类型标注是同一件事
你看到的, 以及你已经做了的
打开任何一个 Rule 110 在宽行上跑一万步的可视化. 屏幕被填满, 是一片有结构的密集雨. 你开始在里面看见东西: 一片像壁纸一样填满大部分屏幕的背景. 长长的对角丝线以不同角度穿过这层壁纸. 偶尔的闪光出现在两根丝线相遇的地方. 你不需要问别人怎么称呼它们. 你 就是 看到了.
这已经是一次分类. 你在密集填充周围画了条线, 说 那是一种东西. 你在对角丝线周围画了另一条线, 说 那是另一种东西. 你决定了视觉上类似的两根对角丝线属于同一类, 而视觉上不同的两根不属于.
几十年前 Stephen Wolfram 看了几百个一维元胞自动机, 决定它们都落进四类:
| 类 | 描述 |
|---|---|
| 1 | 均匀不动点 — 任何初始行最终死成同一个常数行 |
| 2 | 周期性 — 轨道安顿到简单的重复模式 |
| 3 | 混沌 — 轨道在统计上看起来随机 |
| 4 | 复杂 — 长寿命的结构移动、相互作用 |
Rule 110 是第四类. 这套四向方案是一个 分类器: 从「CA 在某个初始行上的轨道」到有限标签集 {1, 2, 3, 4} 的函数. Wolfram 的贡献不是 发明 这些结构; 是 承诺一个有限标签集, 然后给每条规则分配一个标签.
二十年后 Genaro Martinez 为 Rule 110 单独发表了一个更精细的分类器. 对角丝线得到了名字: A, B, B̄, \(C_{1}\), \(C_{2}\), E, Ē, F, G, H. 壁纸也得到了名字: ether. 每个 glider 有基本周期、每周期位移、相位串 — 一个在规则的格点内重复的零一具体排列. 项目的 rule110/encoder/glider_phases.c 里有 177 个相位条目, 直接取自 Martinez 2007. 每个条目是一个带标签的有限比特模式.
你看屏幕的时候做的是同一件事. 你只勉强分出了两三个标签就停了. Martinez 分出了十一个. Wolfram 分出了四个. 程序是一样的: 选标签集, 决定识别规则, 分配标签.
识别规则, 写下来
来看 Martinez 数据的一行:
A | 2 | 3 | +2/3 | 6
这说: glider A 的每周期位移是 2 个格子, 基本周期是 3 步, 速度是 +2/3, 可见体积是 6 个格子. 相位串是一个有限比特模式; 在更宽的行里以给定偏移匹配它, 是可以通过直接比较判定的.
所以识别规则是机械的:
- 把相位串沿着行滑动.
- 每个偏移处, 检查行的比特是否在该偏移下按规则的邻居纪律匹配相位串.
- 如果匹配, 把那个偏移标上 glider 的标签.
没有软步骤. 没有「呃, 大致看起来像个 A」. 分类器是一个有限定义域到有限值域的函数.
现在对比 BEDC 内核给一个历史分配类型时做的事. 历史是 BHist 的元素:
inductive BHist where
| Empty
| e0 (h : BHist)
| e1 (h : BHist)
某条历史是否满足某个内核级谓词 — UnaryHistory h, Mark h, Cont a f b — 由对 BHist 构造子的结构性规则决定. 当对构造子的递归比较成功时, 两条历史属于同一个 hsame-等价类. 内核不 解释 历史; 内核 分类 历史, 方式是从构造子读出结构, 应用可判定的比较.
元胞自动机上的图样识别是同一种动作, 只是载体不同. 载体是 \(\mathbb{F}_{2}^{n}\) 而不是 BHist. 分类器是相位目录而不是 hsame. 动作 — 承诺有限标签集, 局部判定隶属 — 是同一个动作.
这就是为什么我们说 图样识别就是标记纪律. 没有什么认知官能被偷偷塞进来. 内核做这件事, 目录做这件事, 你看屏幕的时候做这件事. 唯一的区别是你指向的对象.
分类器分歧边界
一旦你有分类器, 你就有了它可能 错 的位置. 项目的 rule110/tests/test_cook_collision_martinez.c 显式跑这层审计. 它拿 encoder/cook_collisions.c 的 33 行碰撞数据 — 每行说「左 glider 加右 glider, 演化若干步, 等于这个输出 glider 集合」 — 检查两层:
- 直接模拟: 把输入 glider 放在 ether 行上, 跑
r110_run_n_steps, 在结果上跑检测器, 对照表里的预期输出. - 论文交叉核对: 表的条目必须跟 Martinez 2012 印在 Table 1 / Table 2 (Complex Systems 21.2.2) 的内容一致.
当前数值:
table audit (cook_collisions.c full 33 rows): 33/33 PASS
Martinez 2012 Table 1/Table 2 cross-check: 33/33 matched
33/33 论文交叉核对的意思是, 表的主张就是论文印的内容. 33/33 严格检测 PASS 的意思是, 表里每一行直接模拟在当前检测器的识别规则下都复现了表登记的输出. 两层在整张表上一致.
这就是分类器纪律在整张表上成立时的样子. 若分类器标签集缺少某些产物 glider 的相位条目, 严格层会留下「检测器无法命名输出 glider」的行. 当前表面要求这些缺口逐行可审计, 并且分类器覆盖到表中登记的输出.
项目这套审计设置买到的是「分类器在哪里跟底层分歧」的 可见性. 两层不一致时审计输出 INFO N audit finding(s); 边界没有被更软的识别规则抹平. 当前 33/33 状态是边界归零 — 目录覆盖了底层在这张表里产出的东西.
BEDC 内核的分歧边界长什么样
内核在类似的位置有同类型的边界. 当 BEDC 试图把 closed-normal consistency 定理应用到一个闭项, 而这个闭项的 codomain 依赖于一个有类型的子项时, 它会停下来. 内核不假装这种情形已经处理; 它命名四条 subject-reduction 结清假设, 把它们跟踪为 \formalstatus{formalTargetV} 而不是 \theoremCheckedV. 穷举审计登记 17 条严格目标跟 14 条约定约束目标 (共 31); 闭余域主结果靠严格目标支撑, 依赖余域情形被这四条假设挡在约定约束那组里.
这是同一种结构性诚实. 分类器 — 这里是内核的归一化论证 — 有一个覆盖范围. 在覆盖范围之外, 没有识别标签被分配. 边界在审计里 可见, 没有被藏在更宽容的规则里.
MetaCIC 那篇 → 详细讲了闭余域主结果实际说了什么, 以及为什么依赖余域边界是结构性的而不是偶然的.
为什么图样识别感觉像独立的官能
它感觉像独立官能, 是因为自然图像上的图样识别是 过饱和 的. 你视觉皮层里的标签识别机制比你能内省到的多得多. 你看到一棵树, 你没办法指出识别发生的那一刻, 所以感觉像直接看到了树. 当你看 Rule 110 演化时, 饱和消失了. 你能感到自己第一次在对角丝线周围画线的那一刻. 分类器选择这个动作 可见地 显现给你, 而它平时不会.
所以元胞自动机底层在哲学上做了一件跟普适性没关系的有用事. 它在慢动作里给你展示了你的感知系统在毫秒内做的动作. 选标签集. 局部判定隶属. 标记. 这就是图样识别. 这也是类型标注. 内核在历史上做这件事. 目录在元胞行上做这件事. 你的眼睛在屏幕上做这件事.
这 不是 什么
这不是「一切认知都是元胞自动机分类」. 标记纪律只在「承诺一个有限标签集且隶属是局部可判定的」时适用. 这比「一切认知」窄得多. 它排除了任何需要无界比较的, 任何需要载体全局属性的, 任何要根据某次标签分配再做另一次标签分配的. 大部分实际人类认知活在这一类之外.
也不是说分类器选择是自动的. Wolfram 选了四. Martinez 选了十一. rule110/encoder/cook_detect.c 里的检测器选了十一加 ether. 每一个都是 承诺 — 决定未来观测从这个集合里取标签. 承诺的动作是真功夫; 给单行打标签的动作是机械跟着走.
它 是 什么: 是「识别图样的动作」与「分配类型的动作」字面上就是同一个动作 — 由同一类有限局部规则在不同载体上执行 — 的最小具体例子. 一旦你在 Rule 110 演化里看到这件事, 你就没办法在内核里看不到它了.
实时看底层演化, 看 glider 被打标签. 归纳法从哪里来 →
分类器能局部判定隶属. 它无法 ratify 一个全称闭合. 那么全称闭合从哪里来? MetaCIC: BEDC 第一个主结果 →
closed-normal consistency 定理与 dependent-codomain 边界 — 同一套分类器-覆盖纪律, 在元理论层重现.
— The Omega Institute