Die Siite isch nonig ibersetzt worre. Ihr luege d englischi Originalversion aa.
CSS Codes
Classical linear codes
Classical error correcting codes were first studied in the 1940s, and many different codes are now known, with the most commonly studied and used codes falling into a category of codes known as linear codes. We'll see exactly what the word "linear" means in this context in just a moment, but a very simple way to express what linear codes are at this point is that they're stabilizer codes that happen to be classical. CSS codes are essentially pairs of classical linear codes that are combined together to create a quantum error correcting code. So, for the sake of the discussion that follows, we're going to need to understand a few basic things about classical linear codes.
Let be the binary alphabet for this entire discussion. When we refer to a classical linear code, we mean a non-empty set of binary strings of length for some positive integer which must satisfy just one basic property: if and are binary strings in then the string is also in Here, refers to the bitwise exclusive-OR of and as we encountered multiple times in the "Fundamentals of quantum algorithms" course.
In essence, when we refer to a classical error correcting code as being linear, we're thinking about binary strings of length as being -dimensional vectors, where the entries are all either or and demanding that the code itself forms a linear subspace. Instead of ordinary vector addition over the real or complex numbers, however, we're using addition modulo which is simply the exclusive-OR. That is, if we have two codewords and meaning that and are binary strings in then modulo 2, which is to say must also be a codeword in Notice, in particular, that this implication must be true even if This implies that must include the all-zero string because the bitwise exclusive-OR of any string with itself is the all-zero string.
Example: the 3-bit repetition code
The 3-bit repetition code is an example of a classical linear code. In particular, we have so, with respect to the linearity condition, there are just two possible choices for and two possible choices for It's a trivial matter to go through the four possible pairs to see that we always get a codeword when we take the bitwise exclusive-OR:
Example: the -Hamming code
Here's another example of a classical linear code called the -Hamming code. It was one of the very first classical error correcting codes ever discovered, and it consists of these 16 binary strings of length 7. (Sometimes the -Hamming code is understood to mean the code with these strings reversed, but we'll take it to be the code containing the strings shown here.)
There is very simple logic behind the selection of these strings, but it's secondary to the lesson and won't be explained here. For now, it's enough to observe that this is a classical linear code: XORing any two of these strings together will always result in another string in the code.
The notation (in single square brackets) means something analogous to the double square bracket notation for stabilizer codes mentioned in the previous lesson, but here it's for classical linear codes. In particular, codewords have bits, we can encode bits using the code (because there are codewords), and it happens to be a distance code, which means that any two distinct codewords must differ in at least positions — so at least bits must be flipped to change one codeword into another. The fact that this is a distance code implies that it can correct for up to one bit-flip error.
Describing classical linear codes
The examples just mentioned are very simple examples of classical linear codes, but even the -Hamming code looks somewhat mysterious when the codewords are simply listed. There are better, more efficient ways to describe classical linear codes, including the following two ways.
-
Generators. One way to describe a classical linear code is with a minimal list of codewords that generates the code, meaning that by taking all of the possible subsets of these codewords and XORing them together, we get the entire code.
In greater detail, the strings generate the classical linear code if
with the understanding that when and when and we say that this list is minimal if removing one of the strings generates a smaller code. A natural way to think about such a description is that the collection forms a basis for as a subspace, where we're thinking about strings as vectors with binary-valued entries, keeping in mind that we're working in a vector space where arithmetic is done modulo
-
Parity checks. Another natural way to describe a classical linear code is by parity checks — meaning a minimal list of binary strings for which the strings in the code are precisely the ones whose binary dot product with every one of these parity check strings is zero. (Similar to the bitwise exclusive-OR, the binary dot product appeared several times in "Fundamentals of quantum algorithms.")
That is, the strings