Cледует заметить, что утверждение comp(B,BB) используется как условие
в случае, когда обе переменные B и BB конкретизированы, так и для
реализации операции "сложение по модулю 2", в этом случае BB=B ⊕1.
Клозы, определяющие переходы данной сетевой модели, имеют
следующий вид:
arc(S,tsend(B),S1):-
remove([psend(B)],S,S2),
insert([send(se,re,mes,B),wait(B)],S2,S1).
arc(S,loss,S1):-
remove([send(X,Y,T,M)],S,S2),
insert([ploss],S2,S1).
arc(S,propagate(M),S1):-
remove([send(X,Y,T,M)],S,S2),
insert([receive(X,Y,T,M)],S2,S1).
arc(S,recack(B),S1):-
remove([receive(re,se,ack,B),wait(B)],S,S2),
comp(B,BB),
insert([psend(BB)],S2,S1).
arc(S,repeatm(B),S1):-
remove([wait(B),ploss],S,S2),
insert([wait(B),send(se,re,mes,B)],S2,S1).
arc(S,repeata(B),S1):-
remove([receive(X,re,mes,BB),prec(B)],S,S2),
comp(B,BB),
insert([prec(B),send(re,X,ack,BB)],S2,S1).
arc(S,reception(B),S1):-
remove([receive(X,re,mes,B),prec(B)],S,S2),
comp(B,BB),
insert([prec(BB),send(re,X,ack,B)],S2,S1).
Начальная маркировка сетевой модели определяется следующим
фактом:
init([psend(zero),prec(zero)]).
При использовании приведенных в разд. 1.4 клозов получаются
следующие выходные данные, определяющие ГДС:
о достигнутых состояниях (база данных rstate):
0 [psend(zero),prec(zero)]
1 [send(se,re,mes,zero),wait(zero),prec(zero)]
2 [ploss,wait(zero),prec(zero)]
3 [receive(se,re,mes,zero),wait(zero),prec(zero)]
4 [prec(one),send(re,se,ack,zero),wait(zero)]
5 [ploss,prec(one),wait(zero)]