欢迎访问小站,阅读本文http://www.yandong.org/archives/492
(1).smullyan提出的一个逻辑难题如下:
一个岛上居住着两类人–骑士和流氓。骑士说的都是实话,而流氓只会说谎话。当你碰到两个人A和B,如果A说“B是骑士“,B说“我们两个不是一类人“,请判断A,B两个人到底是流氓还是骑士。
解题:
设P:A是骑士,Q:B是骑士。
则A说的话翻译过来就是Q,B说的话翻译过来就是(P∧┐Q)∨(┐P∧Q)
则可以得到 Q和P等价,Q又和(P∧┐Q)∨(┐P∧Q)等价,列出真值表
P | Q | (P∧┐Q)∨(┐P∧Q) |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
满足条件的只有P为0,Q为0,所以A和B都是流氓。
(2) 侦探调查了罪案的四位证人.从证人的话侦探得出的结论是:
如果男管家说的是真话,那么厨师说的也是真话;
厨师和园丁说的不可能都是真话;
园丁和杂役不可能都在说谎;
如果杂役说真话,那么厨师在说谎.
侦探能判定这四位证人分别是在说谎还是在说真话吗
解释你的理由
解题:设
A:男管家说的是真话
B:厨师说的是真话
C:园丁说的是真话
D:杂役说的是真话
侦探得到了四个结论,翻译过来分别是
A→B,
(B∧┐C)∨(┐B∧C),
(D∧┐C)∨(┐D∧C),
D→┐B
此题的解法就是列出ABCD真值表,当某一组赋值使得侦探的四个结论都是真的话,那么就可以得到结果,
如果有两组值使得四个结论都是真,那么就无法断定。
答案是: 侦探可以断定男管家和厨师说谎,但不能判定究竟是园丁还是杂役说真话。
(3) 在一个100条语句的列表中,第n条语句是“在这个列表中,恰有n条语句为假。”
a)从这些语句中你可以得出什么结论?
b)若第n条语句是“在这个列表中,至少有n条语句为假”,回答问题a)。
c)假设这个列表包含99条语句,回答问题b)。
解题:
a)
按照上面两个题的思路,设P(i)为第i条语句,即表示”在这个列表中,恰有n条语句为假”
然后根据真题表,得出结论,这个工作量有点大。
另外的一个思路是,我们从题中还可以得到一个条件,就是P(i) →┐P(j) (j!=i) ,则只能有一条语句为真,而其他n-1条语句为假,而100-1=99,所以只有第99句为真,其他都为假。
b) 由题意得到,P(i) →P(j) (j<i), ┐P(i) →┐P(k) (k>i), 即如果一条语句为真,那么它前面的所有语句为真,如果一条语句为假,那么它后面所有语句为假。现在设第i以及其之前的语句都为真,设第j以及其之后的语句都为假, 得到n-j+1≧i , n-j+1≦j-1 。且j>i,如果要覆盖所有语句, j=i+1。可以得到2i=n,. 即i=50。
c) 因为2i=99,无整数解,所以是悖论。