2016-06-08 167 views
0

在java中,我有一组相互连接的对象。让我们假设他们在一起模型,让我们这样称呼它。将Java对象映射到Prolog表示

我想根据某些规范(定义为一组条件)验证该模型。条件可以是这样的:

forall child in parent.children 
    child.name startswith "A" 

可以有一堆这样的条件,他们都必须按顺序说一个模型符合规范得到满足。所有这些条件都是一些由变量和逻辑表达式组成的谓词,我想对待的是SAT问题的一个实例。我不关心该解决方案的复杂性,我只是想使用Prolog来执行找到变量的适当替换(如果它存在,这意味着模型符合规范)。

我正在寻找一种方法,我如何轻松创建Prolog知识库,该知识库将包含表示创建我的模型的对象的语句。

你有什么值得推荐的吗?或者,也许你可以建议一些其他方法来解决这个问题?

+0

不知道这是否有帮助,但你有看看模型检查(如https://en.wikipedia.org/wiki/List_of_model_checking_tools) – GhostCat

+0

如果你可以在你的问题中包括一个最小化的例子,那会让答案更容易。 – 2016-06-09 11:59:40

+0

真是个好主意! –

回答

0

也许JPL可以帮助您达到目标?

未完成,含有错误docs

JPL是使用SWI-Prolog的外国接口和Java JNI接口提供的Java和前导之间的双向接口,可用于到库在Prolog中嵌入Prolog以及在Prolog中嵌入Java。在这两个设置中,它提供了一个可重入的双向接口。

的位进一步在docs,使用jpl_call/4提供一个例子,得到的contentPane:

jpl_call(F, getContentPane, [], CP), 

在jpl_call/4的docs寻找,我们看到,它的第一个参数可以是:

  • 一个类型,类对象或类名(对于表示为类的静态方法,或用于java.lang.Class的静态或实例的方法)
  • 一个类实例或数组(静态或实例方法)

如果你只想从你的Java模型,而不是执行逻辑获取信息,你可以使用jpl_get/3检索值。下面的例子显示了我们将Prolog变量Color绑定到example.class.car类的静态最终.colour字段中保存的Java汽车对象字段的引用。

jpl_get('example.class.car', colour, Colour) 

更一般地:

jpl_get(+Class_or_Object, +Field, -Datum) 

反之亦然JPL还提供功能用于从Java内部访问的Prolog,提供了一个双向接口一起工作用于两种语言之间相互执行的逻辑。

如果您正在寻找一个关于建模问题的更具体的答案,那么确实会像@ Boris评论的那样 - 对我们来说更容易,只需提供一些最小范例即可显示您想要达到的目标。

祝你好运!