TCS Homework 6

6.1

题目

证明如果 P=NPP = NP,则 NP=coNPNP = \text{coNP}

解答

假设 P=NPP = NP。这意味着:

  • 任何在 NPNP 中的问题也在 PP 中。
  • 由于 PP 在补集下封闭(即如果 LPL \in P,则 LP\overline{L} \in P,因为只需反转接受和拒绝状态),因此 NPNP 也在补集下封闭(因为 NP=PNP = P)。

证明 NPcoNPNP \subseteq \text{coNP}

LL 是任意一个在 NPNP 中的问题,即 LNPL \in NP。由于 P=NPP = NP,有 LPL \in P。因为 PP 在补集下封闭,所以 LP\overline{L} \in P。又因为 P=NPP = NP,有 LNP\overline{L} \in NP。根据 coNP\text{coNP} 的定义,LNP\overline{L} \in NP 意味着 LcoNPL \in \text{coNP}。因此,NPcoNPNP \subseteq \text{coNP}.

证明 coNPNP\text{coNP} \subseteq NP

MM 是任意一个在 coNP\text{coNP} 中的问题,即 McoNPM \in \text{coNP}。根据 coNP\text{coNP} 的定义,这意味着其补问题 MNP\overline{M} \in NP。由于 P=NPP = NP,有 MP\overline{M} \in P。因为 PP 在补集下封闭,所以 MPM \in P。又因为 P=NPP = NP,有 MNPM \in NP。因此,coNPNP\text{coNP} \subseteq NP.

由以上两个包含关系,NPcoNPNP \subseteq \text{coNP}coNPNP\text{coNP} \subseteq NP,可得 NP=coNPNP = \text{coNP}。因此,如果 P=NPP = NP,则 NP=coNPNP = \text{coNP}.

6.2

题目

对于每个包含 nn 个变量的 2-SAT 实例 φ\varphi,定义一个包含 2n2n 个顶点的图 GφG_{\varphi}:对于 φ\varphi 中的每个变量 xix_iGφG_{\varphi} 有两个顶点,分别标记为 xix_i¬xi\neg x_i(即文字 xix_i¬xi\neg x_i)。如果子句 (¬i)j(\neg \ell_i) \lor \ell_jj(¬i)\ell_j \lor (\neg \ell_i)φ\varphi 的一部分,则存在一条有向边 ij\ell_i \to \ell_j。为符号方便起见,对于文字 i=¬xki\ell_i = \neg x_{k_i},定义 ¬i=xki\neg \ell_i = x_{k_i}。证明 φ\varphi 是不可满足的当且仅当在 GφG_{\varphi} 中存在某个 jj,使得有从 xjx_j¬xj\neg x_j 的路径和从 ¬xj\neg x_jxjx_j 的路径。使用上述事实证明 2-SAT 属于 P。

解答

不可满足性的等价条件证明

  1. φ\varphi 不可满足,则存在 xjx_j 使得 xj¬xjx_j \leftrightarrow \neg x_j 成环

    • 假设 φ\varphi 不可满足。
    • 在蕴涵图 GφG_\varphi 中,若不存在此类环,则可对强连通分量(SCC)进行拓扑排序,并为变量赋予一致的值。
    • 此时不存在环意味着存在有效赋值,与 φ\varphi 不可满足矛盾。
    • 因此,至少存在一个变量 xjx_j¬xj\neg x_j 形成环路。
  2. 若存在 xj¬xjx_j \leftrightarrow \neg x_j,则 φ\varphi 不可满足

    • 若存在路径 xj¬xjx_j \rightsquigarrow \neg x_j¬xjxj\neg x_j \rightsquigarrow x_j
      • xj=truex_j = \text{true} 会推出 ¬xj=true\neg x_j = \text{true}(矛盾);
      • xj=falsex_j = \text{false} 会推出 ¬xj=false\neg x_j = \text{false}(矛盾)。
    • φ\varphi 不可满足。

