如何实现集合中的顺序?

How to implement order in a set of sets?

当飞机接近机场着陆时,飞机的进近程序分为多个过渡。每个转换都由一组腿组成。

sig Transition {
     legs: set Leg 
}
sig Leg {}

转换中的一组腿是有序的。对于每个过渡,我希望能够访问过渡中的第一条腿、过渡中的最后一条腿,并且我想在过渡中从一条腿导航到另一条腿。因此,我想要第一个、最后一个和下一个函数。

最简单的实现方法是什么?我有一个有效的实现,但我想知道是否有更简单的东西。我的实现将每个 Leg 关联到一个序列号:

open util/ordering [SequenceNumber]
sig SequenceNumber {}

sig Transition {
     legs: Leg one -> one SequenceNumber
}

然后我创建了自己的实用函数:

fun First (t: Transition): Leg {
    t.legs.(min [Leg.(t.legs)])
}

fun Last (t: Transition): Leg {
    t.legs.(max [Leg.(t.legs)])
}

fun Next (t: Transition, leg: Leg): Leg { 
    t.legs.(next [leg.(t.legs)])
}

我希望你能告诉我一个更简单的解决方案。

为什么不使用 seq Leg 和内置序列谓词和函数?