房地用java('至7点,让我们假装他们都是真实的或合理的或相关的,请)在表语逻辑方式
(1)Java是免费的,有秋千和JavaFX等
(2)关于Java的有很多文档,教程等
(3)我想用它来还挺本体 - 一阶逻辑推理
(4)我知道门生但这还不够
(5)让我请使用一个例子:
谓词逻辑语言。域和功能
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”>
我会使用接口为 “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那么好,它们不是平台独立的,强大的等等。 。)?
非常感谢
为什么不使用Coq或Isabelle?这看起来像是一个正方形/圆孔问题,所以即使可以在Java中执行,它可能不是很有用。我当然不希望使用任何需要你来生成示例中的所有代码的东西。 – Antimony
- coq-isabelle暗示:刚才看到:很好,但主要问题仍然存在。对于用户来说很容易说一个特定的一阶逻辑是否代表事实是真的;但是用户不能/不应该在java类中自己创建一个新的方法。这是主要思想:“a(b,c)是真实的”是用户的语言; “b.a(this,c)”或“b.a(c)”是程序员的语言;就这样。 - 是否有用:我不知道有另一种方法让简单的gui的构建者和强大的语言:这是问题的主要部分。非常感谢 – user2731139