如何按顺序指定特定元素 - 在Alloy中使用util顺序?

时间:2016-07-19 13:23:08

标签: alloy

我的目的是按顺序指定日期。从d开始,然后是d1,d2,d3,以d“结束。我初始化'd = request.begin'作为第一个元素,'d''作为排序中的最后一个元素。在以下代码中,我定义'd1 = d.next','d2 = d1.next'和'd3 = d2.next'。另外,我在库中调用了util排序; 'open util / ordering [Date] as DateOrder'。但是,执行代码时没有找到实例。有谁能告诉我这些代码有什么问题?

    open util/ordering [Date] as DateOrder

    abstract sig resource {}

    one sig  Tour  extends resource  {date : one Date, destination :  tour_destination}
    one sig tour_destination {}

    pred holiday [disjoint d,d1,d2,d3,d": some Date , r:Request, t:Tour] {
    r.begin = d and r.end = d" 
    t.date = d or t.date = d1 or t.date = d2 or t.date = d3 or t.date = d"
    d != d"}

    sig Date{}

    pred init [d:Date]{d= Request.begin}

    fact traces {
    init [first] 
    let d" = last   | one d : Date - last |
     let d1 = d.next, d2 = d1.next, d3 = d2.next |
       lone t: Tour, r: Request|
          holiday [d,d1,d2,d3,d",r,t]}

    one sig Request{tour_request: one Tour,begin: one Date, end: one Date}


    run holiday

1 个答案:

答案 0 :(得分:0)

不一定是个问题。给定的代码可能没问题,但它所代表的模型可能不一致(因此Alloy无法找到任何实例)。请注意,由于您没有提供完整模型,因此您没有运行哪个谓词的详细信息,此答案会尝试猜测可能出现的错误。

似乎是声明

one d: Date - last

会导致您的不一致。请注意,由于导入了排序,此类语句可能仅对具有2个Date签名实例的Universe保持一致。

例如,如果onesome替换,则Alloy会为以下模型找到大量实例:

open util/ordering [Date]

sig Request{
    begin: lone Date
}

sig Date{}

pred init [d:Date]{d= Request.begin}

fact traces {
  init [first] 
  let d" = last | some d : Date - last |
  let d1 = d.next, d2 = d1.next, d3 = d2.next |
  d1 in Date && d2 in Date && d3 in Date && d" in Date
}

run {} for 4 but 1 Request