Невозможность асинхронного консенсуса: различия между версиями

Перейти к навигации Перейти к поиску
м
Строка 58: Строка 58:
Доказательство. Предположим от противного, что такой протокол существует. Будем выполнять протокол, пока он не достигнет критического состояния. Должны существовать два процесса A и B, такие, что следующий шаг A переводит протокол в 0-валентное состояние, а следующий шаг B переводит протокол в 1-валентное состояние.
Доказательство. Предположим от противного, что такой протокол существует. Будем выполнять протокол, пока он не достигнет критического состояния. Должны существовать два процесса A и B, такие, что следующий шаг A переводит протокол в 0-валентное состояние, а следующий шаг B переводит протокол в 1-валентное состояние.


Начиная с s, обозначим за <math>s_A</math> состояние, достигаемое в случае, если A делает первый шаг, за <math>s_B</math> – если B делает первый шаг, <math>s_{AB}</math> – если A делает шаг, за которым следует B, и так далее. Состояния <math>s_A</math> и <math>s_{AB}</math> являются 0-валентными, а <math>s_B</math> и <math>s_{BA}</math> – 1-валентными. Остается провести разбор случаев.


Начиная с s, обозначим за SA состояние, достигаемое в случае, если A делает первый шаг, за SB – если B делает первый шаг, SAB – если A делает шаг, за которым следует B, и так далее. Состояния SA и SAB являются 0-валентными, а SB и SBA – 1-валентными. Остается провести разбор случаев.
Из всех возможных пар шагов, которые A и B могли бы выполнить, большинство из них ''коммутируют'': состояния <math>s_{AB}</math> и SBA идентичны, что порождает противоречие, поскольку они имеют разные валентности.


 
Единственная пара шагов, которые не коммутируют, имеет место тогда, когда А собирается отправить сообщение В (или наоборот). Обозначим за <math>s_{AB}</math> состояние, возникающее, если А посылает сообщение В, а В затем его получает, а за <math>s_{BA}</math> – состояние, возникающее, если В получает другое (или ''нулевое'') сообщение, а затем А посылает свое сообщение В. Обратите внимание, что каждый процесс, отличный от В, имеет одно и то же локальное состояние в <math>s_{AB}</math> и <math>s_{BA}</math>. Рассмотрим выполнение, начинающееся с <math>s_{AB}</math>, в котором каждый процесс, кроме В, делает шаги в порядке очереди. Поскольку <math>s_{AB}</math> является 0-валентным, в конечном итоге будет найдено решение 0. Далее рассмотрим выполнение, начинающееся с <math>s_{BA}</math>, в котором каждый процесс, отличный от В, делает шаги в порядке очереди. Поскольку <math>s_{BA}</math> является 1-валентным, в конечном итоге будет найдено решение 1. Но все процессы, кроме В, имеют одинаковые локальные состояния в конце каждого выполнения, поэтому они не могут принимать решения с разными значениями, что составляет противоречие.   
Из всех возможных пар шагов, которые A и B могли бы выполнить, большинство из них коммутируют: состояния SAB и SBA идентичны, что порождает противоречие, поскольку они имеют разные валентности.
 
 
Единственная пара шагов, которые не коммутируют, имеет место тогда, когда А собирается отправить сообщение В (или наоборот). Обозначим за SAB состояние, возникающее, если А посылает сообщение В, а В затем его получает, а за SBA – состояние, возникающее, если В получает другое (или нулевое) сообщение, а затем А посылает свое сообщение В. Обратите внимание, что каждый процесс, отличный от В, имеет одно и то же локальное состояние в SAB и SBA. Рассмотрим выполнение, начинающееся с SAB, в котором каждый процесс, кроме В, делает шаги в порядке очереди. Поскольку SAB является 0-валентным, в конечном итоге будет найдено решение 0. Далее рассмотрим выполнение, начинающееся с SBA, в котором каждый процесс, отличный от В, делает шаги в порядке очереди. Поскольку SBA является 1-валентным, в конечном итоге будет найдено решение 1. Но все процессы, кроме В, имеют одинаковые локальные состояния в конце каждого выполнения, поэтому они не могут принимать решения с разными значениями, что составляет противоречие.   




4551

правка

Навигация