我在布尔逻辑中遇到了一个问题,你必须在这三个变量中为每个变量分配布尔值,因此每个方程都不相等。
问题指明:
!b && (c || !d) != !(b || !c && d)
我尝试用猜测和检查方法解决问题,但我还没有运气。有没有办法以代数方式解决问题?我在Java工作。
答案 0 :(得分:3)
这是一个棘手的问题。在应用双重否定之后,考虑将De Morgan定律应用于左侧的表达式:
!!(!b && (c || !d))
!(b || !(c || !d))
!(b || !c && d)
换句话说,没有这样的组合,因为两者在逻辑上是等价的。
答案 1 :(得分:2)
解决这类问题的一个非常简单的方法通常是检查公式,看看哪个似乎是最“强大”的价值。我要说的是b
。
因此,让我们通过b == true
和b == false
。
首先,让我们添加一些括号,以便明确是什么:
!b && (c || !d) != !(b || !c && d)
= (!b && (c || !d)) != !(b || (!c && d))
如果b == true
则:
(!true && (c || !d)) != !(true || (!c && d))
=> (false && (c || !d)) != !(true || (!c && d))
=> false != !true
=> false != false
=> false
如果b == false
那么:
(!false && (c || !d)) != !(false || (!c && d))
=> (true && (c || !d)) != !(!c && d)
=> (c || !d) != (c || !d)
=> false
所以这永远无法实现。
答案 2 :(得分:1)
您可以使用布尔逻辑的一些规则:
!(a || b) = !a && !b
!(a && b) = !a || !b
将它们应用到右侧:
!(b || !c && d) = !b && !(!c && d) = !b && (c || !d)