我的目的是按顺序指定日期。从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
答案 0 :(得分:0)
不一定是个问题。给定的代码可能没问题,但它所代表的模型可能不一致(因此Alloy无法找到任何实例)。请注意,由于您没有提供完整模型,因此您没有运行哪个谓词的详细信息,此答案会尝试猜测可能出现的错误。
似乎是声明
one d: Date - last
会导致您的不一致。请注意,由于导入了排序,此类语句可能仅对具有2个Date签名实例的Universe保持一致。
例如,如果one
被some
替换,则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