0

我是 Python 的初学者。我正在尝试使用 PyEDA 将文本字符串转换为其 DNF 形式。我的代码适用于这个字符串。

X[0]&(X[1]|X[2]) --> 或(和(X[0],X[1]), 和(X[0],X[2]))

但是当我尝试使用下面提到的字符串时,它不能按预期工作。谁能帮我弄清楚出了什么问题?

谢谢!

输入字符串:

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])
4

1 回答 1

0

to_dnf函数的文档明确指出它将:

以析取范式返回等效表达式。

在您的预期输出中,您声明您想要:

or(and(X[0],X[1],X[3]), and(X[0],X[2],X[3]), and(X[0],X[3])

然而,如果你检查这个表达式,你会发现顶部连词的最后一个操作数实际上总是比前两个“更真实”。换句话说,如果最后一个操作数为真,那么前两个也是。这意味着整个or可以减少到第三个操作数。

由于to_dnf只需要返回一个等价表达式,你不能因为做这种归约而责备它,结果是正确的。

于 2020-05-20T15:24:20.883 回答