如何编码 - 在 Alloy 中进行 'Date' 比较?

How to code - 'Date' comparison in Alloy?

我是 Alloy 的初学者。这是我使用 Alloy Analyzer 的第一个模型。我现在正在为 Alloy 中的 Travel 构建一个通用模型。在这个模型中,用户(我在这个模型中使用 sig Request)可以发出 'accommodation' 的请求(包括 'hotel' 或 'apartment' 或 'hostel'); 'flight';或 'tour',(请求可以是其中之一或它们的任意组合,例如酒店和旅游)。它们每个都是 'resource' 的子集。目前,我只坚持一个目的地的请求,住宿的入住和退房日期以及航班的入境日期和出境日期必须与用户请求的开始日期和结束日期相同.

我的问题如下:

  1. 首先为了保证check-in,check-out,inbound,outdate与用户请求的begin-date和end-date一致,全部映射至 beginning_of_journey 和 end_of_journey(请参阅代码)。这是正确的方法吗?

  2. 其次,我有一个关于如何编写约束的问题 - 旅游日期必须在用户请求的开始日期和结束日期之内(这样旅游日期必须在入住日期之内、入境、退房和出境日期)。我定义了一个集合日期 (sig Date),其中包含日、月和年字段,其中每个字段都被定义为整数。但是,问题是天数可以是负数。执行代码后,给定的实例看起来很奇怪。任何人都可以提出建议或告诉我定义该约束的正确方法吗?

  3. 第三,我有一个问题需要说明一下。比方说,上面的问题已经解决了,我需要初始化具体的请求,例如旅游日期是2016年7月1日,开始日期是2016年7月2日,结束日期是2016年7月4日。因为我有定义了上面的约束(问题 2),我想要 Alloy 通知给定的日期被违反了。 Alloy 可以这样做吗?

如果有人能提出一些意见和建议,我将不胜感激。谢谢

您需要测试日期的一致性和顺序。然而,除非您试图检查用于计算公历中日期的相同性和顺序的设计的正确性,否则在 Alloy 中对日期的内部结构建模似乎没有什么用处。

因此,在您的位置上,我会像 Loïc Gammaitoni 已经建议的那样,定义日期的排序以支持您对序列的查询。