∨ M(send)=1 & M(receive)=0).
Выразим данную формулу на языке Пролог. Введем предикат
num(E,N,L) для определения N - числа вхождений элемента E в список L,
следующим образом:
num(E,0,[]).
num(E,N,[E|R]):-num(E,N1,R), N is N1+1.
num(E,N,[F|R]):-num(E,N,R).
С использованием данного предиката вышеприведенная ЛДВ-формула
представляется на языке Пролог следующим образом:
implies(init,all(or(or(and(num(send(_,_,_),0),
num(receive(_,_,_),0)),and(num(send(_,_,_),0),
num(receive(_,_,_),1))),and(num(send(_,_,_),1),
num(receive(_,_,_),0)))),S).
Данное утверждение достигается, следовательно, отмеченное условие
выполняется.
Покажем выполнение условия частной корректности АБ-протокола,
согласно которому передатчик может находиться либо в состоянии
готовности, либо в состоянии ожидания подтверждения (но не в обоих
сразу). Как было отмечено в разд.2.5, условие M(send)=1 интерпретируется
как нахождение передатчика в состоянии готовности, а M(wait)=1 - в
состоянии ожидания подтверждения. В терминах сетевых моделей данное
условие корректности может быть сформулировано следующим образом:
всегда должно выполняться равенство:
M(psend)+M(wait)=1.
Иными словами, позиции psend и wait образуют инвариант.
Формула временной логики, представляющая данное утверждение,
следующая:
╞ init→ALL(M(psend)=0 & M(wait)=1
∨ M(psend)=1 & M(wait)=0)).
Интерпретация данной формулы на языке Пролог следующая:
implies(init(all(or(and(num(psend(_),0),num(wait(_),1)),
and(num(psend(_),1),num(wait(_),0)))),S).
Данное целевое утверждение достигается, следовательно, отмеченное
условие выполняется.