【问题标题】:Identify similar expressions?识别相似的表达方式?
【发布时间】:2014-12-03 05:22:04
【问题描述】:

如何验证两个逻辑等效的表达式? 例如: (a+b) (b+a)(a+(b+c)) ((a+b )+c)(a && b) (b && a)

我想要一个 优化 解决方案,它可以从 1000 多个表达式中识别出重复的。

【问题讨论】:

  • 有趣的问题。对“等效数学表达式”的网络搜索产生了许多最近的学术论文,表明这是一个开放的研究领域。像 Mathematica 这样的符号数学包可能是一个不错的地方。像多项式这样的受限域很容易,但我敢打赌它会很快变得复杂。

标签: data-structures logic


【解决方案1】:

与@japreiss 的评论相反,这里没有开放的研究问题。在像给出的例子这样的命题表达式的上下文中,逻辑等价是很好理解的。 (我假设 OP 使用 + 表示逻辑或而不是数字加法)

向 OP 提出的问题:您有兴趣手动执行此操作还是通过编程代码自动执行此操作?

有多种方法,但在大多数逻辑课程和教科书的介绍中教授的方法是为左侧和右侧构建单独的真值表,并查看每行的最终值是否相同.

如果您的计算机系统已经可以评估 (a+(b+c))((a+b)+c) 这样的表达式的真值,那么同一系统可能会给出整个表达式 (a+(b+c)) <=> ((a+b)+c) 并且可以告诉您它是否是重言式。

关于比较 1,000 个表达式以查找重复项,一种技术是将每个表达式转换为 conjunctive normal form,然后使用字符串比较来查看哪些是相同的。

【讨论】:

  • 我要处理所有类型的表达式。它可以是关系的、算术的或逻辑的。在算术和关系表达式的情况下,评估真值表并将表达式转换为 CNF 将不起作用。
猜你喜欢
  • 2015-01-18
  • 1970-01-01
  • 2011-12-11
  • 2018-12-12
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 2012-02-29
相关资源
最近更新 更多