gpt4 book ai didi

python - CNF 真值表

转载 作者:行者123 更新时间:2023-12-04 08:41:13 26 4
gpt4 key购买 nike

关闭。这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 Stack Overflow 的 on-topic

10 个月前关闭。




Improve this question




我有一个由真值表提供的 bool 函数。
总共有 10 个变量,我想获得具有合理长度的 CNF(不一定是最短的,但足够短)。
我该怎么做?
Python 脚本或任何公开可用的软件(例如 Mathematica/Mapple/etc)也适用于我。

最佳答案

sympy package 允许您开箱即用。 ( https://www.sympy.org/en/index.html )
这是一个简单的例子。假设您有三个变量并且真值表对以下集合进行编码:

  (x & y & !z) \/ (x & !y & z)
(即,只有对应于 x=true, y=true, z=falsex=true, y=false, z=true 的行是 true ,而所有其他行都是 false )。您可以轻松地对此进行编码并转换为 CNF,如下所示:
$ python3
Python 3.8.5 (default, Jul 21 2020, 10:48:26)
[Clang 11.0.3 (clang-1103.0.32.62)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from sympy import *
>>> x, y, z = symbols('x y z')
>>> simplify_logic((x & y & ~z) | (x & ~y & z), form="cnf")
x & (y | z) & (~y | ~z)
simplify_logic可以转换为 CNF 或 DNF,基于 form争论。看这里: https://github.com/sympy/sympy/blob/c3087c883be02ad228820ff714ad6eb9af1ad868/sympy/logic/boolalg.py#L2746-L2827
请注意,CNF 扩展通常代价高昂,而 Tseitin 编码是避免这种复杂性的首选方法 ( https://en.wikipedia.org/wiki/Tseytin_transformation)。但它有引入新变量的缺点。

关于python - CNF 真值表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64562464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com