Я хотел бы написать взаимно однозначное соответствие между набором и отношением в Alloy.
Например, в следующем коде я хотел бы определить ref как соответствие между QArrow и событием. Поэтому пишу факт 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, а когда мы не можем этого делать?
Спасибо