在翻译过程中不受法律价值的约束

时间:2014-05-21 07:56:09

标签: alloy

我想更多地了解这个错误所涉及的界限。

我有一个合金模型,我手动创建一个实例(通过用XML写下来)。 此实例是可读的,A4Solution可以正确显示。 但是当我尝试使用eval()函数计算此实例中的表达式时,我收到此错误消息,尽管从模型中检索的exprvar的字段名称和类型与实例中的那个完全相同。 / p>

我想知道这个界限是什么的。为了告诉实例的一个元素是否绑定到模型的一个元素,需要考虑哪些属性。

是否考虑了XML中的隐藏ID?

3 个答案:

答案 0 :(得分:3)

  

我想知道这个界限是什么。

这意味着在要求求解器求解公式之前,必须给每个自由变量(即Kodkod中的关系)一个约束。

  

为了告诉实例的一个元素是否绑定到模型的一个元素,需要考虑哪些属性。

实例XML文件包含模型中每个sig和field的精确值(元组集);那些元组集恰好是在计算表达式时应该使用的边界。我不确定您是如何尝试使用Alloy API的;但是(通常)应该由场景后面的API处理从XML文件重新创建边界。

答案 1 :(得分:3)

根据您对我之前回答的上一条评论,您的问题可能与此post有关。

简而言之,如果您正在尝试评估从一个合金世界获得的AST表达对象" (CompModule)对于完全从XML文件重新创建的解决方案,您将得到完全错误。例如,如果您有两个PrimSig个对象,s1s2,并且它们都具有相同的名称(例如,两者都是通过解析sig S {...}获得的),它们是不是" Java等于" (s1.equals(s2)返回false);对于潜在的Kodkod关系/变量也是如此。因此,如果您尝试在仅限s1的绑定的上下文中评估s2,则会收到错误消息,指出s1未绑定。

答案 2 :(得分:2)

在阅读A4Solution时提供元模型中定义的签名集解决了我的问题。 因此改变:

solution = A4SolutionReader.read(null, new XMLNode(f)); 

通过

solution = A4SolutionReader.read(mm.getAllReachableSigs(), new XMLNode(f)); 

解决了这个非法的边界问题