\enlargethispage
% keeps everything on one page so it is returned by latex macro.
\usepackage
\usepackage
\newcommand\ignore[2]{}
%------------------Jim Aug 11 --------------------------
\newcommand
\usepackage
\usepackage
\psset
\psset
\psset
%\usepackage
%\usepackage
%\newcommand\modabstract[1]{\center\textbf
\flushleft \begin
[h]
#1\end{minipage}}
\Large\begin
\textbf{Effectively Nonblocking Consensus
Procedures Can Execute Forever – a Constructive Version of FLP
}
\vspace
\large
\normalsize\em
\normalsize\em
\normalsize\em
\footnote
\end
\begin
\normalsize
\begin
\noindent The Fischer-Lynch-Paterson theorem (FLP) says that it is
impossible for processes in an \emph
to achieve consensus on a binary value when a single process
can fail; it is a widely cited theoretical result about network
computing. All proofs that I know depend essentially on classical
(nonconstructive) logic, although they use the hypothetical
construction of a nonterminating execution as a main lemma.
\flushleft
FLP is also a guide for protocol designers, and in that role there
is a connection to an important property of consensus procedures,
namely that they should not \emph
, i.e. reach a global state
in which no process can decide.
\flushleft
A deterministic fault-tolerant consensus protocol is
\emph
if from any reachable \emph
we can find an execution path that decides. In this article
we effectively construct a nonterminating execution of any such
protocol. That is, given any effectively nonblocking protocol \textbf
and a natural
number $n$, we show how to compute the $n$-th step of an infinitely
\emph
of \textbf
. From this fully constructive
result, the \emph
follows as a corollary as well as a
stronger classical result, called here \emph
. Moreover,
the construction focuses attention on the important role of
nonblocking in protocol design.
\flushleft
An interesting consequence of the constructive proof is that we can, in principle, build an \emph
for a consensus protocol that is provably correct, indeed because it is provably correct. We can do this in practice on certain kinds of networks.
\end
\section
\subsection
The standard version of the Fisher-Lynch-Paterson theorem is that
there is no asynchronous distributed algorithm that is responsive to
its inputs, solves the agreement problem, and guarantees 1-failure
termination. This is a negative statement, producing a
contradiction, yet implicit in all proofs is an imagined
construction of a nonterminating execution in which no process
decides, they "waffle" endlessly. That imagined execution is an
interesting object, displaying what can go wrong in trying to reach
consensus and characterizing a class of protocols. The hypothetical
execution is used to guide thinking about consensus protocol design
(illustrated below). In light of that use, a natural question about
the classical proofs of FLP is whether the hypothetical infinite
waffling execution could actually be constructed from any purported
consensus protocol \textbf
, that is, given \textbf
, can we
exhibit an algorithm $\alpha$ such that for any natural number $n$,
$\alpha$ is the $n$-th step of the indecisive computation.
It appears that no such explicit construction could be carried out
following the method of the classical proof because there isn't
enough information given with the protocol, and the key concept in
the standard proofs, the notion of \emph
(\emph
and \emph
), is not defined effectively, i.e. they require
knowing the results of all possible executions. This means that the
case analysis used to imagine the infinite execution can not
actually be decided. Of course, it is not possible to find this
infinite execution by simply running a purported protocol. Only a
\emph
can show that it will run forever.
Other authors \cite
have reformulated the proof of the
FLP in a way that singles out the infinite computation as the result
of a separate lemma, but they do not provide an effective means of
building the infinite computation and do not use constructive
reasoning. I refer to Volzer's classical result as \emph
; it is a corollary of the effective construction given here.
The key to being able to build the nonterminating execution is to
provide more information, which we do by introducing the notion of
\emph
, defining bivalence effectively, and
introducing the idea of a \emph
. We use the
term \emph
in most of this article to make comparison
with the classical ideas clear, but when contrasting this work to
others, we will use the term \emph
.
\footnote
Effective nonblocking is a natural concept in the setting in which
we verify protocols using constructive logic, say the rules of the
Nuprl formal programming environment or of the Coq prover
\cite
. The logic of Nuprl is Computational Type Theory (CTT)
\cite
, which is constructive, and the logic of Coq is the
Calculus of Inductive Constructions (CIC), closely related to CTT
and also constructive. So when we prove that a protocol is
nonblocking, we obtain the effective witness function used in the
definition below. Mark Bickford in his Nuprl formalization
of consensus protocols has done formal
proofs of nonblocking from which Nuprl can extract the deciding
state and could extract an execution as well.
The importance of nonblocking can be seen from this "blocking
theorem" by Robbert van Renesse in \cite
: \emph
This is justified
by citing FLP, and it follows cleanly from CFLP as I show below. Robbert van Renesse says: ``Blocked states occur when one or more
processes fail at a time at which other processes cannot determine
if the protocol has decided. A protocol that tolerates failures must
avoid such blocked states''. Protocol designers actually carry out
an analysis of blocking in debugging designs. A constructive proof
of the \emph
could find the blocking scenario
after designating a process that fails. Knowing precisely the number
of blocking scenarios and their properties would be useful in
evaluating protocol designs.
It is fascinating that once we use the concept of effective
bivalence, it is possible to automatically translate some
nonconstructive proofs of FLP into fully constructive ones from
which it is possible to build the nonterminating execution. Here we look
at the simpler result that we can effectively build nonterminating
executions. These are executions that endlessly waffle about the
decisions that are possible, decisions actually taken by
\emph
.
Since it is not possible to provide an \emph
, i.e. a
\emph
consensus procedure, we start with the kind of
protocol that can be built, and stress the possibility of
nontermination by calling it a \emph
not an algorithm.
\subsection
The results here depend on the computing model behind the Logic of
Events, \cite
which is essentially embedding the standard model of asynchronous
message-passing network computing into
Computational Type Theory. The standard model is presented in the book
\emph
of Attyia \& Welch \cite
and is
similar to the one in \cite
. We assume reliable FIFO communication
channels.
A \emph
of the system consists of the state of the
processes and the condition of the message queues. An
\emph
is an alternating sequence of global states and
actions taken by processes. Thus an execution $\alpha$ of
distributed system \textbf
determines sequence of \emph
, $s_1, s_2, s_3, ...$. These are also called
\emph
of the execution. Execution is fair \emph
that all messages sent to nonfailing processes
will eventually be read and all enabled actions will eventually be
taken by processes that do not fail.
A \emph
can involve any finite number of processes
reading a message from an input channel, changing the internal
state, and sending messages on output channels. In the proofs here,
we pick an order on these steps so that there is always a single
action separating the global states. We say that a \emph
determines the order of the actions.
\subsection
\textbf
: A Boolean \emph
on
processes $P_
~i=1,...,n$ tolerating $t$ failures is a possibly
nonterminating distributed procedure \textbf
which is deterministic
(no randomness), responsive on uniform initializations, consistent
(all deciding processes agree on the same value).
\textbf
is called \emph
if from any
reachable global state $s$ of an execution of \textbf
and any
subset $Q$ of $n-t$ nonfailed processes, \emph
an
execution $\alpha$ from $s$ using $Q$ and a process $P_
$ in
$Q$ which decides a value $v~\epsilon~\mathbb
$.
Constructively this means that we have a computable function,
$wt(s,Q)$ which produces an execution $\alpha$ and a state
$s_\alpha$ in which a process, say $P_\alpha$ decides a value $v$.
In this setting, a consensus procedure is \emph
if when
\emph
processes are initialized to $v$, they terminate with
decision $v$ unless they fail. This means that all nonblocking
witnesses will return $v$ as well.
The nonblocking property requires that consensus procedures
tolerating $t$ failures can use any subset of $n-t$ processes to
pick out from any partial execution a process that makes a decision.
This is enough information for an \emph
to
prevent a deterministic consensus procedure, one that does not rely
on randomness, from terminating on every execution. The adversary
can keep adjusting the schedule of executions to prevent processes
from deciding.
It is important to have good notations for the class of all
processes of \textbf
except for $P_i$. We denote that class by $Q_i$, because we
want to factor executions into steps of a specified process and
those of the remaining processes. These are disjoint sets, and we
can combine executions from them by appending one to another and
infer joint properties from the separate properties of each.
\textbf
For a $v~\epsilon~\mathbb
$, a global state
$s$ is \emph
\emph
for some subset $Q$ of $n-t$
processes we can find using the nonblocking witness a state
$s^
_
$ and a process $P_Q$ in $s^
_
$ that
decides $v$. That is, $wt(s,Q)$ produces a computation ending in
$s^
_
$.
\textbf
A global state $b$ is \emph
iff we
can find executions $\alpha_0$ and $\alpha_1$ from $b$ that decide
$0$ and $1$ respectively. We can pick out the deciding process from
the execution. A state is \emph
if neither
execution involves a step of process $P_i$. Note, if $b$ is
bivalent, we can effectively exhibit the executions $\alpha_0$ and
$\alpha_1$.
\textbf
It is \emph
whether the global states of a
consensus procedure are $v-possible$.
Note, we can't decide bivalence.