Здесь есть несколько условностей и интуиция, которые, возможно, было бы полезно изложить -
Знаковые биты против {0,1} битов
. Первым шагом является создание того, что иногда называют «большим сдвигом обозначений», и представьте, что биты (даже классические биты) кодируются в знаках. Это полезно сделать, если вас больше всего интересует четность битовых строк, потому что бит-флип и флип-флип в основном действуют одинаково. Мы отображаем 0↦+1 и 1↦−1 , так что, например, последовательность битов (0,0,1,0,1) будет представлена последовательностью знаков (+1,+1,−1,+1,−1) .
Соотношения последовательностей битов тогда соответствуют произведениям последовательностей знаков. Например, так же, как мы могли бы распознать 0⊕0⊕1⊕0⊕1=0 в качестве вычисления четности, мы можем распознать (+1)⋅(+1)⋅(−1)⋅(+1)⋅(−1)=+1 как представление того же вычисления четности с использованием соглашения о знаках.
Упражнение.Вычислить «четность» (−1,−1,+1,−1) и (+1,−1,+1,+1) . Это одно и то же?
Проверка на четность с использованием знаковых битов В соглашении {0,1} -битов проверки на четность имеют хорошее представление в виде точечного произведения двух булевых векторов, поэтому мы можем реализовать сложные вычисления четности в виде линейных преобразований. Переходя к знаковым битам, мы неизбежно потеряли связь с линейной алгеброй на нотационном уровне, потому что мы берем продукты вместо сумм. На вычислительном уровне, потому что это всего лишь сдвиг в обозначениях, нам не нужно особо беспокоиться. Но на чисто математическом уровне нам теперь нужно немного подумать о том, что мы делаем с матрицами проверки на четность.
Когда мы используем знаковые биты, мы все равно можем представлять «матрицу проверки на четность» в виде матрицы нулей и единиц вместо знаков ± 1. Почему? Один из ответов заключается в том, что вектор строки, описывающий проверку четности битов, отличается от типа самой последовательности битов: он описывает функцию для данных, а не для самих данных. Массив 0 и 1 теперь просто требует другой интерпретации - вместо линейных коэффициентов в сумме они соответствуют показателям в произведении. Если у нас есть знаковые биты (s1,s2,…,sn)∈{−1,+1}n , и мы хотим вычислить проверку четности, заданную вектором-строкой(b1,b2,…,bn)∈{0,1} , проверка четности затем вычисляется с помощью
(s1)b1⋅(s2)b2⋅[⋯]⋅(sn)bn∈{−1,+1},
где напомним, что s0=1 для всех s . Как и в случае {0,1} -бит, вы можете думать о строке (b1,b2,…,bn) как о «маске», которая определяет, какие биты sj вносят нетривиальный вклад в четность. вычисление.
Упражнение. Вычислить результат проверки четности (0,1,0,1,0,1,0) на (+1,−1,−1,−1,−1,+1,−1) .
Собственные значения как соотношения.
Причина, по которой мы хотели бы закодировать биты в знаках в квантовой теории информации, заключается в том, как информация хранится в квантовых состояниях - или, точнее, в том, как мы можем описать доступ к этой информации. В частности, мы можем много говорить о стандартной основе, но причина, по которой она имеет смысл, заключается в том, что мы можем извлечь эту информацию путем измерения наблюдаемой .
Это наблюдаемое может быть просто проектором |1⟩⟨1|где|0⟩ имеет собственное значение 0 и|1⟩ имеет собственное значение 1, но часто бывает полезно предпочитают описывать вещи в терминах матриц Паули. В этом случае мы будем говорить о стандартном базисе как о собственном базисеоператораZ , и в этом случае мы имеем|0⟩ как +1-eigenvector из Zи|1⟩ как -1-eigenvector из Z.
Итак: мы имеем появление знаковых битов (в данном случае, собственных значений), представляющих информацию, хранящуюся в кубите. И еще лучше, мы можем сделать это способом, который не является специфическим для стандартной базы: мы можем говорить об информации, хранящейся в «сопряженной» основе, просто рассматривая, является ли состояние собственным состоянием X , и какое собственное значение оно имеет , Но более того, мы можем говорить о собственных значениях мультикубитного оператора Паули как кодирующих четностей нескольких битов - тензорное произведение Z⊗Z представляет способ доступа к произведению знаковых битов.то есть четность двух кубитов в стандартном базисе. В этом смысле собственное значение состояния по отношению к мультикубитному оператору Паули - если это собственное значение определено ( т. Е. В случае, когда состояние является собственным значением оператора Паули) - фактически является результатом вычисления четности информации, хранящейся в некотором выборе основы для каждого из кубитов.
Упражнение. Каков паритет государства |11⟩ по отношению к Z⊗Z ? Имеет ли это состояние четкую четность относительно X⊗X ?
Упражнение. Каков паритет государства |+−⟩ относительно X⊗X ? Имеет ли это состояние четкую четность относительно Z⊗Z ?
Упражнение. Что такое соотношение |Φ+⟩=12√(|00⟩+|11⟩)относительноZ⊗ZиX⊗X?
Генераторы стабилизатора как проверки четности.
Теперь мы можем оценить роль генераторов стабилизатора как аналога матрицы контроля четности. Рассмотрим случай 7-кубитного CSS-кода с генераторами
Generatorg1g2g3g4g5g61XZ2XZ3XXZZTensor factors4XZ5XXZZ6XXZZ7XXXZZZ
Я опускал факторы тензора тождества выше, так как иногда можно опустить 0 в матрице {0,1}, и по той же причине: в данном операторе стабилизатора единичная матрица соответствует тензору, который не является включены в «маску» кубитов, для которых мы вычисляем четность. Для каждого генератора нас интересуют только те тензорные факторы, на которые так или иначе воздействуют, потому что они способствуют результату паритета.
Теперь «кодовые слова» (закодированные стандартные базовые состояния) 7-кубитного CSS-кода задаются как
|0L⟩∝|1L⟩∝|0000000⟩+|0001111⟩+|0110011⟩+|0111100⟩+|1010101⟩+|1011010⟩+|1100110⟩+|1101001⟩=∑y∈C|y⟩,|1111111⟩+|1110000⟩+|1001100⟩+|1000011⟩+|0101010⟩+|0100101⟩+|0011001⟩+|0010110⟩=∑y∈C|y⊕1111111⟩,
where C is the code generated by the bit-strings 0001111, 0110011, and 1010101. Notably, these bit-strings correspond to the positions of the X operators in the generators g1, g2, and g3. While those are stabilisers of the code (and represent parity checks as I've suggested above), we can also consider their action as operators which permute the standard basis. In particular, they will permute the elements of the code C, so that the terms involved in |0L⟩ and |1L⟩ will just be shuffled around.
The generators g4, g5, and g6 above are all describing the parities of information encoded in standard basis states.
The encoded basis states you are given are superpositions of codewords drawn from a linear code, and those codewords all have even parity with respect to the parity-check matrix from that code.
As g4 through g6 just describe those same parity checks, it follows that the eigenvalue of the encoded basis states is +1 (corresponding to even parity).
This is the way in which
'with the observation about the similarities between the parity check matrix and the generator the exercise is "self evident"'
— because the stabilisers either manifestly permute the standard basis terms in the two 'codewords', or manifestly are testing parity properties which by construction the codewords will have.
Moving beyond codewords
The list of generators in the table you provide represent the first steps in a powerful technique, known as the stabiliser formalism, in which states are described using no more or less than the parity properties which are known to hold of them.
Some states, such as standard basis states, conjugate basis states, and the perfectly entangled states |Φ+⟩∝|00⟩+|11⟩ and |Ψ−⟩∝|01⟩−|10⟩ can be completely characterised by their parity properties. (The state |Φ+⟩ is the only one which is a +1-eigenvector of X⊗X and Z⊗Z; the state |Ψ−⟩ is the only one which is a −1-eigenvector of both these operators.) These are known as stabiliser states, and one can consider how they are affected by unitary transformations and measurements by tracking how the parity properties themselves transform. For instance, a state which is stabilised by X⊗X before applying a Hadamard on qubit 1, will be stabilised by Z⊗X afterwards, because (H⊗I)(X⊗X)(H⊗I)=Z⊗X.
Rather than transform the state, we transform the parity property which we know to hold of that state.
You can use this also to characterise how subspaces characterised by these parity properties will transform.
For instance, given an unknown state in the 7-qubit CSS code, I don't know enough about the state to tell you what state you will get if you apply Hadamards on all of the qubits, but I can tell you that it is stabilised by the generators g′j=(H⊗7)gj(H⊗7), which consist of
Generatorg′1g′2g′3g′4g′5g′61ZX2ZX3ZZXXTensor factors4ZX5ZZXX6ZZXX7ZZZXXX
This is just a permutation of the generators of the 7-qubit CSS code, so I can conclude that the result is also a state in that same code.
There is one thing about the stabiliser formalism which might seem mysterious at first: you aren't really dealing with information about the states that tells you anything about how they expand as superpositions of the standard basis. You're just dealing abstractly with the generators. And in fact, this is the point: you don't really want to spend your life writing out exponentially long superpositions all day, do you? What you really want are tools to allow you to reason about quantum states which require you to write things out as linear combinations as rarely as possible, because any time you write something as a linear combination, you are (a) making a lot of work for yourself, and (b) preferring some basis in a way which might prevent you from noticing some useful property which you can access using a different basis.
Still: it is sometimes useful to reason about 'encoded states' in error correcting codes — for instance, in order to see what effect an operation such as H⊗7 might have on the codespace of the 7-qubit code. What should one do instead of writing out superpositions?
The answer is to describe these states in terms of observables — in terms of parity properties — to fix those states. For instance, just as |0⟩ is the +1-eigenstate of Z, we can characterise the logical state |0L⟩ of the 7-qubit CSS code as the +1-eigenstate of
ZL=Z⊗Z⊗Z⊗Z⊗Z⊗Z⊗Z
and similarly, |1L⟩ as the −1-eigenstate of ZL.
(It is important that ZL=Z⊗7 commutes with the generators {g1,…,g6}, so that it is possible to be a +1-eigenstate of ZL at the same time as having the parity properties described by those generators.)
This also allows us to move swiftly beyond the standard basis: using the fact that X⊗7 anti commutes with Z⊗7 the same way that X anti commutes with Z, and also as X⊗7 commutes with the generators gi, we can describe |+L⟩ as being the +1-eigenstate of
XL=X⊗X⊗X⊗X⊗X⊗X⊗X,
and similarly, |−L⟩ as the −1-eigenstate of XL.
We may say that the encoded standard basis is, in particular, encoded in the parities of all of the qubits with respect to Z operators; and the encoded 'conjugate' basis is encoded in the parities of all of the qubits with respect to X operators.
By fixing a notion of encoded operators, and using this to indirectly represent encoded states, we may observe that
(H⊗7)XL(H⊗7)=ZL,(H⊗7)ZL(H⊗7)=XL,
which is the same relation as obtains between X and Z with respect to conjugation by Hadamards; which allows us to conclude that for this encoding of information in the 7-qubit CSS code, H⊗7 not only preserves the codespace but is an encoded Hadamard operation.
Thus we see that the idea of observables as a way of describing information about a quantum states in the form of sign bits — and in particular tensor products as a way of representing information about parities of bits — plays a central role in describing how the CSS code generators represent parity checks, and also in how we can describe properties of error correcting codes without reference to basis states.
One way that you could construct what the codeword is is to project on the+1 eigenspace of the generators,
|C1⟩=126(∏i=16(I+gi))|0000000⟩.
Concentrate, to start with, one the first 3 generators
(I+g1)(I+g2)(I+g3).
If you expand this out, you'll see that it creates all the terms in the group (I,g1,g2,g3,g1g2,g1g3,g2g3,g1g2g3) . Corresponding it to binary strings, the action of multiplying two terms (since X2=I ) is just like addition modulo 2. So, contained within the code are all of the words generated by the parity check matrix (and this is a group, with group operation of addition modulo 2).
Now, if you multiply by one of theX stabilizers, that's like doing the addition modulo 2 on the corresponding bit strings. But, because we've already generated the group, by definition every group element is mapped to another (unique) group element. In other words, if I do
g1×{I,g1,g2,g3,g1g2,g1g3,g2g3,g1g2g3}={g1I,g1g2,g1g3,g2,g3,g1g2g3,g2g3},
I get back the set I started with (using g21=I , and the commutation of the stabilizers), and therefore I'm projecting onto the same state. Hence, the state is stabilized by g1 to g3 .
You can effectively make the same argument forg4 to g6 . I prefer to think about first applying a Hadamard to every qubit, so the Xs are changed to Zs and vice versa. The set of stabilizers are unchanged, so the code is unchanged, but the Z stabilizer is mapped to an X stabilizer, about which we have already argued.
источник
What follows perhaps doesn't exactly answer your question, but instead aims to provide some background to help it become as 'self-evident' as your sources claim.
TheZ operator has eigenstates |0⟩ (with eigenvalue +1 ) and |1⟩ (with eigenvalue −1 ). The ZZ operator on two qubits therefore has eigenstates
|00⟩,|01⟩,|10⟩,|11⟩ .
The eigenvalues for these depend on the parity of the bit strings. For example, with |00⟩ we multiply the +1 eigenvalues of the individual Z operators to get +1 . For |11⟩ we multiply the −1 eigenvalues together and also get +1 for ZZ . So both these even parity bit strings have eigenvalue +1 , as does any superposition of them. For both odd parity states (|01⟩ and |10⟩ ) we must multiply a +1 with a −1 , and get a −1 eigenvalue for ZZ .
Note also that superpositions of bit strings with fixed parity (such as someα|00⟩+β|00⟩ ) are also eigenstates, and have the eigenvalue associated with their parity. So measuring ZZ would not collapse such a superposition.
This analysis remains valid as we go to higher number of qubits. So if we want to know about the parity of qubits 1, 3, 5, and 7 (to pick a pertinent example), we could use the operatorZIZIZIZ . If we measure this and get the outcome +1 , we know that this subset of qubits has a state represented by an even parity bit string, or a superposition thereof. If we get −1 , we know that it is an odd parity state.
This allows us to write the [7,4,3] Hamming code using the notation of quantum stabilizer codes. Each parity check is turned into a stabilizer generator which hasI on every qubit not involved in the check, and Z on every qubit that is. The resulting code will protect against errors that anticommute with Z (and therefore have the effect of flipping bits).
Of course, qubits do not restrict us to only working in theZ basis. We could encode our qubits for a classical Hamming code in the |+⟩ and |−⟩ states instead. These are the eigenstates of X , so you just need to replace Z with X in everything I've said to see how this kind of code works. It would protect against errors that anticommute with X (and so have the effect of flipping phase).
The magic of the Steane code, of course, is that it does both at the same time and protects against everything.
источник