SAT规约到3SAT
一、SAT、3SAT问题描述
SAT问题描述:
给定一个又穷的布尔变量集合X={x1,x2,⋯,xn},|X|=nX={x1,x2,⋯,xn},|X|=n, 每个变量能取0或1, 一组子句C={C1,C2,C3,⋯,Cm},|C|=m,C=C1∧C2∧⋯∧CmC={C1,C2,C3,⋯,Cm},|C|=m,C=C1∧C2∧⋯∧Cm每个CiCi 是由多个变量组成的析取范式,长度不限,即z1∨z2∨z3⋯∨zkz1∨z2∨z3⋯∨zk。问题:给定一个布尔变量集合X和子句集合C,是否存在一个真值赋值,使得C为真,即每个子句为真。
3SAT问题描述:
给定一个有穷的布尔变量集合X={x1,x2,⋯xn},|X|=nX={x1,x2,⋯xn},|X|=n, 每个变量能取0或1, 一组子句C={C1,C2,⋯Cm},|C|=m,C=C1∧C2∧⋯∧CmC={C1,C2,⋯Cm},|C|=m,C=C1∧C2∧⋯∧Cm,每个CiCi 是由三个变量组成的析取范式,即z1∨z2∨z3z1∨z2∨z3。 问题:给定一个布尔变量集合X和子句集合C,是否存在一个真值赋值, 使得C为真,即每个子句为真。
一个例子:
X={x1,x2,x3},C={C1,C2,C3},C1=x1∨x2¯∨x3,C2=x1¯∨x2¯∨x3,C3=x1¯∨x2∨x3¯X={x1,x2,x3},C={C1,C2,C3},C1=x1∨x2¯∨x3,C2=x1¯∨x2¯∨x3,C3=x1¯∨x2∨x3¯
则存在一个真值赋值:x1=1,x2=1,x3=1x1=1,x2=1,x3=1,使得C=1C=1
二、证明
1、证明3SAT是NP问题
3SAT的实例为X={x1,x2,⋯,xn},C={C1,C2,⋯,Cm}X={x1,x2,⋯,xn},C={C1,C2,⋯,Cm}证书为对每个变量的赋值,我们只要验证每个子句都为真即可,很明显这个过程是多项式时间的。
2、给出规约过程。
给定一个SAT的实例:X={x1,x2,⋯,xn},C={C1,C2,⋯,Cm},Ci=zi,1∨zi,2∨zi,3⋯∨zi,kX={x1,x2,⋯,xn},C={C1,C2,⋯,Cm},Ci=zi,1∨zi,2∨zi,3⋯∨zi,k, 我们要将这个问题的实例变成3SAT的实例X′,C′X′,C′。对于每个CiCi, 有以下四种情况:
|Ci|=1|Ci|=1,则创建2个变量:yi,1,yi,2yi,1,yi,2,使得C′i=(zi,1∨yi,1∨yi,2¯)∧(zi,1∨yi,1∨yi,2)∧(zi,1∨yi,1¯∨yi,2¯)∧(zi,1∨yi,1¯∨yi,2)Ci′=(zi,1∨yi,1∨yi,2¯)∧(zi,1∨yi,1∨yi,2)∧(zi,1∨yi,1¯∨yi,2¯)∧(zi,1∨yi,1¯∨yi,2)
|Ci|=2|Ci|=2,则创建1个变量:yi,1yi,1 ,使得C′i=(zi,1∨zi,2∨yi,1)∧(zi,1∨zi,2∨yi,1¯)Ci′=(zi,1∨zi,2∨yi,1)∧(zi,1∨zi,2∨yi,1¯)
|Ci|=3|Ci|=3,则不变即可。
|Ci|≥4|Ci|≥4,假设为kk,则添加个变量,使得
C′i=(zi,1∨zi,2∨yi,1)∧(yi,1¯¯¯¯¯¯¯∨zi,3∨yi,2)∧(yi,2¯¯¯¯¯¯¯∨zi,4∨yi,3)∧⋯∧(yi,k−3¯¯¯¯¯¯¯¯¯¯¯∨zi,k−1∨zi,k)Ci′=(zi,1∨zi,2∨yi,1)∧(yi,1¯∨zi,3∨yi,2)∧(yi,2¯∨zi,4∨yi,3)∧⋯∧(yi,k−3¯∨zi,k−1∨zi,k)
3、证明此规约是多项式时间的。
对于每个子句Ci,C′iCi,Ci′比CiCi多了最多k−3k−3个变量,因此多个m(k−3)m(k−3)个变量和m(k−3)m(k−3)个子句。接下来我们证明C′C′是可满足的当且仅当C是可满足的。
4、对于每个SAT的实例,如果存在一个真值赋值,则每个子句CiCi一定有一个literal为1,即zi,1∨zi,2∨⋯∨zi,kzi,1∨zi,2∨⋯∨zi,k中一定有一个为1,
(1) |Ci|=1|Ci|=1,则zi,1=1zi,1=1,因此不论yi,1,yi,2yi,1,yi,2为何值,C′i=1Ci′=1
(2)|Ci|=2|Ci|=2,则zi,1∨zi,2=1zi,1∨zi,2=1,不论yi,1yi,1为何值,C′i=1Ci′=1
(3)|Ci|=3|Ci|=3,则C′i=1Ci′=1
(4)|Ci|≥4|Ci|≥4,则假设:
- zi,1∨zi,2=1,则yi,j=0(j=1,2,3,⋯,k−3)zi,1∨zi,2=1,则yi,j=0(j=1,2,3,⋯,k−3),因此C′i=1Ci′=1
zi,k−1∨zi,k=1,则yi,j=1(j=1,2,3,⋯,k−3)zi,k−1∨zi,k=1,则yi,j=1(j=1,2,3,⋯,k−3),因此C′i=1Ci′=1
zi,j=1(2<j<k−1),则yi,a¯¯¯¯¯¯¯=0(a≤j−2),yi,a=0(a≥j−1)zi,j=1(2<j<k−1),则yi,a¯=0(a≤j−2),yi,a=0(a≥j−1),因此C′i=1Ci′=1
因此得到C′C′的真值赋值t′t′
5、假设t′t′是C′C′的真值赋值,很容易得出C存在真值赋值:
当C′i=(zi,1∨yi,1∨yi,2¯¯¯¯¯¯¯)∧(zi,1∨yi,1∨yi,2)∧(zi,1∨yi,1¯¯¯¯¯¯¯∨yi,2¯¯¯¯¯¯¯)∧(zi,1∨yi,1¯¯¯¯¯¯¯∨yi,2)=1Ci′=(zi,1∨yi,1∨yi,2¯)∧(zi,1∨yi,1∨yi,2)∧(zi,1∨yi,1¯∨yi,2¯)∧(zi,1∨yi,1¯∨yi,2)=1,则必须要zi,1=1zi,1=1
当C′i=(zi,1∨zi,2∨yi,1)∧(zi,1∨zi,2∨yi,1¯¯¯¯¯¯¯)=1Ci′=(zi,1∨zi,2∨yi,1)∧(zi,1∨zi,2∨yi,1¯)=1,则必须有zi,1∨zi,2=1zi,1∨zi,2=1
当C′i=(zi,1∨zi,2∨yi,1)∧(yi,1¯¯¯¯¯¯¯∨zi,3∨yi,2)∧(yi,2¯¯¯¯¯¯¯∨zi,4∨yi,3)∧⋯∧(yi,k−3¯¯¯¯¯¯¯¯¯¯¯∨zi,k−1∨zi,k)Ci′=(zi,1∨zi,2∨yi,1)∧(yi,1¯∨zi,3∨yi,2)∧(yi,2¯∨zi,4∨yi,3)∧⋯∧(yi,k−3¯∨zi,k−1∨zi,k),
假设zi,1∨zi,2∨zi,3,⋯,zi,k=0zi,1∨zi,2∨zi,3,⋯,zi,k=0,且C′I=1CI′=1,则yi,1=1,yi,1¯¯¯¯¯¯¯=0yi,1=1,yi,1¯=0,以此类推得出yi,k−3¯¯¯¯¯¯¯¯¯¯¯=0yi,k−3¯=0,使得最后(yi,k−3¯¯¯¯¯¯¯¯¯¯¯∨zi,k−1∨zi,k)=0(yi,k−3¯∨zi,k−1∨zi,k)=0,与C′i=1Ci′=1矛盾。