命题逻辑 - 减少运算次数
Posted
技术标签:
【中文标题】命题逻辑 - 减少运算次数【英文标题】:Propositional Logic - Reducing the Number of Operations 【发布时间】:2014-12-07 06:04:06 【问题描述】:简而言之,我想知道,给定两个命题公式,是否有一种标准方法可以找到仍然与两个公式具有相同输出的最短操作序列。例如,如果我们有以下公式:
和
我们可以通过引入一个新命题来减少操作次数:
然后Q
变为:
这将操作数(一元和二元)从 19
减少到 14
。 Q
的新逻辑电路是:
理想情况下,我希望只有否定和析取。有没有一种算法可以将任何命题转换为我理想的简化命题?有没有一种算法可以引入像上面这样的新命题?
【问题讨论】:
我怀疑您在其他 SE 网站之一(可能是 math.stackexchange.com)上得到这个答案可能会更幸运。不过很有趣的问题。 使用德摩根定律并否定所有连词 @AidanKane 是的,我不确定该发布在哪一个。我想我会两者都做,看看哪个先提供答案。 我在这里收藏了它,这样我就可以看到人们的想法了。 检查一个电路是否总是返回“false”被称为“电路-SAT”,是一个典型的NP-hard问题。 【参考方案1】:经过大约 50 年的研究,仍然没有多级逻辑综合的标准方法。使用Karnaugh maps 或Quine McCluskey 方法可以很好地解决两级情况。在这里,最小项的数量被最小化。但这并不直接对应确定函数值所需的逻辑运算次数。
加州大学伯克利分校开发了几个tools 来生成启发式解决方案。其中一些工具很好地封装在Logic Friday 1
中。
函数 Q 的输入:
输入: 问:=(A & ((B & C) + (B' & C'))) + (A' & ((B & C) + (B' & C'))');
最小化: 问:= A B C + A' B' C + A' B C' + A B' C';
“映射到门”操作后的输出:
注意: 更新的合成套件是 Clifford Wolf 的 Yosys。
【讨论】:
【参考方案2】:是的,有一种简化逻辑方程的标准方法
是Karnaugh Maps的使用 这里是Karnaugh Maps for 4 inputs example 背后的想法是将逻辑/电路真值表编码为矩形矩阵 这是来自answer 的 3 个卡诺图的示例 一张图代表单一输出 每个都代表自己的逻辑电路/方程式 你可以看到 set1 和 set2 是一样的X
表示输出 = 1
空白表示输出 = 0
边是所有输入组合的二进制编码
简化
通过从地图中提取方程来完成 所以要找到覆盖所有 X 或空格的最小区域数 哪一个取决于使用的逻辑,或者哪个更容易选择 例如 set1 只有在 a 和 b 都处于活动状态时才处于活动状态 所以:set1=a.b
set3 可以这样提取:
set3=a+b
通过选择 x
set3=!((!a).(!b))
选择空格
[注释]
.
和
+
或
!
不是
选择可以重叠边界
【讨论】:
以上是关于命题逻辑 - 减少运算次数的主要内容,如果未能解决你的问题,请参考以下文章