Time 如何在集合上添加变量(合金) 卡罗纳模块 打开/订购[时间] sig时间{} 信号车{ 乘客:请安排乘客 } 一西格UFCG{ 学生:设置学生->时间 } 抽象sig学生{ 地区:地区->时间 } sig所有者扩展学生{ 车主:汽车 } sig Passager扩展了学生{ } 抽象sig区{} 北部、南部、东帝汶、奥斯特、中央一号延伸至{} 事实所有者{ 所有o:Owner |#o.ownerCar=1 } 事实旅客{ 所有乘客:乘客|一名乘客.~乘客 } 实况转播车{ 所有c:Car |一个c.~车主卡 所有c:Car |#c.乘客

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 ->

首先,在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 -> 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
}