如何编码 - Alloy中的'Date'比较?

时间:2016-06-07 12:08:28

标签: alloy

我是Alloy的初学者。这是我使用Alloy Analyzer的第一个型号。我现在正在为合金旅行建造一个通用模型。在此模型中,用户(我在此模型中使用sig请求)可以请求“住宿”(包括“酒店”或“公寓”或“宿舍”); '飞行';或“游览”,(请求可以是其中之一,也可以是它们的任意组合,例如酒店和旅游)。它们中的每一个都是“资源”的子集。现在,我只针对一个目的地的请求,并且办理登机手续和住宿的退房日期以及入境日期和航班的出境日期必须与开始日期和航班相同。用户请求的结束日期。

我的问题如下:

  1. 首先,为了确保办理登机手续,退房,入境和出境日期与开始日期和退款日期相同。用户请求的结束日期,所有这些都映射到beginning_of_journey和end_of_journey(请参阅代码)。这是正确的方法吗?

  2. 其次,我对如何编码约束有疑问 - 游览日期必须在用户请求的开始日期和结束日期之内(因此游览日期必须在登记入住,入站,检查-out和出站日期)。我定义了一个设置日期(sig日期),其中包含字段日,月和年,其中每个字段都被定义为整数。但问题是天数可以是负数。在执行代码之后,给定的实例看起来很奇怪。任何人都可以提出建议或建议我定义约束的正确方法吗?

  3. 第三,我有一个需要澄清的问题。假设上述问题已经解决,我需要初始化具体请求,例如旅行日期是2016年7月1日,日期开始时间是2016年7月2日,结束日期是2016年7月4日。因为我有定义了上述约束(问题2),我希望Alloy告知违反了给定的日期。合金是否可以这样做?

  4. 如果有人能提出一些意见和建议,我将非常感激。谢谢

1 个答案:

答案 0 :(得分:1)

您需要测试同一性和订单的日期。但是,除非您试图检查设计的正确性以计算公历中日期的相同性和顺序,否则合金中日期的内部结构建模似乎没什么用处。

所以在你的位置上,我会像LoïcGammaitoni已经建议的那样,在Date上定义一个排序来支持你对序列的查询。