Code spaces and code-words
A quantum error correcting code is often identified with the code-space (Nielsen & Chuang certainly seem to do so). The code space $\mathcal C$ of e.g. an $n$-qubit quantum error correction code is a vector subspace $\mathcal C \subseteq \mathcal H_2^{\otimes n}$.
A code word (terminology which was borrowed from the classical theory of error correction) is a state $\lvert \psi \rangle \in \mathcal C$ for some code-space: that is, it is a state which encodes some data.
Quantum error correction codes
In practice, we demand some non-trivial properties to hold of a quantum error correction code, such as:
- That $\mathop{\mathrm{dim}} \mathcal C \geqslant 2$, so that there is a non-zero amount of information being encoded;
- That there are a set $\mathcal E = \{ E_1, E_2, \ldots \}$ of at least two operators including the operator $E_1 = \mathbb 1$, such
that — if $P$ is the orthogonal projector onto $\mathcal C$ — we have $$P E_j E_k P = \alpha_{j,k} P$$
for some scalars $\alpha_{j,k}$ (known as the Knill–Laflamme conditions).
This determines some set of error operators against which you can in principle protect a state $\lvert \psi \rangle \in \mathcal C$, in that if the Knill–Laflamme conditions hold of a set of operators $\mathcal E$, and some operator $E \in \mathcal E$ acts on your state, it is possible in principle to detect the fact that $E$ has occurred (as opposed to some other operator in $\mathcal E$) and undo the error, without disrupting the data stored in the original state $\lvert \psi \rangle$.
A quantum error correction code is a code-space $\mathcal C$, together with a set of error operators $\mathcal E$ which satisfy the Knill–Laflamme conditions — that is, a quantum error correcting code must specify which errors it is meant to protect against.
Why it is common to identify quantum error correcting codes with their code-spaces
You cannot determine a unique set $\mathcal E$ of operators which satisfy the Knill–Laflamme conditions from the code-space $\mathcal C$ alone. However, it is most common to consider which low-weight operators (ones which act only on a small number of qubits) can be simultaneosuly corrected by a code, and to an extent this can be derived from the code-space alone. The code distance of a code space $\mathcal C$ is the smallest number of qubits that you have to act on, to transform one "code-word" $\lvert \psi \rangle \in \mathcal C$ into a distinct codeword $\lvert \psi' \rangle \in \mathcal C$. If we then describe a code-space as being a $[\![n,k,d]\!]$ code, this then says that $\mathcal C \subseteq \mathcal H_2^{\otimes n}$ has dimension $2^k$, and that the set $\mathcal E$ that we consider is the set of all Pauli operators with weight at most $\lfloor (d{-}1)/2 \rfloor$.
In some cases, describing a code as an $[\![n,k,d]\!]$ code is enough. For instance, the 5-qubit code is a $[\![5,1,3]\!]$ code, and it is possible to show that five qubits cannot encode a single qubit in such a way that any other errors can be corrected in addition to all of the single-qubit errors.
However, the same is not true of the Steane $[\![7,1,3]\!]$ code, which can protect against any single-qubit Pauli error as well as some (but not all) two-qubit Pauli errors. Which two-qubit Pauli errors you should protect against depends on what your error model is; and if your noise is symmetric and independently distributed, it won't matter very much what you choose (so that you will likely make the conventional choice of any single $X$ error together with any single $Z$ error). It is however a choice, and one which will guide how you protect your data against noise.
Stabiliser codes
A stabiliser code is a quantum error correction code determined by a set $\mathscr S$ of stabiliser generators, which are Pauli operators which commute with one another, and which define a code-space $\mathcal C$ by the intersection of their +1-eigenspaces. (It is often useful to consider the stabiliser group $\mathcal G$ formed by products of $P \in \mathscr S$.)
Almost all quantum error correction codes that people consider in practise are stabiliser codes. This is one reason why you may have problems distinguishing the two terms. However, we do not require that a quantum error correction code be a stabiliser code — just as in principle we do not require a classical error correction code to be a linear code. Stabiliser codes just happen to be an extremely successful way of describing quantum error correcting codes, just as linear error correcting codes are an extremely successful way of describing classical error correcting codes. And indeed, stabiliser codes can be regarded as a natural generalisation of the theory of classical linear codes to quantum error correction.
As people are often interested just in low-weight operators which are less than half the code distance, the set of stabilisers is often all people say about an stabiliser correction code. However, to specify the set of errors $\mathcal E$ against which the code can protect, it is necessary also to specify a relationship $\sigma$ between Pauli product operators $E$ and subsets $S \subseteq \mathscr S$, such that
- $E$ anticommutes with $P \in \mathscr S$ if and only if $P \in S$ for $\sigma(E,S)$;
- If $E, E'$ both satisfy $\sigma(E,S)$ and $\sigma(E',S)$, then $E E' \in \mathcal G = \langle \mathscr S \rangle$.
This defines a set $$\mathcal E = \bigl\{ E \mathbin{\big\vert}
\exists S \subseteq \mathscr S: \sigma(E,S) \bigr\}$$ of errors
against which the code can protect.
The subsets $S \subseteq \mathscr S$ are called error syndromes, and the relation which I've called $\sigma$ here (which you don't usually see given an explicit name) associates syndromes to one or more errors which 'cause' that syndrome, and whose effects on the code are equivalent.
'Syndromes' represent information that can actually be obtained about an error by 'coherent measurement' — that is, by measuring operators $P \in \mathscr S$ as observables (a process which is usually simulated by eigenvalue estimation). An error $E$ 'causes' a syndrome $S \subseteq \mathscr S$ if, for any code-word $\lvert \psi \rangle \in \mathcal C$, the state $E \lvert \psi \rangle$ is in the $-1$ eigenspace of all operators $P \in S$, and in the $+1$-eigenspace of all other operators in $\mathscr S$. (This property is directly related to the anticommutation of $E$ with all of the elements of $S \subseteq \mathscr S$, and only those elements.)