Math 利用定律和性质简化5-var布尔SOP表达式

Math 利用定律和性质简化5-var布尔SOP表达式,math,boolean-logic,boolean-expression,boolean-operations,Math,Boolean Logic,Boolean Expression,Boolean Operations,我有一个问题把我搞糊涂了,因为我不明白我应该从哪里开始,我应该在开始时选择哪些术语?因为这个令人困惑的表达方式甚至不能让我接受这个共同点,因为它毫无意义。此外,它甚至不允许我删除恭维(使用法律),因为它也没有任何意义。请在这方面帮助我,至少指导我该怎么做?我应该从哪里开始?我将非常感激 我用来写表达式的符号说明: !:非门 +:或门 。(dot):和门 布尔表达式: A。!B.E+!(B.C.D.)。!E+!(C.D.)E+!A.D。!E+A。!E+A.E+A.B。!E+!(A.C)+B.C。!

我有一个问题把我搞糊涂了,因为我不明白我应该从哪里开始,我应该在开始时选择哪些术语?因为这个令人困惑的表达方式甚至不能让我接受这个共同点,因为它毫无意义。此外,它甚至不允许我删除恭维(使用法律),因为它也没有任何意义。请在这方面帮助我,至少指导我该怎么做?我应该从哪里开始?我将非常感激

我用来写表达式的符号说明:

!:非门

+:或门

。(dot):和门

布尔表达式:

A。!B.E+!(B.C.D.)。!E+!(C.D.)E+!A.D。!E+A。!E+A.E+A.B。!E+!(A.C)+B.C。!D

我使用了一个在线表达式简化器,这给了我以下答案:

!!A+B+!C+D+E

但是上面的长表达式在这个短表达式中是如何简化的呢?我知道定律和性质,但我不明白,我该如何开始简化长的一个呢?我应该先看哪些术语?请任何人帮助我。

(这是对您的评论的直接回答,也是对您主要问题的间接回答。简而言之,使用不同的方法获得所需的简化表达式。)

您有一个复杂的表达式,但它只使用5个逻辑变量。在这个问题中,构建一个只有2^5=32行的真值表要容易得多。您可以查看结果并使用这些结果构建简化的等效表达式。这并没有使用原始问题所需的“定律和属性”,但它是简化布尔表达式的标准技术

你应该在任何离散数学课上学习如何建立真值表。简而言之,您可以创建一个表,其中每行中的每个元素都是
T
,表示
True
,或
F
表示
False
。这些行包含Ts和Fs的所有可能组合。对于5个变量,这将使用2^5=32行。对于每一行,将第一个值指定给A,第二个值指定给B,等等。然后计算表达式中的这些值,并将结果写入行的末尾

这可以手工完成,但是你的表情很复杂,我们可以避免。下面是一个Python3脚本,用于打印所需的表。请注意,Python具有
product()
函数,该函数简化了Ts和Fs的所有可能组合。此脚本使用
B[]
将布尔值转换为单个字符
T
F

from itertools import product

"""Make a truth table for the Boolean expression
    A.!B.E + !(B.C).D.!E + !(C.D).E+!A.D.!E + A.!(C.D).E + A.E + A.B.!E + !(A.C) + B.C.!D
"""
B = ('F', 'T')
print('A B C D E : Result')
print('- - - - - : ------')
for a, b, c, d, e in product((True, False), repeat=5):
    print(B[a], B[b], B[c], B[d], B[e], end=' : ')
    print(B[
            (a and not b and e)
            or (not (b and c) and d and not e)
            or (not (c and d) and e)
            or (not a and d and not e)
            or (a and not (c and d) and e)
            or (a and e)
            or (a and b and not e)
            or (not (a and c))
            or (b and c and not d)
    ])
结果如下:

A B C D E : Result
- - - - - : ------
T T T T T : T
T T T T F : T
T T T F T : T
T T T F F : T
T T F T T : T
T T F T F : T
T T F F T : T
T T F F F : T
T F T T T : T
T F T T F : T
T F T F T : T
T F T F F : F
T F F T T : T
T F F T F : T
T F F F T : T
T F F F F : T
F T T T T : T
F T T T F : T
F T T F T : T
F T T F F : T
F T F T T : T
F T F T F : T
F T F F T : T
F T F F F : T
F F T T T : T
F F T T F : T
F F T F T : T
F F T F F : T
F F F T T : T
F F F T F : T
F F F F T : T
F F F F F : T
我们看到结果总是
T
,除了单行
tf
。这意味着您的表达式为真,除非A为真,B为假,C为真,D和E为假。因此,我们可以简化表达式(使用符号)以

只需简单地使用DeMorgan定律,即可将其转换为标准形式:

!A + B + !C + D + E

这就是你想要的。

你必须使用“法则和属性”吗?在这种情况下,构建一个只有32行的真值表要容易得多。如果您的最终表达式是正确的,则该表以所有True结尾,只有一个例外。用它来构建一个等价的表达式是很简单的。是的@RoryDaulton,我必须编写简化的所有步骤来简化这个长表达式。嗯,顺便说一句,你能告诉我如何制作真相表吗?哪种表达方式?变量的输入是什么?如何从真值表中生成简化表达式?非常感谢您,先生,用简单的文字进行了很好的解释。是的,我知道如何制作真值表,因为我学习过离散数学课程,成绩达到90%,A+级,但这门课程是数字电子,我是新手,不知道如何解决这个问题。非常感谢你的解释。我目前正在学习C++,所以我对Python一无所知,但是我看代码对我来说已经很有意义了,因为我已经几乎精通C++了。我还有一个问题。我们如何将这个简化表达式(即A+B+!C+D+e)表示为最小项之和?@KhubaibKhawar:我不知道“最小项”是什么。我学的是数学,而不是数字电子,术语可能会有所不同。最后一个表达式是析取范式——这是一样的吗?任何布尔表达式的最小项都可以从它的真值表中提取出来,我将使用
{0,1}
而不是
{T,F}
,因此,在
{0,1}
真值表中,显示
1
的结果,与这些结果相对应的行中的变量称为表达式的最小项。@KhubaibKhawar:我不理解“最小项”的解释。您能提供完整解释的链接吗?这里是您可以阅读的有关mi项的链接。
!A + B + !C + D + E