我正在学习Alloy,可以单独使用check
和run
。但是,当我把它们都放进去时,check
似乎被忽略了。如何执行check
和run
?
扩展问题:
run
,我甚至需要check
吗?不知道它会自动检查我的所有断言吗?或者check
的目标是不仅要检查断言,还要有意识地(在范围内)搜索反例?run
的目标只是找到符合谓词的实例吗?或者还有另一种用途吗?check
应该是search-counterexample
而run
应该是search-example
?check
或run
)执行?如果是这样,最好的做法是简单地注释掉除了一次检查/运行之外的所有检查/运行,并且一次取消注释一个吗?答案 0 :(得分:0)
如何执行检查和运行?
你没有。你一次做一个。
如果有两个谓词P1
和P2
,则始终可以定义一个新谓词来组合它们(如and
,or
,{{1} },and not
等等,这样做有时会非常有用。
但是,给定谓词=>
和断言P
,可能不需要同时检查它们而不是您的想法。如果断言A对于给定范围成立,则它保持谓词P是否满足。如果它始终保持在该范围内,那么在寻找P的实例时,除了P之外,您不需要检查它(无论您是否检查它都将保留。)
- 如果我跑步,我甚至需要检查吗?它不会自动检查我的所有断言吗?或者检查的目的不仅是检查断言,而且是有意和无穷无尽地(在范围内)搜索反例?
只有在要求分析仪检查时才会检查断言。分析器通过查找反例来精确地(并且仅)检查断言。
在此,断言与Alloy 事实不同,根据定义(或:通过命令)总是如此,无需检查。 (还有更多:他们不能被检查:因为一个反例是不可能的,分析器没有任何东西可以查找,并且没有动词可以通过它来请求分析器寻找它。)
事实和断言之间的区别值得考虑。
事实表达对模型的约束;断言没有。非正式地,断言可以被认为是给定约束已经施加在模型上的建议(或声称),它从逻辑上遵循已经说过的内容。断言明显的断言是有用的,因为检查它们可以引起我们注意那些令人眼花缭乱的明显事实并非事实真实的情况。说明模型中约束的非显而易见的后果的断言也以不同的方式引起我们的注意,使我们注意到我们可能忽略的后果。
事实也是有用的,作为将模型限制在我们感兴趣的情况的简单方法。但由于它们总是正确的,无论是否与其他约束相关,事实都没有机会让我们感到惊讶。 (与事实相关的最常见的惊喜是不受欢迎的发现,即我对事实的表述使得无法找到模型的任何实例。随着时间的推移,我开始尽量避免使用事实:任何我想写的东西事实上,我最终会重写为谓词。)
- 运行的目标是仅查找符合谓词的实例吗?或者还有另一种用途吗?
这是Alloy用户唯一知道的。
- 也许检查应该是search-counterexample并且run应该是search-example?
你可能有一点意见;新用户可能会更清楚A
和find-example
。 (我不希望find-counterexample
在这里,至少在没有search
的情况下。)但是有些用户的手指可能反叛用-for
替换五个字符的命令,而不是二十一个字符等价物。
- Alloy是否仅限于一次搜索(检查或运行)执行?如果是这样,最好的做法是简单地注释掉除了一次检查/运行之外的所有检查/运行,并且一次取消注释一个吗?
没必要; “执行”菜单使您可以选择要执行的命令。