当其中一个被取消时,变量值对(即映射)不会被保留
Variable-Value pairs (i.e., maps) are not retained when one of them gets nullified
我有以下简单模型,我在其中尝试模拟数据集中 select 数据的无效化。 Data to Val (d2v) 映射是一个称为 Dynamic 的签名字段,其实例对应于模型的不同状态(之前和之后)。当我尝试模拟这个模型时,我得到了两个不相关的 Dynamic 实例,即使我明确地将两个 Dynamic 实例的 d2v 映射设置为相同(当然除了传递给无效谓词的 Data 实例的映射)。换句话说,两个 Dynamic 实例的变量值对不匹配。我错过了什么?
sig Data {}
sig Val {}
sig Dynamic {
d2v: Data -> lone Val,
}
pred nullify [dyn, dyn': Dynamic, d:Data] {
d in dyn.d2v.univ implies
dyn'.d2v = dyn.d2v - (d -> d.(dyn.d2v))
else
dyn'.d2v = dyn.d2v
}
run nullify for exactly 3 Data,
exactly 3 Val,
exactly 2 Dynamic
下面是来自 Alloy 的两个 Dynamic.d2v 实例的评估示例:
sig Dynamic
Dynamic[=11=]
field d2v
Data -> Val
Dynamic
field d2v
Data[=11=] -> Val
Data -> Val[=11=]
其中Data$2 是删除谓词的参数。例如,我期望的是以下内容:
sig Dynamic
Dynamic[=12=]
field d2v
Data -> Val
Data[=12=] -> Val
Data -> Val[=12=]
Dynamic
field d2v
Data[=12=] -> Val
Data -> Val[=12=]
您确定实例将 dyn 和 dyn' 绑定到 Dynamic$0 和 Dynamic$1 吗?例如,它可以将它们都绑定到 Dynamic$1,满足谓词的 else 分支。
我有以下简单模型,我在其中尝试模拟数据集中 select 数据的无效化。 Data to Val (d2v) 映射是一个称为 Dynamic 的签名字段,其实例对应于模型的不同状态(之前和之后)。当我尝试模拟这个模型时,我得到了两个不相关的 Dynamic 实例,即使我明确地将两个 Dynamic 实例的 d2v 映射设置为相同(当然除了传递给无效谓词的 Data 实例的映射)。换句话说,两个 Dynamic 实例的变量值对不匹配。我错过了什么?
sig Data {}
sig Val {}
sig Dynamic {
d2v: Data -> lone Val,
}
pred nullify [dyn, dyn': Dynamic, d:Data] {
d in dyn.d2v.univ implies
dyn'.d2v = dyn.d2v - (d -> d.(dyn.d2v))
else
dyn'.d2v = dyn.d2v
}
run nullify for exactly 3 Data,
exactly 3 Val,
exactly 2 Dynamic
下面是来自 Alloy 的两个 Dynamic.d2v 实例的评估示例:
sig Dynamic
Dynamic[=11=]
field d2v
Data -> Val
Dynamic
field d2v
Data[=11=] -> Val
Data -> Val[=11=]
其中Data$2 是删除谓词的参数。例如,我期望的是以下内容:
sig Dynamic
Dynamic[=12=]
field d2v
Data -> Val
Data[=12=] -> Val
Data -> Val[=12=]
Dynamic
field d2v
Data[=12=] -> Val
Data -> Val[=12=]
您确定实例将 dyn 和 dyn' 绑定到 Dynamic$0 和 Dynamic$1 吗?例如,它可以将它们都绑定到 Dynamic$1,满足谓词的 else 分支。