Existem algumas convenções e intuição aqui, que talvez ajudassem a ser explicadas -
Bits de sinal versus {0,1} bits
O primeiro passo é fazer o que às vezes é chamado de 'grande mudança de notação' e pensar nos bits (mesmo bits clássicos) como sendo codificados em sinais. Isso é produtivo se o que você mais interessa são as paridades das cadeias de bits, porque os movimentos de bits e de sinal agem basicamente da mesma maneira. Nós mapear e , de modo que por exemplo a sequência de bits seria representada pela sequência de sinais .0↦+11↦−1(0,0,1,0,1)(+1,+1,−1,+1,−1)
Paridades de sequências de bits correspondem então a produtos de sequências de sinais. Por exemplo, assim como reconheceríamos como uma computação de paridade, podemos reconhecer como representando a mesma computação de paridade usando a convenção de sinal. Exercício. Calcule a 'paridade' de e de . São os mesmos?0⊕0⊕1⊕0⊕1=0(+1)⋅(+1)⋅(−1)⋅(+1)⋅(−1)=+1
(−1,−1,+1,−1)(+1,−1,+1,+1)
Verificações de paridade usando bits de sinal
Na convenção de {0,1} bits, as verificações de paridade têm uma boa representação como um produto pontual de dois vetores booleanos, para que possamos realizar cálculos de paridade complicados como transformações lineares. Ao mudar para bits de sinal, perdemos inevitavelmente a conexão com a álgebra linear em um nível notacional , porque estamos usando produtos em vez de somas. No nível computacional, porque essa é apenas uma mudança na notação, não precisamos nos preocupar muito. Mas, em um nível matemático puro, agora precisamos pensar um pouco novamente sobre o que estamos fazendo com matrizes de verificação de paridade.
Quando usamos bits de sinal, ainda podemos representar uma 'matriz de verificação de paridade' como uma matriz de 0s e 1s, em vez de sinais ± 1. Por quê? Uma resposta é que um vetor de linha que descreve uma verificação de paridade de bits é de um tipo diferente da sequência de bits em si: descreve uma função nos dados, não nos dados em si. A matriz de 0s e 1s agora requer apenas uma interpretação diferente - em vez de coeficientes lineares em uma soma, eles correspondem a expoentes em um produto. Se tivermos bits de sinal (s1,s2,…,sn)∈{−1,+1}n , e queremos calcular uma verificação de paridade fornecida por um vetor de linha(b1,b2,…,bn)∈{0,1} , a verificação de paridade é então calculada por
(s1)b1⋅(s2)b2⋅[⋯]⋅(sn)bn∈{−1,+1},
onde recordar que s0=1 para todos os s . Assim como ocorre com os bits {0,1}, você pode pensar na linha (b1,b2,…,bn) como apenas representando uma 'máscara' que determina quais bits sj fazem uma contribuição não trivial à paridade computação.
Exercício. Calcule o resultado da verificação de paridade (0,1,0,1,0,1,0) em (+1,−1,−1,−1,−1,+1,−1) .
Autovalores como paridades.
A razão pela qual desejamos codificar bits em sinais na teoria da informação quântica é por causa da maneira como a informação é armazenada em estados quânticos - ou, mais precisamente, pela maneira como podemos descrever o acesso a essa informação. Especificamente, podemos falar muito sobre a base padrão, mas a razão pela qual é significativa é porque podemos extrair essas informações medindo um observável .
Este observável poderia ser apenas o projetor |1⟩⟨1|onde|0⟩ tem autovalor 0 e|1⟩ tem valor próprio 1, mas é frequentemente útil preferem descrever as coisas em termos das matrizes de Pauli. Nesse caso, falaríamos sobre a base padrão como a base própria dooperadorZ ; nesse caso, temos|0⟩ como o +1-eigenvector de Ze|1⟩ como a -1-eigenvector de Z.
Então: temos o surgimento de bits de sinal (neste caso, autovalores) como representando as informações armazenadas em um qubit. E melhor ainda, podemos fazer isso de uma maneira que não é específica da base padrão: podemos falar sobre informações armazenadas na base 'conjugada', apenas considerando se o estado é um eigenstado de X e qual o valor próprio que ele possui. . Mais do que isso, porém, podemos falar sobre os autovalores de um operador Pauli de múltiplos qubit como paridades de codificação de múltiplos bits - o produto tensorial Z⊗Z representa uma maneira de acessar o produto dos bits de sinal., ou seja, a paridade, de dois qubits na base padrão. Nesse sentido, o autovalor de um estado em relação a um operador Pauli de múltiplos qubit - se esse autovalor for definido ( ou seja, no caso em que o estado é um autovalor do operador Pauli) - é efetivamente o resultado de um cálculo de paridade de informações armazenadas em alguma opção de base para cada um dos qubits.
Exercício. Qual é a paridade do estado |11⟩ com respeito a Z⊗Z ? Esse estado tem uma paridade bem definida em relação a X⊗X ?
Exercício. Qual é a paridade do estado |+−⟩ com respeito a X⊗X ? Esse estado tem uma paridade bem definida em relação a Z⊗Z ?
Exercício. Qual é a paridade de |Φ+⟩=12√(|00⟩+|11⟩)com respeito aZ⊗ZeX⊗X?
Geradores estabilizadores como verificação de paridade.
Agora estamos em posição de apreciar o papel dos geradores estabilizadores como sendo análogos a uma matriz de verificação de paridade. Considere o caso do código CSS de 7 qubit, com geradores
Generatorg1g2g3g4g5g61XZ2XZ3XXZZTensor factors4XZ5XXZZ6XXZZ7XXXZZZ
Eu omiti os fatores tensores de identidade acima, pois às vezes é possível omitir os 0s de uma matriz {0,1} e pelo mesmo motivo: em um determinado operador estabilizador, a matriz de identidade corresponde a um fator tensorial que não é incluído na 'máscara' de qubits para a qual estamos computando a paridade. Para cada gerador, estamos interessados apenas nos fatores tensores que estão sendo acionados de alguma forma, porque esses contribuem para o resultado da paridade.
Agora, as 'palavras de código' (os estados básicos codificados) do código CSS de 7 qubit são fornecidas por
|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.