问题标签 [conjunctive-normal-form]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
107 浏览

sql - 带有分隔 IN 表达式的 SQL where 子句以实现 CNF

我需要根据他们动态添加的属性(转置表)查询用户

我有 4 张桌子

  • 用户- 为用户
  • propertyGroup - 对于属性组,可以将组动态添加到数据库
  • propertyValue - 用于 propertyGroup 的可能值
  • usersPropertyValues - 将用户连接到他的相关属性

它看起来像这样:

所以 mix-em-all 查询将如下所示:

都在这里:http ://sqlfiddle.com/#!3/49329/1

我想通过一组propertyValueId查询数据并获取与该组属性匹配的所有用户,因此用户需要至少具有每个组的属性 - 换句话说,一个 where 原因像这样匹配通用 CNF 子句:(pvId 是 propertyValueId 的缩写)

在上面的例子中,pvId_x&pvId_y 属于 A 组,pvId_w&pvId_z 属于 B 组,以此类推。

我没有工作,我尝试连接 IN 运算符的 AND 运算符(在模拟或部分 - 析取)如图所示(查询上述 sql fiddle):

而不是让两个用户(两者都有(1或2)和(5或6)) - 我没有。

我明白为什么结果集是空的,但我不明白如何实现正确的 where 子句。- 怎么做?

我的问题: 如何在上述 SQL 结构中实现 CNF 逻辑?

编辑:例外结果示例:(关于 sqlfiddle 示例:

顺便说一句,我最终需要在 JPA 中实现这一点,所以如果 JPA 中有解决方案,那也很棒。但如果不是 - 我会翻译它......谢谢

0 投票
2 回答
3420 浏览

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

我将使用 Boots/Spirit 在 C++ 中实现一个 CNF 生成器。但是在完成“优先顺序”和“消除等价和含义”这两个部分之后,我无法弄清楚如何实现“向内移动NOT”和“向内分配ORs而不是ANDs”。

所需的输出记录在这里: https ://en.wikipedia.org/wiki/Conjunctive_normal_form

以下是更详细的描述:

优先顺序:

输入示例:

现在输出是:

和代码(我在打印机部分实现输出):

编译命令:

0 投票
1 回答
74 浏览

conways-game-of-life - 生命游戏的合取范式

我想用minisat解决一个7*7大小的人生游戏,得到稳定的世代。

在这里,我简化了生死规则: 冯诺依曼德 rayon 1 南、东、北邻居活着的细胞将是活着的。(xin:北邻;xie:东邻;xis:南邻) 我的公式 但我不知道将其更改为 CNF(联合范式)

有人能帮我吗?吨

0 投票
1 回答
3653 浏览

math - 将此逻辑句转换为连接范式

我正在努力将这句话转换为 CNF:

(A ∨ B) ⇔ (C ∧ D)。

我已经尝试使用双条件消除逻辑规则来消除⇔。

(A ∨ B) → (C ∧ D) ∧ (C ∧ D) → (A ∨ B)。

然后我用蕴含消除逻辑规则消除了→。我现在有

¬(A ∨ B) ∨ (C ∧ D) ∧ ¬(C ∧ D) ∨ (A ∨ B)。

我几乎被困在这里。我的教授说我应该使用分配规则来减少句子。我似乎找不到任何符合分配规则要求的东西。因此,在执行一些我不知道的逻辑规则之前,我似乎无法使用分配规则。

我在这里想念什么?Stack Overflow 可以帮助我恢复到 CNF 的转换吗?

0 投票
1 回答
489 浏览

logic - 以合取范式书写条件

合取范式 (CNF) 是命题公式的标准化符号,它规定每个公式都应写为析取的合取。每个布尔公式都可以转换为 CNF。例如:

A | (B & C)

在 CNF 中有这样的表示:

(A | B) & (A | C)

在 CNF 中编写条件是编程的最佳实践吗?

0 投票
1 回答
172 浏览

c - 在 C 中求解合取范式

我正在为一项任务寻求帮助。我必须(用 C 语言)编写一个算法来解决合取正规公式(cnf),几个小时后我无法让它工作......

我的程序实现了DPLL,更准确地说,这是我在选择要实例化的文字之后简化我的 cnf 的部分,这给我带来了问题。我不确定我是否很清楚,所以这里有一个例子:

公式: (a OR b) AND (not-a OR not-b) AND (not-a OR b)

实例化:a=TRUE b=FALSE

如果我此时使用我的函数简化,我应该以 (not-a OR b) 不满意而告终,但它告诉我每个子句都得到满足。

以下是我定义的数据类型(我使用整数而不是字符作为文字,因为它看起来更容易管理):

这是我的简化功能

对于长长的代码,我很抱歉,我不知道要关注什么重要的部分。我知道还有其他几个问题,例如未完成的内存释放(我认为)。

除此之外,我在尝试调试问题时发现了几个错误,但我感觉我在纠正旧问题的同时创建了新错误:/

如果有人可以帮助我,请提前谢谢!另外,我在 Windows 10 上,通过 cygwin 使用 gcc 编译,如果重要的话:

gcc *.c

0 投票
1 回答
948 浏览

python - Python:减少大文件读取-存储-操作-写入程序中的 RAM 使用量

我这里有一个 python 程序,可以将 DIMACS cnf 格式文件转换为 PLA 格式。我正在从文件中读取 CNF 子句并将它们存储在列表中,然后对列表元素运行操作。该程序适用于最多 15,000 行(子句)的较小文件,但是当我尝试在较大文件上运行程序时系统内存不足。我需要对大约 90,000 到 120,000 行的文件进行操作。有人可以建议一些更改以优化内存使用吗?下面是我的程序:

0 投票
0 回答
264 浏览

first-order-logic - 一阶逻辑到 CNF

有一只熊。熊要么睡在它的洞穴里,要么在森林里打猎。如果熊饿了,它就不会睡觉。如果熊累了,它就不会打猎。

问题一

使用您的谓词和/或对象在 FOPC 中制定上面的故事。

尝试A

问题 B

将您的 FOPC 转换为合取范式

尝试 B

不知道如何转换为 CNF,因为我无法完成 A 部分!

0 投票
2 回答
3012 浏览

java - 如何在java中读取.cnf文件

我有一个 .cnf 文件,其中包含作为连接范式的数字。

我需要读取它们并将它们存储在数据结构(矩阵或列表)中,以便能够将它们用作索引。(我需要这个来解决 3-SAT 问题。)

如何在 Java 中读取和存储它们?

0 投票
1 回答
1044 浏览

boolean-logic - CNF 简化算法

鉴于布尔表达式是合取范式:是否有一个“简单”的算法来简化它,同时保持它在 CNF 中?

特别是,以下表达式的什么属性导致了这种简化?

简化为...