我是Python的初学者。我正在尝试使用PyEDA将文本字符串转换为DNF形式。我的代码可以很好地处理这个字符串。
X&(X1|X2) -->或( And(X,X1),And(X,X2))
但是,当我尝试使用下面提到的字符串时,它不能按预期工作。有人能帮我找出哪里出了问题吗?
谢谢!
输入字符串:
X[0]&(X[1]|X[2])&X[3]|X[0]&X[3]预期输出:
or(and(X[0],X[1],X[3]),and(X[0],X[2],X[3]), and(X[0],X[3])代码:
import pyeda
from pyeda.inter import *
s = 'X[0]&(X[1]|X[2])&X[3]|X[0]&X[3]'
X=exprvars('x',4)
bs = expr(s)
expression = bs.to_dnf()
expression当前输出:
And(X[0], X[3])发布于 2020-05-20 23:24:21
to_dnf函数的文档明确指出它将:
返回析取范式的等价表达式。
在您的预期输出中,您声明您想要:
or(and(X[0],X[1],X[3]), and(X[0],X[2],X[3]), and(X[0],X[3])然而,如果你检查这个表达式,你会发现top合取的最后一个操作数实际上总是比前两个操作数“更真实”。换句话说,如果最后一个操作数为真,那么前两个操作数也为真。这意味着整个or可以减少到第三个操作数。
因为to_dnf只需要返回一个等价的表达式,所以您不能责怪它执行这种缩减,并且结果是正确的。
https://stackoverflow.com/questions/61915063
复制相似问题