8.8.证明 Exact 4 SAT是一个NP完全问题。
通过把3sat reduce到4sat实现
首先设想有3SAT实例 f1 = (x1 ∨ x2 ∨ x3) ∧(x4 ∨ x5 ∨ x6) .......(xn ∨ xn+1 ∨ xn+2)
其中x1~xn+2都是不同的变量,现在我们加入一个新变量a
通过这个变量的加入,对f1中的子句进行变形:
例如对于第一个子句(x1 ∨ x2 ∨ x3) =>(x1 ∨ x2 ∨ x3 ∨ a ) ∧(x1 ∨ x2 ∨ x3 ∨ ¬a )
之后f1就转化为一个符合Exact 4 SAT要求的实力,命名为f2,该操作可以在多项式时间内完成
首先证明f1满足,f2必满足,如果存在一个赋值,使得f1为真,那么每个子句都为真,以第一个子句举例:(x1 ∨ x2 ∨ x3) 为真
其在f2对应的部分(x1 ∨ x2 ∨ x3 ∨ a ) ∧(x1 ∨ x2 ∨ x3 ∨ ¬a ) 为真,变量a可以任意取值,无论取什么值,都不影响。
同理f2中其他子句也都是为真,由此可以证明如存在一个赋值可以满足f1,那么一定有一个赋值可以满足f2
反过来,如果f2是真的话,那么(x1 ∨ x2 ∨ x3 ∨ a ) ∧(x1 ∨ x2 ∨ x3 ∨ ¬a ) 一定为真,而这两个子句中存在两个相反的变量a和¬a ,由此可知x1 ∨ x2 ∨ x3一定为真
同理,对于其他所有子句这么处理就能得到子句(x1 ∨ x2 ∨ x3) ,(x4 ∨ x5 ∨ x6) .......(xn ∨ xn+1 ∨ xn+2)皆为真,所以f2满足,f1也能满足
3SAT问题可以转化为4SAT问题,所以4SAT是一个NP完全问题。