draw of my situation
在上面的链接中,我们可以看到类Student
和Class
。我想做一个不变的约束,以确保每个Student
的{{1}}不能注册超过5个类。
有了这个约束,我可以确定sessionYear
是否超过5个类
Student
但是,我想要的是找到仅由相同的context Student
inv maxClassStudent: classTaken->collect(sessionYear)->size() < 6
组成的集合的大小。换句话说,我希望为每个不同的sessionYear
进行一次收集,以验证sessionYear
在该年中是否少于6个班级。
我认为我可能可以使用Student
或类似基于其forAll(c1,c2|c1<>c2 implies c1.sessionYear <> c2.sessionYear)
的差异Class
的东西,但我似乎无法弄清楚。
答案 0 :(得分:0)
硬问题通常可以通过将它们分解成小块来解决...
let sessionYears = classTaken-> collect(sessionYear)-> asSet() 在sessionYears-> forAll(sy | classTaken-> select(sessionYear = sy)-> size()<6)
中