在学离散数学第一部分”数理逻辑“的时候,最头疼的就是那些转化题,即把以自然语言说的某句话转化为符号形式。主要是因为自然语言有二义性,有很多话在不同的上下文中可能有不同的解释,转化的时候特别纠结。同时我还发现,某些话中可能暗含一些不严谨的推论(言外之意),如果不细想的话,可能自己很难意识到。
以这句话为例,比如我说:如果明天是晴天,我就去爬山。
我到底想表达什么呢?
从字面意思来看,还是比较简单的,即,如果“明天是晴天”这件事发生了,那么“我就去爬山”。用符号来表示,就是p -> q
(其中p
是“明天是晴天”,q
是”我去爬山“,->
是蕴含联结符),如果我是一个言而有信的人,那么当p
发生时,q
一定会发生。
这句话有没有言外之意呢?比如:
- 如果明天不是晴天,我还去不去爬山?
- 如果明天我去爬山了,那么明天是不是晴天?
- 如果明天我没去爬山,那么明天是不是晴天?
我想,对于很多人来说(比如我),不论是听到还是说出这句话,如果不去细究,第一感觉很可能认为它同时表达了这几个意思(其中后三个是言外之意):
- 如果明天是晴天,我就去爬山 (
p -> q
) - 如果明天不是晴天,我就不去爬山了 (
¬p -> ¬q
) - 如果明天我去爬山了,说明明天是晴天 (
q -> p
) - 如果明天我没去爬山,说明明天不是晴天 (
¬q -> ¬p
)
到底哪几句才是对的?
从逻辑的蕴含符的定义,由p -> q
可以推出¬q -> ¬p
,但是推不出¬p -> ¬q
与q -> p
,也就是说,上面的2和3是推不出来的,但是,在我们的感觉中,好像它们又是对的。
怎么回事?
让我们再举一个非常类似的例子,”如果你坐205路公交车,你就能到火车站“。我们再把它的四种意思写出来:
- 如果你坐205,你就能到火车站
- 如果你不坐205,你就到不了火车站
- 如果你到了火车站,说明你坐了205
- 如果你到不了火车站,说明你没坐205
奇怪的是,对于这个例子,我们可能并不会觉得它表达了2和3的意思。为什么跟前面的例子感觉不一样呢?我想也许是对于“火车站”这样的站,我们的日常经验都清楚,肯定会有很多路公交车可以到,所以就算不坐205,也能坐别的公交车。
这说明了在自然语言中,当我们在表达某件事的时候,由于用词通常并不精确,再加上一些日常经验在潜意识中干扰,很难保证每次都有相同的言外之意。
我发现一个有趣的现象,只要我们把“一定”这个词加上,就很容易确定我们真正想表达的意思了。
比如,对于“如果明天是晴天,我就去爬山”这句话,我们加上“一定”:如果明天是晴天,我就一定去爬山。意思并没有变,只是我们更加强调了后面这件事情会发生。
然后我们再把前面的四种话重写一遍:
- 如果明天是晴天,我就一定去爬山 (
p -> q
) - 如果明天不是晴天,我就一定不去爬山 (
¬p -> ¬q
) - 如果明天我去爬山了,说明明天一定是晴天 (
q -> p
) - 如果明天我没去爬山,说明明天一定不是晴天 (
¬q -> ¬p
)
突然就觉得每句话都显得很绝对,很容易被钻空子,于是不由自主思考更多的可能性,比如“如果明天是阴天”,我会怎么样?于是可能就会觉得2和3不太对,而4还是没问题的。这样的话,就跟蕴含联结符的推理对应上了:p -> q
可以推出¬q -> ¬p
,但是推不出¬p -> ¬q
与q -> p
。
另外,加上“一定”这个词以后,对于“明天不是晴天”的情况,除了“我就一定不去爬山”以外,可能还有一种不同的表述:如果明天不是晴天,我就不一定去爬山。如果你想表达的是这种情况,那么它永远是对的,因为它代表的是 ((¬p -> q) ⋁ (¬p -> ¬q)
),是一个永真式。