问题标签 [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.
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 中有解决方案,那也很棒。但如果不是 - 我会翻译它......谢谢
c++ - 在 C++ 中将逻辑公式转换为合取范式
我将使用 Boots/Spirit 在 C++ 中实现一个 CNF 生成器。但是在完成“优先顺序”和“消除等价和含义”这两个部分之后,我无法弄清楚如何实现“向内移动NOT”和“向内分配ORs而不是ANDs”。
所需的输出记录在这里: https ://en.wikipedia.org/wiki/Conjunctive_normal_form
以下是更详细的描述:
优先顺序:
输入示例:
现在输出是:
和代码(我在打印机部分实现输出):
编译命令:
conways-game-of-life - 生命游戏的合取范式
我想用minisat解决一个7*7大小的人生游戏,得到稳定的世代。
在这里,我简化了生死规则: 冯诺依曼德 rayon 1 南、东、北邻居活着的细胞将是活着的。(xin:北邻;xie:东邻;xis:南邻) 我的公式 但我不知道将其更改为 CNF(联合范式)
有人能帮我吗?吨
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 的转换吗?
logic - 以合取范式书写条件
合取范式 (CNF) 是命题公式的标准化符号,它规定每个公式都应写为析取的合取。每个布尔公式都可以转换为 CNF。例如:
A | (B & C)
在 CNF 中有这样的表示:
(A | B) & (A | C)
在 CNF 中编写条件是编程的最佳实践吗?
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
python - Python:减少大文件读取-存储-操作-写入程序中的 RAM 使用量
我这里有一个 python 程序,可以将 DIMACS cnf 格式文件转换为 PLA 格式。我正在从文件中读取 CNF 子句并将它们存储在列表中,然后对列表元素运行操作。该程序适用于最多 15,000 行(子句)的较小文件,但是当我尝试在较大文件上运行程序时系统内存不足。我需要对大约 90,000 到 120,000 行的文件进行操作。有人可以建议一些更改以优化内存使用吗?下面是我的程序:
first-order-logic - 一阶逻辑到 CNF
有一只熊。熊要么睡在它的洞穴里,要么在森林里打猎。如果熊饿了,它就不会睡觉。如果熊累了,它就不会打猎。
问题一
使用您的谓词和/或对象在 FOPC 中制定上面的故事。
尝试A
问题 B
将您的 FOPC 转换为合取范式
尝试 B
不知道如何转换为 CNF,因为我无法完成 A 部分!
java - 如何在java中读取.cnf文件
我有一个 .cnf 文件,其中包含作为连接范式的数字。
我需要读取它们并将它们存储在数据结构(矩阵或列表)中,以便能够将它们用作索引。(我需要这个来解决 3-SAT 问题。)
如何在 Java 中读取和存储它们?
boolean-logic - CNF 简化算法
鉴于布尔表达式是合取范式:是否有一个“简单”的算法来简化它,同时保持它在 CNF 中?
特别是,以下表达式的什么属性导致了这种简化?
简化为...