程序、数据和结果之间三元关系的有意义的字段名称?

A meaningful field name for the ternary relation between program, data, and result?

我有代表软件程序的签名:

sig Program {
    ???: Data -> Result
}

每个程序将输入数据映射到输出结果。所以,存在三元关系(Program -> Data -> Result)。

注意字段名称的问号。您建议使用什么字段名称?

IO这个名字挺好听的:

sig Program {
    IO: Data -> Result
}

那我就可以写出优雅的表达方式如:

all p: Program | p.IO ...

但是,名称 IO 仅对(数据 -> 结果)有意义,对(程序 -> 数据 -> 结果)没有意义。

我卡住了。你有什么建议?

恕我直言,字段的名称大部分时间都与声明它们的签名相关联,这确实是一件好事。

如果您查看 Alloy 中的随机示例模块(例如 module examples/puzzle/farmer),您会发现字段并不总是在其各自的签名之外具有意义:

sig State {
   near: set Object,
   far: set Object
}

在这里,远近并没有真正传达出它们 "temporal" 性质的暗示。

长话短说,为了简洁起见,我会坚持使用 io

的确,我更喜欢 :

  • 字段、事实、预测、断言、参数,.. 小写
  • 要大写的签名
  • 枚举(outer let),以及大写的单例签名