2007-11-05

关于逻辑中的蕴含关系

http://bbs.oursci.org/newreply.php?postid=30793

------------------------------------
30793- 另一个迷思, 请教
作者:uncutstone
时间:2004-12-28 19:04

有两个真值函数 p , q.
如果 p->q 取真值, 不表示p 是 q 的原因。
p->q 永取真值, 也不表示p 是 q 的原因。
p=>q, 也不表示 p 是q 的 原因。
-> 表示逻辑连接词 if ..then ..
=>表示逻辑推论

举一个例: 1+1 =2 => 饭可以吃。 谁也不是谁的原因。

还是感觉违反直觉。按照通常的理解, p=>q, 那么p 是q的一个原因。

愚钝啊。 :-(


------------------------------------
30876-高兴 我尝试解释一下:
作者:荒唐
时间:2004-12-29 21:32

我怕我们使用的符号不一致,
所以先说一下命题逻辑的符号约定:
 非:~
 与:&   a&b严格等价于~(a->~b)、~(~a|~b)
 或:|   a|b严格等价于~a->b、~(~a&~b)
蕴含:->   a->b严格等价于~a|b、~(a&~b)、(a<->b)|b
等价:<->   a<->b严格等价于(a&b) | (~a|~b)

约定从上到下运算优先级从高到低。
只要有~运算外加&、|、->三者之一,就可以推出其余逻辑运算符

上面这些命题逻辑的符号,包括->,都是一种运算符号,他们的左项和右项无需有任何关系。

a->b的含义是,只要不是a真b假,a->b的值就是真,并非a能推导出b或者a是b的前提。把->当作if...then...实际上很容易引起误解。
所以“1+1=2 -> 饭可以吃”这个公式并非表示前者是后者的前提,仅仅表示如果前者是“1+1=2”后者是“饭可以吃”就可以让这个公式取“真”值。仅此而已。

你所提到的符号=>,含义应该是下面两个符号之一(我的书里面大部分使用下面这两种符号):
逻辑后承:|=
逻辑推论:|-(也就是推出)
这两个符号定义不同,但命题逻辑的完备性定理证明了这两个符号是等价的。
一个命题是一组命题的逻辑后承(|=)表示如果该组命题为真,那么该命题就必为真。
而一个命题是一组命题的逻辑推论(|-)表示这组命题按照直接推导规则能够在有限步骤内得到该命题。
命题逻辑所定义直接推导规则只有一个:a, (a->b) |- b
(一阶逻辑增加一条基本推导规则:A |- (for all x)A。)

此时a & (a->b)确实可以作为b成立的前提条件,b确实可以看做是他们的逻辑结论。而如果写“1+1=2 |- 饭可以吃”是错误的,没有这样的推导规则。这样写才是正确的:“(1+1=2 -> 饭可以吃), (1+1=2) |- (饭可以吃)”

意思是说,只要你规定了“如果1+1=2为真,那么饭可以吃就必为真”这件事情是必然的,那么此时只要“1+1=2”也确实为真,就一定可以逻辑第推断出“饭可以吃”这个逻辑结论。

这个逻辑推论的真实性是并非直接是因为“1+1=2”,而是基于上面的两个前提的真实性。上面的真实性是你规定出来的,并非逻辑系统能够判断出来的。


------------------------------------
30892- 这里有点误解, 我解释一下
作者:uncutstone
时间:2004-12-30 09:58

我写的 ‘1+1=2’ 和 “饭可以吃”, 意思是这两个命题分别都是永真命题。
所以命题 ‘1+1=2’ ->“饭可以吃”, 也是永真的。
那么根据 ‘|-’ 的定义, 如果p-> q 永真,有 p |- q.
所以我有 ‘1+1=2’ |- “饭可以吃”。 也就是说, 如果任意两个命题 A , B 永真, 就会有 A |- B, B |-A. 一个永真命题可以推导出任何一个永真命题。

我的理解, 一个永真的蕴涵就是一个逻辑推论。这个地方有一点自相似性, 容易让人糊涂。


------------------------------------
30923-哈哈 嘿嘿,你对永真的理解错了啦……
作者:荒唐
时间:2004-12-30 13:51

形式逻辑中的永真式(重言式)是指逻辑系统内部的公式,永真式中任何一个项无论取什么样的值,式子本身都保持真。

例如A<->A、A|~A、~(A&~A)这些都是永真式。

而“米饭能吃”核“1+1=2”这两个命题在逻辑系统内部根本是不可能判断真假的,所以它们根本不是(逻辑系统的)永真式。


------------------------------------
33050- “蕴含”可以理解成“如果…那么…”
作者:荒唐
时间:2005-01-25 16:30

日常生活中的“如果…那么…”在“如果”不成立的时候没什么用处,但在逻辑运算中,“如果”不成立也有真值,其真值为“假”。

“推出”(|-)也可以看作是“如果…那么…”,但“推出”这个东西不是用来参与逻辑运算的。

推导规则就是把“|-”和“->”二者联系起来的东西。

推导规则是说,如果“如果A那么B”为真,同时“A”也为真,那么我们可以“推出”一个逻辑结论:“B”为真。

你只需把逻辑公式当做有真假的判断句,由逻辑运算符连接起来的句子也是有真假的逻辑公式,“->”理解为“如果……那么……”并且即使句子错误的也可以利用这个句子的“假”值。

推出“|-”除了它不用来表示逻辑运算,而是用于逻辑推导过程之外,跟“->”没有什么区别就行了。因为如果再使用“->”表示推出,那么推导过程就被这个东西连接成了一个整个的逻辑表达式了,为了避免这种情况出现,就制造了一个专门用于表示推出的符号“|-”。


------------------------------------
32610- 逻辑推导规则并不需要真值表才能定义。
作者:荒唐
时间:2005-01-19 15:20javascript:void(0)

“->”仅仅是“蕴含”这个“逻辑运算”的符号,并不表示“推出”

命题逻辑只有一条基本推导规则(其它规则可以导出):
A, A->B |- B
意思是说,只要有A和A->B二者成立,那么可以推导出B。

一阶逻辑增加一条基本推导规则:
A |- (for all x)A