Я заметил, что приоритеты операторов сравнения Alloy следуют этому порядку:
- операторы отрицания сравнения:!а не;
- операторы сравнения: in, =, <,>, = <, =>.
В проекте, в котором я работаю, определены два предиката mySyn и Семантика для вычисления логических выражений с помощью следующих подписей ( myNotEquals , myEquals и myGreaterThan ), построенных на операторах сравнения Alloy соответственно (! = , = и > ).Это расширение BExp абстрактная подпись.
Я хотел бы задать два вопроса (для упрощения я упустил некоторые фрагменты кода, используя символ ... ):
- Соответствует ли оценка этих подписей первоначальному заказу Сплава?Я имею в виду myNotEquals идет первым, затем myEquals и, наконец, myGreaterThan ?
- Возможно ли изменить приоритет тех подписей, которые собираютсядля оценки, например, myEquals идет первым, затем myGreaterThan и, наконец, myNotEquals ?
Предикат mySyn:
pred mySyn[...] {
...
, Semantics[evalC, evalB, evalA]
...
}
Предикат семантики:
pred Semantics[ ...] {
...
, evalB: BExp -> (State -> Bit)
...
}
Оценка логических выражений
all b: myEquals, s: State | aritmethicExpr1[s] = aritmethicExpr2[s] implies evalB[b][s] = BitTrue else evalB[b][s] = BitFalse
all b: myNotEquals, s: State | aritmethicExpr1[s] != aritmethicExpr2[s] implies evalB[b][s] = BitTrue else evalB[b][s] = BitFalse
all b: myGreaterThan, s: State | aritmethicExpr1[s] > aritmethicExpr2[s] implies evalB[b][s] = BitTrue else evalB[b][s] = BitFalse
Спасибо за помощь:)