布尔蕴含

42

我需要关于布尔蕴含的帮助。

有人能用简单的语言解释一下它是如何工作的吗:

A 蕴含 B = B + A' (如果A则B)。也等同于 A >= B


不,他是正确的 - 这里的 + 表示 - Pavel Minaev
你的意思是 A -> B = ~B -> ~A 吗? - Nate C-K
7个回答

127

布尔蕴含式 A implies B 的意思是“如果 A 为真,则 B 必须为真”。这暗示着(故意的双关语)如果 A 不为真,那么 B 可以是任何东西。因此:

False implies False -> True
False implies True  -> True
True  implies False -> False
True  implies True  -> True

这也可以理解为(非A)或B - 即“要么A为假,要么B必须为真”。


10
答案的第一句话就给出了定义,它是布尔逻辑中蕴含的标准定义。你可能觉得这与你的常识相反,但那是因为你把一个非常狭义和严格定义的运算符的名称投射到其使用范围之外,并将其与更广泛的语言学“蕴含”的定义混淆了。这是新接触正式布尔逻辑的人常犯的错误,其他运算符也会发生类似情况(虽然由于不幸的名称,蕴含是最常见的)。 - Pavel Minaev
如果A=false且B=true,则"A implies B"。 - principal-ideal-domain
1
这正是“要么A为假,要么B必须为真”的意思。 - Pavel Minaev
为什么 False implies True -> True?看起来很不直观。 - lostsoul29
4
如果你将它转化为具体的陈述,那么理解起来会更容易。例如,考虑以下陈述:“X是一只狗_意味着_X是一种哺乳动物”。这是不可否认的真实吧?现在让我们看看这里的真值表是什么样子。如果X确实是一只狗,左侧部分是真的,右侧部分也是真的:True implies True -> True。如果X是一只猫,那么第一部分是假的,第二部分是真的:False implies True -> True。这实际上是在说明一个非狗的哺乳动物并不会使所有狗都是哺乳动物的主张失效。 - Pavel Minaev
显示剩余3条评论

35

这是我对此的看法:

if(A)
  return B;
else
  return True;
如果A为真,则B相关且应进行检查,否则忽略B并返回真。

12
很好的解释!这个一行代码是 return A ? B : true; - Sina Madani

22

我想我理解了 Serge 的观点,我会尝试解释它与现在的不同之处。这段文字对于评论来说太长了,所以我会把它发布为答案。

Serge 似乎是从质疑暗示是否适用的角度来考虑的。这有点像科学家试图确定两个事件之间关系的方式。以下是一个故事:

一位科学家在四个不同的国家访问了四天。在每个国家,她都想确定雨是否意味着人们会使用伞。她制作了以下的真值表:

下雨了吗?   人们使用伞吗?   雨是否意味着使用伞?    备注
             
  
否             否                        ??                                   没下雨,所以我没法观察到。
否             是                        ??                                   人们遮阳。我不知道他们在下雨时会怎么做。
是            否                        否                                      或许当地政府禁止使用伞,没有人可以使用。这里绝对没有因果关系。
是            是                        ??                                    或许这些人无论天气如何都使用伞。

在上面的例子中,科学家不知道雨和伞之间的关系,并且她正在试图确定这种关系是什么。只有在其中一个国家的一天中,她才能明确地说暗示不是正确的关系。

类似地,Serge 看起来正在尝试测试 A=>B,但只能在一个情况下确定它是否成立。

然而,当我们评估布尔逻辑时,我们事先已经知道关系,并且想要测试是否遵守了这种关系。以下是另一个例子:

母亲告诉她的儿子:“如果你弄脏了,请洗个澡”(弄脏=>洗澡)。在四个不同的日子里,当母亲下班回家时,她检查是否遵守了这个规则。她制作了以下的真值表:

弄脏了吗?   洗澡了吗?    遵守规则吗?    备注
否            否                           是                                    儿子没弄脏,所以不需要洗澡。给他一块饼干。
否            是                           是                                    儿子不需要洗澡,但还是想洗。特别干净!给他一块饼干。是              否             否             儿子没有遵守规则,今晚不能吃饼干和看电视。
是              是             是             他洗了澡以清洗身上的污垢。给他一个饼干。

母亲事先设定了规则。她知道污垢和洗澡之间的关系,并希望确保规则得到遵守。

当我们使用布尔逻辑时,就像母亲一样:我们事先知道运算符,并且想要在这种形式下处理语句。也许我们想将语句转换为不同的形式(正如最初的问题,他或她想知道两个语句是否等价)。在计算机编程中,我们经常想将一组变量插入语句中,并查看整个语句的求值结果是否为真或假。

这不是知道是否适用 implies 的问题 - 如果它不应该被写在那里,它就不会被写在那里。真值表并不是用于确定规则是否适用,而是用于确定是否遵守了规则。


15

我喜欢使用这个例子:如果下雨,那么天就阴沉。

Raining => Cloudy

与许多初学者可能认为的相反,这绝不意味着雨会导致多云,或多云会导致雨。(编辑:它只是表示,此时既不下雨也不多云。请在此处阅读我最近关于物质蕴涵的博客文章。其中,我除了其他内容外,还提出了通常的“定义”物质蕴涵的原理。读者需要熟悉基本的证明方法,例如直接证明和证明反证法。)

~[Raining & ~Cloudy]

