常用的不可定中间语言
BARBER L B A R B E R = { ⟨ M ⟩ : M does not accept ⟨ M ⟩ } L_{BARBER} = \{ \langle M \rangle : M \text{does not accept } \langle M \rangle \} L B A R B E R = { ⟨ M ⟩ : M does not accept ⟨ M ⟩ }
HALT L H A L T = { ( ⟨ M ⟩ , x ) : M halts on w } L_{HALT} = \{ (\langle M\rangle, x) : M \text{ halts on } w \} L H A L T = { ( ⟨ M ⟩ , x ) : M halts on w }
ACC L A C C = { ⟨ M ⟩ : M accepts L ( M ) } L_{ACC} = \{ \langle M \rangle : M \text{ accepts } L(M) \} L A C C = { ⟨ M ⟩ : M accepts L ( M ) }
单string停机问题
虽然不能解决通用停机问题,但是我们是否可以解决单string停机问题?即对于给定的一个string,判断一个特定的图灵机是否能停机。从简单的角度考虑,我们来看语言 L ϵ − H A L T L_{\epsilon-HALT} L ϵ − H A L T 是否可决定
如果我们要用到图灵归纳的方法,用不可定推导不可定的推导方向应该是 L H A L T ≤ T L ϵ − H A L T L_{HALT}\le_T L_{\epsilon-HALT} L H A L T ≤ T L ϵ − H A L T
那么我们就需要假设一个预言机(oracle) D ϵ − H A L T D_{\epsilon-HALT} D ϵ − H A L T 能解决 L ϵ − H A L T L_{\epsilon-HALT} L ϵ − H A L T ,那么我们就可以构造一个图灵机 D H A L T D_{HALT} D H A L T 来解决 L H A L T L_{HALT} L H A L T
并且我们的老演员 L H A L T L_{HALT} L H A L T 是 D H A L T D_{HALT} D H A L T 的预言机
我们需要利用oracle 来构建 L H A L T L_{HALT} L H A L T 即判断 M ( x ) M(x) M ( x ) 是否停机
D ϵ − H A L T D_{\epsilon-HALT} D ϵ − H A L T 的功能
input: ⟨ M ⟩ \langle M\rangle ⟨ M ⟩
logic: 若 M ( ϵ ) M(\epsilon) M ( ϵ ) 停机,则 accept;否则 reject
D H A L T D_{HALT} D H A L T 的功能
input: ( ⟨ M ⟩ , x ) (\langle M\rangle, x) ( ⟨ M ⟩ , x )
从预言机的特性来看,似乎与输入的string x 无关,那么我们就要强行将 x x x 写入到 M M M 中,再将其传入 D ϵ − H A L T D_{\epsilon-HALT} D ϵ − H A L T 中,才能用上 x x x
即令 M x ( w ) M_x(w) M x ( w ) 为新图灵机,满足 M x ( w ) M_x(w) M x ( w ) halts 对于 w = ϵ w = \epsilon w = ϵ , 而 M x ( w ) M_x(w) M x ( w ) loop 对于 w ≠ ϵ w \neq \epsilon w = ϵ
\begin{align*}
(\langle M\rangle, x) \in L_{HALT} \Leftrightarrow & M(x) \text{ halts} \\
\Leftrightarrow & M_x(w) \text{ halts for any string } w \\
\Leftrightarrow & D_{\epsilon-HALT}(\langle M_x\rangle) \text{ accept} \\
\Leftrightarrow & D_{HALT}(\langle M\rangle, x) \text{ accept}
\end{align*}
从上面的这个例子我们可以看出,如果我们有一个预言机能判断某个问题的子集(尤其是单个元素的判定机),我们就可以将原图灵机的输入 ( ⟨ M ⟩ , x ) (\langle M \rangle, x) ( ⟨ M ⟩ , x ) 转化为新图灵机的输入 ⟨ M x ⟩ \langle M_x \rangle ⟨ M x ⟩ ,从而利用预言机来解决原问题
例2: L A c c L_{Acc} L A c c 判定 L 376 L_{376} L 3 7 6
假设语言 L 376 = { ⟨ M ⟩ : M accepts 376 } L_{376} = \{ \langle M \rangle : M \text{ accepts } 376 \} L 3 7 6 = { ⟨ M ⟩ : M accepts 3 7 6 } 如何证明其不可判定?
L A c c L_{Acc} L A c c 的硬码机特点
由于要用到 undecidable 的归纳方向, L A c c L_{Acc} L A c c 必然是在图灵归纳的左边, 那么我们的归纳等式必然有形如 ( ⟨ M ⟩ , x ) ∈ L A c c ⇔ M ( x ) accepts (\langle M\rangle, x) \in L_{Acc} \Leftrightarrow M(x) \text{ accepts} ( ⟨ M ⟩ , x ) ∈ L A c c ⇔ M ( x ) accepts 的开头
我们称形如 M x ( w ) M_x(w) M x ( w ) 的图灵机为硬码机,即其在不同 w w w 的输入上有一致的行为
那么对于 ( ⟨ M ⟩ , x ) ∈ L A c c (\langle M\rangle, x) \in L_{Acc} ( ⟨ M ⟩ , x ) ∈ L A c c ,可以得到 M ( x ) M(x) M ( x ) accepts,即 M x ( w ) M_x(w) M x ( w ) accepts for any w w w
那么如果要判定一个新的语言,我们就可以用特定输入来进行构造
如果是 L 376 L_{376} L 3 7 6 , 那么我们就可以构造 M x ( 376 ) M_x(376) M x ( 3 7 6 ) , 这个输入必定 accept 从而得到预言机 D 376 ( ⟨ M x ⟩ ) D_{376}(\langle M_x\rangle) D 3 7 6 ( ⟨ M x ⟩ ) 必定 accept (这里对于不同的预言机其输出可能是 必定 reject, 但是输出是确定的)
那么我们的 D A c c D_{Acc} D A c c 就可以根据此结果 accept
而构造的图灵机形如:
1 2 3 4 5 6 7 8 def D_Acc (M, x ): def M_x (w ): return M(x) def D_376 (M_x ): return M_x(376 ) return D_376(M_x)
L ∅ L_{\varnothing} L ∅ 不接受型语言
language L ∅ = { ⟨ M ⟩ : L ( M ) = ∅ } L_{\varnothing} = \{ \langle M \rangle : L(M) = \varnothing \} L ∅ = { ⟨ M ⟩ : L ( M ) = ∅ }
即 ( ⟨ M ⟩ ) ∈ L ∅ (\langle M\rangle) \in L_{\varnothing} ( ⟨ M ⟩ ) ∈ L ∅ 当且仅当 M ( x ) M(x) M ( x ) rejects for all x x x
例3: L ∅ L_{\varnothing} L ∅ 判定 L E Q L_{EQ} L E Q
假设语言 L E Q = { ⟨ M 1 ⟩ , ⟨ M 2 ⟩ : L ( M 1 ) = L ( M 2 ) } L_{EQ} = \{ \langle M_1\rangle,\langle M_2 \rangle : L(M_1) = L(M_2) \} L E Q = { ⟨ M 1 ⟩ , ⟨ M 2 ⟩ : L ( M 1 ) = L ( M 2 ) } 如何证明其不可判定?
根据图灵归纳不可定语言的方向性,我们要证明 L ∅ ≤ T L E Q L_{\varnothing} \le_T L_{EQ} L ∅ ≤ T L E Q
那么长等式的开头会形如 ⟨ M ⟩ ∈ L ∅ ⇔ M ( x ) does not accept any string x \langle M\rangle \in L_{\varnothing} \Leftrightarrow M(x) \text{ does not accept any string } x ⟨ M ⟩ ∈ L ∅ ⇔ M ( x ) does not accept any string x
对于 L E Q L_{EQ} L E Q , 我们假设有预言机 D E Q : D E Q ( ⟨ M 1 ⟩ , ⟨ M 2 ⟩ ) D_{EQ}: D_{EQ}(\langle M_1\rangle,\langle M_2 \rangle) D E Q : D E Q ( ⟨ M 1 ⟩ , ⟨ M 2 ⟩ ) 若对于任意 x x x 输入,M 1 ( x ) = M 2 ( x ) M_1(x) = M_2(x) M 1 ( x ) = M 2 ( x ) 则 accept
我们的目标是证明 ⟨ M ⟩ ∈ L ∅ ⇔ M ∅ ( x ) \langle M\rangle\in L_\varnothing \Leftrightarrow M_{\varnothing}(x) ⟨ M ⟩ ∈ L ∅ ⇔ M ∅ ( x ) does not accept any string x x x
所以我们要用到 D E Q D_{EQ} D E Q 来判断是不是一个输入的 ⟨ M ⟩ \langle M\rangle ⟨ M ⟩ 和标准的 M ∅ M_\varnothing M ∅ 是否相等
1 2 3 4 5 6 7 def D_empty (M ): def M_empty (x ): return False def D_EQ (M, M_empty ): for x in Sigma_star: return and_all (M(x) == M_empty(x)) return D_EQ(M, M_empty)
硬码机类问题的统一思路
什么时候用硬码机?
当我们要用到图灵归纳,且目标语言为已知语言的子集,或者当前语言和目标语言的判断类型不一致(例如 用 halt 推导 acc类问题,前者返回的是 是否 halt, 后者需要的只有 acc 或者 rej
长等式的两端
首先要构造一个长等式,最左端是 ⟨ M ⟩ ∈ L x \langle M\rangle \in L_x ⟨ M ⟩ ∈ L x , 最右端是 D x ( ⟨ M ⟩ ) D_x(\langle M \rangle) D x ( ⟨ M ⟩ ) accepts
左向右
从左向右的思路是 ⟨ M ⟩ ∈ L x ⇔ M ( x ) \langle M\rangle\in L_x\Leftrightarrow M(x) ⟨ M ⟩ ∈ L x ⇔ M ( x ) accepts/halts 之类
右向左
从右向左的思路是 D x ( ⟨ M ⟩ ) D_x(\langle M \rangle) D x ( ⟨ M ⟩ ) accepts ⇔ H x ( s ) \Leftrightarrow H_x(s) ⇔ H x ( s ) accepts 之类(即利用预言机返回值进行正向返回或者反向返回)
再前一步一定是判定 s s s 是否属于 L x L_x L x 问题
硬码机的构造和应用
Tiling the Plane 问题
问题描述
给定一个二维无限平面,和一个有限的集合 T T T , 问是否可以用 T T T 中的图形无重叠地覆盖整个平面(设图形可以旋转)
王浩大师简介
王浩是民国时期的数学家,本科毕业于西南联大数学系,硕士毕业于清华大学哲学系(师从冯友兰、金岳霖),博士毕业于哈佛大学逻辑学
王浩法解决 平铺问题
假设 T T T 中的图形每条边各有一个颜色,两个图形的边可以重叠当且仅当:
两个图形的边颜色相同
拼接后未连接的部分边缘显示为白色,且正方形拼接后不可旋转
然后我们尝试用 M ϵ − H A L T M_{\epsilon-HALT} M ϵ − H A L T 来图灵归纳平铺问题
定义预言机 D T i l e D_{Tile} D T i l e 能判断 T T T 是否可以平铺整个平面, 那么我们需要令 M ϵ − H A L T M_{\epsilon-HALT} M ϵ − H A L T 利用 D T i l e D_{Tile} D T i l e 来解决
那么我们首先证明如下命题:
T T T 可以平铺第一象限 ⇔ M ( ϵ ) \Leftrightarrow M(\epsilon) ⇔ M ( ϵ ) loops