:- dynamic ct/3. :- multifile ct/3. ct(removeService(D,Rd,E), ( serviceNode(D), downStateRelation(Rd,D,D), not( serviceNode(S), D \= S, backupStateRelation(_,D,S) ) ),( delete(downStateRelation(Rd,D,D)), delete(serviceNode(D)), add(emptyNode(E)) )). ct(initializeEmptyNode(E), ( not(emptyNode(E)) ),( add(emptyNode(E)) )). %ct(initializeEmptyNode(A), ( % not(initNode(A),emptyNode(E)) %),( % add(emptyNode(E)), % add(initNode(A)) %)). ct(powerOnService(E,A,Ra), ( emptyNode(E) ),( add(serviceNode(A)), add(upStateRelation(Ra,A,A)), delete(emptyNode(E)) )). %open_world_cts([ % powerOnService,removeService,initializeEmptyNode %]). ct(registerService(S,R,Ra), ( serviceNode(S), upStateRelation(R,S,S) ),( delete(upStateRelation(R,S,S)), add(activeStateRelation(Ra,S,S)) )). ct(unregisterService(S,Ra,Ru), ( serviceNode(S), activeStateRelation(Ra,S,S), not( serviceNode(S2), S2 \= S, backupStateRelation(_b,S,S2) ) ),( delete(activeStateRelation(Ra,S,S)), add(upStateRelation(Ru,S,S)) )). ct(standbyService(A,U,Ru,Ra,Rs,Rb), ( serviceNode(A), serviceNode(U), A \= U, upStateRelation(Ru,U,U), activeStateRelation(Ra,A,A), not( backupStateRelation(Rb,A,U) ) ),( delete(upStateRelation(Ru,U,U)), add(standbyStateRelation(Rs,U,U)), add(backupStateRelation(Rb,A,U)) )). ct(detachService(A,S,Rs,Ra,Rb,Ru), ( serviceNode(A), serviceNode(S), A \= S, standsyStateRelation(Rs,S,S), activeStateRelation(Ra,A,A), backupStateRelation(Rb,A,S) %new_id(B) ),( delete(backupStateRelation(Rb,A,S)), delete(standbyStateRelation(Rs,S,S)), add(upStateRelation(Ru,S,S)) )). ct(failoverService(D,S,Rs,Rd,Rb,Ra), ( serviceNode(D), serviceNode(S), D \= S, standbyStateRelation(Rs,S,S), downStateRelation(Rd,D,D), backupStateRelation(Rb,D,S) ),( delete(standbyStateRelation(Rs,S,S)), delete(backupStateRelation(Rb,D,S)), add(activeStateRelation(Ra,S,S)) )).