2014-12-03 55 views
1

如何验证两个表达式在逻辑上等价于? 对于例如: (A + B)< =>(B + A)(A +(B + C))< =>((A + B)+ C)(一个& & b)中< =>(b & &一个)确定类似的表情?

我要为它的一个优化溶液,将识别从表达式的1000重复之一。

+0

有趣的问题。网络搜索“等价数学表达式”产生了许多最近的学术论文,这表明这是一个开放的研究领域。像Mathematica这样的符号数学软件包可能会是一个好看的地方。像多项式这样的受限制的域名很容易,但我敢打赌它会变得很复杂。 – japreiss 2014-12-03 08:20:20

回答

0

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

OP的一个问题:您是否有兴趣通过手动执行该操作或通过编程代码自动执行该操作?

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

如果你有一个已经可以评估一个表达式的真像(a+(b+c))((a+b)+c)计算机系统时,则同样的系统大概可以给整个表达式(a+(b+c)) <=> ((a+b)+c),可以告诉你它是否是一个同义反复。

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

+0

我必须解决所有类型的表达式。它可以是关系型,算术型或逻辑型。在算术和关系表达式中,评估真值表并将表达式转换为CNF不起作用。 – 2014-12-05 03:42:49