邏輯編程

邏輯編程

邏輯編程是種編程典範,它設定答案須符合的規則來解決問題,而非設定步驟來解決問題。過程是事實+規則=結果。

基本介紹

  • 中文名:邏輯編程
  • 外文名:Logic programming
  • 類型邏輯編程是種編程典範
  • 過程:事實+規則=結果。
  • 不同的方法:看Inductive logic programming
  • 語言:Prolog、Mercury等
要點,歷史,邏輯程式語言,特點,

要點

邏輯編程的要點是將正規的邏輯風格帶入電腦程式設計之中。數學家和哲學家發現邏輯是有效的理論分析工具。很多問題可以自然地表示成一個理論。說需要解答一個問題,通常與解答一個新的假設是否跟現有的理論無衝突等價。邏輯提供了一個證明問題是真還是假的方法。創建證明的方法是人所皆知的,故邏輯是解答問題的可靠方法。邏輯編程系統則自動化了這個程式。人工智慧在邏輯編程的發展中發揮了重要的影響。
猴子和香蕉問題是邏輯編程社區的著名問題。電腦須自行找出令猴子接觸香蕉的可行方法,取代程式設計師指定猴子接觸香蕉的路徑和方法。邏輯編程創建了描述一個問題里的世界的邏輯模型。邏輯編程的目標是對它的模型創建新的陳述。世界上知識不斷膨脹。傳統來說,我們會將一個問題陳述成單一的假設。邏輯編程的程式通過證明這個假設在模型里是否為真來解決問題。
一些經常用到邏輯編程工具的範疇:專家系統,程式從一個巨大的模型中產生一個建議或答案。自動化證明定理,程式產生一些新定理來擴充現有的理論。最常用的邏輯程式語言是Prolog,另外有較適用於大型方案的Mercury。

歷史

早在二十世紀七十年代,羅伯特·科瓦爾斯基等人提出了邏輯可以作為程式設計語言的基本思想,把邏輯和程式這兩個截然不同的概念協調統一為一個概念,於是誕生了邏輯程式設計。這也是早期自動定理證明和人工智慧發展的自然結果。隨後,邏輯程式設計得到了迅速發展,特別是基於一階謂詞的邏輯程式設計語言,將邏輯推理對應於計算,具有豐富的表達能力、非確定性等特點,在定理機器證明、關係資料庫系統、程式驗證、模組化程式設計和非單調推理等都有了廣泛的套用。

邏輯程式語言

Prolog以處理一階謂詞演算為背景,由於其簡單的文法、豐富的表達力和獨特的非過程語言的特點,很適合用來表示人類的思維和推理規則,從而一問世就贏得了人工智慧研究和套用開發者的廣泛興趣。尤其在西歐和日本,Prolog語言已推廣套用於許多套用領域,如關係資料庫、數理邏輯、抽象問題求解、自然語言理解和專家系統等。日本還在其於1979年提出的第五代計算機研究計畫中把Prolog列為核心語言。
Prolog實際上就是一種基於逆向規則的演繹推理技術,只不過對規則和目標的表示有嚴格的限制.再加上演繹推理控制機制自身的簡單性,難以適用於複雜的套用域。
Prolog語言的基本成分是Horn子句,表示為如下形式:∧ ∧ ∧ p;Prolog語言中,Horn子句以3種形式去分別表示逆向演繹推理中問題求解描述的3個部分:目標、規則和事實。目標表示為只有左部的Horn子句:∧ ∧ ∧ ;即在Prolog語言中,目標公式只限於表示為原子公式的合取,而不能是任意的文字與或形。規則表示為典型的Horn子句:∧ ∧ ∧ p這就是逆向演繹推理所使用的規範化B規則,只是規則左部限定為原子公式的合取,而非任意文字與或形。事實表示為事實元素的集合,每個事實元素表示為只有右部的Horn子句,即單一原子公式P。事實元素間隱含合取關係。只要用Prolog語言表示問題描述的這3個部分,支持Prolog語句的推理機制就會自動執行基於規則的逆向演繹推理,並最終給出解答。由於目標和規則的左部都限定為原子公式的合取,而這些原子公式又可激活多條規則(這些規則間隱含或關係)。所以,Prolog演繹推理過程建立的與或圖具有與、或關係呈現逐層交替的局面。隨著與或圖的向下擴展,最終會形成(搜尋到)一致解圖,從而演繹推理成功;否則推理失敗。把目標中包含的各原子公式視為子目標,每當由子目標激活的規則插入與或圖時,規則左部的各原子公式又成為新的子目標,再用於激活新的規則;如此,隨著規則的激活和新子目標的產生,與或圖逐步擴展,直到子目標直接與事實元素(原子公式)匹配為止。

特點

Prolog語言的語法結構相當簡單,但描述能力很強。例如,當事實和規則描述的是某一學科公理。那么問題就是待證的命題;當事實和規則描述的是某些數據和關係,那么問題就是數據查詢語句;當事實和規則描述的是某些狀態變化規律,那么問題就是目標狀態。因此,Prolog語言是一種智慧型型程式設計語言。
Prolog程式沒有特定的運行順序,程式運行順序完全按照數理邏輯推導(消解法)的方式進行.而不是由編程式的人決定。Prolog是一種描述型語言,用特定的方法描述一個問題,然後由計算機自動找到這個問題的答案。舉個極端的例子:當建立好事實和規則後,只需要把某個問題告訴它,它就會自動查找答案。
Prolog程式中沒有if、case、for這樣的控制流程語句。通常情況下,程式設計師不需要了解程式的運行過程,只需要注重程式的描述是否全面。不過Prolog也提供了一些控制程式流程的方法,這些方法和其他語言中的方法有很大區別。

相關詞條

熱門詞條

聯絡我們