以下哪项是关于合取范式公式的
?一个。对于任何公式,都有一个真值赋值,其中至少有一半的子句计算为 true。
二.对于任何公式,都有一个真值赋值,所有子句的计算结果均为 true。
三.有一个公式,对于每个真值赋值,最多四分之一的子句计算为 true。
D.以上都不是。
我的疑问:我知道合取范式是和形式的乘积,但这个问题让我感到困惑,请用简单的语言解释一下。
我将展示(A(的两个证明。我们可以用任何不满意的公式快速打折 (B(,例如x ∧ ¬x
.从(A(的证明中,我们还可以打折(C(和(D(。
结构证明
假设我们在 CNF 中有一些公式。让我们检查任何命题变量(或项,或任何你想称呼它的东西(,我们将称之为x
。我们可以考虑包含x
或¬x
的所有条款,分为三种不同的情况:
-
如果子句中出现
x
而¬x
没有,我们知道如果x
被分配为 true,则该子句将得到满足,如果x
被分配为 false,则该子句将不满足。 -
同样,如果子句中出现
¬x
而x
没有,我们知道如果x
被分配为 false,则该子句将得到满足,如果x
被赋为 true,则该子句将不满足。 -
如果
x
和¬x
都出现在该条款中,则任何转让都将满足该条款。
如果案例 1 的子句多于案例 2,则 true 对x
的赋值将至少满足所考虑条款的一半。如果案例 2 的子句多于案例 1,则 false 分配给x
将满足至少一半的考虑条款。如果情况 1 和情况 2 出现相同,则对x
的任何转让都将满足至少一半的考虑条款。
在剩下的子句中,我们可以对剩下的命题变量应用类似的算法,直到所有子句至少有一个赋值变量,并且所有这些子句中至少有一半将计算为 true。
按期望值证明
考虑 CNF 中某个公式的任何子句。假设每个子句都是"总和形式",则所有组成文字只有一个赋值,这将导致子句的计算结果为 false。这意味着,对于具有 k 个文字的子句,有 2 个 k - 1个构成文字的赋值,这将导致子句的计算结果为 true。因为每个赋值都是独立相等的,所以子句计算为 true 的预期概率为 (2 k - 1(/2 k,即 1 - (1/2k(。显然,对于 k 的任何正值,通过任意真值赋值满足子句的概率至少是一半。
从满足某些任意子句的概率来看,我们可以说,满足子句的预期数量是满足每个子句的概率之和。从这里,通过少量的数学运算,我们可以得出结论,满足子句的预期数量至少是子句总数的一半。因为必须至少有一个真值赋值至少满足这个数量的期望满足子句,我们可以得出结论,对于任何给定的公式,至少存在一个满足至少一半子句的真值赋值。