Códigos estabilizadores
Agora vamos definir os códigos estabilizadores de forma geral. Também discutiremos algumas de suas propriedades básicas e como eles funcionam, incluindo como os estados podem ser codificados e como os erros são detectados e corrigidos usando esses códigos.
Definição de códigos estabilizadores
Um código estabilizador de qubits é especificado por uma lista de operações de Pauli em qubits, Essas operações são chamadas de geradores estabilizadores neste contexto, e devem satisfazer as três propriedades a seguir.
-
Os geradores estabilizadores todos comutam uns com os outros.
-
Os geradores estabilizadores formam um conjunto gerador minimal.
-
Pelo menos um vetor de estado quântico é fixado por todos os geradores estabilizadores.
(Não é óbvio que a existência de um vetor de estado quântico fixado por todos os geradores estabilizadores, ou seja, seja equivalente a mas isso é de fato o caso, e veremos o porquê um pouco mais adiante na lição.)
Supondo que tenhamos uma lista como essa, o espaço de código definido por esses geradores estabilizadores é o subespaço que contém todo vetor de estado quântico de qubits fixado pelos geradores estabilizadores.
Os vetores de estado quântico nesse subespaço são precisamente os que podem ser vistos como codificações válidas de estados quânticos. Discutiremos o processo real de codificação mais adiante.
Por fim, o estabilizador do código definido pelos geradores estabilizadores é o conjunto gerado por essas operações:
Uma maneira natural de pensar sobre um código estabilizador é ver os geradores estabilizadores como observáveis e interpretar coletivamente os resultados das medições associadas a esses observáveis como uma síndrome de erro. As codificações válidas são vetores de estado quântico de qubits para os quais os resultados das medições, como autovalores, são todos garantidamente iguais a Qualquer outra síndrome, onde ocorre pelo menos um resultado de medição , sinaliza que um erro foi detectado.
Vamos dar uma olhada em vários exemplos em breve, mas primeiro apenas algumas observações sobre as três condições para os geradores estabilizadores são pertinentes.
A primeira condição é natural, à luz da interpretação dos geradores estabilizadores como observáveis, pois implica que não importa em que ordem as medições são realizadas: os observáveis comutam, então as medições também comutam. Isso naturalmente impõe certas restrições algébricas aos códigos estabilizadores que são importantes para o seu funcionamento.
A segunda condição exige que os geradores estabilizadores formem um conjunto gerador minimal, ou seja, que a remoção de qualquer um deles resultaria em um estabilizador menor. Falando estritamente, essa condição não é realmente essencial para o funcionamento dos códigos estabilizadores em um sentido operacional — e, como veremos na próxima lição, às vezes faz sentido pensar em conjuntos de geradores estabilizadores para códigos que de fato não satisfazem essa condição. Para efeitos de análise dos códigos estabilizadores e explicação de suas propriedades, no entanto, assumiremos que essa condição está em vigor. Em resumo, essa condição garante que cada observável que medimos para obter a síndrome de erro acrescenta informações sobre possíveis erros, em vez de ser redundante e produzir resultados que poderiam ser inferidos das outras medições dos geradores estabilizadores.
A terceira condição exige que pelo menos um vetor não nulo seja fixado por todos os geradores estabilizadores, o que é equivalente a não estar contido no estabilizador. A necessidade dessa condição vem do fato de que é efetivamente possível escolher um conjunto gerador minimal de operações de Pauli em qubits que todas comutam entre si, e ainda assim nenhum vetor não nulo é fixado por todas as operações. Não estamos interessados em "códigos" para os quais não há codificações válidas, então descartamos essa possibilidade ao exigir essa condição como parte da definição.
Exemplos
Aqui estão alguns exemplos de códigos estabilizadores para valores pequenos de Veremos mais exemplos, incluindo aqueles para os quais pode ser muito maior, na próxima lição.
Código de repetição de 3 bits
O código de repetição de 3 bits é um exemplo de código estabilizador, onde os geradores estabilizadores são e
Podemos verificar facilmente que esses dois geradores estabilizadores satisfazem as condições exigidas. Primeiro, os dois geradores estabilizadores e comutam entre si.
Segundo, temos um conjunto gerador minimal (de forma bastante trivial neste caso).
E terceiro, já sabemos que e assim como qualquer combinação linear desses vetores, são fixados por e Alternativamente, podemos concluir isso usando a condição equivalente da definição.
Essas condições podem ser muito mais difíceis de verificar para códigos estabilizadores mais complexos.
Código de repetição de 3 bits modificado
Na lição anterior, vimos que é possível modificar o código de repetição de 3 bits para que ele proteja contra erros de inversão de fase em vez de erros de inversão de bit. Como código estabilizador, esse novo código é fácil de descrever: seus geradores estabilizadores são e
Desta vez os geradores estabilizadores representam observáveis em vez de observáveis , portanto são essencialmente verificações de paridade na base mais/menos em vez da base padrão. As três condições exigidas para os geradores estabilizadores são facilmente verificadas, de maneira semelhante ao código de repetição de 3 bits comum.
Código de Shor de 9 qubits
Aqui está o código de Shor de 9 qubits, que também é um código estabilizador, expresso por geradores estabilizadores.
Nesse caso, basicamente temos três cópias do código de repetição de 3 bits, uma para cada um dos três blocos de três qubits, bem como os dois últimos geradores estabilizadores, que têm uma forma que lembra o circuito de detecção de inversões de fase para este código.
Uma forma alternativa de pensar sobre os dois últimos geradores estabilizadores é que eles têm a mesma forma do código de repetição de 3 bits para inversões de fase, exceto que é substituído por o que é consistente com o fato de que corresponde a uma operação sobre qubits lógicos codificados usando o código de repetição de 3 bits.
Antes de passarmos para outros exemplos, deve-se notar que os símbolos de produto tensorial são frequentemente omitidos ao descrever códigos estabilizadores por listas de geradores estabilizadores, pois isso tende a torná-los mais fáceis de ler e ver seus padrões. Por exemplo, os mesmos geradores estabilizadores acima para o código de Shor de 9 qubits ficam assim sem os símbolos de produto tensorial escritos explicitamente.
Código de Steane de 7 qubits
Aqui está outro exemplo de código estabilizador, conhecido como código de Steane de 7 qubits. Ele tem algumas características notáveis, e voltaremos a este código de tempos em tempos ao longo das lições restantes do curso.
Por enquanto, vamos simplesmente observar que este é um código estabilizador válido. Os três primeiros geradores estabilizadores claramente comutam entre si, pois comuta consigo mesmo e a identidade comuta com tudo, e a situação é semelhante para os três últimos geradores estabilizadores. Resta verificar que, ao tomar um dos geradores -estabilizadores (ou seja, um dos três primeiros) e um dos geradores -estabilizadores (ou seja, um dos três últimos), esses dois geradores comutam, e pode-se percorrer os 9 pares possíveis para verificar isso. Em todos esses casos, uma matriz de Pauli e uma sempre se alinham na mesma posição um número par de vezes, de modo que os dois geradores comutarão, assim como e comutam. Isso também é um conjunto gerador minimal, e define um espaço de código não trivial, fatos deixados para você contemplar.
O código de Steane de 7 qubits é semelhante ao código de Shor de 9 qubits no sentido de que codifica um único qubit e permite a correção de um erro arbitrário em um qubit, mas requer apenas 7 qubits em vez de 9.
Código de 5 qubits
Sete não é o menor número de qubits necessário para codificar um qubit e protegê-lo contra um erro arbitrário em um qubit — aqui está um código estabilizador que faz isso usando apenas 5 qubits.
Este código é tipicamente chamado de o código de 5 qubits. Este é o menor número de qubits em um código de correção de erros quânticos que pode permitir a correção de um erro arbitrário em um único qubit.
Códigos estabilizadores unidimensionais
Aqui está outro exemplo de código estabilizador, embora ele não codifique nenhum qubit de fato: o espaço de código é unidimensional. No entanto, ainda é um código estabilizador válido pela definição.
Especificamente, o espaço de código é o espaço unidimensional gerado por um e-bit
Aqui está um exemplo relacionado de código estabilizador cujo espaço de código é o espaço unidimensional gerado por um estado GHZ
Dimensão do espaço de código
Suponha que temos um código estabilizador descrito por geradores estabilizadores de qubits Talvez a primeira pergunta que venha à mente sobre este código seja: "Quantos qubits ele codifica?"
Essa pergunta tem uma resposta simples. Supondo que os geradores estabilizadores de qubits satisfaçam os três requisitos da definição (a saber, que os geradores estabilizadores todos comutam entre si, que este é um conjunto gerador minimal e que o espaço de código é não vazio), então o espaço de código para este código estabilizador deve ter dimensão de modo que qubits podem ser codificados usando este código.
Intuitivamente, temos qubits para usar nessa codificação, e cada gerador estabilizador efetivamente "retira um qubit" em termos de quantos qubits podemos codificar. Note que isso não se refere a quais ou quantos erros podem ser detectados ou corrigidos, é apenas uma afirmação sobre a dimensão do espaço de código.
Por exemplo, tanto para o código de repetição de 3 bits quanto para a versão modificada desse código para erros de inversão de fase, temos qubits e geradores estabilizadores, e portanto esses códigos podem cada um codificar 1 qubit. Como outro exemplo, considere o código de 5 qubits: temos 5 qubits e 4 geradores estabilizadores, portanto novamente o espaço de código tem dimensão 2, o que significa que um qubit pode ser codificado usando este código. Como um último exemplo, o código cujos geradores estabilizadores são e tem um espaço de código unidimensional, gerado pelo estado o que é consistente com ter qubits e geradores estabilizadores.
Agora vamos ver como esse fato pode ser provado. O primeiro passo é observar que, como os geradores estabilizadores comutam, e como toda operação de Pauli é sua própria inversa, todo elemento do estabilizador pode ser expresso como um produto
onde Equivalentemente, cada elemento do estabilizador é obtido multiplicando algum subconjunto dos geradores estabilizadores. De fato, cada elemento do estabilizador pode ser expresso de forma única desta maneira, devido à condição de que é um conjunto gerador minimal.
Em seguida, defina como a projeção sobre o espaço dos autovetores de de para cada Essas projeções podem ser obtidas calculando a média das operações de Pauli correspondentes com a operação identidade da seguinte forma.
O espaço de código é o subespaço de todos os vetores que são fixados pelos geradores estabilizadores ou equivalentemente, por todas as projeções
Dado que os geradores estabilizadores todos comutam entre si, as projeções também devem comutar. Isso nos permite usar um fato da álgebra linear, que é que o produto dessas projeções é a projeção sobre a interseção dos subespaços correspondentes às projeções individuais. Ou seja, o produto é a projeção sobre o espaço de código
Podemos agora expandir o produto usando as fórmulas para essas projeções para obter a seguinte expressão.
Em palavras, a projeção sobre o espaço de código de um código estabilizador é igual, como uma matriz, à média sobre todos os elementos no estabilizador desse código.
Por fim, podemos calcular a dimensão do espaço de código usando o fato de que a dimensão de qualquer subespaço é igual ao traço da projeção sobre esse subespaço. Assim, a dimensão do espaço de código é dada pela fórmula a seguir.
Podemos avaliar essa expressão fazendo uso de alguns fatos básicos.
-
Temos e portanto
-
Para o produto deve ser vezes uma operação de Pauli — mas não podemos obter porque isso contrariaria a minimalidade do conjunto e não podemos obter porque a terceira condição sobre os geradores estabilizadores proíbe isso. Portanto, como o traço de toda operação de Pauli não identidade é zero, obtemos
A dimensão do espaço de código é portanto como afirmado:
Como observação adicional, agora podemos ver que a suposição de que não está contido no estabilizador implica que o espaço de código deve conter pelo menos um vetor de estado quântico. Isso ocorre porque, como acabamos de verificar, essa suposição implica que o espaço de código tem dimensão que não pode ser zero. A implicação conversa é trivial: se está contido no estabilizador, então o espaço de código não pode conter nenhum vetor de estado quântico, pois nenhum vetor não nulo é fixado por essa operação.
Operações de Clifford e codificações
A seguir, discutiremos brevemente como os qubits podem ser codificados usando códigos estabilizadores, mas para isso primeiro precisamos introduzir as operações de Clifford.
Operações de Clifford
As operações de Clifford são operações unitárias, em qualquer número de qubits, que podem ser implementadas por circuitos quânticos com um conjunto restrito de gates:
- Gates Hadamard
- Gates
- Gates CNOT
Observe que os gates não estão incluídos, nem os gates Toffoli e Fredkin. Não apenas esses gates não estão na lista, mas de fato não é possível implementá-los usando os gates listados aqui; eles não são operações de Clifford. As operações de Pauli, por outro lado, são operações de Clifford porque podem ser implementadas com sequências de gates Hadamard e .
Essa é uma forma simples de definir operações de Clifford, mas não explica por que são definidas assim ou o que há de especial nessa coleção específica de gates. A razão real pelas quais as operações de Clifford são definidas dessa forma é que, a menos de fatores de fase global, as operações de Clifford são precisamente as operações unitárias que sempre transformam operações de Pauli em operações de Pauli por conjugação. Para ser mais preciso, uma operação unitária de qubits é equivalente a uma operação de Clifford a menos de um fator de fase se, e somente se, para toda operação de Pauli de qubits, temos
para alguma operação de Pauli de qubits.
(Note que não é possível ter para quando é unitário e e são operações de Pauli. Isso decorre do fato de que a matriz no lado esquerdo da equação em questão é ao mesmo tempo unitária e hermitiana, e e são as únicas escolhas para que permitem que o lado direito seja também unitário e hermitiano.)
É direto verificar a propriedade de conjugação descrita acima quando é um gate Hadamard, ou CNOT. Em particular, isso é simples para gates Hadamard,
e gates ,
Para gates CNOT, há 15 operações de Pauli não identidade em dois qubits para verificar. Naturalmente, elas podem ser verificadas individualmente — mas as relações entre gates CNOT e gates e listadas (na forma de circuito) na lição anterior, juntamente com as regras de multiplicação para matrizes de Pauli, oferecem um atalho para a mesma conclusão.
Uma vez que sabemos que essa propriedade de conjugação é verdadeira para gates Hadamard, e CNOT, podemos concluir imediatamente que ela é verdadeira para circuitos compostos por esses gates — ou seja, todas as operações de Clifford.
É mais difícil provar que a relação funciona na direção oposta, que é que se uma dada operação unitária satisfaz a propriedade de conjugação para operações de Pauli, então deve ser possível implementá-la (a menos de uma fase global) usando apenas gates Hadamard, e CNOT. Isso não será explicado nesta lição, mas é verdade.
As operações de Clifford não são universais para computação quântica; ao contrário de conjuntos universais de gates quânticos, não é possível aproximar operações unitárias arbitrárias com qualquer nível desejado de precisão usando operações de Clifford. De fato, para um dado valor de há apenas finitas operações de Clifford de qubits (a menos de fatores de fase). Realizar operações de Clifford em estados da base padrão seguidas de medições na base padrão também não nos permite realizar computações fora do alcance dos algoritmos clássicos — pois podemos simular eficientemente computações dessa forma classicamente. Esse fato é conhecido como o teorema de Gottesman-Knill.
Codificadores para códigos estabilizadores
Um código estabilizador define um espaço de código de certa dimensão, e temos a liberdade de usar esse espaço de código como quisermos — nada nos obriga a codificar qubits nesse espaço de código de uma forma específica. No entanto, é sempre possível usar uma operação de Clifford como codificador, se optarmos por isso. Para ser mais preciso, para qualquer código estabilizador que permita que qubits sejam codificados em qubits, existe uma operação de Clifford de qubits tal que, para qualquer vetor de estado quântico de qubits, temos que
é um vetor de estado quântico no espaço de código do nosso código que podemos interpretar como uma codificação de
Isso é bom porque as operações de Clifford são relativamente simples em comparação com operações unitárias arbitrárias, e há maneiras de otimizar sua implementação usando técnicas semelhantes às encontradas na prova do teorema de Gottesman-Knill. Como resultado, os circuitos para codificar estados usando códigos estabilizadores nunca precisam ser muito grandes. Em particular, é sempre possível realizar uma codificação para um código estabilizador de qubits usando uma operação de Clifford que requer gates. Isso ocorre porque toda operação de Clifford em qubits pode ser implementada por um circuito desse tamanho.
Por exemplo, aqui está um codificador para o código de Steane de 7 qubits. É de fato uma operação de Clifford e, como se vê, este não precisa nem de gates .
Detectando erros
Para um código estabilizador de qubits descrito por geradores estabilizadores a detecção de erros funciona da seguinte maneira.
Para detectar erros, todos os geradores estabilizadores são medidos como observáveis. Há geradores estabilizadores e, portanto, resultados de medição, cada um sendo ou (ou um valor binário se optarmos por associar a e a respectivamente). Interpretamos os resultados coletivamente, como um vetor ou string, como uma síndrome. A síndrome indica que nenhum erro foi detectado, enquanto pelo menos um em algum lugar na síndrome indica que um erro foi detectado.
Suponha, em particular, que é uma operação de Pauli de qubits, representando um erro hipotético. (Estamos considerando apenas operações de Pauli como erros, aliás, porque a discretização de erros funciona da mesma forma para códigos estabilizadores arbitrários como para o código de Shor de 9 qubits.) Há três casos que determinam se é ou não detectado como um erro.
Casos de detecção de erros
-
A operação é proporcional a um elemento do estabilizador.
Neste caso, deve comutar com todo gerador estabilizador, então obtemos a síndrome Isso significa que não é detectado como um erro.
-
A operação não é proporcional a um elemento do estabilizador, mas ainda assim comuta com todo gerador estabilizador.
Este é um erro que muda os vetores no espaço de código de alguma maneira não trivial. Mas, como comuta com todo gerador estabilizador, a síndrome é então passa despercebido pelo código.
-
A operação anti-comuta com pelo menos um dos geradores estabilizadores.
A síndrome é diferente de portanto o erro é detectado pelo código.
No primeiro caso, o erro não é uma preocupação porque essa operação não faz nada com os vetores no espaço de código, exceto possivelmente injetar uma fase global irrelevante: para todo estado codificado Em essência, isso não é realmente um erro — qualquer ação não trivial que possa ter acontece fora do espaço de código — então é bom que não seja detectado como um erro, porque nada precisa ser feito a respeito.
O segundo caso, falando intuitivamente, é o caso ruim. É a anti-comutação de um erro com um gerador estabilizador que faz com que um apareça em algum lugar na síndrome, sinalizando um erro, mas isso não acontece neste caso. Portanto, temos um erro que de fato muda os vetores no espaço de código de alguma maneira não trivial, mas passa despercebido pelo código. Por exemplo, para o código de repetição de 3 bits, a operação se enquadra nesta categoria.
O fato de que tal erro deve mudar alguns vetores no espaço de código de uma maneira não trivial pode ser argumentado da seguinte forma. Pela suposição de que comuta com mas não é proporcional a um elemento estabilizador, podemos concluir que obteríamos um novo código estabilizador válido incluindo como um gerador estabilizador junto com O espaço de código para esse novo código, no entanto, tem apenas metade da dimensão do espaço de código original, do que podemos concluir que a ação de sobre o espaço de código original não pode ser proporcional à operação identidade.
Para o último dos três casos, que é que o erro anti-comuta com pelo menos um gerador estabilizador, a síndrome tem pelo menos um em algum lugar, o que indica que algo está errado. Como já discutimos, a síndrome não identificará de forma única em geral, portanto ainda é necessário escolher uma operação de correção para cada síndrome, que pode ou não corrigir o erro Discutiremos essa etapa em breve, na última parte da lição.
Distância de um código estabilizador
Como questão de terminologia, quando nos referimos à distância de um código estabilizador, queremos dizer o peso mínimo de uma operação de Pauli que se enquadra na segunda categoria acima — ou seja, que muda o espaço de código de alguma maneira não trivial, mas o código não detecta isso. Quando se diz que um código estabilizador é um código estabilizador usando colchetes duplos, isso significa o seguinte:
- As codificações têm qubits de comprimento,
- o código permite a codificação de qubits, e
- a distância do código é
Como exemplo, consideremos o código de Steane de 7 qubits. Aqui estão os geradores estabilizadores para este código:
Este código tem distância 3, e podemos argumentar isso da seguinte forma.
Primeiro, considere qualquer operação de Pauli com peso de no máximo 2, e suponha que essa operação comuta com todos os seis geradores estabilizadores. Concluiremos que deve ser a operação identidade, que (como sempre) é um elemento do estabilizador. Isso mostrará que a distância do código é estritamente maior que 2. Suponha, em particular, que tem a forma
para e sendo matrizes de Pauli possivelmente não identidade. Esse é apenas um caso, e é necessário repetir o argumento a seguir para todas as outras localizações possíveis de matrizes de Pauli não identidade entre os fatores tensoriais de mas o argumento é essencialmente o mesmo para todas as localizações possíveis.
A operação comuta com todos os seis geradores estabilizadores, portanto comuta com estes dois em particular:
O fator tensorial em nosso erro se alinha com a matriz identidade em ambos os geradores estabilizadores (é por isso que foram selecionados). Dado que temos matrizes identidade nas 5 posições mais à direita de concluímos que deve comutar com e caso contrário anti-comutaria com um dos dois geradores. No entanto, a única matriz de Pauli que comuta com e é a matriz identidade, então
Agora que sabemos disso, podemos escolher mais dois geradores estabilizadores que têm um e um na segunda posição da esquerda, e chegamos a uma conclusão semelhante: Portanto, é a operação identidade.
Assim, não há como um erro de peso de no máximo 2 passar despercebido por este código, a menos que o erro seja a operação identidade (que está no estabilizador e, portanto, não é realmente um erro). Por outro lado, há operações de Pauli de peso 3 que comutam com todos os seis geradores estabilizadores, mas não são proporcionais a elementos do estabilizador, como e Isso estabelece que este código tem distância 3, como afirmado.
Corrigindo erros
O último tópico de discussão desta lição é a correção de erros para códigos estabilizadores. Como de costume, assuma que temos um código estabilizador especificado por geradores estabilizadores de qubits
As operações de Pauli de qubits, como erros que poderiam afetar os estados codificados usando este código, são particionadas em coleções de tamanho igual de acordo com qual síndrome elas fazem aparecer. Há síndromes distintas e operações de Pauli, o que significa que há operações de Pauli causando cada síndrome. Qualquer um desses erros poderia ser responsável pela síndrome correspondente.
No entanto, entre as operações de Pauli que causam cada síndrome, há algumas que devem ser consideradas equivalentes. Em particular, se o produto de duas operações de Pauli é proporcional a um elemento do estabilizador, então essas duas operações são efetivamente equivalentes como erros.
Outra forma de dizer isso é que se aplicarmos uma operação de correção para tentar corrigir um erro então essa correção é bem-sucedida desde que a composição seja proporcional a um elemento do estabilizador. Dado que há elementos no estabilizador, segue-se que cada operação de correção corrige erros de Pauli diferentes. Isso deixa classes inequivalentes de operações de Pauli, consideradas como erros, que são consistentes com cada síndrome possível.
Isso significa que, a menos que (caso em que temos um espaço de código trivial e unidimensional), não podemos possivelmente corrigir todos os erros detectados por um código estabilizador. O que devemos fazer em vez disso é escolher apenas uma operação de correção para cada síndrome, na esperança de corrigir apenas uma classe de erros equivalentes que causam essa síndrome.
Uma estratégia natural para escolher qual operação de correção realizar para cada síndrome é escolher a operação de Pauli de menor peso que, como erro, causa essa síndrome. Pode de fato haver múltiplas operações que empatam como o erro de menor peso consistente com uma dada síndrome, caso em que qualquer uma delas pode ser selecionada. A ideia é que operações de Pauli de menor peso representam explicações mais prováveis para qualquer síndrome que tenha sido medida. Isso pode de fato não ser o caso para alguns modelos de ruído, e uma estratégia alternativa é calcular o erro mais provável que causa a síndrome dada, com base no modelo de ruído escolhido. Para esta lição, no entanto, manteremos as coisas simples e consideraremos apenas correções de menor peso.
Para um código estabilizador de distância essa estratégia de escolher a operação de correção como a operação de Pauli de menor peso consistente com a síndrome medida sempre permite a correção de erros com peso estritamente menor que metade de ou em outras palavras, peso de no máximo Isso mostra, por exemplo, que o código de Steane de 7 qubits pode corrigir qualquer erro de Pauli de peso 1 e, pela discretização de erros, isso significa que o código de Steane pode corrigir um erro arbitrário em um qubit.
Para ver como isso funciona, considere o diagrama abaixo. O círculo à esquerda representa todas as operações de Pauli que resultam na síndrome que é a síndrome que sugere que nenhum erro ocorreu e nada está errado. Entre essas operações temos elementos do estabilizador (ou operações que são proporcionais a elementos do estabilizador, para ser mais preciso) e também erros não triviais que mudam o espaço de código de alguma forma mas não são detectados pelo código. Pela definição de distância, toda operação de Pauli nesta categoria deve ter peso de pelo menos porque é definido como o peso mínimo dessas operações.
O círculo à direita representa as operações de Pauli que resultam em uma síndrome diferente incluindo um erro com peso estritamente menor que que consideraremos.
A operação de correção escolhida para a síndrome é a operação de Pauli de menor peso na coleção representada pelo círculo à direita no diagrama (ou qualquer uma delas em caso de empate). Portanto, pode ser que mas não necessariamente. O que podemos afirmar com certeza, no entanto, é que não pode ter peso maior do que o peso de porque tem peso mínimo entre as operações nesta coleção — e, portanto, tem peso estritamente menor que
Agora considere o que acontece quando a operação de correção é aplicada ao estado que obtivemos após o erro ocorrer. Assumindo que a codificação original era ficamos com Nosso objetivo será mostrar que é proporcional a um elemento do estabilizador, implicando que a correção é bem-sucedida e (a menos de uma fase global) ficamos com o estado codificado original
Primeiro, como e causam a mesma síndrome, a composição deve comutar com todo gerador estabilizador. Em particular, se é qualquer um dos geradores estabilizadores, então devemos ter
para o mesmo valor de porque este é o -ésimo elemento na síndrome que tanto quanto geram. Portanto, temos
então comuta com Portanto, mostramos que pertence ao círculo à esquerda no diagrama, pois gera a síndrome
Segundo, a composição deve ter peso de no máximo a soma dos pesos de e — o que decorre de uma breve reflexão sobre produtos de operações de Pauli — e, portanto, o peso de é estritamente menor que Isso implica que é proporcional a um elemento do estabilizador do nosso código, que é o que queríamos mostrar. Ao escolher nossas operações de correção como representantes de menor peso do conjunto de erros que geram cada síndrome, garantimos portanto a correção de quaisquer erros de Pauli com peso menor que metade da distância do código.
Há um problema, no entanto. Para códigos estabilizadores em geral, é um problema computacionalmente difícil calcular a operação de Pauli de menor peso que causa uma dada síndrome. (De fato, isso é verdade mesmo para códigos clássicos, que neste contexto podemos pensar como códigos estabilizadores onde apenas matrizes e aparecem como fatores tensoriais dentro dos geradores estabilizadores.) Portanto, ao contrário da etapa de codificação, as operações de Clifford não virão em nosso socorro desta vez.
A solução é escolher códigos específicos para os quais boas correções podem ser calculadas eficientemente, para os quais não há uma receita simples. Em resumo, desenvolver códigos estabilizadores para os quais boas operações de correção podem ser calculadas eficientemente faz parte da arte do design de códigos quânticos. Veremos essa arte em ação na próxima lição.