算法

  1. 构建 GφG_\varphi

    • 对每个变量 xix_i,创建顶点 xix_ixi-x_i
    • 对每个子句 (12)(\ell_1 \vee \ell_2),添加有向边 ¬12\neg \ell_1 \rightarrow \ell_2¬21\neg \ell_2 \rightarrow \ell_1
  2. 计算强连通分量(SCC)

    • 使用线性时间算法(如 Tarjan 算法)求 GφG_\varphi 的 SCC。
  3. 检查矛盾

    • 对每个变量 xjx_j
      • xjx_j¬xj\neg x_j 属于同一 SCC,则 φ\varphi 不可满足,终止。
      • 否则继续。
  4. 为变量赋值

    • 将 SCC 按拓扑序逆序遍历(从出度为 0 的分量开始)。
    • 对每个 SCC:
      • 若文字 \ell 未被赋值,则设 =true\ell = \text{true}¬=false\neg \ell = \text{false}

正确性:

  • 步骤 3 基于前述等价条件判定不可满足性。
  • 步骤 4 通过逆拓扑序赋值,确保所有蕴涵关系被满足(可满足时必存在有效赋值)。

时间复杂度:

  • 构建图:O(m)O(m)mm 为子句数)。
  • 求 SCC:O(n+m)O(n+m)nn 为变量数)。
  • 检查矛盾与赋值:O(n)O(n)
  • 总时间复杂度O(n+m)O(n + m)(输入规模的线性时间)。

6.3

题目

Lehmer 定理指出,一个自然数 nn 是素数当且仅当以下两个条件成立:

  1. 存在一个数 aa 使得 an11(modn)a^{n-1} \equiv 1 \pmod{n}
  2. 对于 n1n - 1 的每一个素因子 qq,有 a(n1)/q1(modn)a^{(n-1)/q} \neq 1 \pmod{n}

使用该定理证明 PRIME NPcoNP\in NP \cap coNP。(提示:为证明 PRIME NP\in NP,可能需要使用递归定义的见证。)

解答

  1. PRIME NP\in NP:利用 Lehmer 定理,为素数 nn 构造一个递归定义的见证树。每个节点的见证包括一个基数 aan1n-1 的素因子分解,递归地为每个素因子提供子见证(证明其素性)。验证过程在多项式时间内完成。
  2. PRIME coNP\in coNP:等价于证明 COMPOSITE NP\in NP。对于合数 nn,见证是一个非平凡因子 dd1<d<n1 < d < ndnd \mid n),验证可在多项式时间内完成。

第一部分:证明 PRIME NP\in NP

nn 是一个素数(即 PRIME 的 “是” 实例)。根据 Lehmer 定理,存在一个整数 aa(称为 Lehmer 见证)满足:

  • an11(modn)a^{n-1} \equiv 1 \pmod{n}
  • 对于 n1n-1 的每个素因子 qq,有 a(n1)/q≢1(modn)a^{(n-1)/q} \not\equiv 1 \pmod{n}.

递归定义的见证:

  • 见证是一个树状结构 W(n)W(n),其中每个节点对应一个待证素的数。
  • 对于节点 mm(假设 mm 是素数):
    • 基数 ama_m(满足 Lehmer 定理对 mm 的条件)。
    • m1m-1 的完全素因子分解:m1=q1e1q2e2qkekm-1 = q_1^{e_1} q_2^{e_2} \cdots q_k^{e_k},其中 qiq_i 是素数。
    • 对于每个素因子 qiq_i,一个子见证 W(qi)W(q_i)(递归证明 qiq_i 是素数)。
  • 递归基:当 mm 是小素数(如 mCm \leq C,其中 CC 是一个固定常数,如 100)时,无需子见证,因为小素数的列表可在常数时间内验证。

