  We describe a successive-cancellation \emph{list} decoder for polar codes,
which is a generalization of the classic successive-cancellation decoder of
Ar{\i}kan. In the proposed list decoder, up to $L$ decoding paths are
considered concurrently at each decoding stage. Then, a single codeword is
selected from the list as output. If the most likely codeword is selected,
simulation results show that the resulting performance is very close to that of
a maximum-likelihood decoder, even for moderate values of $L$. Alternatively,
if a "genie" is allowed to pick the codeword from the list, the results are
comparable to the current state of the art LDPC codes. Luckily, implementing
such a helpful genie is easy.
  Our list decoder doubles the number of decoding paths at each decoding step,
and then uses a pruning procedure to discard all but the $L$ "best" paths. %In
order to implement this algorithm, we introduce a natural pruning criterion
that can be easily evaluated. Nevertheless, a straightforward implementation
still requires $\Omega(L \cdot n^2)$ time, which is in stark contrast with the
$O(n \log n)$ complexity of the original successive-cancellation decoder. We
utilize the structure of polar codes to overcome this problem. Specifically, we
devise an efficient, numerically stable, implementation taking only $O(L \cdot
n \log n)$ time and $O(L \cdot n)$ space.
