從『了解』
【問題】
有一個農民到集市買了一隻狐狸、一隻鵝和一袋豆子,回家時要渡過一條河。河中有一條船,但是只能裝一樣東西。而且,如果沒有人看管,狐狸會吃掉鵝,而鵝又很喜歡吃豆子。問:怎樣才能讓這些東西都安全過河?
到用別的語言作『改寫重述』,意味著『概念』體系對應『轉譯』 。就『邏輯問題』來講︰『事實』的『轉譯』 後依然是『事實』;由『事實』可推導的『結論』,『轉譯』 後依然是『結論』。這個『邏輯網』
的『轉譯』就是用『狀態』表達『事實』,以『狀態變遷』 詮釋『人的行動推理』。由於熟悉的河多半是東西向,我們就說那農夫將由『南岸』到達『北岸』的吧!如此一個有四個物象的系統,最多能有 個狀態。【※注意,以南為觀點,『‧』表達在北。】
【可能狀態】
在此打『ˇ』的狀態代表『安全』,不會發生
狐狸吃掉鵝,或鵝吃豆子。
的事情。打『╳』的狀態說明『不安全』,終究歸於『渡河失敗』這一事態。為了彰顯『題意』,特將『‧‧‧‧』目標態命名為『到達彼岸』。再將農夫的『行動』與『狀態變遷』連繫起來︰
【狀態變遷】※狀態(始態, 行動, 終態)
這就構成了該『邏輯網』的圖說。所謂的『答案』求解推理,也就『轉譯』為『尋找』從『豆鵝狐人』狀態通往『到達彼岸』狀態之『路徑』的哩!或許此時突然開朗,果真『網網相通』井井往來的呦!!那個 pyDatalog 的程式立馬寫成︰
pi@raspberrypi ~ $ python3 Python 3.2.3 (default, Mar 1 2013, 11:53:50) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from pyDatalog import pyDatalog >>> pyDatalog.create_terms('狀態, 可達狀態') >>> pyDatalog.create_terms('X狀態, Y狀態, Z狀態, P經由, P經由一, P借著') >>> +狀態('豆鵝狐人', '鵝人去北', '豆‧狐‧') >>> +狀態('豆‧狐‧', '鵝人回南', '豆鵝狐人') >>> +狀態('豆‧狐‧', '獨人回南', '豆‧狐人') >>> +狀態('豆‧狐人', '獨人去北', '豆‧狐‧') >>> +狀態('豆‧狐人', '豆人去北', '‧‧狐‧') >>> +狀態('‧‧狐‧', '豆人回南', '豆‧狐人') >>> +狀態('‧‧狐‧', '獨人回南', '渡河失敗') >>> +狀態('‧‧狐‧', '鵝人回南', '‧鵝狐人') >>> +狀態('‧鵝狐人', '鵝人去北', '‧‧狐‧') >>> +狀態('‧鵝狐人', '狐人去北', '‧鵝‧‧') >>> +狀態('‧鵝狐人', '獨人去北', '渡河失敗') >>> +狀態('‧鵝‧‧', '狐人回南', '‧鵝狐人') >>> +狀態('‧鵝‧‧', '豆人回南', '豆鵝‧人') >>> +狀態('豆鵝‧人', '豆人去北', '‧鵝‧‧') >>> +狀態('‧鵝‧‧', '獨人回南', '‧鵝‧人') >>> +狀態('‧鵝‧人', '獨人去北', '‧鵝‧‧') >>> +狀態('‧鵝‧人', '鵝人去北', '到達彼岸') >>> +狀態('豆‧狐人', '狐人去北', '豆‧‧‧') >>> +狀態('豆‧‧‧', '狐人回南', '豆‧狐人') >>> +狀態('豆‧‧‧', '鵝人回南', '豆鵝‧人') >>> +狀態('豆鵝‧人', '鵝人去北', '豆‧‧‧') >>> +狀態('豆‧‧‧', '獨人回南', '渡河失敗') >>> +狀態('豆鵝狐人', '獨人去北', '渡河失敗') >>> +狀態('豆鵝狐人', '狐人去北', '渡河失敗') >>> +狀態('豆鵝狐人', '豆人去北', '渡河失敗') >>> >>> (可達狀態[X狀態, Y狀態] == P經由) <= ((可達狀態[X狀態, Z狀態] == P經由一)) & 狀態(Z狀態, P借著, Y狀態) & (X狀態 != Y狀態) & (P經由 == P經由一 + [P借著]) 可達狀態[2]==(*,X狀態,Y狀態,P經由) <= 可達狀態[2]==(*,X狀態,Z狀態,P經 >>> (可達狀態[X狀態,Y狀態] == P經由) <= 狀態(X狀態, P借著, Y狀態) & (P經由 == [P借著]) 可達狀態[2]==(*,X狀態,Y狀態,P經由) <= 狀態(X狀態,P借著,Y狀態)&==(P經由 >>> print((可達狀態['豆鵝狐人', '到達彼岸'] == P經由) >= P經由) ('鵝人去北', '獨人回南', '狐人去北', '鵝人回南', '豆人去北', '獨人回南', '鵝人去北') >>>
現在『問題』來了,我們能用
《勇闖新世界︰ 《 pyDatalog 》 導引《七》》
系列文章所探討『台北捷運網』之『所有路徑』辦法︰
可達狀態(X狀態, P經由, Y狀態) <=
狀態(X狀態, P借著, Y狀態) & (P經由 == [P借著])
可達狀態(X狀態, P經由, Y狀態) <=
可達狀態(X狀態, P經由一, Z狀態) &
狀態(Z狀態, P借著, Y狀態) &
(X狀態 != Y狀態) & (P經由 == P經由一 + [P借著])
得到所有『可能路徑』的嗎??