- - SMV program for consistency checking |
MODULE main |
VAR |
state:{n1,n2,n3,n4,n5,n6,n7,n8,teaches,inv_teaches,attends, |
inv_attends,age,inv_age,name,inv_name,cName,inv_cName,tao}; |
label:{Teacher,Course,Student,Database,Smith,37,40}; |
ASSIGN |
init(state) := n1; |
next(state) := case |
state = n1 ∣ state = n2 : {teaches,age}; |
state = teaches : n3; |
state = age : {n5,n6}; |
state = n3:{inv_attends,inv_teaches,cName}; |
state = inv_attends : n4; |
state = inv_teaches : {n1,n2}; |
state = cName : n7; |
state = n4 : {attends,name}; |
state = attends : n3; |
state = name : n8; |
state = n5 : {inv_age,tao}; |
state = inv_age : {n1,n2}; |
state = tao : {n5,n6,n7,n8}; |
state = n6 : {inv_age,tao}; |
state = n7 : {inv_cName,tao}; |
state = inv_cName : n3; |
state = n8 : {inv_name,tao}; |
state = inv_name : n4; |
TRUE : state; |
esac; |
DEFINE |
nl := case |
state = n1 ∣ state = n2 : Teacher; |
state = n3 : Course; |
state = n4 : Student; |
state = n5 : 37; |
state = n6 : 40; |
state = n7 : Database; |
state = n8 : Smith; |
TRUE : state; |
esac; |
- - concept redundancy checking |
CTLSPEC (nl=Teacher) & EX(state=age) & |
EX(state=teaches & EX(nl=Course)) |
- - relationship inconsistency checking |
- - need to be changed to ‘init(state) := n4;’ |
CTLSPEC (nl=Student) & EX(state=attends & EX(nl=Course)) |
- - attribute inconsistency checking |
CTLSPEC (nl=Teacher) & EX(state=age & EX(nl=40)) |
- - fact inconsistency checking |
CTLSPEC (nl=Teacher) & EX(state=age&EX(nl=37)) & |
EX(state=teaches & EX(nl=Course & |
EX(state=cName & EX(nl=Database)))) |