我想在合金中写一个集合和一个关系之间的双射。
例如,在下面的代码中,我想将 ref 定义为 QArow 和 event 之间的双射。因此,我写了事实bij。但是 Alloy 抱怨说,因为我认为我量化了使bij事实中的两个表达式成为高阶逻辑表达式的关系:
sig State {event : set State}
sig QArrow {ref: univ ->univ}
fact bij {
all q:QArrow | one a: univ->univ | Q[a] and q.ref=a
all a: univ->univ | one q:QArrow | Q[a] and q.ref=a
}
pred Q (a: univ->univ){
a in event
}
如何将这些表达式转换为一阶逻辑表达式?
另外,一般来说,当我们可以将 HOL 表达式转换为 FOL 表达式以及何时不能这样做时,是否有任何指导方针?
谢谢