騎士與流氓問題,或是叫騎士與無賴問題knights and knaves

這是個有趣的狀況,起源可以從wiki裡面看到
https://en.wikipedia.org/wiki/Knights_and_Knaves

這個狀況是這樣的,在一個國家有兩種人,一種人叫騎士knight,另一種人叫流氓knave。騎士只說實話,流氓只說謊話,但有個外國人來到這個國家。問題就是外國人要在條件限制下,透過問問題分辨出誰是騎士誰是流氓。
(就目前看來,我認為還有一個條件是這個國家裡的每個人都知道所有人是騎士還是流氓,有可能會有題目突破這限制變成他們自己也不知道自己或他人是騎士或流氓嗎?)

居然還有個網站有一堆這類的問題,目前看到有382個。
http://philosophy.hku.hk/think/logic/knights.php

Puzzle #1
外國人遇到兩個人A與B,
A對外國人說"B是流氓",
B說"A跟我都不是流氓"
怎麼判別誰是騎士,誰是流氓?

當然可以用聰明的腦袋去思考這個問題,然後這樣推論:
假設B是騎士說真話,A就應該是騎士,可是A說B是流氓,和B說B自己是騎士矛盾,所以B不是騎士。
但假設B是流氓說假話,事實上A和B其中有一個人是流氓,或是兩個人都是流氓。這兩種情況下第一種,若其中有一人是流氓,那就是B自己是流氓,A是騎士沒有矛盾。
若兩人都是流氓,那A所說的謊話代表B是騎士,造成矛盾。
也就是說A是騎士,B是流氓。
是不是很難懂,也很難讀?簡直像是自己在對自己自言自語,就算別人讀了也看不懂。

所以有個聰明的方法叫做真值表分析,可以去google找圖有很多奇怪的樣子。
但是拿來解這種題目就很清楚。

我們把"A是騎士"縮寫成P,但不知道這句話是真是假。
我們把"B是騎士"所寫成Q,也不知道這句話是真是假。

那麼A說了一句話叫做"~Q",也就是"B不是騎士"。
B說了一句話叫做"P and Q",也就是"A和B都是騎士"。

我們想知道的問題變成,在P與Q的甚麼狀況(真或假)下,透過兩人說話內容不矛盾可以得到真相,也就是:
若A是騎士為真,則(A說的話就是真的)B是流氓為真
若B是騎士為真,則(B說的話就是真的)A是騎士與B是騎士為真
有意思的是這類問題中他們不是說真話就是說謊話,所以事實上他們一句話表達了兩面意義:
若A是騎士為真,則(A說的話就是真的)B是流氓為真。也就是->~Q
若A是騎士為假,則(A說的話就是假的)B是流氓為真。也就是~P->Q

若B是騎士為真,則(B說的話就是真的)A是騎士與B是騎士為真。也就是Q->(PandQ)
若B是騎士為假,則(B說的話就是假的)A是流氓或B是流氓為真。也就是~Q->~(PandQ)。也就是~Q->(~Por~Q)

如果你會真值表的運算,就可以得到類似下面這張:


透過真值表,這四句話都為真的狀況,只有P是真的,Q是假的的狀況才符合。
也就是A是騎士為真,B是騎士為假的狀況。
所以我們知道了A是騎士、B是流氓。

感覺比原本的直觀說明還要更麻煩和更複雜嗎?其實不會的,透過真值表,只要解構子句,不用複雜的思考排除各種狀況,只要對邏輯符號進行運算就能得出解答。
在解構子句後反而可能覺得奇怪,你甚至可以不用知道如何說明解答就可以得到正確答案?總之就是找都是T、T、T、T的不發生矛盾狀況就是了(可能會有不只一種狀況)

在處理簡單的問題看似很弔詭,但在處理複雜的問題時就變成很實用的技巧。重要的概念是拆解大問題成小問題,再逐步由小問題的解答去推導大問題的解答,不被複雜的狀況給蒙蔽,成為邏輯思考的第一步。

現在你有方法可以挑戰剩下的381題了~

Using Command Line to Mirror a Folder Every Day Automatically with .bat file and task schedule function in Windows電腦自動備份檔案

 Windows其實有很多厲害的功能是書上不會寫的,但是只要你問得出問題來, 你就能找到答案 , 而這個問題通常要用英文去問。 但那是以前, 就在我找了茫茫blog海終於研究出來之後,我發現我可以問chatGPT... 好的,既然你能找到我這邊,就代表你問對問題了,答案直接說,原...