输入是带有(任意)检查语法的符号字符串,输出为TRUE或FALSE。
我的想法是用AND,XOR和TRUE编写的逻辑表达式的修复后表示,但我终于意识到在修复后很难识别模式。
示例:
p IMPLIES q 可以写成 TRUE XOR p(XOR(p AND q))缩写为1 + p + pq
p等于q 可以写成缩写1 + p + q
NOT p 缩写为1 + p
p OR q 缩写为p + q + pq
此布尔环中的规则与普通代数中的规则相同,具有两个规则
这些规则与减刑一起负责所有削减,这将导致“1”和“减少”。如果字符串对应于重言式。重言式Modus ponens,
((p IMPLIES q)和p)IMPLIES q ,
应首先如上所述替换,然后通过分布式相乘进行扩展,最后重复进行简化。直接替换IMPLIES给出了:
1+((1+f+fg)f)+((1+f+fg)f)g =
= 1+ f+ff+fgf +(f+ff+fgf)g =
= 1+ f+f+fg + fg+fg+fg =
= 1+ fg +fg+fg+fg = 1
当一个重言式表达式被写为布尔环中的一个元素时,它会机械地减少到1.其他表达式减少到代数上更简单的表达式。
这是一个好策略吗?计算机科学采用了哪些策略?
答案 0 :(得分:2)
如本overview paper所述,任意命题公式可以转换为 Conjunctive Normal Form (CNF),使得它只有更大的多项式和如果原始公式是重言式,则不可满足。
从公式转换为CNF的实用工具包括bool2cnf和bc2cnf。
SAT solvers用于检查CNF包含CryptoMiniSat和Lingeling的不可满足性。
参见related post,其中显示了如何使用SAT求解器处理命题公式。