我正在寻找一个重构布尔表达式的工具。我有像
这样的表达式a1 => (b1 <=> c or d) AND
a2 => (b2 <=> c or d) AND
a2 => (b2 <=> c or d)
该工具应该能够简化表达式,例如:在上面的例子中提取子表达式“c或d”。是否有免费的计算机代数系统可以做到这一点?
目前我认为手动重构表达式可以证明与haskell quickcheck脚本的等效性。
答案 0 :(得分:1)
我不确定某个工具,但请查看Boolean Algebra
您可以绘制所有输入和输出的网格,以尝试找到最小的布尔表达式
答案 1 :(得分:1)
DMS Software Reengineering Tookit可以做到这一点。
它是用于将语言(包括Java)解析为AST和符号表的通用编译器技术。 DMS还提供源到源转换,以及关联和交换法重写。
您的布尔表达式将显示为Java AST表达式树。 通过提供一组关于布尔代数的规则,您可以进行操作 那些表达树。
过去我们已经完成了这项工作,对C,RLL和诊断方程系统进行布尔表达式简化和转换,包括大规模表达式和大量中等规模表达式(与您的示例非常相似)。
EDIT 5/19/2010:使用DMS查看example of conventional algebra transformations。它很容易构造一个代替布尔代数的变体。
答案 2 :(得分:1)
Boolean Refactor and Simplification
此工具非常适合优化复杂的布尔表达式。