我在一个大项目上使用Spec Explorer大约一个月了, 除了一件事,它一直很顺利 例如,有时会生成新状态而不是循环 - 创建对象,新状态 - 用对象,新状态做一些事情 - 做一些什么都不改变(尝试创建相同的对象,不改变任何状态变量)这里我得到一个新的状态而不是循环
大多数时候它循环,就像它应该,有时不是,并且状态比较视图绝对没有区别,除了两条顶线只包含关于状态如何的描述。
任何人都有类似的问题或知道发生了什么事?
答案 0 :(得分:0)
有几个可能的原因。 但在大多数情况下,问题是:情景引入控制状态。 这里有最深刻的解释,你可以得到“如何识别相同的状态?”
“理想情况下,我们会在他们
时确定两种状态(a)具有相同的状态内容,
(b)具有相同的未来行为。
(a)不够的原因是启用的操作不仅仅依赖于状态内容,而且还可能依赖于Cord脚本中应用的方案。场景引入控制状态。
这里的问题是检查(b)在实践中是不可行的,因为它意味着展望所有来自国家的路径。
因此,我们依赖于启发式,包括识别不仅具有相同内容,而且还在场景的同一步骤中生成的状态。 因此,如果两个状态包含相同的数据并且可以执行相同的操作,则它们是等效的。
例如,在诸如A的场景中;一个; B *,我们有三个状态,都具有相同(空)的内容。
当我们与模型程序并行编写此场景时,与这三个状态相对应的状态将不会合并,无论其内容如何。
因此,当您比较两个状态以理解它们未被合并的原因时,您不应只查看其变量的值(数据状态),还应该查看提供控制状态的状态描述。
使用Spec Explorer启发式由不同机器生成的状态无法通过单个状态安全地考虑。 如上所述,这只是一种安全的启发式方法。因此,无法保证两个概念等效的状态将始终合并; 但是两个在概念上不等同的状态永远不应该被合并。“