Самолет летит последовательность ног. За каждым этапом должен следовать соответствующий следующий этап. NextLegTable
содержит соответствующие (Leg -> Leg
) пары.
Таким образом, каждая пара ног в полете должна находиться в NextLegTable
. Я реализовал это ограничение в приведенном ниже Fact
.
Вот описание моей реализации: Каждая пара ножек (leg
и leg'
), такая что indexOf(leg) + 1 = indexOf(leg')
, должна быть в NextLegTable
. По-видимому, этот подход неверен, так как я не получаю «экземпляров».
Каков правильный подход? Учитывая отрезок, как мне найти его следующий отрезок в последовательности?
sig Flight {
legs: seq Leg
}
sig Leg {}
one sig NextLegTable {
nextLeg: Leg -> Leg
}
fact Flight_legs_In_NexLegTable {
all f: Flight |
all leg, leg': Leg {
leg in f.legs.elems
leg' in f.legs.elems
plus[f.legs.idxOf[leg], 1] = f.legs.idxOf[leg']
(leg -> leg') in NextLegTable.nextLeg
}
}
pred Show (f: Flight) {#f.legs > 1}
run Show