如何按顺序指定特定元素 - 在 Alloy 中使用 util 排序?
How to specify the specific elements in order - using util ordering in 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
不一定有问题。给定的代码可能没问题,但它表示的模型可能不一致(因此 Alloy 找不到任何实例)。请注意,由于您没有提供完整的模型,也没有足够的细节说明您是哪个谓词 运行,此答案试图猜测可能有什么问题。
好像是这个说法
one d: Date - last
给你造成不一致。请注意,由于排序的导入,此类声明可能仅对具有 2 个日期签名实例的 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
我这里的目的是按顺序指定日期。从 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
不一定有问题。给定的代码可能没问题,但它表示的模型可能不一致(因此 Alloy 找不到任何实例)。请注意,由于您没有提供完整的模型,也没有足够的细节说明您是哪个谓词 运行,此答案试图猜测可能有什么问题。
好像是这个说法
one d: Date - last
给你造成不一致。请注意,由于排序的导入,此类声明可能仅对具有 2 个日期签名实例的 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