:- dynamic ct/3. :- multifile ct/3. ct(removeService(D,E,'Down','Standby'), ( serviceN(D,'Down'), not( serviceN(S,'Standby'), D \= S, backupRelation(_,D,S) ) ),( delete(serviceN(D,'Down')), add(emptyN(E)) )). ct(initializeEmptyNode(E), ( not(emptyN(E)) ),( add(emptyN(E)) )). %ct(initializeEmptyNode(A), ( % not(initNode(A),emptyNode(E)) %),( % add(emptyNode(E)), % add(initNode(A)) %)). ct(powerOnService(E,A,'Up'), ( emptyN(E) ),( add(serviceN(A,'Up')), delete(emptyN(E)) )). %open_world_cts([ % powerOnService,removeService,initializeEmptyNode %]). ct(registerService(S,'Active','Up'), ( serviceN(S,'Up') ),( replace(serviceN(S,'Up'),serviceN(S,'Active')) )). ct(unregisterService(S,'Active','Up'), ( serviceN(S,'Active'), not( serviceN(S2,_), S2 \= S, backupRelation(_b,S,S2) ) ),( replace(serviceN(S,'Active'),serviceN(S,'Up')) )). ct(standbyService(A,U,Rb,'Active','Standby','Up'), ( serviceN(A,'Active'), serviceN(U,'Up'), A \= U, not( backupRelation(Rb,A,U) ) ),( replace(serviceN(S,'Up'),serviceN(S,'Standby')), add(backupRelation(Rb,A,U)) )). ct(detachService(A,S,Rb,'Active','Standby','Up'), ( serviceN(A,'Active'), serviceN(S,'Standby'), A \= S, backupRelation(Rb,A,S) ),( delete(backupRelation(Rb,A,S)), replace(serviceN(S,'Standby'),serviceN(S,'Up')) )). ct(failoverService(D,S,Rb,'Down','Standby'), ( serviceN(D,'Down'), serviceN(S,'Standby'), D \= S, backupRelation(Rb,D,S) ),( delete(backupRelation(Rb,D,S)), replace(serviceN(S,'Standby'),serviceN(S,'Active')) )).