合金更改比较运算符的签名优先级

时间:2019-07-03 15:34:46

标签: alloy

我注意到Alloy的比较运算符的优先级遵循以下顺序:

  • 比较否定运算符:!而不是;
  • 比较运算符:in,=,<,>,= <,=>。

我工作的一个项目定义了两个谓词 mySyn 语义,以通过以下这些签名( myNotEquals myEquals myGreaterThan )分别基于Alloy的比较运算符(!= = > )。这些扩展了 BExp 抽象签名。

我想问两个问题(为简化起见,我使用 ... 符号省略了一些代码):

  1. 对这些签名的评估是否遵循原始的Alloy命令?我的意思是,首先是 myNotEquals ,然后是 myEquals ,最后是 myGreaterThan
  2. 是否可以更改将要评估的那些签名的优先级,例如首先出现 myEquals ,然后出现 myGreaterThan ,最后是 myNotEquals < / strong>?

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

谢谢您的帮助:)

0 个答案:

没有答案