关于合取范式中的公式,下列哪项是正确的?

Posted

技术标签:

【中文标题】关于合取范式中的公式,下列哪项是正确的?【英文标题】:Which of the following is TRUE about formulae in Conjunctive Normal Form? 【发布时间】:2020-10-25 16:56:32 【问题描述】:

A.对于任何公式,都有一个真值赋值,其中至少有一半的子句评估为真。

B.对于任何公式,都有一个真值赋值,所有子句的计算结果都为真。

C.有一个公式,对于每个真值赋值,最多有四分之一的子句评估为真。

D.以上都不是。

我的疑问:我知道合取范式是和式的乘积,但是这个问题让我很困惑,请用简单的语言解释一下。

【问题讨论】:

如果您在这里无法得到答案,也许您可​​以尝试将此问题移至ai.stackexchange.com 可能有助于找到能够回答此问题的人。 【参考方案1】:

我将展示 (A) 的两个证明。我们可以使用任何无法满足的公式快速折扣 (B),例如 x ∧ ¬x。根据 (A) 的证明,我们还可以对 (C) 和 (D) 进行折现。

构造证明

假设我们在 CNF 中有一些公式。让我们检查任何命题变量(或术语,或任何您想称呼它的名称),我们将其称为x。我们可以在三种不同的情况下考虑所有包含x¬x 的子句:

    如果x 出现在子句中而¬x 没有出现,我们知道如果x 被赋值为true,则子句将被满足,如果x 被赋值为false,则不会满足。

    同样,如果¬x出现在子句中而x没有出现,我们知道如果x被赋值为假,则该子句将被满足,如果x被赋值为真,则不会满足。

    如果子句中同时出现x¬x,则任何赋值都将满足该子句。

如果 case 1 的子句多于 case 2,则将 true 赋值给 x 将满足至少一半的考虑子句。如果 case 2 的子句多于 case 1,则将 false 分配给 x 将至少满足所考虑子句的一半。如果案例 1 和案例 2 的出现次数相同,那么对 x 的任何赋值都将满足至少一半的考虑子句。

在剩下的子句中,我们可以对剩下的命题变量应用类似的算法,直到所有子句都至少有一个赋值变量,并且所有这些子句中至少有一半的结果为真。

期望值证明

考虑 CNF 中某个公式的任何子句。鉴于每个子句都是“总和形式”,所有组成文字只有一个赋值,这将导致子句评估为假。这意味着,对于具有 k 个文字的子句,有 2k - 1 个组成文字的分配,这将导致子句评估为真。因为每个赋值都是独立等可能的,所以从句评估为真的预期概率是 (2k - 1) / 2k,即 1 - (1 / 2k)。显然,对于任何正的 k 值,一个子句被任意真值赋值满足的概率至少是一半。

从某个任意子句被满足的概率,我们可以说被满足的子句的预期数量是每个子句被满足的概率之和。从这里,通过少量的数学我们可以得出结论,期望的满足条款的数量至少是条款总数的一半。因为必须至少有一个真值赋值至少满足这个数量的预期满足子句,所以我们可以得出结论,对于任何给定的公式,至少存在一个真值赋值,它满足至少一半的子句。

【讨论】:

优秀的答案基于假设条款至少有一个文字

以上是关于关于合取范式中的公式,下列哪项是正确的?的主要内容,如果未能解决你的问题,请参考以下文章

以合取范式书写条件

在 C++ 中将逻辑公式转换为合取范式

数理逻辑命题逻辑的等值演算与推理演算 ( 命题逻辑 | 等值演算 | 主合取 ( 析取 ) 范式 | 推理演算 ) ★★

枚举真值表生成主合取范式 主析取范式

将命题转化为主析取命范式和主合取范式

利用真值表法求取主析取范式以及主合取范式的实现(C++)