Сплав, изменяющий приоритет операторов сравнения для подписей - PullRequest
1 голос
/ 03 июля 2019

Я заметил, что приоритеты операторов сравнения Alloy следуют этому порядку:

  • операторы отрицания сравнения:!а не;
  • операторы сравнения: in, =, <,>, = <, =>.

В проекте, в котором я работаю, определены два предиката mySyn и Семантика для вычисления логических выражений с помощью следующих подписей ( myNotEquals , myEquals и myGreaterThan ), построенных на операторах сравнения Alloy соответственно (! = , = и > ).Это расширение BExp абстрактная подпись.

Я хотел бы задать два вопроса (для упрощения я упустил некоторые фрагменты кода, используя символ ... ):

  1. Соответствует ли оценка этих подписей первоначальному заказу Сплава?Я имею в виду myNotEquals идет первым, затем myEquals и, наконец, myGreaterThan ?
  2. Возможно ли изменить приоритет тех подписей, которые собираютсядля оценки, например, 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

Спасибо за помощь:)

...