自我再現 ── Thue 改寫系統之補充《三》

美國著名的哲學、邏輯學家 Willard Van Orman Quine 曾經提過一個非自我指涉的真假值『悖論』︰

“Yields falsehood when preceded by its quotation” yields falsehood when preceded by its quotation.

,或許可以用下面的中文例子比擬如下︰

“引用生虛假”引用生虛假。

那這句話是『真』還是『假』呢?假使這樣分解的看︰

□ = 引用生虛假
□ 的引用 = “引用生虛假”
□ 的引用之引用生虛假 = “引用生虛假”引用生虛假

『引用生虛假』引用生『虛假』,所以 “□” □ 自相矛盾。

一九七二年 Paul Bratley  和 Jean Millo 寫了一篇《Computer Recreations: Self-Reproducing Automata》技術文章,『自我再現』一詞首度出現,是指一種無需輸入,『自己輸出自己原始碼』的執行程式,也就是說『執行程式○的輸出=程式○的原始碼』。據說一九六零年 Bratley 在 Edinburgh 大學的一場由該校研究員 Hamish Dear 的演講會上,第一次看到用了 Atlas Autocod 寫的此種程式時,就對它產生了興趣。人們後來為了紀念哲學家奎因,就將這類程式稱作『Quine』程式。通常在任何圖零 Turing 完備的程式語言上,都可以寫出 Quine 程式,這個網址列出了許多種程式語言的寫作範例。有人說,它的一般的寫法是︰

一、程式原始碼的資料結構,
二、輸出該資料結構,
三、用該資料結構之內容輸出其餘的程式原始碼。

比方說下面是一個 python 語言的簡單例子︰

a = [ ‘print  “a =”, a’, ‘for s in a: print s’]
print “a =”, a
for s in a: print s

甚至 Laurent Vogel 用 Thue 語言寫了一個 Quine 的程式,有興趣的讀者可以到他的網站下載程式,好好研究一下︰

_x00::=2210001112000100020120000112200210220120211220221000110×01
>0::=0>~00
_2::=_~2
_x01::=22100021120011001201200011112020200101222011220221000210×02
>1::=1>~01
~220::=~_
_x02::=221010011200210022012000211012110210111220221010010×10
>2::=2>~02
1<::=<1
_x10::=221010111022110210211221211022120220112200010220120011220221010110×11
2<::=<2
x<::=x>_
_0::=_~0
_x11::=221010211220011022012011100211021001112000010120011220221010210×12
_1::=_~1
0<::=<0
~00::=~0
_x12::=221020011120001101201111200021012021112010010121011220221020010×20
~01::=~1
~02::=~2
~10::=~::=
_x20::=2210201111201011012111201021012121112020010122011220221020110×21
~11::=~
~12::=~~
~20::=~>
_x21::=2210202112022110212211112020110122111220221020210×22
>x::=<x
~21::=~<
_x22::=2211112020201101222111101122120220020200020201000000000100221000011x
~221::=~x
::=
x>_220221000010x00

Fixed_point_example.svg

250px-Cosine_fixed_point.svg

這個『自我再現』和『定點』fixed point 的概念是息息相關的,在此從數學的角度上來講,假使有一個數值函數 f(x) ,那它的定點的定義是︰

f(x) = x

,假使有一個滿足這個方程式的數值 p,從定義可知 p = f(p) =  f(f(p)) = f(\dots f(p)\dots),由此可知在『迭代』或『遞迴』計算的『終止條件』考慮上十分的重要,它在不同的領域裡有多個『定理』以及很多的『應用』。

一九三九年美國的道德哲學家 William K. Frankena 於英國分析哲學雜誌《心靈》上批評 George Edward Moore 的『自然主義誤謬』── 』不能用『自然性質』定義 ──,太過『狹隘』,甚至引發了一些人使用『非同義詞』non-synonymous 去定義『』。福蘭肯納認為自然主義者之謬誤根本是『用詞不當』misnomer 的『錯誤』︰他們刻意的將『』定義為所有『自然』的特質,而且『拒絕』把任何『不自然』的東西定義為『── 其實是一種『定義家誤謬』 definist fallacy 。

現今所謂的『定義家謬誤』有三種︰

其一、一定要將『此』特質定義為『彼』語詞

如前所言。

其二、堅持使用具有『說服性』的定義

語詞有所謂的『字典定義』,這是語詞的一般意義來源以及語詞的正確用法。時間的變遷與知識之進展,都可能發現『語詞』定義『恰不恰當』或者『是非對錯』的問題。然而『語詞的使用』常常又有『一時』或『一群人』的『約定意義』,就語言的『溝通目的』而言無可厚非。假使有人『議論』時,堅持『某字』或『某詞』一定要回歸『某本字典』或『某人所說』的『意思』大概這樣的議論結果是『沒意思』的吧!

其三、詞語使用前請先定義

有人將這種誤謬稱之為『蘇格拉底誤謬』,在柏拉圖寫的『對話錄』中,蘇格拉底總要求『對話者』對『語詞』下『定義』,試圖『釐清』一般語詞的『含混』詞意或者『歧義』用法,也許這不該算是此類的吧!這裡是講有人在『詞意清晰』的語境裡,依然堅持非要求個『明白的定義』不可,或許最終只能先要他把『『定義』之『定義』先給個清楚的『定義』』了吧!!

如此看來『堅持之堅持』與『定義之定義』,如此種種『□○之□○』是思想上的『僵固點』,人果真是『擇善固執』的嗎??

之前在《測不準原理》一文中,我們談過了揚‧武卡謝維奇的『逆波蘭表示法』,於此我們就利用這種表示法的運算並不需要使用括號的特性,寫一個  Thue 的『非、且、或、則』之邏輯符號的真假表達式之求值演算法︰

P 非  ︰P 的否定,
P Q 且︰PQ 的連言,
P Q 或︰PQ 的選言,
P Q 則︰若 PQ 的斷言。

在程式中『 』是使用者輸入的真假表達式,『』用以顯示單步逆波蘭表示法之堆疊推導進行點,『』表示逆波蘭表示法推導結束處,『』告知使用者推導結束。此時如果只剩下『』或『』表示推導正確完成,否則就是說表達式有錯誤。

───  程式起始 ───

真》非::=假》
假》非::=真》
真真》且::=真》
假真》且::=假》
真假》且::=假》
假假》且::=假》
真真》或::=真》
假真》或::=真》
真假》或::=真》
假假》或::=假》
真真》則::=真》
假真》則::=真》
真假》則::=假》
假假》則::=真》
》真::=真》
》假::=假》
》。::=~!
□::=:::
::=
》□。

─── 程式結束 ───

測試輸入︰

□ = 真非真且假非假或則;真
□ = 真真假假則則非則;假
□ = 假假真真則則且非;真
□ = 假假真真且非;假假假

 

─── 讀別人寫作的程式,動手寫自己的程式,

嘗試發現裡面之錯誤,理解其中關鍵之要點,

恰是自我再現的程式之路 ───

在〈自我再現 ── Thue 改寫系統之補充《三》〉中有 1 則留言

留言功能已關閉。