为什么 co-P = P

hyp*_*ons 2 complexity-theory

更具体地说,为什么有一个 TM 接受和停止 P 中的任何补语?我明白,有一个 TM 从 P 中拒绝语言 L,但为什么必须有一个接受 L 的补语的 TM?

Bil*_*nce 8

简单的解决方案:让 L 成为接受语言 L 的图灵机 M 的原始语言。为了计算 L 补码,创建一个新机器 M',使得 M' 与 M 相同,除非我们将所有转换切换到接受状态M 到“拒绝状态”,并且所有转换到拒绝状态(或“格式错误的转换”)到接受状态。

M' 的运行时间与 M 的运行时间相同。当 M 拒绝/接受时,它将接受/拒绝。


一位评论者问我是否可以提供直觉,说明为什么这对 NP 与 co-NP 不起作用。它有助于从库克-莱文 (Cook-Levin) 对语言 L 在 NP 中的定义开始,这允许清晰定义语言 L' 在 co-NP 中。(使用基于非确定性图灵机的定义会使 co-NP 的定义变得更难)

在 Cook-Levin 定义中,语言 L 是 NP,如果我们有一个“验证”图灵机 V,使得对于 L 中的所有字符串 S,存在多项式长度有界证书字符串 C,使得 V 接受该对( S, C)(将 V 视为两带输入机,或者将其视为接受输入对的编码)。另外当然还有要求V在多项式时间内完成验证。

例如,对于 3SAT 语言,字符串 S 将是 3SAT 问题实例语句,证书 C 将是变量的真值赋值。验证者 V 将查看真值分配并检查 3SAT 问题实例的每个子句是否都通过该真值分配进行了验证。

所以简而言之,NP 中的语言 L 是由其验证图灵机 V 描述的,我们说:

所以为了描述补语,L'我们有:

如果我们想在 NP vs co-NP 中“尝试相同的技巧”,就像我们在 P vs co-P 中所做的那样,那么机会并不会很好地呈现出来。我们要么需要在确定性图灵机上尝试这个,它可以完全解决每个实例的语言(并且可能没有多项式时间运行界限),或者我们需要看看我们是否可以通过将技巧应用于 V如果我们简单地交换验证机器 V 的结果,我们仍然需要检查每个可能的证书 C,看看给定的字符串 S 是否真的不被 V 接受。

  • 很公平,但是如果语言 L 实际上在 P 中,那么根据定义,就有一个“决定”语言的图灵机。也就是说,对于每个字符串 S,图灵机接受或拒绝 S,并且它在多项式时间内这样做。如果你碰巧遇到一个格式错误的机器,它只接受 S 在语言中的输入,但如果 S 不在语言中可能无法停止,只要你有一个接受的运行时界限,你就可以“修复“图灵机通过模拟其运行多个步骤,然后在未达到接受状态时拒绝。 (3认同)
  • 这是一个绝对正确的论点。您能否就为什么这个论点对 NP 和 co-NP 失败给出一些直觉? (2认同)