Skip to content

定理Theorem

前缀复杂度与 Levin–Schnorr 定理

Prefix-free Kolmogorov complexity · Levin–Schnorr theorem · Kraft–Chaitin theorem · 前缀 Kolmogorov 复杂度

构造通用前缀机与 Kraft–Chaitin 在线编码,证明无限序列的 Martin-Löf 随机性等价于所有前缀的压缩亏损有统一常数界。

形式陈述 ​

前缀机、通用机与最短描述 ​

前缀机是一个从有限二进制串到有限二进制串的部分可计算函数 M,要求停机程序集合 dom(M) 前缀自由:其中任何两个不同程序都不互为前缀。输出串集合不受此前缀条件限制。

存在一台通用前缀机 U,使每台前缀机 M 都有常数 dM,满足

KU(σ)≤KM(σ)+dM,KM(σ)=min{|p|:M(p)=σ}.

没有程序输出 σ 时,右侧最小值记为 +∞。通用机能输出每个有限串,故 KU 总为有限整数。固定这样一台 U,简写 K=KU,称为前缀 Kolmogorov 复杂度。更换通用前缀机只会令所有字符串的 K 改变一个统一加法常数。[1]

有效编码定理与随机性刻画 ​

Kraft–Chaitin 定理。 设程序逐个枚举请求 (ni,σi),其中 ni 是非负整数;请求可以有限或无限,重复出现也要重复计算权重。若

∑i2−ni≤1,

就可以有效地给每个请求分配不同程序 pi,使所有 pi 前缀自由、|pi|=ni,并构造一台前缀机 M 满足 M(pi)=σi。于是对某个只依赖整台 M 的常数 d,每个请求都有

(1)K(σi)≤ni+d.

Levin–Schnorr 定理。 在公平币测度下,无限二进制序列 X 是 Martin-Löf 随机,当且仅当

(2)∃c∈N∀n≥0K(X↾n)≥n−c.

也就是说,所有有限前缀的压缩亏损 n−K(X↾n) 有同一个常数上界。常数可以依赖 X 与通用机,不能随 n 任意增大。下面给出编码定理和式 (2) 的双向证明。[1]

直觉

短程序占用一块较大的码树空间:长度 r 的程序占用权重 2−r。前缀条件使这些空间互不重叠,Kraft 不等式便把“有多少短描述”转成概率预算。如果一个长度 n 的前缀只需 n−c 位描述,它所确定的柱集可以放进总质量至多 2−c 的有效异常集合。

反方向则把检验看成压缩资源。第 2k 层最多占 2−2k 的质量;若把这一层每个柱集的描述缩短 k 位,总代价至多 2−k。所有 k≥1 层的代价加起来仍不超过一,可以装进同一台前缀机。被检验每层捕获的序列因此具有亏损越来越大的前缀。

先构造通用前缀机 ​

枚举所有部分可计算函数的程序,并交错模拟每个程序在所有有限输入上的计算。对固定编号 e,每当观察到一个新停机输入 p,只在它与此前已接受的输入都无前缀关系时接受这次输入及其输出;重复事件忽略。检查只涉及有限个已接受输入,因而有效。

所得机器 Me 的定义域总前缀自由。如果原函数本来就是前缀机,过滤不会丢掉任何停机输入,因此 (Me) 仍包含所有前缀机。这是在枚举时保证性质,不需要判定任意程序是否具有该性质。

用前缀自由的编号标记 1e0,定义

U(1e0p)=Me(p).

不同编号的标记互不为前缀;同一编号内则由 Me 的定义域保证前缀自由。于是 U 是前缀机,并有 KU(σ)≤KMe(σ)+e+1。对每个有限串,都存在只在一个指定程序上输出它的前缀机,所以 U 的最短描述总存在。

Kraft–Chaitin:请求到来时就分配码字 ​

维护已分配程序集合 A 和有限的空闲串集合 F,初始为 A=∅、F={ε}。保持两个不变量:A∪F 的柱集两两不交且覆盖全部无限序列;F 在每种长度上至多有一个串。

