我正在寻找一种工具来重构布尔表达式。我有这样的表达
a1 => (b1 <=> c or d) AND
a2 => (b2 <=> c or d) AND
a2 => (b2 <=> c or d)
该工具应该能够简化表达式,例如提取上例中的子表达式“c or d”。有没有免费的计算机代数系统可以做到这一点?
目前我想手动重构表达式,用一个小haskell quickcheck脚本证明等价。
我正在寻找一种工具来重构布尔表达式。我有这样的表达
a1 => (b1 <=> c or d) AND
a2 => (b2 <=> c or d) AND
a2 => (b2 <=> c or d)
该工具应该能够简化表达式,例如提取上例中的子表达式“c or d”。有没有免费的计算机代数系统可以做到这一点?
目前我想手动重构表达式,用一个小haskell quickcheck脚本证明等价。
我不确定工具,但看看布尔代数
您可以绘制所有输入和输出的网格以尝试找到最小的布尔表达式
DMS 软件再造工具包可以做到这一点。
它是用于将语言(包括 Java)解析为 AST 和符号表的通用编译器技术。DMS 还提供源到源的转换,以及关联和交换律重写。
您的布尔表达式将显示为 Java AST 表达式树。通过提供一组关于布尔代数的规则,您可以操纵这些表达式树。
我们过去这样做是为了对 C、RLL 和诊断方程系统进行布尔表达式简化和转换,无论是在大尺度表达式上,还是在许多中等尺度表达式上(尺度很像你的例子)。
编辑 5/19/2010:查看使用 DMS的传统代数转换示例。构造一个执行布尔代数的变体是微不足道的。
该工具非常适合优化复杂的布尔表达式。