《计算理论》学习笔记

\[% 希腊字母 \def \a {\alpha} \def \b {\beta} \def \d {\delta} \def \eps {\varepsilon} \def \g {\gamma} \def \la {\lambda} \def \o {\omega} \def \O {\Omega} \def \ph {\varphi} \def \t {\theta} \def \D {\Delta} \def \G {\Gamma} \def \s {\sigma} \def \S {\Sigma} % mathrm & mathbb \def \dd {\mathrm{d}} \def \DD {\mathrm{D}} \def \e {\mathrm{e}} \def \i {\mathrm{i}} \def \N {\mathbb{N}} \def \Z {\mathbb{Z}} \def \Q {\mathbb{Q}} \def \R {\mathbb{R}} \def \C {\mathbb{C}} % 环境 \def \bf {\mathbf} \def \rm {\mathrm} \def \tt {\texttt} \def \al {\mathcal} \def \scr {\mathscr} \def \op {\operatorname} \def \bal{\begin{aligned}} \def \eal {\end{aligned}} \def \bc {\begin{cases}} \def \ec {\end{cases}} \def \bpm {\begin{pmatrix}} \def \epm {\end{pmatrix}} \def \bvm {\begin{vmatrix}} \def \evm {\end{vmatrix}} % 数学符号 \def \l {\left} \def \r {\right} \def \fr {\frac} \def \sq {\sqrt} \def \pr {\Pr} \def \pif {{+\infty}} \def \ov {\overline} \def \ud {\underline} \def \bs {\backslash} \def \sm {\setminus} \def \mps {\mapsto} \def \str {\stackrel} \def \gr {\op{grad}} \def \na {\nabla} \def \pa {\partial} \def \fo {\forall} \def \xeq {\xlongequal} \def \szn {\sum_{i = 0} ^ n} \def \son {\sum_{i = 1} ^ n} \newcommand{\abs}[1]{\left| #1 \right|} \newcommand{\an}[1]{\left \langle #1 \right\rangle} \newcommand{\p}[2]{\fr {\pa #1} {\pa #2}} \newcommand{\tm}[1]{\mathcal{O}{\l(#1\r)}} % 微积分 \def \ait {\int_{-\infty} ^ \pif} % all intergral \def \git {\int_0 ^ \pif} % 质因数 \def \gd {\mathcal N} % Gaussian distribution % 普物 \def \hx {\hat x} \def \hy {\hat y} \def \hz {\hat z} \def \hr {\hat r} \def \ht {\hat \t} \def \vr {\vec r} \def \vt {\vec \tau} \def \vv {\vec v} \def \vf {\vec F} \def \va {\vec a} \def \vl {\vec L} \def \vp {\vec p} \def \vo {\vec \omega} \def \dv {\op{div}} \def \cu {\op{curl}} % 计算理论 \def \lr {\leftrightarrow} \def \vd {\vdash} \def \vD {\vDash} \def \fo {\forall} \def \ex {\exists} \def \ra {\Rightarrow} \def \ras {\Rightarrow ^ *} \def \TIM {\mathrm{TIME}} \def \NTIM {\mathrm{NTIME}} \def \P {\mathrm{P}} \def \NP {\mathrm{NP}} \def \EXP {\mathrm{EXPTIME}} \def \NEXP {\mathrm{NEXPTIME}} \def \SP {\mathrm{SPACE}} \def \NSP {\mathrm{NSPACE}} \def \PSP {\mathrm{PSPACE}} \def \NPSP {\mathrm{NPSPACE}} \def \L {\mathrm{L}} \def \NL {\mathrm{NL}} \def \PA {\mathrm{PATH}} \def \UST {\mathrm{USTCON}} \]

Lecture 1: Mathematical Logic (1)

前半部分速通了一些后面课程会讲的内容。

形式逻辑系统 formal logical system

形式系统 formal system 由以下部分组成:

  • 一个 符号 symbol 集合。
  • 一个有限长符号串的集合,集合里的每个元素都是 合式公式 well-formed formula (wf.)。也称 命题 proposition, statement
  • 一个合式公式的集合,称为 公理 axiom
  • 一个有限的 推理规则 rule of deduction 集合。

可以根据公理和推理规则证明 定理 theorem

公理和推理规则是符合人类直觉的不言自明的规则。

完美逻辑系统 perfect logical system

  • 可靠性 soundness:任何定理都是真的。
  • 一致性 consistency:不存在 \(A\) 和非 \(A\) 都是定理。
  • 完备性 completeness:所有真命题都可以被证明(是定理)。

一些常见的逻辑系统:

  • 命题逻辑 statement logic:以逻辑运算符和子命题构成命题,如 \(E\to (F\lor G)\)
  • 一阶逻辑 first-order logic:加入量词 \(\forall\)\(\exists\),如 \((\exists x)(\forall y) (N(x) \land \lnot R(y))\)
  • 一阶算术 first-order arithmetic:加入代数公理,如 \((\forall y) (0 + y = y)\)

Lecture 2 会介绍以下定理。

Godel 不完备定理 Godel's incompleteness theorem:任何含有算术的形式系统都有 不可判定 undecidable 的命题。不可判定,即不可被证明为真,也不可被证明为假。

Godel 完备定理 Godel's completeness theorem:存在完备的一阶逻辑系统。

命题式 statement form

  • 任何 命题变量 statement variable 都是命题式。
  • \(A, B\) 是命题式,则 \((\lnot A)\)\((A\land B)\)\((A\lor B)\)\((A\to B)\)\((A\lr B)\) 都是命题式。

任何命题式都有对应的真值表,即对所有可能的命题变量,该命题式的真值。

重言式 tautology:在任何命题变量的赋值下为真,如 \((p\lor \lnot p)\)

矛盾式 contradiction:在任何命题变量的赋值下为假,如 \((q\land \lnot q)\)

\(A\) 逻辑蕴含 logical impliy \(B\),若 \((A\to B)\) 是重言式。

\(A\)\(B\) 逻辑等价 logical equivalent,若 \((A\lr B)\) 是重言式。

一些简单的规则:

  • \(A\)\((A\to B)\) 都是重言式,那么 \(B\) 是重言式。
  • 用任何命题式代替重言式的命题变量,所得结果依然是重言式。

德·摩根定律 De Morgan's law:典。

范式 normal form:仅含 \(\lnot, \land, \lor\) 的命题式。任何真值表都可以由某个范式得到。

析取范式 disjunctive normal form (DNF)合取范式 conjunctive normal form (CNF):典,见 2-SAT。

任何不矛盾的命题式都可以写成 CNF 和 DNF。

完备联结词集 adequate set of connectives:任何真值函数都可以由仅由该联结词集合构成的命题式得到。\(\{\lnot, \land \}, \{\lnot, \lor\}, \{\lnot, \to\}\) 都是完备联结词集。

论证形式 argument form \(A_1, \cdots, A_n;\ \therefore A\) 合法,当且仅当 \(((A_1\land \cdots \land A_n)\to A)\) 是重言式。

命题演算 propositional calculus

考虑这样一个形式系统 \(L\)

  • 符号集合:\(\lnot, \to , (, ), p_1, p_2, \cdots\)
  • 命题集合:\(p_i, (\lnot A), (A\to B)\),其中 \(A, B\) 是命题。
  • 公理集合:
    • L1. \((A\to (B\to A))\)
    • L2. \(((A\to (B\to C)) \to ((A\to B)\to (A\to C)))\)
    • L3. \(((\lnot A\to \lnot B)\to (B\to A))\)
  • 推理规则集合:
    • 肯定前件 modus ponens (MP):由 \(A\)\((A\to B)\) 推出 \(B\)

\(L\) 中的 证明 proof 是一系列命题 \(A_1, \cdots, A_n\),满足 \(A_i\) 要么是 \(L\) 的公理,要么是 \(A_j\)\(A_k\ (j, k< i)\) 根据 MP 得到的结果。它是 \(A_n\)\(L\) 中的证明。因此 \(A_n\)定理 theorem,记为 \(\vdash_L A_n\)

Exercise 1

仅使用 L1 和 L2 证明 \(\vd_L (A\to A)\)

Proof

\[\begin{aligned} (1)\ & (A\to ((B\to A)\to A)) & (L1) \\ (2)\ & ((A\to ((B\to A)\to A)) \to ((A\to (B\to A))\to (A\to A))) & (L2) \\ (3)\ & ((A\to (B\to A))\to (A\to A)) & (MP\ (1) (2)) \\ (4)\ & (A\to (B\to A)) & (L1) \\ (5)\ & (A\to A) & (MP\ (3) (4)) \end{aligned} \]

\(\square\)

命题集合 \(\G\)\(L\) 中的 演绎 deduction 是一系列命题满足 \(A_i\) 要么是 \(L\) 的公理,要么属于 \(\G\),要么是 \(A_j\)\(A_k\) 根据 MP 得到的结果。记为 \(\G \vd_L A_n\)

Exercise 2

\[\{A, (B\to (A\to C))\} \vd_L (B\to C). \]

Proof

\[\begin{aligned} (1)\ & A & (\G) \\ (2)\ & (A\to (B\to A)) & (L1) \\ (3)\ & (B\to A) & (MP\ (1) (2)) \\ (4)\ & (B\to (A\to C)) & (\G) \\ (5)\ & ((B\to (A\to C))\to ((B\to A)\to (B\to C))) & (L2) \\ (6)\ & ((B\to A)\to (B\to C)) & (MP\ (4) (5)) \\ (7)\ & (B\to C) & (MP\ (3) (6)) \end{aligned} \]

\(\square\)

演绎定理 deduction theorem\(\G\cup \{A\} \vd_L B\) 当且仅当 \(\G \vd_L (A\to B)\)

Proof

充分性显然,必要性对 \(\G\cup \{A\} \vd_L B\) 的证明长度归纳,详见维基百科。

提示:如果 \(B\) 是由 MP 得到的,那么 \(\G\cup \{A\} \vd_L C\)\(\G\cup \{A\} \vd_L (C\to B)\) 的证明长度小于 \(n\)

假言三段论 hypothetical syllogism (HS)\(\{(A\to B), (B\to C)\} \vd_L (A\to C)\)。使用演绎定理证明。

Exercise 3

\[\vd_L (\lnot B\to (B\to A)). \]

Proof

根据 \((\lnot B \to (\lnot A\to \lnot B))\) 显然。\(\square\)

Corollary

如果 \(B\)\(\lnot B\) 都在 \(L\) 中,那么任意命题 \(A\) 都是定理。

Exercise 4 (Difficult)

\[\vd_L ((\lnot A\to A)\to A). \]

Proof

\(B = (\lnot A\to A)\)

练习 1 证明了 \(\vd_L (A\to A)\),记为 L4。

\[\begin{aligned} (1)\ & (\lnot A\to (\lnot \lnot B\to \lnot A)) & (L1) \\ (2)\ & ((\lnot\lnot B\to \lnot A)\to (A\to \lnot B)) & (L3) \\ (3)\ & (\lnot A\to (A\to \lnot B)) & (HS\ (1)(2)) \\ (4)\ & ((\lnot A\to (A\to \lnot B))\to ((\lnot A\to A)\to (\lnot A\to \lnot B))) & (L2) \\ (5)\ & (B\to (\lnot A\to \lnot B)) & (MP\ (3) (4)) \\ (6)\ & ((\lnot A\to \lnot B)\to (B\to A)) & (L3) \\ (7)\ & (B\to (B\to A)) & (HS\ (5) (6)) \\ (8)\ & ((B\to (B\to A))\to ((B\to B)\to (B\to A))) & (L2) \\ (9)\ & ((B\to B)\to (B\to A)) & (MP\ (7) (8)) \\ (10)\ & (B\to B) & (L4) \\ (11)\ & (B\to A) & (MP\ (9)(10)) \end{aligned} \]

\(\square\)

Corollary

如果 \(\{\lnot A\}\vd_L A\),那么 \(\vd_L A\)

命题演算的完备性 adequacy of L

命题集合的 赋值 valuation 是对命题变量的 自洽 的真假赋值(例如若 \(v(p_1) = v(p_2) = T\),则 \(v(p_1\land p_2) = T\))。命题 \(A\)重言式 tautology,若对任意赋值 \(v\)\(v(A) = T\)

\(\vD_L A\) 表示对任意使得 \(L\) 中公理为真的赋值 \(v\)\(v(A) = T\)

检验一个命题的最直接方法是枚举所有可能的情况。

注意 \(\vd_L A\)\(\vD_L A\) 的区别:\(\vd_L A\) 表示 \(A\)\(L\) 的公理和推理规则得到,\(\vD_L A\) 表示当 \(L\) 的公理为真时,\(A\) 一定为真。

如果能推出但不一定为真,那么系统就是不可靠的。如果一定为真但不能推出,那么系统就是不完备的。

  • 可靠性 soundness\(\vd_L A\implies \vD_L A\)
  • 一致性 consistency:不存在 \(A\) 使得 \(A\)\(\lnot A\) 都是定理。一致性是逻辑系统的基本要求,否则所有命题都是定理,这个系统就是无意义的。
  • 完备性 adequacy\(\vD_L A\implies \vd_L A\)。注意和 completeness 区分(\(A\)\(\lnot A\) 恰有一个是定理)。

那么一个可靠,一致且完备的命题演算形式系统满足 \(A\) 是定理当且仅当 \(\vD_L A\)

系统的可靠性和一致性是显然的。接下来证明 adequacy。

\(L\)扩展 extension \(L ^ *\) 是将 \(L\) 的公理集合扩大得到的形式系统,使得 \(L\) 的定理在 \(L ^ *\) 中依然是定理。\(L ^ *\) 是一致的,若存在命题不是 \(L ^ *\) 的定理:一致性要求不存在 \(A\)\(\lnot A\) 都是定理,如果不满足一致性,根据练习 3 能推出所有命题都是定理。

Proposition

\(L ^ *\)\(L\) 的扩展,\(A\) 不是 \(L ^ *\) 的定理,那么往 \(L ^ *\) 的公理加入 \(\lnot A\) 得到的扩展 \(L ^ {**}\) 是一致的。

Proof

如果 \(L ^ {**}\) 不一致,那么 \(\vd_{L ^ {**}} A\)。于是 \(\vd_{L ^ *} (\lnot A\to A)\)。根据练习 4,\(\vd_{L ^ *} A\),和 \(A\) 不是 \(L ^ *\) 的定理矛盾。\(\square\)

根据以上结论,考虑所有命题 \(A_0, A_1, \cdots\)。从 \(L = L_0\) 开始,如果 \(\vd_{L_i} A_i\),那么 \(L_{i + 1} = L_i\),否则 \(L_{i + 1} = L_i\cup \{\lnot A_i\}\)。最终令 \(L ^ * = \bigcup_i L_i\),则 \(L ^ *\)\(L\) 的一致且 complete 的扩展。这个 complete 的系统对应一个赋值,满足所有定理的取值为 \(T\)

完备性定理 adequacy theorem:若 \(\vD_L A\),则 \(A\) 是定理。

Proof

如果 \(A\) 不是定理,那么将 \(L\) 扩展为 \(L\cup \{\lnot A\}\),再扩展成一致且 complete 的系统 \(L ^ *\),那么 \(\vd_{L ^ *} \lnot A\)。因此存在满足 \(L\) 的公理的赋值 \(v\) 使得 \(v(\lnot A) = T\),和 \(\vD_L A\) 矛盾。\(\square\)

Lecture 2: Mathematical Logic (2)

很困难,很不好理解,但是考试只考前束范式。

一阶逻辑 first-order logic

一阶形式语言 first-order language 在形式逻辑的基础上加入了量词(全称量词)和谓词(判断关系)。

符号表

  • 变量 variable\(x_1, x_2, \cdots\),表示不确定的对象。
  • 个体常量 individual constant\(a_1, a_2, \cdots\),表示特定的对象。
  • 谓词字母 predicate letter\(A_i ^ n\),表示 \(n\) 个元素的关系,返回布尔值。
  • 函数字母 function letter\(f_i ^ n\),表示 \(n\) 元函数。
  • 标点符号 punctuation symbol:左右括号和逗号。
  • 联结词 connective\(\lnot\)\(\to\)。回忆 \(\{\lnot, \to\}\) 是完备联结词集。
  • 量词 quantifier:全称量词 \(\forall\)。存在量词 \(\exists\) 可以被全称量词替换:\((\exists x)A\) 等价于 \(\lnot(\forall x)(\lnot A)\)

以上是一阶形式语言可能会出现的所有符号。

语法规则

  • term 是变量,常量或者 \(f ^ n(t_1, \cdots, t_n)\),其中 \(t_i\) 是项。
  • 原子公式 atmoic formula\(A ^ n(t_1, \cdots, t_n)\),其中 \(t_i\) 是项。
  • 合式公式 well-formed formula 是原子公式,\(\lnot A\)\(A\to B\)\((\forall x_i)A\),其中 \(A, B\) 是合式公式,\(x_i\) 是变量。

变量的作用范围和出现

  • \((\forall x_i) A\) 中,\(A\) 称为 \(x_i\)作用范围 scope,也称 辖域
  • 变量 \(x_i\) 在 wf. 中的 约束出现 bound occurence\((\forall x_i)\) 或者在某个 \((\forall x_i)\) 的辖域内。
  • 不是约束出现的出现称为 自由出现 free occurence

约束出现的变量受到量词的限制,而自由出现的变量则不受量词的限制,可以在更大的上下文中被解释或赋值(接下来介绍)。

替换

如果 \((\forall x_1)A(x_1)\) 是 “真的”,那么对任意项 \(t\)\(A(t)\) 都是真的吗?

Example

\((\forall x_1)(\exists x_2)(x_2 = x_1 + 1)\) 不能推出 \((\exists x_2) (x_2 = x_2 + 1)\)

\(t\) 对于变量 \(x_i\) 在 wf. \(A\) 中是 自由 free 的,若 \(x_i\)\(A\) 中的所有自由出现都不在某个 \((\forall x_j)\) 的辖域内,其中 \(x_j\)\(t\) 的任意变量(即在 \((\forall x_j)\) 的辖域内永远约束出现)。此时 \((\forall x_i) A(x_i)\to A(t)\) 成立,称为 \(x_i\)替换 substitution

  • 在上例中,\(x_1\)\((\exists x_2)(x_2 = x_1 + 1)\) 的自由出现被 \((\exists x_2)\) 管辖,所以 \(x_1\) 不能替换成 \(x_2\)
  • \(x_i\) 不可能在 \((\forall x_i)\) 的辖域内自由出现,所以将 \(x_i\) 替换为自己是一定合法的。
  • \(x_i\) 替换成 \(t\) 的时候,只能替换 \(x_i\) 的自由出现,因为 \(x_i\) 在其辖域内是 “形式变量”,替换这个形式变量是没有意义且不合理的。因此我们只对 \(x_i\)自由出现 做出要求。
  • 要求 \(x_i\) 的自由出现不在 \((\forall x_j)\) 的辖域内(\(t\)\(x_i\) 自由),是为了防止发生 变量捕获 variable capture\(t\) 的变量被意外约束,即原本自由出现的变量变成约束出现。

解释

在一阶逻辑中,不能直接谈论一个命题是否为 “真”,除非为命题中的符号(如谓词、函数、常量等)赋予具体的解释。

Example

\[(\fo x_i) (\fo x_j) A ^ 2(f ^ 2(x_1, x_2), f ^ 2(x_2, x_1)). \]

\(A\) 表示相等,\(f\) 表示相加时,命题为真。但当 \(f\) 表示相减时,命题为假。

一阶形式语言 \(L\) 的一个 解释 interpretation \(I\) 包含以下内容。

  • domain:非空集合 \(D_I\) 表示谈论对象的范围,即变量取值范围。
  • 常量解释:为每个个体常量分配域中的具体元素。
  • 函数解释:为每个函数符号分配域上的具体函数,返回域中的元素。
  • 谓词解释:为每个谓词符号分配域上的具体关系,返回布尔值。

Example

对于解释 \(D_I = \mathbb N\)\(a_1 = 0\)\(A ^ 2\) 表示相等,\(f\) 表示相加,那么 \((\fo x_1) A ^ 2(f ^ 2(x_1, a_1), x_1)\)\(I\) 中为真,但我们不知道 \(A ^ 2(x_1, x_2)\) 是否为真,因为 \(x_1, x_2\) 是自由变量。

赋值

\(I\) 上的 赋值 valuation 将变量映射到 \(D_I\)

一个赋值 满足 satisfy \(A\),若在该赋值下 \(A\) 为真。命题内的 \(\forall x_i\) 不受赋值影响。

命题的合法性

在给定解释 \(I\) 下:

  • 命题 \(A\) true,若所有赋值均满足 \(A\)
  • 命题 \(A\) false,若没有赋值满足 \(A\)

命题 \(A\)逻辑有效 logically valid 式,若它在所有解释下为真。例如重言式的替换,\((\fo x_1) A ^ 1(x_1)\to A ^ 1(x_1)\) 等。

命题 \(A\)矛盾 contradictory 式,若它在所有解释下为假。

一些推理事实

  • 在给定解释 \(I\) 下,如果 \(A\)\((A\to B)\) 均为真,则 \(B\) 为真。
  • \(A\) 为真当且仅当 \((\fo x_i) A\) 为真。

封闭形式

命题 \(A\)封闭形式 closed form,若不存在变量的自由出现。如果 \(A\) 封闭,那么 \(A\)\(I\) 下要么为真,要么为假。

谓词演算 predicate calculus

回忆命题演算的公理和推理规则:

  • K1. \(A\to (B\to A)\)
  • K2. \((A\to (B\to C)) \to ((A\to B) \to (A\to C))\)
  • K3. \((\lnot A\to \lnot B)\to (B\to A)\)

谓词演算形式系统 \(K_L\) 在此基础上加入了以下公理:

  • K4. \((\fo x_i) A\to A\),其中 \(x_i\) 不在 \(A\) 中自由出现。如果任意赋值都能满足 \((\fo x_i)A\),那么也能满足 \(A\),因为 \(x_i\) 的每次出现的取值都被约束了,不受到赋值影响。为什么要不在 \(A\) 中自由出现?为了让 K4 和 K5 没有交。
  • K5. \((\fo x_i) A(x_i)\to A(t)\),其中 \(t\) 对于 \(x_i\)\(A\) 中是自由的。这个是之前介绍的替换。
  • K6. \((\fo x_i) (A\to B) \to (A\to (\fo x_i)B)\),如果 \(x_i\) 不在 \(A\) 中自由出现。对于任意赋值 \(v\),设 \(w\) 是和 \(v\) 仅在 \(x_i\) 上不同的赋值。因为 \(v\) 满足 \((\fo x_i) (A\to B)\),那么 \(w\) 满足 \(A\to B\)。如果 \(v\) 满足 \(A\),那么因为 \(x_i\) 不在 \(A\) 中自由出现,所以 \(w\) 满足 \(A\),于是 \(w\) 满足 \(B\),即 \(v\) 满足 \((\fo x_i) B\)

推理规则:

  1. 肯定前件 modus ponens:根据 \(A\)\(A\to B\) 推断 \(B\)
  2. 概括 generalization:根据 \(A\) 推断 \((\fo x_i)A\)

证明和演绎

类似命题演算形式系统,定义 \(K_L\) 上的 证明 proof \(A_1, \cdots, A_n\) 满足 \(A_i\) 要么是公理,要么是由 \(A_{j, k < i}\) 根据 MP 或者概括得到的。此时称 \(A_n\)\(K_L\)定理 theorem,记为 \(\vd_K A_n\)

\(K\) 中的 逻辑有效式 记为 \(\vD_K A\)。类似命题演算中的重言式。可以证明所有公理和 \(K_L\) 中的定理都是逻辑有效的,即若 \(\vd_K A_n\),则 \(\vD_K A_n\)

定义 \(\G\)\(L\) 中的 演绎 deduction \(A_1, \cdots, A_n\) 满足 \(A_i\) 要么是公理,要么属于 \(L\),要么是由 \(A_{j, k < i}\) 根据 MP 或者概括得到的。记为 \(\G\vd_K A_n\)

这里有个较难理解的地方。

如果按照这种定义,那么在考虑 “逻辑有效” 的时候,会出现一些问题。一个最简单的例子是,\((x_1 = 0) \in \G\),使用概括得到 \(\G \vd_K ((\fo x_1)(x_1 = 0))\)。就算我们只考虑所有满足 \((x_1 = 0)\) 的赋值,但 \(x_1\) 的取值依然会被 \((\fo x_1)\) 变成任意的,导致 \(((\fo x_1)(x_1 = 0))\) 并不总是满足。于是整个系统就不可靠了,即 \(\G \vd_K A\) 不能推出 \(\G \vD_K A\)。因此笔者怀疑,在考虑 \(\G \vD_K A\) 时,\(A\) 里的 \(\fo x_i\) 会受到条件 \(\G\) 的影响,不能取到全部可能的值 \(D_I\),而只能取那些可能满足 \(\G\) 的值。对于自由变量也是如此。理解这一点,就能理解接下来的演绎定理了。

关于真正的定义,还有待笔者查证确认。

演绎定理 deduction theorem:若 \(\G \cup \{A\} \vd_K B\),且在演绎过程中没有使用 \(A\) 中某个自由出现过的变量的推广,则 \(\G \vd_K (A\to B)\)

  • 例如 \(\{A\}\vd_K (\fo x_i) A\) 并不一定意味着 \(\vd_K (A\to (\fo x_i)A)\)。原因在上面解释了。

破坏演绎定理的是自由变量,所以如果 \(A\) 是封闭形式且 \(\G \cup \{A\}\vd_K B\),则 \(\vd_K (A\to B)\)。此外,演绎定理的逆命题显然成立。进一步地,若 \(\G \vd_K (A\to B)\),则 \(\G\cup \{A\} \vd_K B\)

Exercise 1

如果 \(x_i\)\(A(x_i)\) 中自由出现,且 \(x_j\)\(A(x_i)\) 中没有出现,则

\[\vd_K ((\fo x_i) A(x_i) \lr (\fo x_j) A(x_j)). \]

Proof

\[\begin{aligned} (1)\ & (\fo x_i) A(x_i) \to A(x_j) & (K5) \\ (2)\ & (\fo x_j) ((\fo x_i) A(x_i) \to A(x_j)) & (G\ (1)) \\ (3)\ & ((\fo x_j) ((\fo x_i) A(x_i) \to A(x_j))) \to ((\fo x_i) A(x_i) \to (\fo x_j) A(x_j)) & (K6) \\ (4)\ & (\fo x_i) A(x_i) \to (\fo x_j) A(x_j) & (MP\ (2) (3)) \\ \end{aligned} \]

\(\square\)

前束范式

如果 \(x_i\) 不在 \(A\) 中自由出现:

  • \(\vd_K (\fo x_i) (A\to B) \lr (A\to (\fo x_i)B)\)
  • \(\vd_K (\exists x_i) (A\to B) \lr (A\to (\exists x_i)B)\)

\(A\lr B\) 可以看成 \(A\to B\)\(B\to A\),或者看成 \(\lnot ((A\to B) \to \lnot (B\to A))\)

如果 \(x_i\) 不在 \(B\) 中自由出现:

  • \(\vd_K (\fo x_i) (A\to B) \lr ((\exists x_i)A\to B)\)
  • \(\vd_K (\exists x_i) (A\to B) \lr ((\fo x_i)A\to B)\)

根据以上规则,我们总可以将一个命题化为与之等价的 前束范式 prenex normal form:所有量词在命题的最前面。证明略。

Exercise 2

将以下命题化为前束范式:

\[((\fo x_1) A_1 ^ 2 (x_1, x_2) \to \lnot(\exists x_2) A_1 ^ 1 (x_2)) \to (\fo x_1)(\fo x_2) A_1 ^ 2(x_1, x_2). \]

Solution

首先将约束变量和自由变量分开,防止变量名冲突。

\[\begin{aligned} & ((\fo x_1) A_1 ^ 2 (x_1, x_2) \to \lnot(\ex x_3) A_1 ^ 1 (x_3)) \to (\fo x_4)(\fo x_5) A_1 ^ 2(x_4, x_5). \\ & ((\fo x_1) A_1 ^ 2 (x_1, x_2) \to (\fo x_3)\lnot A_1 ^ 1 (x_3)) \to (\fo x_4)(\fo x_5) A_1 ^ 2(x_4, x_5). \\ & (\fo x_3)((\fo x_1)A_1 ^ 2 (x_1, x_2) \to \lnot A_1 ^ 1 (x_3)) \to (\fo x_4)(\fo x_5) A_1 ^ 2(x_4, x_5). \\ & (\fo x_3)(\ex x_1)(A_1 ^ 2 (x_1, x_2) \to \lnot A_1 ^ 1 (x_3)) \to (\fo x_4)(\fo x_5) A_1 ^ 2(x_4, x_5). \\ & (\ex x_3)(\fo x_1)((A_1 ^ 2 (x_1, x_2) \to \lnot A_1 ^ 1 (x_3)) \to (\fo x_4)(\fo x_5) A_1 ^ 2(x_4, x_5)). \\ & (\ex x_3)(\fo x_1) (\fo x_4)(\fo x_5) ((A_1 ^ 2 (x_1, x_2) \to \lnot A_1 ^ 1 (x_3)) \to A_1 ^ 2(x_4, x_5)). \\ \end{aligned} \]

一个前束范式称为 \(\Pi_n\) 形式,若其以全称量词开头,之后有 \(n - 1\) 次量词的交替。

一个前束范式称为 \(\Sigma_n\) 形式,若其以存在量词开头,之后有 \(n - 1\) 次量词的交替。

完备性定理 adequacy theorem\(K_L\) 可靠,一致且完备。一个命题是 \(K_L\) 中的定理当且仅当它逻辑有效。通常称为 哥德尔完备性定理 Gödel completeness theorem

数学系统 mathematical system

\(K_L\) 的基础上加入了一些数学上的概念和公理。

相等公理 axioms for equality

  • E7. \(A_1 ^ 2(x_1, x_1)\)
  • E8. \(A_1 ^ 2(t_k, u) \to A_1 ^ 2(f_i ^ n(t_1, \cdots, t_k,\cdots, t_n), f_i ^ n(t_1, \cdots, u, \cdots, t_n))\)
  • E9. \(A_1 ^ 2(t_k, u) \to (A_i ^ n(t_1, \cdots, t_k, \cdots, t_n) \to A_i ^ n(t_1, \cdots, u, \cdots, t_n))\)

于是我们可以将 \(A_1(x_1, x_2)\) 写成 \(x_1 = x_2\)

一阶代数 first order arithmetic \(N\)

  • N1. \((\fo x_1) \lnot(f_1 ^ 1(x_1) = a_1)\)。不存在一个自然数的后继是 \(0\)
  • N2. \((\fo x_1)(\fo x_2) (f_1 ^ 1(x_1) = f_1 ^ 1(x_2) \to x_1 = x_2)\)。两个自然数的后继相等,则这两个数相等。
  • N3. \((\fo x_1) (f_1 ^ 2(x_1, a_1) = x_1)\)\(x + 0 = x\)
  • N4. \((\fo x_1) (\fo x_2) (f_1 ^ 2(x_1, f_1 ^ 1(x_2)) = f_1 ^ 1(f_1 ^ 2(x_1, x_2)))\)\(x + (y + 1) = (x + y) + 1\)
  • N5. \((\fo x_1) (f_2 ^ 2(x_1, a_1) = a_1)\)\(x \times 0 = 0\)
  • N6. \((\fo x_1)(\fo x_2)(f_2 ^ 2(x_1, f_1 ^ 1(x_2)) = f_1 ^ 2(f_2 ^ 2(x_1, x_2), x_1)))\)\(x\times (y + 1) = x\times y + x\)
  • N7. \(A(a_1) \to ((\fo x_1 )(A(x_1 ) \to A(f_1 ^ 1(x_1))) \to (\fo x_1 ) A(x_1))\)。数学归纳法。

其中 N1,N2 和 N7 又称为 皮亚诺公理 Peano's posulate

代数系统是不完备的。见以下定理。

哥德尔不完备定理 Gödel incompleteness theorem

理性娱乐,有空再学。

Lecture 3: Finite Automaton

这一讲相对比较简单。

形式语言 formal language

  • 一个有限的字符集合称为 字符集 alphabet
  • 零个或若干个字符组成的序列称为 字符串 string
  • 长度为零的串称为 空串 empty string,记为 \(\eps\)
  • 所有有限长字符串的集合,记为 \(\S ^ * = \{\eps\} \cup \S \cup \S ^ 2 \cup \cdots\)

一个 语言 language\(\S ^ *\) 的子集。

一个 程序 programe(也称 机器 machine)以字符串作为输入,返回 接受 accept不接受 reject\(M\) 的语言是 \(M\) 接受的所有字符串的集合,记为 \(L(M)\)

确定性有限状态自动机 deterministic finite automaton

一个 确定性有限状态自动机 DFA \(M\) 是五元组 \((Q, \S, \d, q, F)\)

  • \(Q\) 是有限 状态集
  • \(\S\) 是有限 字符集
  • \(\d : Q\times \S \to Q\)转移函数 transition function
  • \(q\in Q\)起始状态 initial state
  • \(F\subseteq Q\)接受状态 accepting state

语法 syntax:描述自动机是什么(定义)。

语义 semantics:描述自动机做什么(接受的字符串)。

\(M\) 接受 accept 字符串 \(w = w_1w_2\cdots w_n\),表示存在 \((r_0, \cdots, r_n)\),使得 \(r_0 = q\)\(r_i = \d(r_{i - 1}, w_i)\)\(r_n \in F\)

  • \(M\) 是 DFA 时,这等价于从 \(q\) 出发根据字符串沿着确定的转移函数最终走到接受状态。
  • \(M\) 是 NFA 时,转移序列不唯一。

\(M\) 识别 recognize 的语言 \(L(M)\)\(M\) 接受的所有字符串的集合。

正则语言 regular language 是能被某个 DFA 识别的语言集合。

考虑正则语言在一般集合操作上的封闭性。

  • 正则语言在 补集 complementation 操作下封闭:考虑 \(M' = (Q, \S, \d, q, Q\backslash F)\) 即可。
  • 正则语言在 交集 intersection 操作下封闭:考虑 \(M = M_1 \times M_2\) 即可。
  • 正则语言在 并集 union 操作下封闭:\(L_1 \cup L_2 = \ov {(\ov {L_1} \cap \ov {L_2})}\)

正则语言在 连接 concatenation 下封闭吗?

\[A\circ B = \{xy\mid x\in A,\ y\in B\}. \]

正则语言在 重复 star克莱尼星号 Kleene star)下封闭吗?注意 \(k\) 可以等于 \(0\)

\[A ^ * = \{x_1x_2\cdots x_k \mid x_i\in A\}. \]

非确定性有限状态自动机 nondeterministic finite automaton

集合 \(A\)幂级 power set 为其所有子集构成的集合。

非确定性有限状态自动机 NFA 允许空字符 \(\eps\) 的存在,在转移一个字母之前允许转移任意多个空字符,且从一个状态出发给定字符的转移不唯一。形式化地,\(N = (Q, \S, \d, q, F)\),其中 \(\d : Q\times \S_\eps\to 2 ^ Q\)

从 DFA 到 NFA 的是平凡的,考虑 NFA 转 DFA。

Theorem

对任意 NFA \(N\),存在 DFA \(M\) 使得 \(L(N) = L(M)\)

\(N\) 的状态的幂集当成 \(M\) 的状态即可。剩下的构造是显然的。

那么 NFA 转 DFA 的指数爆炸是必须存在的吗?考虑下例。

Example

\(\S = \{\tt a, \tt b\}\)\(L_k\) 是倒数第 \(k\) 位是 \(\tt b\)\(\tt {ab}\) 串。显然存在大小为 \(k + 1\) 的 NFA 识别 \(L_k\)

设 DFA \(M\) 识别 \(L_k\)。若 \(|M| < 2 ^ k\),则存在 \(w, w'\in \S ^ k\) 使得 \(w, w'\) 对应相同状态 \(r\in Q\)。设它们在第 \(j + 1\) 位不同,那么往 \(w\)\(w'\) 后加入 \(j\)\(\tt a\),它们其中一个被识别,另一个没有,但它们对应相同状态,矛盾。

  • NFA 在 并集 下封闭:新加入起点,通过 \(\eps\) 转移到每个 NFA 原来的起点。类似地,总可以让 NFA 只有一个接受状态。
  • NFA 在 连接 下封闭:让 \(N_1\)\(N_2\) 只有一个接受状态,从 \(N_1\) 的接受状态通过 \(\eps\) 转移到 \(N_2\) 的起始状态。
  • NFA 在 重复 下封闭:新加入起点作为接受状态,通过 \(\eps\) 转移到原来的起点,原来的接受状态不再是接受状态,通过 \(\eps\) 转移到新起点。

正则表达式 regular expression

正则语言在 正则操作 regular operation 下封闭:并集,连接和重复。

正则表达式\(\S\) 中的符号,\(\varnothing, \eps, \cup, \circ, *\) 和左右括号组成,以递归的形式定义语言。例如 \(0 ^ *10 ^ *\) 表示恰好含有一个 \(1\)\(01\) 串。

考虑正则表达式和 NFA 的关系。显然,所有正则表达式的语言都可以被 NFA 识别。

Theorem

任何被 NFA 识别的语言都是正则表达式。

Proof

课件上用到了 推广型非确定性有限状态自动机 GNFA,大概思想是状态之间可以用正则表达式转移。

\(q_i\to q_k\)\(q_k\to q_k\)\(q_k\to q_j\) 的正则表达式分别是 \(R_1, R_2, R_3\),那么删去 \(q_k\),将 \(q_i\to q_j\) 之间的正则表达式并上 \(R_1R_2 ^ *R_3\)。最终只剩下起点和终点之间的正则表达式。\(\square\)

因此,正则语言有三个等价定义:

  • 被 DFA 识别。
  • 被 NFA 识别。
  • 可以用正则表达式表达。

非正则语言 non-regular language

不是正则语言的语言称为 非正则语言

Example

\(B = \{0 ^ n 1 ^ n\mid n\geq 0\}\) 不是正则语言。

假设存在 \(k\) 个状态的 DFA \(M\) 识别 \(B\),那么存在 \(0\leq i, j\leq k\)\(i\neq j\) 使得 \(0 ^ i\)\(0 ^ j\) 在相同状态。如果 \(M\) 接受 \(0 ^ i1 ^ i\),那么它必须接受 \(0 ^ j1 ^ i\)

泵引理 pumping lemma 是用于证明非正则语言的工具:如果 \(A\) 是正则语言,那么存在 \(p\) 使得对任意 \(s\in A\)\(|s| \geq p\),都存在分割 \(s = xyz\) 满足:

  • 对任意 \(i\geq 0\)\(xy ^ iz\in A\)
  • \(|y| > 0\)
  • \(|xy| < p\)

对应的 \(p\) 称为 泵长度 pumping length

Proof

考虑识别 \(A\) 的 DFA \(M\),设 \(M\)\(p\) 个状态。输入 \(s\),存在 \(q_i = q_j\ (0\leq i < j \leq p)\)。令 \(x = s[1, i]\)\(y = s[i + 1, j]\)\(z = s[j + 1, |s|]\) 即可。\(\square\)

\(p\) 其实是表达 \(A\) 所需的最小状态数。

泵引理是正则语言的必要条件,但不充分。存在满足泵引理的非正则语言,例如 \(\{0 ^ a1 ^ b2 ^ c \mid (a = 1 \land b = c) \lor a \neq 1\}\)

Example

\(A = \{ww \mid w\in \{0, 1\} ^ *\}\) 不是正则语言。

Proof

设泵长度为 \(p\)。考虑 \(0 ^ p10 ^ p1\)。根据泵引理,对任意 \(i\geq 0\)\(0 ^ {p + i}10 ^ p1 \in A\),矛盾。\(\square\)

Example

\(A = \{1 ^ {n ^ 2}\mid n \geq 0\}\) 不是正则语言。

Proof

设泵长度为 \(p\)。考虑 \(1 ^ {p ^ 2}\)。因为 \(|xy| \leq p\),所以 \(|x y ^ 2z| \leq p ^ 2 + p\),矛盾。\(\square\)

Exercise

\(A = \{0 ^ i 1 ^ j \mid i > j\}\) 不是正则语言。

Proof

设泵长度为 \(p\)。考虑 \(0 ^ p1 ^ {p - 1}\),那么 \(0 ^ {p - |y|}1 ^ {p - 1}\in A\),和 \(|y| > 0\) 矛盾。\(\square\)

Lecture 4: Context-free Grammar

上下文无关语法 context-free grammar

一个 上下文无关语法 CFG 是四元组 \((V, \S, R, S)\),其中

  • 变量(非终结符)variable 集合 \(V\)。一个待确定的元素。
  • 终结符 terminal 集合 \(\Sigma\)。一个已经确定,不会再改变的元素。
  • 规则 rule 集合 \(R\)。每个规则是一个二元组,由一个变量和一个属于 \((V\cup \S) ^ *\) 的字符串组成。
  • 开始变量 start variable \(S\in V\)

语法的语义有两条:

  • 如果存在规则 \(A\to w\),那么 \(uAv\ra uwv\),称为 \(uAv\) 生成 yield \(uwv\)
  • \(u\) 推出 derive \(v\),若存在 \(u_1, \cdots, u_k\) 使得 \(u\ra u_1 \ra \cdots \ra u_k \ra v\),记为 \(u \ras v\)

CFG 的 语言\(S\) 能够推出的字符串,即

\[L(G) = \{w\in \S ^ *\mid S\ras w\}. \]

正则表达式的语法可以表示成

\[R\to A\mid \eps \mid \varnothing \mid (R\circ R) \mid (R\cup R) \mid (R) ^ *,\quad A\to a\mid b. \]

其中 \(\S = \{a, b, (, ), \eps, \varnothing, \circ, \cup, {} ^*\}\)

CFG 比正则语言更强:\(S\to 0S1 \mid \eps\) 可以表示非正则语言 \(\{0 ^ n1 ^ n\mid n \geq 0\}\)

Theorem

给定 DFA \(A = (Q, \S, \d, q_0, F)\),存在等价的 CFG \(A' = (V, \S', R, S)\) 使得 \(L(A) = L(A')\)

Proof

\(A\) 的每个状态,在 \(A'\) 中建立相对应的变量。简单构造即可。\(\square\)

解析树 parse tree 用于表示过程中的每个变量是如何被解释的,即作用在这个变量上的规则。树上的 内部点 internal node 是一个变量,叶子 leaf 是一个终结符。

一个语法是 有歧义(二义)ambiguous 的,若一个字符串有两个不同的解析树。注意:不是两个不同的推导,不关心应用规则的先后顺序。

最左推导 leftmost derivation:每一次最左边的变量被展开。那么一个字符串有两个不同的解析树当且仅当它存在两个最左推导。

为了避免语法存在歧义,我们给变量的展开提供顺序,这可能需要引入新的变量。

  • 为什么称为 “语法”?因为推导规则很像人类语言的语法。实际上,CFG 一开始被提出就是用于研究人类语言的语法。

检查一个 CFG 是否有歧义是 不可判定 undecidable 的。

上下文无关语言 context-free language

上下文无关语言 CFL 是能被 CFG 识别的语言。

一个 CFL 称为 固有歧义 inherent ambiguous 的,若任何识别这个语言的 CFG 都是有歧义的。

Example

\[S \to AS\mid \eps,\quad A\to A1 \mid 0A1\mid 01. \]

这个语法描述的语言是所有 \(0\) 连续段长度小于其右侧相邻的 \(1\) 连续段长度的字符串。

这个语法显然是有歧义的:\(AS \to A \to A1\to 011\)\(AS\to AA\to 01A\to 011\)

但是这个语言不是固有歧义的:\(S\to AS\mid \eps\)\(A\to 0A1\mid B\)\(B\to B1 \mid 01\) 识别相同的语言且无歧义。

Example

\[L = \{w \mid w = a ^ ib ^ j c ^ k,\ k\geq 1,\ (i = j\lor i = k)\}. \]

\(L\) 是固有歧义的。无论什么语法,\(a ^ n b ^ n c ^ n\) 总会有两个解析树。

证明见 A Direct Proof of the Inherent Ambiguity of a Simple ContextFree Language, Hermann Maurer, Journal of ACM, 1969.

CFL 在并集,连接和重复下封闭,在交集下 不封闭。但 CFL 在和正则语言的交集下封闭(神奇吧)。

  • 为什么称为 “上下文无关”?变量替换的规则和上下文无关。一个上下文相关的替换规则形如 \(\alpha A \beta\to \alpha \gamma \beta\)。检查 CSG 是否为空是不可判定的,但检查 CFG 是否为空是可判定的。

下推自动机 pushdown automaton

正则语言可以用正则表达式以句法的形式表达,也可以用 NFA 和 DFA 以计算的形式表达。CFL 可以用 CFG 以句法的形式表达,现在需要找到一个计算形式的表达。这个表达就是下推自动机。在 NFA 的基础上,PDA 加入了一个无限大的栈(PDA 是 非确定性 的)。在 PDA 进行转移的时候,它可以将符号压入栈或从栈中弹出(可以同时,先弹后压)。

形式化的,一个 下推自动机 PDA 是六元组 \((Q, \S, \G, \d, q_0, F)\),其中

  • \(Q\) 是有限状态集。
  • \(\S\) 是输入字符集。
  • \(\G\)栈字符集 stack alphabet
  • \(q_0\in Q\) 是起始状态。
  • \(F\subseteq Q\) 是接收状态集。
  • \(\d : Q\times (\S \cup \{\eps\}) \times (\G \cup \{\eps\})\to 2 ^ {Q \times (\G \cup \{\eps\})}\) 是转移函数。左边的 \(\G \times \{\eps\}\) 是弹出的符号,右边是压入的符号。也就是,根据输入的符号和弹出的符号,选择 \(Q\times (\G \cup \{\eps\})\) 的一个子集当中的某个转移。

Example

\(L = \{ww ^ R\mid w\in \S ^ *\}\)。以下 PDA 识别 \(L\)

  • \(q_0 \to q_1\ (\eps, \eps / \$)\)(表示 \(q_0\) 读入 \(\eps\),弹出 \(\eps\),压入 \(\$\))。
  • \(q_1\to q_1\ (0, \eps / 0),(1, \eps / 1)\)
  • \(q_1\to q_2\ (\eps, \eps / \eps)\)
  • \(q_2\to q_2\ (0, 0 / \eps),(1, 1 / \eps)\)
  • \(q_2 \to q_3\ (\eps, \$ / \eps)\)

接下来证明 CFL 和 PDA 的等价性。

Theorem

\(L\) 是 CFL 当且仅当它被某个 PDA 识别。

CFG \(\to\) PDA

用 PDA 模拟规则即可。例如,对于规则 \(A\to 0A1\),加入转移 \(q\to q\ (\eps, A / 1A0)\)(依次压入 \(1, A, 0\))。

PDA \(\to\) CFG

规定 CFG 只有一个接受状态,接受时栈为空,且每个转移不会同时弹出和压入。

建立 \(\al O(n ^ 2)\) 个变量 \(A_{pq}\) 表示使得从 \(p\)\(q\) 保持栈的状态不变(过程中可以变)的字符串。三种规则:

  • \(A_{pq} \to aA_{rs}b\),若 \(p\to r\ (a, \eps / t)\)\(s\to q\ (b, t / \eps)\)
  • \(A_{pq} \to A_{pr}A_{rq}\)
  • \(A_{pq}\to \eps\)

归纳证明。

CFL 对应的 泵引理:存在泵长度 \(p\),使得对任意 \(s\in A\)\(|s| \geq p\),存在划分 \(s = uvxyz\) 满足

  • 对任意 \(i\geq 0\)\(uv ^ ixy ^ iz\in A\)
  • \(|vy| > 0\)
  • \(|vxy| \leq p\)

如何理解?如果一个变量在经过若干次推导之后又出现(对足够长的字符串,这种情况总会出现),设第二次出现最终生成 \(x\),第一次出现最终生成 \(vxy\)。用第二次出现代替第一次出现则为 \(i = 0\),用第一次出现代替第二次出现则为 \(i = 2\),以此类推。

Example

\(\{a ^ nb ^ nc ^ n\mid n\geq 0\}\) 不是 CFL。

如果 \(v, y\) 都只含有一种字符,那么不可能让 \(a, b, c\) 的出现次数相等。

如果 \(v\)\(y\) 含有两种字符,那么 \(v ^ i\)\(y ^ i\) 当中 \(a, b, c\) 的顺序就不对了。

Example

\(\{ww\mid w\in \{0, 1\} ^ *\}\) 不是 CFL。

假设 \(p\) 是泵长度,\(s = 0 ^ p1 ^ p 0 ^ p 1 ^ p\) 即为反例。

Example

\(\{a ^ ib ^ jc ^ k\mid 0\leq i\leq j \leq k\}\) 不是 CFL。

假设 \(p\) 是泵长度,\(s = a ^ pb ^ pc ^ p\) 即为反例。注意 \(i\) 可以等于 \(0\)(称为 pump down)。

Lecture 5: Turing Machine and Halting Problem

图灵机可以识别几乎所有我们能想到的语言。

图灵机 Turing machine

从 NFA 到 PDA,加入了一个只能从末端读写的栈。把这个栈换成能够任意读写的无限长纸带,就是图灵机。

一个 图灵机 TM 是七元组 \((Q, \S, \G, \d, q_s, q_a, q_r)\),其中

  • \(Q\) 是有限状态集。
  • \(\S\) 是输入字符集。
  • \(\G\)纸带字符集 tape alphabet\(\S \cup \{\bot\}\subseteq \G\)
  • \(\d : Q\times\G\to Q\times \G\times \{L, R\}\) 是转移函数。
  • \(q_s\in Q\) 是起始状态。
  • \(q_a\in Q\) 是接受状态。
  • \(q_r\in Q\) 是拒绝状态。\(q_a\neq q_r\)

当进入接受或拒绝状态时,运行结束,称为 停机 halt

约定:输入的字符串会被写入纸带最前面的 \(|w|\) 个格子,初始读写头在纸带最左边的格子。当读写头位于最左边时,\(L\) 不会让它向左移动。

格局 configuration 描述了图灵机纸带当前的内容,读写头的位置和对应的状态。例如 \(11q_s110011\)

称 TM \(M\) 识别 语言 \(A\),若接受字符串集合 \(L(M) = A\)。如果 \(w\notin L(M)\),那么有可能是 \(w\) 被 TM 拒绝,也有可能是 TM 不停机。

称 TM \(M\) 判定 decide 语言 \(A\),若 \(L(M) = A\)\(M\) 拒绝所有 \(w\notin L(M)\),即 \(M\) 总是停机。

  • 一个语言称为 递归可枚举 recursively enumerable(也称 可识别 recognizable, RE)的,若存在 TM 识别它。
  • 一个语言称为 递归 recursive(也称 可判定 decidable)的,若存在 TM 判定它。
  • \(L\) 称为 补集可识别 co-recognizable, co-RE 的,若 \(\ov L\) 是可识别的。

Theorem

可判定当且仅当可识别且补集可识别。

为什么要图灵机呢?图灵机本质上是在模拟 “计算” 的过程。通常而言,自然语言描述的算法就足以描述一个图灵机。但图灵机更大的作用在于进行严谨的理论证明。

邱奇图灵论题 Church-Turing thesis 认为自然数上的函数是可计算的,当且仅当它可以被图灵机计算。

图灵机的变体 variant of TM

三个方向:多带,非确定,有输出。所有这些变体和 TM 的功能相同,但可以简化考虑问题的难度。

多带图灵机 multitape TM

一个多带 TM 是和 TM 差不多的七元组。区别是允许读写头不移动,且转移函数形如

\[\d : Q\times \G ^ k\to Q\times \G ^ k \times \{L, R, S\} ^ k. \]

Theorem

多带 TM 等价于 TM。

Proof

如果能说明 TM 能模拟多带 TM,那么这两个概念就是等价的。具体构造是这样的:加入分隔符,用特殊符号标记每个读写头当前的位置即可。注意,当读写头向后移到分隔符时,需要将后面的纸带整个向后平移。

因此,多带 TM 接受当且仅当 TM 接受,拒绝当且仅当 TM 拒绝,不停机当且仅当 TM 不停机。\(\square\)

非确定图灵机 non-deterministic TM

从 TM 扩展到 NTM 的过程类似 DFA 扩展到 NFA。NTM 允许算法 “猜测“,且猜测总是正确的。即 NTM 会尝试寻找一个能够识别给定字符串的路径,且如果这样的路径存在,那么它总能够找到。

NTM 的转移函数形如

\[\d : Q\times \G \to 2 ^ {Q\times \G \times \{L, R\}}. \]

注意:NTM 接受 \(w\),如果存在接受路径。NTM 拒绝 \(w\),如果拒绝所有可能的路径。NTM 判定 \(L(M)\),如果无论如何都停机,不能一部分分支拒绝,一部分分支不停机。

  • NTM 本质上是验证算法,它猜测可能的解决方案并验证是否正确。例如,判定一张图上是否有 Hamilton 回路,NTM 只需要验证一条路径是不是 Hamilton 回路。如果能验证,那么 NTM 会自动帮我们枚举所有可能的路径,并正确地猜出 Hamilton 回路。这对应了 NP 问题要求存在多项式复杂度的解的验证算法:non-deterministic polynomial

Theorem

NTM 在识别语言上等价于 TM。

Proof

用三带图灵机模拟。第一个纸带存输入,第二个纸带模拟图灵机,第三个纸带进行分支预测,本质上是对决策树进行 BFS。显然不能用 DFS,因为这可能使得在进入正确的选择之前需要模拟无限多个可能的决策树。

每次将第一个纸带复制到第二个纸带上。在第二个纸带运行时,使用第三个纸带的信息判定转移。过程当中,如果第三个纸带的判定用完了,或者转移不合法,或者第二个纸带拒绝了,那么将第三个纸带变成其字典序后继(长度是第一关键字),然后重复该过程。

如何避免第二个纸带陷入死循环?第三个纸带存储了对第二个纸带的每个转移的决策,包括确定性的转移。所以在运行第二个纸带时,在有限次决策之后,第三个纸带总会用完。因此不会陷入死循环。

因此 TM 接受当且仅当 NTM 接受。\(\square\)

这种指数爆炸是必需的吗?人类目前还不知道。

一个 NTM 称为 决定器 decider,若所有分支在所有输入下停机。

Theorem

NTM 在判定语言上等价于 TM。

Proof

对于一个决定器,考虑上面的构造。不要再尝试所有前缀已经可以让 TM 停机的分支预测,那么总存在一个时刻,使得所有分支预测都停机。此时停机即可。\(\square\)

  • 如果 NTM 有一个分支接受,那么对应的 TM 就接受。否则,如果 NTM 有一个分支不停机,那么对应的 TM 就不停机。否则 TM 停机。即接受的优先级大于不停机,大于拒绝。

带输出的图灵机 TM with output

带输出的图灵机有一个只能写的纸带,且写头只能向右移动。其中的一个类型是 枚举器 enumerator,依次枚举字符串(可重复),不停机。

Theorem

一个语言递归可枚举当且仅当被枚举器生成。

Sufficiency

如果 \(E\) 生成 \(L\),考虑 TM \(M\):输入 \(w\in L\),运行 \(E\),每次输出一个字符串时和 \(w\) 比较。如果相等,则接受。

Necessity

不能简单地模拟每个字符串的输入并且在接受时输出,因为有可能不停机。也不能简单地枚举运行步数,因为有无穷多个字符串。

给每个字符串编号。在第 \(i\) 轮,对每个编号在 \(0\sim i - 1\) 的字符串,检查 \(M\) 在前 \(i\) 步能否接受该字符串。若接受,则输出。

通用图灵机 universal TM

我们可以用自然数编号 TM,于是,一个 UTM 是可以模拟任何 TM 在任何输入下的运行状态的 TM。

\(U\) 的输入是一个 TM 的编号 \(\an{M}\) 和对应的输入 \(w\),使得 \(U\) 接受 \(\an{M, w}\) 当且仅当 \(M\) 接受 \(w\)\(U\) 拒绝 \(\an{M, w}\) 当且仅当 \(M\) 拒绝 \(w\)

  • 存在 UTM 只有两个状态和三个符号。

停机问题 halting problem

\(A_{TM} = \{\an{M, w}\mid M \text{ accepts } w\}\)

\(A_{TM}\) 是可识别的,因为总可以在 \(M\) 上运行 \(w\) 直到 \(M\) 接受 \(w\)(对应的识别这个语言的 TM 即 UTM)。但 \(A_{TM}\) 是不可判定的,因为我们不知道在 \(M\) 上运行 \(w\) 是否会停机:无论运行了多少步,都无法区分究竟是停机但还没运行完,还是不停机(不是严谨证明)。

Proof

假设 \(A_{TM}\) 是可判定的,那么存在 TM \(H\) 判定 \(A_{TM}\)

\(D(\an{M})\) 表示如果 \(H(\an{M, \an{M}})\) 接受,则拒绝,否则接受。

考虑 \(D(\an{D})\)。如果接受,那么 \(H(\an{D, \an{D}})\) 接受,于是拒绝,矛盾。如果拒绝,那么 \(H(\an{D, \an{D}})\) 接受,于是矛盾。因此 \(H\) 不存在。\(\square\)

于是 \(\overline{A_{TM}}\) 是不可识别的。

\(HALT_{TM} = \{\an{M, w}\mid M \text{ halts on input } w\}\)。如果能判定 \(HALT_{TM}\),则能判定 \(A_{TM}\)。因为可以先判定是否停机,如果不停机则拒绝,否则返回 \(M(w)\),就得到了判定 \(A_{TM}\) 的图灵机。所以 停机问题不可判定

谕示图灵机 oracle turing machine 是一个多带图灵机,有一个特殊的查询纸带和三个特殊状态 \(q_{query}, q_{yes}, q_{no}\)。在给定输入 \(x\)谕示语言 oracle language \(A\) 下,\(M ^ A\) 正常运行,直到进入 \(q_{query}\)。设 \(y\) 是查询纸带的内容,如果 \(y\in A\),那么转移到 \(q_{yes}\),否则转移到 \(q_{no}\)。简单地说,就是在 TM 的基础上,加入了查询一个字符串是否属于一个语言的功能。

  • 提出谕示图灵机的作用是为了描述问题之间的归约。

\(A\) 称为 图灵可归约 Turing reducible\(B\),如果存在 OTM \(M ^ B\) 判定 \(A\)。记为 \(A \leq_T B\)

于是我们可以证明一个语言是不可判定的:将一个不可判定的语言归约到该语言即可。

Example

\[SE_{TM} = \{\an{M} \mid M\text{ accepts some input } z\}. \]

注意这里 \(z\) 不是给定的。

考虑将其归约到 \(A_{TM}\)

给定 \(M, w\),构造 \(M'\):如果 \(M\) 接受 \(w\),则 \(M'\) 接受 \(z\),否则拒绝(注意这个是伪代码而不是描述 \(M'\) 的作用,因为真正能做到这一点的 TM 是不存在的)。

Kleene's s-m-n Theorem

存在 \(T(\an{M}, x_{1\sim m})\) 输出 TM \(M'\) 使得 \(M'(y_{1\sim n}) = M(x_{1\sim m}, y_{1\sim n})\)

相当于把 \(x_{1\sim m}\) 融到 \(M\) 里面了。

假设 \(R\) 判定 \(SE_{TM}\)。构造 \(S(\an{M, w})\):构造 \(M'(z)\),接受当且仅当 \(M\) 接受 \(w\)(这里用 \(T\)\(M\)\(w\) 融到了 \(M'\) 里面)。然后用 \(R\) 运行 \(M'\) 并返回结果。那么 \(S\) 接受 \(\an{M, w}\) 当且仅当 \(M\) 接受 \(w\)。于是 \(S\) 判定 \(A_{TM}\),矛盾。

Example

\[E_{TM} = \{\an{M} \mid M \text{ accepts no input}\}. \]

假设 \(R\) 判定 \(E_{TM}\)。构造 \(S(\an{M})\):在 \(R\) 上运行 \(M\),如果接受则拒绝,否则接受。那么 \(S\) 判定 \(SE_{TM}\),矛盾。

DFA 和 CFG 是否为空都是可判定的。对于 CFG,从终止字符开始标记,如果规则右边的每个元素都被标记,那么规则左边的变量也被标记。检查起始变量是否被标记即可。

Example

\[R = \{\an{M} \mid L(M) \text{ is regular}\}. \]

给定 \(M, w\),构造 \(T(z)\):在 \(M\) 上运行 \(w\),如果 \(M\) 停机,则 \(T\) 接受 \(z\) 当且仅当 \(z = 0 ^ i 1 ^ i\)

如果 \(M\) 停机,则 \(L(T)\) 不是正则语言。否则 \(L(T) = \varnothing\) 是正则语言。如果能判定 \(R\),则能判定 \(HALT_{TM}\),矛盾。

Example: The Post Correspondence Problem (PCP)

给定两个字符串序列 \((x_{1\sim n})\)\((y_{1\sim n})\),求能找到下标序列使得 \(x_{i_1} \cdots x_{i_k} = y_{i_1} \cdots y_{i_k}\)

PCP 不可判定。

证明方法是把停机问题归约到该问题。大致思路是用字符串表示格局,一些特殊的 \((x_i, y_i)\) 表示图灵机的转移。起始 \(x_1 = \#\)\(y_1 = \#q_sw\#\),其中 \(w\) 是输入,最终要求在接受之前把纸带清空。需要特殊处理使得指定字符串对在开头。

Lecture 6: Advanced Topics for Turing Machine

计算历史归约 reduction via computation history

从图灵机的计算历史的角度进行归约也是一个很好用的技巧。

Example

\[ALL_{CFG} = \{\an{G} \mid G \text { is a CFG that generates all strings}\}. \]

我们尝试将 \(A_{TM}\) 归约到这个问题上。考虑构造 CFG \(G\) 使得它恰好不接受 \(M\) 生成 \(w\) 的计算历史。于是,如果能判定 \(G\) 是否生成所有字符串,就能判定 \(M\) 是否接受 \(w\)

考虑 \(\an{M, w}\) 的格局 \(C_1, C_2, \cdots\),其计算历史可以写成 \(\# C_1 \# \cdots C_k\#\)。构造 PDA \(D\) 接受满足以下任意条件的字符串:

  • 不以 \(C_1\) 开头。
  • 不以接受状态结尾。
  • 某个 \(C_i\) 无法生成 \(C_{i + 1}\)

这样,如果 \(M\) 接受 \(w\),就意味着存在字符串不满足以上所有条件,于是 \(\ov {L(D)}\) 非空。

但是 \(w\# w\) 就已经不是上下文无关的了,如何让计算历史上下文无关?考虑到 \(w \# w ^ R\) 是上下文无关的,将所有偶数下标的格局翻转,只需考虑有限种转移即可。

用非确定性的 PDA 来猜测任何一个条件,如果满足则接受。因此 \(ALL_{CFG}\) 不可判定。

对于 CFG,\(L(G) = \S ^ *\)\(L(G) = L(H)\)\(G\) 是否有歧义是不可判定的,\(L(G) = \varnothing\)\(L(G)\) 有限和 \(w\in L(G)\) 是可判定的。

定义复杂度类 \(\TIM(t(n))\) 表示所有确定性图灵机在 \(\al O(t(n))\) 时间内判定的语言,\(\NTIM(t(n))\) 表示所有非确定性图灵机在 \(\al O(t(n))\) 时间内判定的语言。定义 \(\P = \bigcup_k \TIM(n ^ k)\)\(\NP = \bigcup_k \NTIM(n ^ k)\)

The Cook-Levin Theorem

\[\mathrm{SAT}\in \mathrm{NPC}. \]

对于任何 \(A\in \NP\),考虑接受历史。因为 NTM 可以在 \(\al O(n ^ k)\) 时间内判定 \(A\),所以纸带长度和运行时间上界都是多项式大小。将每个格局写成一行,设 \(x_{i, j, s}\) 表示 \((i, j)\) 的元素是否为 \(s\),构造 CNF \(\phi_{M, w}\) 由四部分组成:

  • \(\phi_{cell}\) 表示每个位置的元素的一致性。一定要等于某个元素,且不能同时等于不同的元素。
  • \(\phi_{start}\) 表示第一行需要等于输入。
  • \(\phi_{move}\) 表示转移合法。只需考虑所有 \(2\times 3\) 的小窗口。
  • \(\phi_{accept}\) 表示到达接受状态。
    \(\phi_{M, w}\) 依然是多项式大小,所以检查 \(w\in A\) 可以多项式归约到一个 SAT 问题的实例。

图灵归约和映射归约 Turing and mapping reducibility

相关概念

若带有语言 \(B\) 的 OTM 可判定 \(A\),则称 \(A\) 图灵可归约 Turing reducible\(B\),记为 \(A\leq_T B\)。显然,\(A_{TM}\leq_T HALT_{TM}\),所以 \(A_{TM}\) 不可判定能推出停机问题不可判定。

如果存在多项式时间内可计算的映射 \(R\)\(L\) 的实例 \(x\) 映射到 \(L'\) 的实例 \(y\),使得 \(x\in L\iff y\in L'\),则称 \(L\) 多项式时间归约 polynomial-time reducible\(L'\),记为 \(L\pr L'\)。一个非常经典的例子是 \(\rm{IS}\pr \rm{VC}\)\(\rm{IS}\)\((G, k)\) 实例可以多项式时间映射到 \(\rm{VC}\)\((G, n - k)\) 实例。

注意多项式时间归约和多项式时间 Turing 归约的区别:前者的关键在于映射前后实例是否属于问题是不变的,但后者可以用映射后的实例不属于 \(B\) 来进行对 \(A\) 的判定,且可以进行多次映射。最主要体现在一个语言和它补集之间的归约:

  • 显然,如果存在 \(\rm{coVC}\) 的 OTM,那么调用 \(\rm{VC}\) 的实例,如果谕示接受,说明 \(w\in \rm{coVC}\),即 \(w\notin \rm{VC}\),于是 TM 不接受。
  • 但我们无法找到(目前人类还不知道)一个在多项式时间内可计算的映射 \(R : (G, k)\to (G', k')\),使得 \((G, k)\in \rm{VC}\)\(G\) 有大小为 \(k\) 的点覆盖)当且仅当 \((G', k')\in \rm{coVC}\)\(G'\) 没有大小为 \(k'\) 的点覆盖)。

将多项式时间归约推广到任意时间归约,若存在递归函数 \(f\) 使得 \(w\in A\iff f(w)\in B\),则称 \(A\) 映射可归约 mapping reducible\(B\),记为 \(A\leq_m B\)

  • 简单地说,Turing 可归约是可以调用任意多次谕示,且最后返回什么都可以,但映射可归约只能调用一次谕示,且必须返回谕示的结果。因此,映射可归约也称为 many-one 归约。特别地,如果映射是一对一的,则称为 one-one 归约

多项式时间 many-one 归约又称 Karp 归约,多项式时间 Turing 归约又称 Cook 归约

归约的性质

如果 \(B\) 可判定,那么 \(A\) Turing 可归约和映射可归约到 \(B\) 都能推出 \(A\) 可判定。

如果 \(A\leq_m B\)\(B\) 是可识别的,则 \(A\) 是可识别的。但对于 Turing 归约则没有这个结论,因为补集可识别的语言也可以 Turing 归约到可识别的语言。

Example

\[EQ_{TM} = \{\an{M_1, M_2}\mid L(M_1) = L(M_2)\}. \]

容易构造 \(\ov{A_{TM}}\)\(EQ_{TM}\)\(\ov{EQ_{TM}}\) 的映射归约。因为 \(\ov{A_{TM}}\) 不可识别,所以 \(EQ_{TM}\) 既不可识别,也补集不可识别。

映射归约对补集是敏感的,但 Turing 归约则不是,因为 Turing 归约本身自带了可以取补集的性质。

递归定理 recursion theorem

回忆递归函数的定义:存在 TM \(M\) 使得输入 \(x\)\(M\) 停机时纸带上的内容是 \(f(x)\)

还有一个结论是,对任意 TM \(M\),都有无穷多个编号不同的等价 TM \(M'\)。等价指的是对相同的输入,结果(接受,拒绝,不停机)相同。

递归定理:设 \(t : \N \to \N\) 是递归函数,则存在 TM \(F\) 使得 \(t(\an F)\) 是和 \(F\) 等价的 TM 的编码。

Proof

构造 TM \(D(\an M)\) 输出 TM \(G\) 的编码,其中 \(G(y)\) 是在编码为 \(M(\an{M})\) 的 TM 上运行 \(y\)。注意 \(D\) 总会停机,因为不需要运行 \(G\),只需算出 \(G\) 的编码。\(G\) 本身是在 \(M\) 上运行 \(\an{M}\) 得到 \(M(\an{M})\),再在相应的 TM 上运行 \(y\)

构造 TM \(V(\an M)\) 输出 \(t(D(\an M))\)

\(F = D(\an{V})\),则 \(\an{F}\) 是在 \(V(\an V)\) 上运行 \(y\) 的对应 TM 的编码,而 \(V(\an V) = t(D(\an V)) = t(\an{F})\)\(\square\)

  • 以上证明给出了一个具体的构造。根据构造的思路,我们可以解决经典的 quine 问题。

将递归定理合 Kleene 定理结合,得到 Kleene 递归定理:设 \(t : \N \to \N\) 是递归函数,存在 TM \(R : \N \to \N\) 使得 \(R(x) = t(\an R, x)\)

Proof

由 Kleene 定理,设 TM \(s(x)\) 输出 \(\an M\) 使得 \(M(y) = t(x, y)\)。由递归定理,\(R(y) = s(\an R)(y) = t(\an R, y)\)\(\square\)

这个定理说明一个 TM 在运行时可以得到自身的编码:构造 \(SELF(\an {M}, x)\)\(\an M\) 作为自身的编码,则存在 \(R(x) = SELF(\an R, x)\)

Exp. 1

假设 \(H(\an {M}, w)\) 判定 \(A_{TM}\)

构造 TM \(B(w)\):得到自身编码 \(\an{B}\)。运行 \(H(\an B, w)\),若接受则拒绝,若拒绝则接受,矛盾。

Exp. 2

\(MIN_{TM} = \{\an{M}\mid \text{no TM with shorter encoding recognizes}\ L(M)\}\)

假设 \(MIN_{TM}\) 可识别,则存在 \(E\) 列出所有最小 TM。

构造 TM \(R(w)\):得到自身编码 \(\an R\)。用 \(E\) 枚举所有最小 TM,如果 \(|\an{M_i}| > |\an R|\),则返回 \(\an{M_i}(w)\)。这样 \(R\)\(M_i\) 识别相同语言,和 \(M_i\) 是最小 TM 矛盾。

Kolmogorov 复杂度 Kolmogorov complexity

定义 \(x\)最小表示 minimum description \(d(x)\) 为最短的 \(\an{M, w}\),满足输入 \(w\)\(M\) 停机时纸带上是 \(x\)

\(x\)Kolmogorov 复杂度 为最小表示的长度 \(K(x) = |d(x)|\)

  • \(K(x)\leq |x| + c\)
  • \(K(xx) \leq |x| + c\)
  • \(K(x ^ n)\leq |x| + c\log n\)

\(x\)c-可压缩 c-compressible 的,若 \(K(x) \leq |x| - c\)。如果 \(x\) 不是 1-可压缩的,则称为 不可压缩 incompressible 的。任意长度都有不可压缩的字符串,且根据鸽笼原理,\(\Pr_{x\in \{0, 1\} ^ n}(K(x) \geq |x| - c)\geq 1 - \frac 1 {2 ^ c}\)。这说明很多字符串都是很不可压缩的。

Example

\[COM = \{(k, c)\mid K(x) \leq c\}. \]

假设 \(COM\) 可判定,构造 TM \(M(n)\):以字典序顺序考虑所有 \(y\),若 \((y, n)\notin COM\),则输出 \(y\) 并停机。

\(COM\) 输出 \(y\),所以 \(n < K(y)\leq |\langle M, n\rangle| = c + \log n\),矛盾。因此 \(COM\) 不可判定。

Chaitin 不完备定理:对足够大的 \(L\)\(K(x) > L\) 不可被证明。

Lecture 7: Introduction to Cell-Probe Model

动态递减计数器 dynamic decremental counter

考虑这样一个游戏(were-you-last game):\(m\) 个人以随机顺序依次被带入一个房间,每个人知道都知道 \(m\)。房间里有很多箱子,每个箱子能装 0 或 1 个石子,初始均为 0。每个人至多打开 \(t\) 个箱子,修改其中的石子数量,并在打开下一个箱子之前关上它。在离开之前,每个人要回答自己是不是最后一个人。求 \(t\) 的最小值使得存在这样的策略。

  • \(t = \log m\):设计数器表示当前还剩多少人没有进入房间。
  • \(t = 8\log \log m + \al O(1)\):计数器每次修改只涉及最后三个极长 01 段。维护极长段数量,最后一个段的类型和每个段的长度。注意在打开下一个箱子之前要关上当前的箱子,所以读取和修改不能同时进行,有两倍常数。
  • \(t = 4\log \log m + \al O(1)\):在 \(8\log \log m\) 的基础上,维护每个段的大小是否为 \(1\),并在开头对最后三个段记录该信息,即可同时读取和修改。
  • \(t = o(\log \log m)\) 时,无解。

Proof

先考虑对称策略。设 \(S\) 表示所有可能打开的盒子的集合,显然 \(|S| \leq 2 ^ t - 1\)。如果 \(2 ^ {|S|} < m\),根据鸽笼原理,存在 \(i < j\) 使得 \(i\) 操作之后 \(S\) 的每个元素的状态和 \(j\) 操作之后分别相同,于是无法区分 \([i + 1, j]\) 是否进入过。

对于非对称策略,考虑向日葵引理。

Sunflower Lemma

一个向日葵是一个集合的集合,满足所有 \(S_i\cap S_j\) 相同。

\(m > (p - 1) ^ {l + 1}l!\),则 \(m\) 个大小不超过 \(l\) 的集合一定存在大小为 \(p\) 的向日葵子集。

Proof

\(l\) 归纳,当 \(l = 0\) 时,\(m \geq p\),显然成立。

\(A_{1\sim t}\) 是最大的两两无交子集,若 \(t \geq p\) 显然。设 \(B\) 是这些集合的并集,则 \(|B| \leq (p - 1)l\)。因为 \(B\)\(\al F\) 的每个集合都有交,所以某个元素 \(x\) 至少出现了 \(\frac {m}{(p - 1)l} > (p - 1) ^ l (l - 1)!\) 次。

将包含 \(x\) 的所有集合拎出来,删掉 \(x\),则每个集合大小不超过 \(l - 1\)。由归纳假设得到向日葵,再加入 \(x\) 即可。\(\square\)

\(S_i\) 表示第 \(i\) 个人可能打开的盒子的集合。假设存在大小为 \(p\) 的向日葵,则先让其他 \(m - p\) 个人进入房间,剩下 \(p\) 个人以随机顺序进入,则只有它们的交集 \(S\) 是有用的,因为其它信息不能帮助他们确定自己在剩下 \(p\) 个人当中的顺序。

构造反例需要 \(p > 2 ^ {l} \geq 2 ^ {2 ^ t - 1}\)。由向日葵引理,要求 \(m > (p - 1) ^ {l + 1} l!\)。当 \(t = 0.4\log\log m\) 时,\(l\leq (\log m) ^ {0.4}\),于是

\[(p - 1) ^ {l + 1} l! \leq (2 ^ l) ^ {l + 1} l ^ l = 2 ^ {l(l + 1 + \log l)} \leq 2 ^ {1.1l ^ 2} \leq 2 ^ {1.1(\log m) ^ {0.8}} < 2 ^ {\log m} < m. \]

\(\square\)

我们得到了空间 \(\al O(\log m \cdot \log \log m)\),时间 \(\Theta(\log \log m)\) 的动态递减计数器。

基于比较的排序算法 comparison-based algorithms

考虑比较算法的决策树。因为一共有 \(n!\) 个叶子,所以决策树至少有 \(\log_2(n!) = \Theta(n\log n)\) 层。这说明任何基于比较的排序算法的时间复杂度下界为 \(\Theta(n\log n)\)

单元探测模型 cell-probe model 认为所有计算都不需要任何时间和空间,只考虑内存访问的次数。

动态部分和 dynamic partial sum

posted @ 2025-02-22 17:18  qAlex_Weiq  阅读(385)  评论(1)    收藏  举报