Premises ('till point 7 let's pretend they're all true or reasonable or pertinent, please)
(1) Java is free, has Swing and Javafx etc.
(2) About Java there are a lot of docs, tutorials, etc.
(3) I'd like to use it for kinda ontology - first order logic reasoning
(4) I know about protegé but it's not enough
(5) Let me please use an example:
predicate logic Language.
- Let's pretend we are talking about Fruits
pseudo-code in declarative Language
Axioms or similar: domains and functions
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);
- Translation in Java code
I'd use interfaces for "A extends 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) The sketch of the project is as follows:
(6.1) DB or file (maybe xml file or txt. for example F1.txt) in which sentences of the kind "A is a class", "B is a subclass of A" etc. are collected (represented as "includeIn(B, A)" etc.);
(6.2) another file (F2.txt) for function-predicate signatures: "f:Y -> Boolean", "g:X -> Y" etc.
(6.3) another file about facts (F3.txt): "x isIn X", "y isIn Y", "f(g(x)) == true AND not(f(y))"
(6.4) a Java program (J1.jar) which "translates" (by Reflection) F1.txt and F2.txt in a second java program (J2.jar) by which file F3.txt is used to append new facts and delete some of the old ones.
(7) Project's Ratio: it's simpler (I suppose it is) to add facts (file F3.txt) and rules (Domains in F1.txt or Predicates-Functions in F2.txt) instead of modifying java code when needed. And Java as a lot of libraries, ide's, gui tools etc.
(8) Similar topics and questions (clearly not enough for my needs):
Question (two-fold):
Is there any name for such a topic or way of programming using OO Language for another paradigm in a mixed way (it has something to do with ontology http://protegewiki.stanford.edu/wiki/Main_Page, http://www.w3.org/TR/owl-features/, Description Logic and declarative programming)?
Do you think is it the wrong approach (if you need declarative - functional -logic programming use another Language: it does not matter if they are not as good as Java for GUI's, they're not Platform Independent, robust etc.)?
Many thanks