Time 如何在集合上添加变量(合金) 卡罗纳模块 打开/订购[时间] sig时间{} 信号车{ 乘客:请安排乘客 } 一西格UFCG{ 学生:设置学生->时间 } 抽象sig学生{ 地区:地区->时间 } sig所有者扩展学生{ 车主:汽车 } sig Passager扩展了学生{ } 抽象sig区{} 北部、南部、东帝汶、奥斯特、中央一号延伸至{} 事实所有者{ 所有o:Owner |#o.ownerCar=1 } 事实旅客{ 所有乘客:乘客|一名乘客.~乘客 } 实况转播车{ 所有c:Car |一个c.~车主卡 所有c:Car |#c.乘客
首先,在UFCG事实中,第一个量化公式表示,每次每个乘客都在UFCG学生集中,这阻止了该集合中的任何变化Time 如何在集合上添加变量(合金) 卡罗纳模块 打开/订购[时间] sig时间{} 信号车{ 乘客:请安排乘客 } 一西格UFCG{ 学生:设置学生->时间 } 抽象sig学生{ 地区:地区->时间 } sig所有者扩展学生{ 车主:汽车 } sig Passager扩展了学生{ } 抽象sig区{} 北部、南部、东帝汶、奥斯特、中央一号延伸至{} 事实所有者{ 所有o:Owner |#o.ownerCar=1 } 事实旅客{ 所有乘客:乘客|一名乘客.~乘客 } 实况转播车{ 所有c:Car |一个c.~车主卡 所有c:Car |#c.乘客,time,set,add,show,alloy,Time,Set,Add,Show,Alloy,首先,在UFCG事实中,第一个量化公式表示,每次每个乘客都在UFCG学生集中,这阻止了该集合中的任何变化 module carona open util/ordering[Time] sig Time {} sig Car { passengers : set Passager } one sig UFCG{ students: set Student -> Time } abstract sig Student{ region: Region ->
module carona
open util/ordering[Time]
sig Time {}
sig Car {
passengers : set Passager
}
one sig UFCG{
students: set Student -> Time
}
abstract sig Student{
region: Region -> Time
}
sig Owner extends Student{
ownerCar : Car
}
sig Passager extends Student{
}
abstract sig Region{ }
one sig Norte,Sul,Leste,Oeste,Centro extends Region{ }
fact Owner{
all o: Owner | #o.ownerCar = 1
}
fact Passager{
all p:Passager | one p.~passengers
}
fact Car{
all c:Car| one c.~ownerCar
all c:Car| #c.passengers <= 4
all c:Car| c.passengers.region=(c.~ownerCar).region
}
fact UFCG {
all passager: Passager, ufcg : UFCG, t:Time | passager in (ufcg.students).t
all owner: Owner, ufcg: UFCG,t:Time | owner in (ufcg.students).t
}
fact Traces{
init[first]
all pre: Time-last | let pos = pre.next |
lone u:UFCG|
some s:Student|
addStudent[s,u,pre,pos]
}
pred init[t:Time]{
one u:UFCG | no (u.students).t
}
pred addStudent[s:Student, u: UFCG, before, after: Time]{
(s !in (u.students).before)
(u.students).after = (u.students).before + s
}