收到长度 n 的请求时,在满足 |z|≤n 的空闲串中选择最长的 z。分配

p=z0n−|z|,

从 F 删除 z,并加入沿这条零分支留下的兄弟节点

z1, z01, …, z0n−|z|−11.

若 |z|=n,直接分配 z,不加入兄弟节点。这些新空闲柱集与 [p] 恰好分割原来的 [z],所以第一个不变量保持。因为选的是最长可用 z,此前不存在长度在 |z|+1,…,n 的空闲串,故第二个不变量也保持。

为何总找得到 z?分配当前请求之前,已用预算加上 2−n 至多为一,故空闲质量至少是 2−n。若每个空闲串长度都大于 n,由于空闲集有限、每个长度至多一个,就有

∑z∈F2−|z|<∑j>n2−j=2−n,

矛盾。算法因此可逐项完成,不必预知未来请求,也不用把无限请求按长度排序。

机器 M 在输入 p 上模拟请求枚举与上述分配;一旦 p 被分给请求 (n,σ),就输出 σ,否则继续等待。这定义部分可计算函数,其停机域正是前缀自由的已分配程序集合。用通用性的同一个常数 dM 即得式 (1)。有限阶段前缀自由还保证无限极限中的任意两码字不冲突。

有效开集如何得到不可撤回的前缀自由枚举 ​

Levin–Schnorr 的反方向需要把有效开集 V 写成

V=⋃σ∈P[σ],μ(V)=∑σ∈P2−|σ|,

其中 P 本身可以枚举且前缀自由。不能先输出较长串,再在较短前缀出现时撤回旧输出;前缀机已经分配的程序也不能这样反悔。

具体做法是维护当前已输出的有限前缀自由集合 B。原枚举器输出 τ 时,取 L 为 |τ| 与 B 中最大长度的最大值,若 B 为空就取 L=|τ|。枚举 τ 的所有长度 L 延伸,仅输出那些没有 B 中任何串作为前缀的延伸。

这些新柱集恰好组成 [τ] 减去已经输出的并集;它们彼此不交,也与旧柱集不交。因此每一步保持相同的已覆盖开集,并且从不撤回输出。这个有限操作可计算,对带层号的枚举交错执行即可保持统一有效性。所有阶段输出的并集 P 就是所求表示。[2]

Levin–Schnorr 的两个方向 ​

随机序列没有无界压缩亏损 ​

对每个整数 c≥0,定义

Rc=⋃{[σ]:∃p (U(p)=σ ∧ |p|≤|σ|−c)}.

交错运行所有程序,观察停机输出,即可统一枚举这些开集;完全不必计算哪个程序最短。为了估计质量,在数学上为每个输出串 σ 选一个最短程序 pσ。不同输出对应不同程序,而这些程序都在 U 的前缀自由定义域内,所以 Kraft 不等式及有限部分和的极限给出

∑σ2−K(σ)≤1.

对构成 Rc 的串,K(σ)≤|σ|−c,故由柱集并集界

(3)μ(Rc)≤∑K(σ)≤|σ|−c2−|σ|≤2−c∑σ2−K(σ)≤2−c.

于是 (Rc) 是合法 Martin-Löf 检验。若 X 随机,它不在某层 Rc,所以每个前缀都满足 K(X↾n)>n−c,从而满足式 (2)。此处选择最短程序只用于质量证明,没有把这种选择当成一个可执行步骤。

失败于有效检验会产生无界亏损 ​

反设 X 非随机,有合法检验 (Vm) 使 X∈Vm 对每个 m 成立。对每个 k≥1,用上面的不可撤回转换把 V2k 表示为前缀自由的统一可枚举集合 Pk。

每当 σ 在第 k 个集合被列出,就枚举一个请求

(|σ|−k,σ).

因为 [σ]⊆V2k,有 2−|σ|≤2−2k,故 |σ|≥2k,请求长度确实非负。所有层放进同一个请求枚举器,总权重是

