從傳統邏輯到經典數理邏輯,形式邏輯的發展始終與科學和哲學的發展相伴。當今,從科學發展的角度來看,一方面,經典數理邏輯的概念、理論和方法,不僅在程序設計語言的研究中獲得了完全的認同,而且在計算機軟硬件設計和實現技術方面起到了原則性的指導作用。另一方面,計算機科學技術經過了六十多年發展所積淀的知識,蘊涵著經典數理邏輯所不能涵蓋的內容,這些內容需要我們在繼承經典數理邏輯現有成果的基礎上,通過引入新的概念、原理、演算和方法,來發展數理邏輯。
從哲學發展的角度來看,唯物辯證法一經出現,就始終指向一條通向未來的道路,代表著既不忘記過去,又向一切新的和具有挑戰意義的事物開放的進取精神。辯證唯物主義者認為,邏輯不是關于思維的外在形式的學說,而是一切物質的、自然的和精神的事物的發展規律的學說,即關于世界全部具體內容及對它的認識的發展規律的學說;不僅哲學,而且一切科學,現在都必須在自己的特殊領域內揭示這個發展規律。它取消了形而上學者所附加給形式邏輯的規律的絕對意義[1],同時又呼喚著形式邏輯出現相應的成就。讀了李未院士的專著《數理邏輯》,我感覺仿佛在驚濤駭浪中長期漂泊之后的船夫看到陸地,又感覺仿佛有一只巨手在運筆揮毫,使在信息時代的急劇變化中變得模糊的世界圖景忽然色彩分明、輪廓清晰起來。
一
從內容介紹來看,李未院士的《數理邏輯》一書(以下簡稱《數》)共分十章,前五章是經典數理邏輯部分,它涵蓋了經典數理邏輯的核心內容,后五章是作者的創新部分,稱為一階語言的公理化進程理論。兩部分合在一起,總稱為一階語言的理論框架。而我的感覺是,《數》的創新從第一部分就已拉開序幕。
《數》的開篇便顯示出氣魄非凡。以往的數理邏輯書大都強調只研究推理的形式,不關心推理的內容,只研究前提的真是否蘊涵結論的真,不研究前提和結論的真或假。這使得數理邏輯在絕大多數人看來是一片“純乎其純”的研究領地。而《數》一開始就直指急劇變化的計算機科學研究領域。這本書不僅要用抽象代數、數論等數學理論解釋數理邏輯的概念、理論和方法,還要用計算機、程序設計語言和軟件的實踐來解釋它們,要將數理邏輯的概念、理論和方法與計算機、程序設計語言和軟件的研究及發展聯系起來。要將計算機科學、人工智能和計算機軟硬件技術經過六十多年發展所積淀下來的、經典數理邏輯所不能涵蓋的概念、理論和方法抽象和總結出來,進而豐富和充實經典數理邏輯的內容,以便對信息科學和技術的發展起到理論上的指導作用。為此,《數》把軟件系統的版本這個反映軟件系統進化的概念和隨之而來的版本序列這個記錄一個軟件系統進化過程和變化趨勢的概念作為基本概念,認為數理邏輯要發展,就應該將形式理論的版本和版本序列作為新的研究對象。同時把軟件測試問題、軟件開發方法問題和元語言環境問題也作為研究的基本問題。
《數》把形式理論系統的模本由最初的幾何學擴展到計算機這個急劇變化的、每時每刻都在影響和改變著每一個人生活的科學領域。
二
恩格斯指出:“思維規律的理論決不像庸人的頭腦關于‘邏輯’一詞所想象的那樣,是一成不變的‘永恒真理’。形式邏輯本身從亞里士多德直到今天都是一個激烈爭論的場所。而辯證法直到現在還只被亞里士多德和黑格爾這兩個思想家比較精密地研究過。”[2]毛澤東強調,形式邏輯與辯證邏輯之間沒有低級、高級之分。[3]它們都是關于思維及其規律的學說。而自然科學發展本身的辯證性質和相應的辯證邏輯取得的成就,要求形式邏輯應該有新的與之相適應的內容和形式。今天,《數》給我們看到了形式邏輯的這種發展,可以說,它使辯證邏輯得到形式化描述,與辯證邏輯達到高度的統一。
1.對于每一個研究領域而言,公理化程度是評價該研究領域是否已經程序化的標準。馬克思曾指出:“在形式上,敘述方法必須與研究方法不同。研究必須充分占有材料,分析它的各種發展形式,探尋這些形式的內在聯系。只有這項工作完成以后,現實的運動才能適當的敘述出來。這一點一旦做到,材料的生命一旦觀念地反映出來,呈現在我們面前的就好像是一個先驗的結構了。”[4]這個先驗的結構就是公理系統。
正如《數》中所說:“公理化方法的使用是有條件的。只有在關于領域知識的研究已經相當成熟的條件下,即通過大量的實驗和觀測,積累了豐富的數據,而這些數據與研究者提出的基本概念一致,并支持公理系統對領域知識結構的描述,公理化方法的優越性才能充分體現出來。” [5]
《數》一開始就指出,領域知識的核心部分是公理系統,而一階語言是描述公理系統的語言。
但是公理化方法是有局限性的,對一個領域知識,不存在一個公理系統,使得關于此領域知識的任何一個命題或該命題的否定,必是這個公理系統的邏輯結論。也就是說,我們不可能一次抓住領域知識的全部本質特征。辯證邏輯認為:“真理是包含在認識過程中,包含在科學的長期的歷史發展中,而科學從認識的較低階段上升到較高階段,愈升愈高,但是永遠不能通過所謂絕對真理的發現而達到這樣一點,在這一點上它再也不能前進一步,除了袖手一旁驚愕地望著這個已經獲得的絕對真理出神,就再也無事可做了。這不僅在哲學認識的領域中是如此,就是在任何其他的認識領域中以及在實踐行動的領域中也是如此。”[6]辯證邏輯不過是對包含著一連串互相銜接的階段的那種發展過程的闡明。
《數》也明確指出,每一個數學和自然科學理論的形成都不是畢其功于一役的,而是一個進化過程,與其說經典數理邏輯是以公理系統為研究對象,不如說它是以公理系統的一個階段版本為研究對象更為準確。在這個過程中,人們創造出一個又一個理論或理論的新版本,這些理論形成了一個版本序列,而該版本序列逐步逼近領域知識的真理。
《數》中舉例,Windows的每一個版本都是由程序語句組成的集合,是一個形式系統,而它的‘規約’,有些書中也稱‘需求說明’,則是一個一階形式理論。雖然此形式理論可能非常巨大而復雜,但是站在軟件規約的抽象層面上來觀察這些版本的產生,那么這些規約所組成的序列就是一個形式理論的序列,而理想的Windows系統的規約就是這一個形式理論序列的極限。
現在需要對科學理論的進化過程中形成的版本序列進行整體的研究,這個研究方法需要形式化描述,以便把專家在公理化進程中,憑直觀和經驗所做的智力活動轉化為符號演算,使研究能夠深入的進行。這是數理邏輯發展到現階段應該解決的問題。《數》在“形式理論序列”一章引入了形式理論序列的新概念,它是研究領域知識進化過程不可缺少的。每一種數學和自然科學理論,在其發展的各個歷史時期的版本都組成科學理論序列。形式理論的版本序列是這些科學理論序列在一階語言中的抽象表達形式,而科學理論序列是形式理論序列在不同模型中的解釋。
2.在辯證邏輯看來,“一切發展,不管其內容如何,都可以看作一系列不同的發展階段,它們以一個否定另一個的方式彼此聯系著。”[7]
《數》的“事實反駁與修正演算”一章,從領域知識的公理化進程的角度,具體為我們描述出這種“一個否定另一個的”發展過程:一方面,公理系統的每一個階段性版本總是不完善的,隨時可能有新的公理、原理或定律提出。從公理系統的抽象層面上看,我們稱這些新公理、定律和功能為新猜想。當新猜想出現時,公理系統的當前版本必須進行擴充,以產生新版本。另一方面,公理系統可能包含與觀測或試驗結果不一致的邏輯推論,即這個推論受到觀測或試驗結果的反駁,這時公理系統必須改變,必須放棄此公理系統的當前版本中與觀測或試驗結果相矛盾的公理,保留那些與觀測或試驗結果一致的公理。不僅如此,作為創新,《數》使用一階語言及其模型的有關概念來描述如何對公理系統進行擴充和修正,建立對形式理論的修正演算系統,這個演算系統稱為R演算。該演算由四組規則組成,它們是R公理、R邏輯連接詞符號規則、R量詞符號規則和R刪除規則。同時,通過一些典型實例說明R演算的使用方法,并且證明了R演算的可靠性、完全性和可達性。
3.在科學研究活動中,研究者總是自覺或不自覺地在某種研究模式的指導下進行他們的學術工作。研究模式通常告訴人們科學研究的流程和每一個階段的工作內容,它是一種研究工作綱領。研究模式的好壞決定了科學研究的質量。正如科學家不論愿意還是不愿意,都接受某種哲學的支配,好的哲學,即辯證邏輯可以幫助科學家少走很多彎路一樣。
而研究模式不是思維著的悟性的產物,而是實踐的概括和總結。《數》的“版本序列和過程模式”一章不僅引入了一個OPEN過程模式——從科學研究方法中總結出來的一個基本工作流程,而且還提出了一個理想的過程模式應該具有的性質:收斂性、極限運算與形式推理的可交換性以及保持版本的極小性。
4.直到今天,歸納與演繹之爭從未停止過。歸納派攻擊演繹不能提供新知,是重復性思維,且推理的前提需要歸納提供;而演繹派則指責歸納的結論是或然的、不可靠的。
但是在唯物辯證法看來,“歸納和演繹正如分析和綜合一樣是必然相互聯系著的。我們不應當在兩者之中犧牲一個而把另一個高高地抬上天去,我們應當力求在其恰當的地位來應用它們中間任何一個,而要想做到這一點,就只有注意它們的相互聯系,它們的相互補充。”[8]
《數》的“歸納推理和歸納進程”一章給出了這種“相互聯系、相互補充”的形式描述。發現新猜想是改變公理系統、擴充公理系統和實現知識進化的主要手段。而新猜想的形成是一個復雜的過程,要把猜想的形成變為符號演算,猜想就必須是理想的猜想。歸納是一種理想的猜想,是從個別事例到普遍規律的過渡。該章引入一個歸納推理系統,使得從公理化進程的觀點來看,對任何科學問題,如果從任意猜想出發,對所有事例,使用該歸納推理系統生成的任意版本序列,都收斂到該科學問題的全部一般性規律。
5.公理化方法的優點是將對領域知識中命題的邏輯分析,轉變為嚴格的推理,即對定理的數學證明。可是,這就帶來一個問題:一方面,科學本質上是整理材料的科學,是關于過程、關于事物的發生和發展以及關于把這些過程結合為一個偉大整體的聯系的科學,因此科學家必須是一個嚴謹的邏輯推理者。另一方面,嚴謹的推理,即數學證明,特別是難題的證明,并不是容易的事,需要有把握全局的證明策略和純熟的證明技巧。這是一個矛盾。辯證邏輯要大眾化,哲學和科學要發展,就必須解決這個矛盾。
《數》的一階語言的理論框架為解決這個矛盾奠定了理論基礎:一旦將領域知識中的命題轉變為語句,有關定理的數學證明都將轉變為程序化的符號演算過程,并可以通過使用人機交互軟件工具完成。這就使得數學和自然科學的研究重點轉向了公理系統的建立、其協調性的證明以及有效軟件工具的實現等問題。辯證邏輯和形式邏輯將攜手共進,實現推理自動化,即腦力勞動自動化。
要知道,我國科學研究中的學風問題讓很多人痛心,一方面大量的具體科學特別是自然科學的最新成果得不到唯物辯證法的科學概括而聽任唯心主義和形而上學泛濫,另一方面又由于唯物辯證法不能及時吸取具體科學的思想營養而難免變成枯槁的教條。”[9] 那么,《數》所蘊涵的辯證唯物主義精神對我們是多么大的震撼和鼓舞啊!
三
有一條主線貫串《數》的始終,這就是三個語言環境的概念。我認為這是對顛覆了集哲學之大成的黑格爾哲學的馬克思主義實踐本體論的形式化描述。
恩格斯曾在批判主客二分的思維模式時指出:“自然科學和哲學一樣,直到今天還完全忽視人的活動對人的思維的影響,它們一方面只知道自然界,另一方面又只知道思想。”[8]這種思維模式產生了關于“實體”和“自我意識”的無數“神秘莫測”的精神創造物。
為了徹底瓦解主客二分的思維模式,馬克思重新闡述了主體與客體,或者說人與自然界的關系。馬克思指出,人的存在不是孤立的,無對的絕對存在,而是對象性的存在,即他的肉體生活與精神生活都同自然界相聯系,而且這個聯系不是暫時的而是不斷的,不是一個片斷,而是一個源源不斷綿延不絕的過程,人和自然界是這一個過程的兩個方面。[10] 這個過程是自然界對人說來的生成過程,也是人通過人的勞動而誕生的過程。由此我們不難理解唯物辯證法的如下觀點:“思維本身的要素,思想的生命表現的要素,即語言,是感性的自然界。” [11]“人在怎樣的程度上學會改變自然界,人的智力就在怎樣的程度上發展起來。” [8]
哪里有學術研究,哪里就會出現對象語言和元語言的問題。“元語言必須有足夠的能力容納和表述對象語言,否則我們無法用元語言對對象語言做出說明和解釋。”[12]可是元語言如何具有這種能力呢?其實元語言與對象語言的關系就是人與自然的關系,《數》的三個語言環境的概念為我們嚴謹地描述了它們的關系。“元語言要把一階語言即對象語言中的符號和語法對象解釋清楚,需要兩個要素:一是需要把元語言中的特定的領域知識作為解釋的載體,這個載體稱為論域;二是需要一種確定的解釋方法,把一階語言的符號和對象解釋為論域中相應的元素。元語言提供的論域和解釋方法構成了一階語言的模型。” [5]一階語言及其模型和元語言環境是人們對領域知識進行分析和推理的三個語言環境,而且三者缺一不可[5]。
而元語言和對象語言又是相對的,它們具有多重性:“一般說來,一個語言在它作為對象語言時,它的符號和語法對象所取得的準確性和已被人們證明的結論,在它作為元語言時,就可以用來解釋和說明相應對象語言的符號和語法對象,并用來證明該對象語言中不同語法對象之間的關系。這是人類從事科學研究的基本方法。” [5]
例如,C、C++和Java是程序語言發展中的版本序列。如果把C++視為對象語言,那么從C++程序集合到C程序集合的一個解釋映射(記做IC++)和C程序集合就構成C++的一個模型,而C語言就構成了C++語言和它的模型的元語言;如果把Java視為對象語言,那么從Java程序集合到C++程序集合的一個解釋映射(記做IJ)和C++程序集合就構成Java的一個模型,而C++語言就構成了Java語言和它的模型的元語言。
從實踐本體論來看,C、C++和Java依次作為對象語言時,是自然界在人的實踐活動中的生成;依次作為元語言時,是思維本身的要素,思想的生命表現的要素,因此是人在實踐活動中的生成。
“把對象語言和元語言加以區別,把對象語言和論域以及解釋方法加以區分,并用數學的方法加以精確地定義和研究,是人類在關于知識的一般理論方面的一個重大進步。”[5]在三個語言環境中,命題的多義性和歧義性才能被消除,邏輯連接詞推理規則和量詞推理規則的“可靠性”和“完全性”才能被嚴格地定義和證明,關于公理系統的協調性、完全性、可判斷性和獨立性等性質才能被嚴格地描述。
三個語言環境的概念和方法對我們的程序語言教學具有深刻指導意義。我們面臨的問題是,課程分散,重點不突出,低水平重復嚴重,占用課時多。為了解決這個問題,很多學校都選擇了C++作為主要學習的程序語言,但是,C++的概念龐雜,難以理解,不容易深入。同時,C++新標準的出現,string串類、順序容器和關聯容器(例如vector、list、map和set),以及在這些類型上進行操作的一組可擴展的泛型算法,都屬于C++新標準的特性。這使C++和數據結構的學習順序發生矛盾:數據結構的先修課是C++,而C++的新特性中包含數據結構,它們互為前提。
按照《數》的版本序列和三個語言環境的概念和方法,應該把C作為C++的元語言,這時C++的概念就可以用C程序嚴格地描述,避免C++解釋中的歧義性和模糊性,有利于理解,而且C++也就不必從開頭講起,我們可以直接講授C++相對C的修正和補充部分,有利于深入。另外,C++和數據結構互為前提,說明它們是一個整體,這樣,C作為元語言也應該包含數據結構的內容。
以唯物辯證法為指南,我們進行了8年的課程改革。具體做法是:先用C語言描述數據結構的順序表、結構串和鏈表,然后將它們轉化為C++代碼,使每一個C++概念都可以用C代碼嚴格描述其產生過程,每一個C++程序都可以用一個對應的C程序嚴格解釋。唯物辯證法告訴我們,抓住了矛盾,事物發展過程中的相互連接的、一個否定另一個的階段就容易看出來了。而程序語言設計中的基本矛盾是存儲和處理,“數據結構+算法=程序”就是這層意思。縱觀短暫的計算機發展史,這兩個方面一直保持不變。發展演化的是它們之間的關系,就是所謂的程序設計方法。[13]
《數》的三個語言環境的概念和方法不僅給予了我們鼓舞和信心,而且使我們具體知道如何改進將會更好。我們正在進行Java課程的改革,目的是使C、C++和Java形成一個有規律的發展序列,我們將按照版本序列和三個語言環境的概念和方法去做。
辯證法是馬克思哲學的活的靈魂。然而,我們對辯證法的理解和運用卻往往流于空洞的形式,以至辯證法被很多人看作是“詭辯的工具”,可以套用在任何論題上的“標簽”。回顧歷史,黑格爾辯證法曾因為其神秘而難以實際運用的形式,被人們連同其合理的內容一起拋掉了,結果人們又無可奈何地回到舊的思維模式中。今天,唯物辯證法如果不能從具體科學內部發現,并且從其內部闡發,在很多人的心中可能也處于這種尷尬的地位。
《數》的一階語言的理論框架在計算機科學內部,賦予辯證法系統的內容和嚴格的形式。
在三個語言環境中,借助程序設計語言中的指針的思想,《數》以簡單、直觀,能夠被更多的人理解的方式證明了歌德爾不完全定理,這個定理的內容就是公理化方法的局限性。傳統形而上學的總體特征有一條是本質預設,它認為,世界上所有的事物有一個最高的本質,它是本原,是萬事萬物的最終根據,是因果鏈條的最初開端。其實,這個本質不過是思維的先驗預設。“形而上學就是超出存在者之上的追問,以求返回來對這樣的存在者整體獲得理解。” [14]可以說,《數》以計算機實踐經驗為基礎,為辯證法嚴格地證明了這個傳統形而上學的反命題。
自十九世紀末葉,現代自然科學經歷著急劇的變革,大大小小的哲學學派和流派不斷出現,自然科學的許多大革新家的學說被人歪曲和利用,其中包括愛因斯坦的學說。
而《數》的新公理、事實反駁、形式理論的修正、形式理論序列等新概念,可以用來嚴格描述物理學從伽利略時代的物理學到愛因斯坦相對論的進化過程的四個階段。把人們對專家憑直觀和經驗所做的智力活動的崇拜,轉變為對一階語言層面上的嚴格地描述和證明的信賴。
不僅如此,事實反駁、修正演算、版本序列及其極限和過程模式的引入,使在公理系統的形成過程中所設計的問題和人們所使用的“研究方法”或“開發策略”得以在一階語言層面上加以嚴格地描述和證明。
唯物辯證法是科學的辯證法,必須與自然科學結合才能發揮其生命力和戰斗性,而只有從自然科學內部找出辯證法的規律并從自然科學里加以闡發,才是辯證法與自然科學的結合。《數》在這個意義上豐富了唯物辯證法的科學內涵。
四
西方科學的發展以兩個偉大的成就為基礎,一個是形式推理系統即數理邏輯,另一個是實驗科學。數理邏輯沒有產生于中國,很多人因此而遺憾,中國傳統文化的特質與數理邏輯的真諦南轅北轍、圓鑿方枘,很多人為之而傷感,他們甚至懷疑我們民族的創新能力。
今天,數理邏輯的創新出現在中國大地上,而且它將形式理論系統的模本由幾何學擴展到帶有實驗特點的計算機科學領域,使人們結合日常的計算機操作實踐更容易理解和把握數理邏輯的概念和方法。
與十九世紀末葉相比,自然科學的變革更加急劇,各種哲學學派和流派更加龐雜,我們必須懂得,任何自然科學,如果沒有充分可靠的唯物辯證法論據,是無法對各種貌似科學的思想的侵襲和改裝的舊世界觀的復辟進行斗爭的。[15]
“普通的豎琴在任何人的手里都能發出聲音;風神的豎琴卻只是當風暴敲擊它的琴弦時才發出聲音。” [16] 在飛速發展、急劇變化的信息時代,在各種觀點交匯、甚至有些嘈雜和浮躁的計算機科學和教育領域,在進步和倒退、改革和保守的對立、沖突、斗爭中,李未院士的《數理邏輯》一書發出了鼓舞信心、引航心靈的鳴響。
參考文獻:
[1] 普列漢諾夫哲學著作選集(第3卷)[M].北京:三聯書店,1982.37.
[2] 馬克思恩格斯選集(第三卷)[M].北京:人民出版社,1975. 465.
[3] 諸葛,殷同.再議辯證邏輯[J].哲學動態,1992.(4).34.
[4] 馬克思恩格斯選集(第二卷)[M].北京:人民出版社,1996.112.
[5] 李未.數理邏輯[M].北京:科學出版社,2008.215, 21,206,20,22.
[6] 馬克思恩格斯選集(第四卷)[M].北京:人民出版社,1975. 212.
[7] 高哲,溫元等.馬克思恩格斯要論精選[M].北京:中央編譯出版社,2000.68.
[8] 馬克思恩格斯選集(第四卷)[M].北京:人民出版社,1996.335,329,329.
[9] 楊煥章.談談哲學研究中的學風問題[J].新華文摘,1997,(10).
[10] 張偉著.走向現實的美學[M].北京:人民出版社,2004.60.
[11] 馬克思著.1844年經濟學哲學手稿[M]. 北京:人民出版社,2000.90.
[12] 王路.邏輯真理是可錯的嗎?[J] .哲學研究,2007(10) .
[13] Stanley B.Lippman著.潘愛民,張麗譯.C++ Primer第三版 中文版[M].北京:中國電力出版社,2004.1.
[14] 海德格爾.海德格爾選集(上卷)[M].上海:上海三聯書店,1996.149.
[15] 列寧選集(第四卷)[M].北京:人民出版社,1974.608.
[16] 肖灼基.馬克思青年時代[M].河南:河南人民出版社,1982.131.