他从开阔的前额看到了智慧,从坚定的目光和微皱的眉宇间看到了勇气,在那露出两排洁白牙齿的厚厚的嘴唇上,他看到了坦诚。

Time Hierarchy theorem:

DTIME(o(f(n)logf(n)))DTIME(f(n))f(n+1)=o(g(n))NTIME(f(n))NTIME(g(n))DTIME(o(\frac{f(n)}{logf(n)}))\subsetneq DTIME(f(n))\\ f(n+1)=o(g(n))\Rightarrow NTIME(f(n))\subsetneq NTIME(g(n))

要证明这个定理,实际上就要说清楚一件事:** 存在这样一个语言,把不同时间内可以判定的语言区分开。** 这也是这个定理想表达的内容。

There always exists such a language, who separates the set of languages decided in different time hierarchy.

我们以DTIME(n2)DTIME(n8)DTIME(n^{2})\subset DTIME(n^8) 为例,来证明它。

  • DTIME(n2)DTIME(n8)DTIME(n^2)\subseteq DTIME(n^8) 是显然的。

所以我们要证明:

L,LDTIME(n8),LDTIME(n2)\exists L,L\in DTIME(n^8),L\notin DTIME(n^2)

在严格证明之前,我们需要理解编码的普适性(Universal encoding),它要求:

  • 每个编码都对应一个对象。
  • 每个对象都有无穷多个合法编码。

这是很容易实现的。譬如要编码一个图灵机,我们可以把所有不合法的编码都对应一个默认的图灵机,同样可以允许在合法编码最后添加任意多个 "1"。这样就满足了上述两个条件。


下面我们构造这样一个图灵机DD

  • 对于一个输入ss,把它看作是输入对s=M,ws=\langle M,w\rangle(根据编码的普适性,这总是可以的)

  • 然后模拟MM 在输入串s=M,ws=\langle M,w\rangle 上运行n3n^3 步。其中n=M,wn=|\langle M,w\rangle|

  • 如果在这n3n^3 步中,MM Accept,则DD Reject,输出 0。

    如果MM Reject 或者未停机,则DD Accept,输出 1。

很显然,DD 永远是停机的,因为nn 是有限的。那么图灵机DD 就 decide 了一个语言:

L(D)={s    D(s)=1}L(D)=\{s\;|\;D(s)=1\}

下面我们考虑这个语言。首先L(D)DTIME(n8)L(D)\in DTIME(n^8) 是很显然的。因为考虑图灵机DD 的复杂性(下面是一个非常松的估计):

  • 首先需要计算出nn 是多少,这只需要O(nlogn)O(nlogn) 步即可。其中lognlogn 是要把nn 的二进制位存储。
  • 然后计算T(n)=n3T(n)=n^3 是多少。由于我们假设了T(n)T(n) 是 Time-constructible 的,一个重要的要求是,计算T(n)T(n) 的时间不能超过O(T(n))O(T(n)),故这一步也没有提升复杂性。
  • 最后是模拟MM 进行n3n^3 步,实际上 Universal Turing Machine 已经可以做到,模拟MM 的一步需要 UTM 进行n3n^3 步。(一个想法就是需要扫描M,w\langle M,w\rangle,然后进行操作)。详情可见:http://morphett.info/turing/turing.html?b4c28c3e136124b95266db4be07de36a

所以计算所需时间是肯定小于O(n8)O(n^8) 的。


下面是重点,我们证明L(D)DTIME(n2)L(D)\notin DTIME(n^2)

反设存在这样一个图灵机HH,它可以在O(n2)O(n^2) 时间内 decide L(D)L(D),那么我们考虑HH 在输入H,0l\langle H,0^l\rangle 上会怎样。

n=H,0l=c+ln=|\langle H,0^l\rangle|=c+l,其中c=Mc=|\langle M\rangle|

因为HH decide L(D)L(D),故HH 应该和DD decide 相同的语言,即H(H,0l)=D(H,0l)H(\langle H,0^l\rangle)=D(\langle H,0^l\rangle)

又由于我们构造DD 时,要求了,如果HHn3n^3 步内停机的话,会有D(H,0l)=¬H(H,0l)D(\langle H,0^l\rangle)=\neg H(\langle H,0^l\rangle)

因为根据假设,HHO(n2)O(n^2) 步内就可以 decide 了,故可以取ll 足够大,使得n3>Hn^3>H decide L(D)L(D) 的上限时间=O(n2)=O(n^2),此时HH 一定会在n3n^3 步内停机。故有:

H(H,0l)=D(H,0l)=¬H(H,0l)H(\langle H,0^l\rangle)=D(\langle H,0^l\rangle)=\neg H(\langle H,0^l\rangle)

此时得出矛盾,得证。


Remark:注意,一切试图去 decide L(D)L(D) 的图灵机都不可能在O(n2)O(n^2) 内输出正确的结果。

就像下面这个函数:

UC(s)=UC(s)=

  • ss 看作是一个图灵机编码,即s=Ms=\langle M\rangle
  • 然后考虑MM 在输入s=Ms=\langle M\rangle 上的行为,如果MM accept,则UC(s)=0UC(s)=0
  • 否则若MM reject 或者不停机,那么UC(s)=1UC(s)=1

UCUC 就是一个不可计算函数。任何尝试去计算UCUC 的图灵机,都会存在一个输入,使得图灵机在该输入上死循环不停机,或者输出错误结果。