验证算法:
输入:整数 nn,见证 W(n)W(n)
输出:接受当且仅当 nn 是素数。
步骤:

  1. 如果 nCn \leq C(常数),直接检查 nn 是否在小素数列表中,是则接受,否则拒绝。
  2. W(n)W(n) 中提取:
    • 基数 ana_n
    • n1n-1 的素因子分解 n1=q1e1q2e2qkekn-1 = q_1^{e_1} q_2^{e_2} \cdots q_k^{e_k}
    • 子见证 W(q1),W(q2),,W(qk)W(q_1), W(q_2), \ldots, W(q_k)
  3. 验证:
    • 分解正确性:计算乘积 q1e1q2e2qkekq_1^{e_1} q_2^{e_2} \cdots q_k^{e_k} 并检查是否等于 n1n-1
    • Lehmer 条件 1:计算 ann1modna_n^{n-1} \mod n(使用快速模幂算法),检查是否 1(modn)\equiv 1 \pmod{n}
    • Lehmer 条件 2:对每个 qiq_i,计算 an(n1)/qimodna_n^{(n-1)/q_i} \mod n(快速模幂),检查是否 ≢1(modn)\not\equiv 1 \pmod{n}
    • 子见证递归验证:对每个 qiq_i,递归调用验证算法检查 W(qi)W(q_i) 证明 qiq_i 是素数。
  4. 若所有检查通过,则接受;否则拒绝。

正确性分析:

  • nn 是素数,Lehmer 定理保证存在 ana_n 满足条件。递归基(小素数)和递归步骤确保整个见证树正确。
  • 验证失败当且仅当 nn 不是素数(由 Lehmer 定理的充要条件保证)。

多项式时间与大小分析:

  • 见证大小:设 s(m)s(m) 为证明 mm 素性的见证大小。
    • 每个节点 mm 的见证包括:
      • ama_m:大小 O(logm)O(\log m) 位(因为 1amm11 \leq a_m \leq m-1)。
      • m1m-1 的因子分解:素因子 qiq_i 和指数 eie_i,总大小 O(logm)O(\log m) 位(因为因子数 O(logm)O(\log m),每个因子大小 O(logm)O(\log m))。
      • 子见证 W(qi)W(q_i):每个 qi<mq_i < m
    • 递归深度:由于 qim/2q_i \leq m/2(至少减半),深度为 O(logn)O(\log n)
    • 总大小:递归树有 O(logn)O(\log n) 层,每层总大小 O((logn)2)O((\log n)^2)(因为每个节点大小 O(logn)O(\log n),节点数 O(logn)O(\log n)),故 s(n)=O((logn)3)s(n) = O((\log n)^3),是多项式大小。
  • 验证时间
    • 模幂运算(如 ann1modna_n^{n-1} \mod n) 可在 O((logn)3)O((\log n)^3) 时间完成(使用快速幂)。
    • 分解乘积验证:乘法可在 O((logn)2)O((\log n)^2) 时间完成。
    • 递归调用:每个节点处理时间多项式在 logm\log m,总时间多项式在 logn\log n(因为深度 O(logn)O(\log n),每层时间多项式)。
    • 总验证时间 O((logn)k)O((\log n)^k) 对某个 kk,是多项式时间。

因此,PRIME NP\in NP.

第二部分:证明 PRIME coNP\in coNP

等价于证明 COMPOSITE NP\in NP。设 nn 是一个合数(即 COMPOSITE 的 “是” 实例)。

见证:一个非平凡因子 dd 满足 1<d<n1 < d < ndnd \mid n
验证算法
输入:整数 nn,见证 dd
步骤:

  1. 检查 1<d<n1 < d < n
  2. 检查 dd 整除 nn(即计算 nmodd0n \mod d \equiv 0)。
    若两者成立,则接受(nn 是合数);否则拒绝。

正确性分析

  • nn 是合数,则存在非平凡因子 dd,见证有效。
  • 若验证通过,则 nn 必为合数。

多项式时间与大小分析

  • 见证大小:dd 的大小为 O(logn)O(\log n) 位(因为 d<nd < n)。
  • 验证时间:除法 nmoddn \mod d 可在 O((logn)2)O((\log n)^2) 时间完成。
    因此,COMPOSITE NP\in NP,故 PRIME coNP\in coNP.

TCS Homework 6
https://xiao-ao-jiang-hu.github.io/2025/05/30/tcs/tcs-hw-6/
作者
wst
发布于
2025年5月30日
许可协议