2013-08-30 34 views
-1

房地用java('至7點,讓我們假裝他們都是真實的或合理的或相關的,請)在表語邏輯方式

(1)Java是免費的,有秋千和JavaFX等

(2)關於Java的有很多文檔,教程等

(3)我想用它來還挺本體 - 一階邏輯推理

(4)我知道門生但這還不夠

(5)讓我請使用一個例子:

  1. 謂詞邏輯語言。域和功能

    includedAsSubset(Orange, Fruit); 
    
    includedAsSubset(Apple, Fruit); 
    
    includedAsSubset(Color, Thing); 
    
    includedAsSubset(Fruit, Thing); 
    
    isRed: Fruit -> Boolean; 
    
    isYellow: Fruit -> Boolean; 
    
    hasColor: Fruit -> Color; 
    
        **Facts**       
    
    isIn(thisOrange, Orange); 
    
    not(isRed(thisOrange)); 
    
    isIn(thisApple, Apple); 
    
    • 讓我們假設,我們在聲明語言

      公理或類似談論水果

僞代碼=「2」>

  • 翻譯在Java代碼
  • 我會使用接口爲 「A延伸B,C」

    public interface Fruit { 
        Boolean isRed(); 
        Boolean isYellow(); 
        Color hasColor(); 
    } 
    
    public interface Orange extends Fruit {}; 
    
    public interface Apple extends Fruit {}; 
    
    public class ConcreteApple implements Apple { 
    
        Color thisAppleColor; 
        static ArrayList<Color> concreteApplesColours = new ArrayList<Color>(); 
    
        ConcreteApple(Color color) { 
         Color red = new Color(); 
         concreteApplesColours.add(red); 
         Color yellow = new Color(); 
         concreteApplesColours.add(yellow); 
    
         setThisAppleColor(color); // try catch should be added to check for the color... 
        } 
    
        @Override 
        Boolean isRed() { 
         return new Boolean(this.getThisAppleColor().equals(red)); 
        } 
        @Override 
        Boolean isYellow() { 
         return new Boolean(this.getThisAppleColor().equals(yellow)); 
        } 
        @Override 
        Color hasColor() { 
         return this.getThisAppleColor(); 
        } 
    } 
    
    public class Reasoner { 
        static void main() { 
         Color orange = new Color(); 
         Color Yellow = new Color(); 
         Orange thisOrange = new ConcreteOrange(orange); 
         Apple thisApple = new ConcreteApple(yellow); 
         if(thisApple.isRed() && thisOrange.isRed()) { 
          doSomething(); 
         } else if (thisApple.isRed()) { 
          doSomethingElse(); 
         } 
        } 
    } 
    

    (6)項目的草圖如下:
    (6.1)DB或文件(可能是xml文件或txt。例如F1.txt),其中收集類型「A是類」,「B是A的子類」等的句子(表示爲「includeIn(B,A)」等)。
    (6.2)函數謂詞簽名的另一個文件(F2.txt):「f:Y - > Boolean」,「g:X - > Y」等。
    (6.3)有關事實的另一個文件(F3.txt ):「x isIn X」,「y isIn Y」,「f(g(x))== true並且不是(f(y))」翻譯的Java程序(J1.jar) 「(通過反射)F1.txt和F2.txt在第二個Java程序(J2.jar)中使用文件F3.txt來附加新的事實並刪除一些舊的事實。

    (7)項目的比例:它更簡單(我想這是)增加的事實(文件F3.txt)和規則(域在F1.txt或F2.txt謂詞函數),而不是修改的java代碼需要時。 Java作爲很多庫,ide's,gui工具等等。

    (8)類似的主題和問題(顯然不夠滿足我的需求):

    問題(兩倍):

    是否有任何這樣的話題或使用面嚮對象語言編程的另一個範例的名稱混合的方式(它與本體http://protegewiki.stanford.edu/wiki/Main_Page,http://www.w3.org/TR/owl-features/,描述邏輯和聲明性編程有關)?你是否認爲它是錯誤的方法(如果你需要聲明性的 - 功能性邏輯編程使用另一種語言:無論它們不像Java的GUI那麼好,它們不是平臺獨立的,強大的等等。 。)?

    非常感謝

    +0

    爲什麼不使用Coq或Isabelle?這看起來像是一個正方形/圓孔問題,所以即使可以在Java中執行,它可能不是很有用。我當然不希望使用任何需要你來生成示例中的所有代碼的東西。 – Antimony

    +0

    - coq-isabelle暗示:剛纔看到:很好,但主要問題仍然存在。對於用戶來說很容易說一個特定的一階邏輯是否代表事實是真的;但是用戶不能/不應該在java類中自己創建一個新的方法。這是主要思想:「a(b,c)是真實的」是用戶的語言; 「b.a(this,c)」或「b.a(c)」是程序員的語言;就這樣。 - 是否有用:我不知道有另一種方法讓簡單的gui的構建者和強大的語言:這是問題的主要部分。非常感謝 – user2731139

    回答

    0

    其實你正在構建的事實的內存數據庫,並希望進行查詢反對。與任何其他數據庫一樣,您遇到以下幾個問題:在更改主要事實(或添加或刪除事實)時準確修改索引,計劃查詢評估,與後端存儲同步。這個技術方面不應該和你的程序中的業務邏輯混在一起,所以它們應該集中在一個框架(庫)中。要麼你開發自己的框架,要麼採取現有的框架。

    我推薦使用一些開源的SPARQL java實現,然後,如果你仍然喜歡Java程序而不是文本的事實/查詢表示,那麼直接繞過這個實現並直接使用內部,繞過文本表示。

    +0

    嚴格地說,我不喜歡Java;我不知道其他任何可以用來代表邏輯和本體論概念以及構建gui的東西。 – user2731139