如何检查并运行相同的Alloy执行?

时间:2015-03-25 21:38:52

标签: alloy

我正在学习Alloy,可以单独使用checkrun。但是,当我把它们都放进去时,check似乎被忽略了。如何执行checkrun

扩展问题:

  • 如果我有run,我甚至需要check吗?不知道它会自动检查我的所有断言吗?或者check的目标是不仅要检查断言,还要有意识地(在范围内)搜索反例?
  • run的目标只是找到符合谓词的实例吗?或者还有另一种用途吗?
  • 也许check应该是search-counterexamplerun应该是search-example
  • Alloy是否仅限于一次搜索(checkrun)执行?如果是这样,最好的做法是简单地注释掉除了一次检查/运行之外的所有检查/运行,并且一次取消注释一个吗?

1 个答案:

答案 0 :(得分:0)

  

如何执行检查和运行?

你没有。你一次做一个。

如果有两个谓词P1P2,则始终可以定义一个新谓词来组合它们(如andor,{{1} },and not等等,这样做有时会非常有用。

但是,给定谓词=>和断言P,可能不需要同时检查它们而不是您的想法。如果断言A对于给定范围成立,则它保持谓词P是否满足。如果它始终保持在该范围内,那么在寻找P的实例时,除了P之外,您不需要检查它(无论您是否检查它都将保留。)

  
      
  • 如果我跑步,我甚至需要检查吗?它不会自动检查我的所有断言吗?或者检查的目的不仅是检查断言,而且是有意和无穷无尽地(在范围内)搜索反例?
  •   

只有在要求分析仪检查时才会检查断言。分析器通过查找反例来精确地(并且仅)检查断言。

在此,断言与Alloy 事实不同,根据定义(或:通过命令)总是如此,无需检查。 (还有更多:他们不能被检查:因为一个反例是不可能的,分析器没有任何东西可以查找,并且没有动词可以通过它来请求分析器寻找它。)

事实和断言之间的区别值得考虑。

事实表达对模型的约束;断言没有。非正式地,断言可以被认为是给定约束已经施加在模型上的建议(或声称),它从逻辑上遵循已经说过的内容。断言明显的断言是有用的,因为检查它们可以引起我们注意那些令人眼花缭乱的明显事实并非事实真实的情况。说明模型中约束的非显而易见的后果的断言也以不同的方式引起我们的注意,使我们注意到我们可能忽略的后果。

事实也是有用的,作为将模型限制在我们感兴趣的情况的简单方法。但由于它们总是正确的,无论是否与其他约束相关,事实都没有机会让我们感到惊讶。 (与事实相关的最常见的惊喜是不受欢迎的发现,即我对事实的表述使得无法找到模型的任何实例。随着时间的推移,我开始尽量避免使用事实:任何我想写的东西事实上,我最终会重写为谓词。)

  
      
  • 运行的目标是仅查找符合谓词的实例吗?或者还有另一种用途吗?
  •   

这是Alloy用户唯一知道的。

  
      
  • 也许检查应该是search-counterexample并且run应该是search-example?
  •   

你可能有一点意见;新用户可能会更清楚Afind-example。 (我不希望find-counterexample在这里,至少在没有search的情况下。)但是有些用户的手指可能反叛用-for替换五个字符的命令,而不是二十一个字符等价物。

  
      
  • Alloy是否仅限于一次搜索(检查或运行)执行?如果是这样,最好的做法是简单地注释掉除了一次检查/运行之外的所有检查/运行,并且一次取消注释一个吗?
  •   

没必要; “执行”菜单使您可以选择要执行的命令。