你不是在证明定理时使用相同的符号“=>”来表示前一条款暗示下一条款吗?此外,你在例子中使用了“if-then”,这表明因果关系。但是,在该例子中,你颠倒了因果关系:“多云”是原因(但它在“then”从句中),而“下雨”是结果(但它在“if”从句中)。为什么不使用像“下雨必须是多云的”这样的例子呢?然后,你可以查看真值表,并看到除了cloudy=0和rain=1之外的值确实不能证明或反驳该语句,它们只是不矛盾。 - Serge Rogatch
在数学中,没有因果关系。正如标准真值表所反映的那样,只有在下雨而不是多云的情况下,Raining => Cloudy 才会被证明为假。否则,它就是真的。这种约定非常实用,您使用它时不会得出任何错误的结论。 - Dan Christensen
1
一个记住蕴含表达式的简单方法是通过可视化来考虑当天气不下雨时会发生什么。当天气不下雨时,天空可能有云也可能没有云。因此,可以表示为(not A) or B。 - Jason210
这是一个很好的比喻。 - Shourya Bansal
另一个好的例子是“烟雾 => 火焰”,对吗?这基于古老的说法“有烟必有火”。(并非基于现实,只是这个说法) - Captain Man

1
从真值表可以推断出,只有当a=1且b=0时,才能推断出a=>b的值为0。对于其他值(a,b),a=>b的值是未定义的:既有可能(a=>b)=0("a不蕴含b"),也有可能(a=>b)=1("a蕴含b")。
a b a=>b comment
0 0  ?   it is not possible to infer whether a implies b because a=0
0 1  ?   --"--
1 0  0   b is 0 when a is 1, so it is possible to conclude
         that a does not imply b
1 1  ?   whether a implies b is undefined because it is not known
         whether b can be 0 when a=1 .

若要暗示b,则有必要且充分的条件是当a=1时始终满足b=1,以确保当a=1且b=0时没有反例。对于真值表中的第1、2和4行,不能确定是否存在反例:这些行未与(a=>b)=1矛盾,但也未证明(a=>b)=1。相比之下,第3行立即反驳了(a=>b)=1,因为它提供了一个当a=1且b=0时的反例。 我想我的解释可能会震惊一些读者,但似乎我们所学逻辑基础中存在着严重的错误,这也是布尔可满足性等问题尚未得到解决的原因之一。


逻辑基础并没有问题,只是有些人对蕴涵的概念存在误解。根据定义,我们有:A => B = ~[A & ~B]。请参考我的回答。 - Dan Christensen
你怎么知道谁的概念是错误的?为什么蕴涵不能表示因果关系?无论如何,假设你对蕴涵的概念我很喜欢你的回答。 - Serge Rogatch
我知道上述等式在数学中非常有效。试着构造一个看似错误的数学结果,可能源于它。如果你想谈论因果关系,你需要除了数学之外的东西。仅仅因为两个事件之间存在相关性,并不意味着一个事件在科学意义上“导致”另一个事件发生。需要进行更深入的分析。 - Dan Christensen

0

这里有一个简洁的陈述:

假设我们有两个语句A和B,每个语句都可以是真或假。没有任何其他信息,就有2 x 2 = 4种可能性:“A且非B”,“B且非A”,“既不是A也不是B”,以及“既是A又是B”。

现在加上额外的限制,“如果A,则也B”。在施加此限制后,“x -> y”表达式,其中->是“蕴含”运算符,表示是否仍然可能A == x且B == y。在此额外限制之后,唯一不再可能的结果是A == 1且B == 0,因为那与限制本身相矛盾。因此,我们有1 -> 0为零,而其他每对都为1。


0

在这个问题上做出最好的贡献是由Serge Rogatch提供的。

布尔逻辑仅适用于量化(或评估)结果为真或假的情况,布尔逻辑命题之间的关系基于此事实。

因此,命题之间必须存在关系或连接。

在高阶逻辑中,关系不仅仅是开/关、1/0或+电压/-电压的情况,一个用文字表达的命题的评估更加复杂。如果文字命题之间不存在关系,则对于文字命题的蕴含并不等同于布尔逻辑命题。

虽然蕴含真值表总是为二元命题产生正确的结果,但对于可能完全没有任何关系的文字命题来说并非如此。

~A V B 真值表:

A B 结果/评估

1 1 1

1 0 0

0 1 1

0 0 1

文字命题A:月球是由酸奶油制成的。
文字命题B:明天我会赢得彩票。

A B 结果/评估

1 ? ?

如你所见,在这种情况下,你甚至无法确定决定结果的B的状态。现在明白了吗?

在这个真值表中,命题~A总是评估为1,因此,最后两行不适用。然而,在布尔逻辑中,最后两行总是适用的。

http://thenewcalculus.weebly.com


2
这似乎并没有特别回答问题,而只是一种抱怨;请不要将对其他答案(或评论)的同意作为答案发布。在网站上投入一些时间,您将获得足够的特权,以投票支持您喜欢的答案,这是 Stack Overflow 表达感谢的方式。 - Nathan Tuggy
你犯了许多初学者常犯的错误。暗示并不涉及任何“联系”或因果关系。根据定义,当且仅当~[A & ~B]时,A => B。换句话说,我们不能同时拥有A和非B。以你的例子为例:我们不能同时拥有月亮由酸奶油制成和你明天未赢得彩票。这是完全合理的。 - Dan Christensen
@DanChristensen,你为什么认为这个定义是错误的呢?它误导了蕴含的概念。但即使用这个定义的话,真值表中除了A=1和B=0之外的每个值对都不能证明“我们不能同时有A和非B”。想想看真值表中的例子,比如A=0且B=0——这只是一个不违反你定义的实例,在这种情况下我们确实“没有同时有A和非B”。为什么你从“我们没有”推断出“我们不能”?为什么你要从实例推广到每个必须证明“我们不能”的情况呢? - Serge Rogatch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接