(4)∑k≥1∑σ∈Pk2−(|σ|−k)=∑k≥12kμ(V2k)≤∑k≥12−k=1.

同一个串若在多个层出现,每次都计费;式 (4) 已经包括这些重复。Kraft–Chaitin 定理构造一台机器,通用性再给一个独立于 k,σ 的常数 d,使每个请求满足

K(σ)≤|σ|−k+d.

X∈V2k 保证有某个前缀 σk∈Pk。于是 |σk|−K(σk)≥k−d,随 k 无界,违反式 (2)。这完成逆否证明,也闭合了两个方向。

例子与边界

乱序码长仍可在线分配 ​

依次请求 (3,00),(3,01),(1,10),(2,11)。总权重为 1/8+1/8+1/2+1/4=1;码长不是递增的。

请求长度与输出 分配的程序 分配后空闲串
初始 — ε
(3,00) 000 1, 01, 001
(3,01) 001 1, 01
(1,10) 1 01
(2,11) 01 无

程序 1 虽然到第三步才出现,先前一直为它保留着完整子树。若第一步任意选取空闲空间并打碎这棵子树,单有剩余总质量并不自动保证后续短码字可分配;每个长度至多一块空闲空间的不变量正避免这种碎片化。

再看开集枚举:原程序先输出 000,再输出 00。不可撤回转换先输出 000,第二次只补上 001,得到前缀自由集合 {000,001},质量 1/4,其柱集并恰为 [00]。只删除旧串再写 00 虽可维护一个有限显示列表,却不能作为此前编码程序的枚举过程。

一个具体检验如何变成压缩请求 ​

令 Vm=[0m],则 μ(Vm)=2−m,并且 0∞ 落在每一层。第 2k 层只有串 02k,因此上面的构造请求长度为 k,输出为 02k。权重 ∑k≥12−k=1,得到

K(02k)≤k+d,2k−K(02k)≥k−d.

它直接展示了非随机序列的无界亏损。这个界无需最优压缩:例如专门编码长度还可能更短,但当前构造已经足以否定式 (2)。

不能省略的约束 ​

前缀自由要求落在程序域。把它删掉,就不能对最短程序直接使用式 (3) 的 Kraft 总预算,因而不能把式 (2) 原样换成任意普通机器的最短输入长度。反方向也没有为每个可能前缀长度都申请一个短程序;请求来自每层的互不相交柱集表示,并且用稀疏层 2k 使总预算可和。

定理是关于一条无限序列的全部前缀。单个长串恰好难压缩,或在有限测试中没有发现压缩方法,都没有验证这个无限量词。证明只构造停机事件的枚举,不提供总能认证 K(σ) 精确值的程序。

推论与应用

若通用机改为 U′,模拟关系双向给出 |KU(σ)−KU′(σ)|≤d,所以常数亏损条件保持不变。序列的具体亏损常数依赖描述语言,随机序列这一集合则不依赖通用前缀机的选择。

开集检验与压缩描述给出同一随机性的两种入口:式 (3) 把短描述变成合法检验,式 (4) 把检验失败变成同一台机器中的一系列压缩见证。结合 Martin-Löf 随机序列具有测度一,可知满足统一亏损界的序列存在且几乎处处成立;这不是通过穷举计算最短程序来找出某条具体随机序列。

参考资料
  • [1] Rodney G. Downey, Denis R. Hirschfeldt, André Nies and Sebastiaan A. Terwijn, Calibrating Randomness,作者公开稿,§3.3.2,printed pp. 9–12:通用前缀机、Theorem 3.9 的 Kraft–Chaitin 分配以及 Theorem 3.8 的随机性等价证明。本页把空闲码树不变量、全部层的预算与有效枚举分开展开。
  • [2] Laurent Bienvenu, Caractérisations de l’aléatoire par les jeux : imprédictibilité et stochasticité, doctoral thesis, 2008,§1.2.2,Remarks 1.2.4、1.2.6,printed p. 4:有效开集及其统一前缀自由枚举表示。上文给出处理全部既有柱集、无需撤回的有限层细分算法。
关系图谱8 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组