• 約束邏輯編程

    編輯
    本詞條由“匿名用戶” 建檔。

    約束邏輯編程

    編輯

    約束邏輯編程是約束編程的一種形式,其中邏輯編程被擴展到包括約束滿足的概念。約束邏輯程序是一個邏輯程序,它在子句的主體中包含約束。如同在常規邏輯編程中一樣,程序被查詢到一個目標的可證明性,該目標除了字面意思外還可能包含約束條件。一個目標的證明是由子句組成的,子句的主體是可滿足的約束和字詞,而這些約束和字詞又可以用其他子句來證明。執行是由解釋器進行的,它從目標開始,遞歸地掃描試圖證明目標的子句。在這個掃描過程中遇到的約束被放在一個叫做約束存儲的集合中。如果這個集合被發現是不可滿足的,解釋器就會回溯,嘗試使用其他條款來證明目標。在實踐中,約束存儲的可滿足性可以用一個不完全的算法來檢查,該算法并不總是能發現不一致的地方。

    約束邏輯編程的概述

    編輯

    從形式上看,約束邏輯程序與常規的邏輯程序一樣,但是除了常規的邏輯編程字詞之外,子句的主體還可以包含約束。像常規邏輯編程一樣,這又需要證明目標B(X,1)。與常規邏輯編程相反,這也需要滿足一個約束條件。X>0,最后一個子句中的約束(在常規邏輯編程中,X>0不能被證明,除非X被綁定到一個完全接地的項上,如果不是這樣,程序的執行將失敗)。一個約束是否被滿足并不總是在遇到該約束時就能確定。例如,在這種情況下,當最后一個子句被評估時,X的值就不能確定。因此,在這一點上,X>0的約束沒有被滿足,也沒有被違反。解釋器不是在評價B(X,1)時繼續進行,然后檢查X的結果值是否為正值,而是存儲約束X>0,然后在評價B(X,1)時繼續進行;這樣,解釋器可以在評價B(X,1)時發現對約束X>0的違反,如果是這種情況,可以立即進行回溯,而不是等待B(X,1)的評價結束。

    邏輯編程

    一般來說,約束邏輯程序的評估和普通邏輯程序一樣進行。然而,在評估過程中遇到的約束被放在一個叫做約束存儲的集合中。例如,對目標A(X,1)的評價是通過評價xxx個子句的主體Y=1來進行的;這種評價將X>0添加到約束存儲中,并要求目標B(X,1)被證明。在試圖證明這個目標時,xxx個子句被應用,但是它的評價將X<0添加到約束存儲中。這個添加使得約束存儲不可滿足。解釋器然后回溯,從約束存儲中刪除最后的添加。第二個子句的評估將X=1和Y>0添加到約束庫中。由于約束存儲是可滿足的,并且沒有其他的字詞需要證明,解釋器以解決方案X=1,Y=1而停止。

    約束邏輯編程的語義

    編輯

    約束邏輯程序的語義可以用一個虛擬解釋器來定義,該解釋器維護一對在執行過程中。這一對中的xxx個元素被稱為當前目標;第二個元素被稱為約束存儲。當前目標包含解釋器試圖證明的字詞,也可能包含它試圖滿足的一些約束;約束存儲包含解釋器到目前為止假設可滿足的所有約束。最初,當前的目標是目標,約束存儲是空的。解釋器通過從當前目標中移除xxx個元素并對其進行分析來開展工作。這個分析的細節將在下面解釋,但最后這個分析可能產生一個成功的終止或失敗。這個分析可能涉及到遞歸調用和向當前目標添加新的字詞以及向約束存儲添加新的約束。

    內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/170948/

    (4)
    詞條目錄
    1. 約束邏輯編程
    2. 約束邏輯編程的概述
    3. 約束邏輯編程的語義

    輕觸這里

    關閉目錄

    目錄
    91麻精品国产91久久久久