Algoritmo de Shor
Agora, voltaremos nossa atenção para o problema de fatoração de números inteiros e veremos como ele pode ser resolvido de forma eficiente em um computador quântico usando a estimativa de fase. O algoritmo que obteremos é o algoritmo de Shor para fatoração de números inteiros. Shor não descreveu seu algoritmo especificamente em termos de estimativa de fase, mas essa é uma maneira natural e intuitiva de explicar como ele funciona.
Começaremos discutindo um problema intermediário conhecido como problema de determinação de ordem e veremos como a estimativa de fase fornece uma solução para esse problema. Em seguida, veremos como uma solução eficiente para o problema de determinação de ordem nos dá uma solução eficiente para o problema de fatoração de números inteiros. (Quando uma solução para um problema fornece uma solução para outro problema como esse, dizemos que o segundo problema se reduz ao primeiro - portanto, nesse caso, estamos reduzindo a fatoração de números inteiros à determinação de ordens) Essa segunda parte do algoritmo de Shor não faz uso da computação quântica; é totalmente clássica. A computação quântica é necessária apenas para solucionar a determinação de ordens.
O problema da localização de pedidos
Algumas noções básicas de teoria dos números
Para explicar o problema de determinação de ordem e como ele pode ser resolvido usando a estimativa de fase, será útil começar com alguns conceitos básicos da teoria dos números e introduzir algumas notações úteis ao longo do caminho.
Para começar, para qualquer número inteiro positivo , defina o conjunto da seguinte maneira.
Por exemplo, e assim por diante.
São conjuntos de números, mas podemos considerá-los como algo mais do que apenas conjuntos. Em particular, podemos pensar em operações aritméticas em , como adição e multiplicação — e se concordarmos em sempre considerar nossos resultados módulo (ou seja, dividir por e tomar o resto como resultado), permaneceremos sempre dentro desse conjunto ao realizarmos essas operações. As duas operações específicas de adição e multiplicação, ambas consideradas módulo , transformam em um anel, que é um tipo de objeto de importância fundamental na álgebra.
Por exemplo, e são elementos de , e se os multiplicarmos, obtemos , o que deixa um resto de quando dividido por . Às vezes, expressamos isso da seguinte maneira.
Mas também podemos simplesmente escrever , desde que tenha ficado claro que estamos trabalhando em , apenas para manter nossa notação o mais simples possível.
A título de exemplo, aqui estão as tabuadas de adição e multiplicação para o número .
Entre os elementos do conjunto , os elementos que satisfazem a condição são especiais. Frequentemente, o conjunto que contém esses elementos é representado por um asterisco, assim.
Se concentrarmos nossa atenção na operação de multiplicação, o conjunto forma um grupo — mais especificamente, um grupo abeliano —, que é outro tipo importante de objeto na álgebra. É um fato básico sobre esses conjuntos (e grupos finitos em geral) que, se escolhermos qualquer elemento e multiplicarmos repetidamente por si mesmo, sempre chegaremos, eventualmente, ao número .
Como primeiro exemplo, vamos considerar . Temos que , pois ; e, se multiplicarmos por si mesmo, obtemos , conforme confirma a tabela acima.
Como segundo exemplo, vamos considerar . Se analisarmos os números de a , aqueles cujo MMC é igual a com são os seguintes.
Para cada um desses elementos, é possível elevar esse número a uma potência inteira positiva para obter um número d o. Aqui estão as menores potências para as quais isso funciona:
Naturalmente, estamos trabalhando no site para todas essas equações, que não nos preocupamos em escrever - consideramos implícitas para evitar confusão. Continuaremos a fazer isso durante o restante da lição.
Descrição do problema e conexão com a estimativa de fase
Agora, podemos definir o problema de determinação de ordem.
Entrada: inteiros positivos e que satisfazem \ Saída: o menor inteiro positivo tal que
Alternativamente, utilizando a notação que acabamos de apresentar acima, temos e estamos procurando o menor inteiro positivo tal que . Esse número é chamado de ordem de módulo .
Para relacionar o problema da determinação da ordem à estimativa de fase, vamos considerar a operação definida em um sistema cujos estados clássicos correspondem a , onde multiplicamos por um elemento fixo .
Para ficar claro, estamos fazendo a multiplicação em um o; portanto, está implícito que estamos calculando o produto módulo dentro do ket no lado direito da equação.
Por exemplo, se considerarmos e , a ação de na base padrão é a seguinte.
Esta é uma operação unitária, desde que ; ela embaralha os elementos da base padrão ; portanto, como matriz, trata-se de uma matriz de permutação. Fica evidente, a partir de sua definição, que essa operação é determinística, e uma maneira simples de perceber que ela é invertível é pensar na ordem de módulo e reconhecer que o inverso de é .
Há outra maneira de pensar sobre a inversa que não requer nenhum conhecimento sobre o “ ” (que, afinal, é o que estamos tentando calcular). Para cada elemento , existe sempre um elemento único que satisfaz . Denotamos esse elemento por , e ele pode ser calculado de forma eficiente; uma extensão do algoritmo do MMC de Euclides realiza isso com custo quadrático em . E, portanto,
Portanto, a operação é determinística e invertível. Isso implica que ela é descrita por uma matriz de permutação e, portanto, é unitária.
Agora, vamos pensar nos vetores próprios e nos valores próprios da operação , supondo que . Conforme acabamos de argumentar, essa suposição nos indica que é unitária.
Existem valores próprios de , podendo incluir o mesmo valor próprio repetido várias vezes, e, em geral, há certa liberdade na escolha dos vetores próprios correspondentes — mas não precisamos nos preocupar com todas as possibilidades. Vamos começar de forma simples e identificar apenas um vetor próprio d o.
O número é a ordem de módulo , aqui e ao longo do restante da aula. O autovalor associado a esse autovetor é , pois ele não sofre alteração quando o multiplicamos por .
Isso acontece porque ; portanto, cada estado da base padrão é deslocado para para , e volta a . Em termos informais, é como se estivéssemos mexendo lentamente , mas ele já está completamente misturado, então nada muda.
Aqui está outro exemplo de vetor próprio de um o. Este, por acaso, é mais interessante no contexto da determinação da ordem e da estimativa de fase.
Como alternativa, podemos escrever esse vetor usando um somatório da seguinte forma.
Aqui, vemos o número complexo surgir naturalmente, devido à forma como a multiplicação por funciona módulo . Desta vez, o autovalor correspondente é . Para comprovar isso, podemos primeiro fazer o seguinte cálculo.
Então, como e , vemos que
Então, .
Seguindo o mesmo raciocínio, podemos identificar outros pares de vetores próprios e valores próprios para . Para qualquer escolha de , temos que
é um vetor próprio de cujo valor próprio correspondente é .
Existem outros vetores próprios de , mas não precisamos nos preocupar com eles — vamos nos concentrar exclusivamente nos vetores próprios que acabamos de identificar.
Localização de ordem por meio de estimativa de fase
Para resolver o problema de determinação da ordem para uma determinada escolha de , podemos aplicar o procedimento de estimativa de fase à operação .
Para isso, precisamos implementar não apenas de forma eficiente com um circuito quântico, mas também , , e assim por diante, indo tão longe quanto for necessário para obter uma estimativa suficientemente precisa a partir do procedimento de estimativa de fase. Aqui, vamos explicar como isso pode ser feito e, mais adiante, vamos determinar exatamente qual o nível de precisão necessário.
Vamos começar pela operação “ ” por si só. Naturalmente, como estamos trabalhando com o modelo de circuito quântico, usaremos a notação binária para codificar os números entre e . O maior número que precisamos codificar é , portanto, o número de bits de que precisamos é
Por exemplo, se , temos . Veja a seguir como fica a codificação dos elementos de como cadeias binárias de comprimento .
E agora, aqui está uma definição precisa de como é definido como uma operação de -qubit.
A questão é que, embora nos importemos apenas com o funcionamento de para , precisamos especificar como isso funciona para os demais estados da base padrão — e precisamos fazer isso de forma que ainda nos proporcione uma operação unitária. Isso é conseguido definindo-se a função “ ” de forma que ela não altere os demais estados da base padrão.
Utilizando os algoritmos de multiplicação e divisão de números inteiros discutidos na lição anterior, juntamente com a metodologia para implementações reversíveis e sem resíduos desses algoritmos, podemos construir um circuito quântico que execute a operação “ ”, para qualquer escolha de , com custo . Aqui está uma maneira de fazer isso.
- Construa um circuito para realizar a operação
em que
utilizando o método descrito na aula anterior. Isso nos dá um circuito de tamanho .
-
Troque os dois sistemas de -qubit usando swap gates para trocar os qubits individualmente.
-
De forma semelhante à primeira etapa, construa um circuito para a operação
onde é a inversa de em .
Ao inicializar os qubits inferiores e compor as três etapas, obtemos essa transformação:
O método requer qubits do espaço de trabalho, mas eles são retornados ao seu estado inicializado ao final, o que nos permite usar esses circuitos para a estimativa de fase. O custo total do circuito que obtemos é es.
Para executar , , e assim por diante, podemos usar exatamente o mesmo método, exceto que substituímos por , , e assim por diante, como elementos de . Ou seja, para qualquer potência que escolhermos, podemos criar um circuito para não iterando vezes o circuito para , mas sim calculando e, em seguida, usando o circuito para .
O cálculo de potências corresponde ao problema da exponenciação modular mencionado na aula anterior. Esse cálculo pode ser feito de forma clássica, utilizando o algoritmo de exponenciação modular mencionado na aula anterior (frequentemente chamado de algoritmo da potência na teoria computacional dos números). Na verdade, precisamos apenas das potências d power-of-2 de , em particular , e podemos obter essas potências elevando ao quadrado repetidamente. Cada elevação ao quadrado pode ser realizada por um circuito booleano de tamanho .
Em essência, o que estamos fazendo aqui, na prática, é transferir o problema de iterar tantas vezes quanto para um cálculo clássico eficiente. E é uma sorte que isso seja possível! Para uma escolha arbitrária de um circuito quântico no problema da estimativa de fase, é improvável que isso seja possível — e, nesse caso, o custo resultante para a estimativa de fase cresce exponencialmente em função do número de qubits de controle .
Solução dada um vetor próprio conveniente
Para entender como podemos resolver o problema da determinação da ordem usando a estimativa de fase, vamos começar supondo que executemos o procedimento de estimativa de fase na operação usando o vetor próprio . Conseguir esse vetor próprio não é fácil, como veremos, então a história não termina aqui — mas é útil começar por aqui.
O valor próprio de correspondente ao vetor próprio é
Ou seja, para . Portanto, se aplicarmos o procedimento de estimativa de fase em usando o vetor próprio , obteremos uma aproximação de . Ao calcular o recíproco, poderemos determinar — desde que nossa aproximação seja boa o suficiente.
Mais detalhadamente, quando executamos o procedimento de estimativa de fase utilizando qubits de control , o que obtemos é um número . Em seguida, tomamos como uma estimativa para , que, no caso em questão, é . Para determinar qual é o valor de a partir dessa aproximação, o mais natural a se fazer é calcular o recíproco da nossa aproximação e arredondar para o inteiro mais próximo.
Por exemplo, suponhamos que e realizemos a estimativa de fase em com o vetor próprio utilizando bits de controle. A melhor aproximação de -bit para é , e temos uma chance bastante boa (cerca de neste caso) de obter o resultado a partir da estimativa de fase. Temos
e, ao arredondar para o inteiro mais próximo, obtém-se , que é a resposta correta.
Por outro lado, se não usarmos precisão suficiente, talvez não cheguemos à resposta correta. Por exemplo, se considerarmos qubits de control es na estimativa de fase, poderemos obter a melhor aproximação de bits para , que é . Calculando o recíproco, obtém-se
e, ao arredondar para o inteiro mais próximo, obtém-se uma resposta incorreta de .
Então, qual é o nível de precisão necessário para chegarmos à resposta correta? Sabemos que a ordem é um número inteiro e, intuitivamente, o que precisamos é de precisão suficiente para distinguir de possibilidades próximas, incluindo e . O número mais próximo de com o qual precisamos nos preocupar é , e a distância entre esses dois números é
Portanto, se quisermos ter certeza de que não confundiremos com , basta usar precisão suficiente para garantir que a melhor aproximação de esteja mais próxima de do que de . Se usarmos precisão suficiente para que
de modo que o erro seja menor que a metade da distância entre e ; nesse caso, estará mais próximo de do que de qualquer outra possibilidade, incluindo e .
Podemos verificar isso da seguinte forma. Suponha que
para satisfazendo
Quando tomamos a recíproca, obtemos
Ao maximizar no numerador e minimizar no denominador, podemos limitar a distância que estamos de da seguinte forma.
Estamos a menos de de distância de , então, como era de se esperar, chegaremos a ao arredondar.
Infelizmente, como ainda não sabemos o que é , não podemos usá-lo para nos dizer de quanta precisão precisamos. O que podemos fazer é usar o fato de que deve ser menor que para garantir que usemos precisão suficiente. Em particular, se usarmos precisão suficiente para garantir que a melhor aproximação para satisfaça
então teremos precisão suficiente para determinar corretamente quando tomarmos a recíproca. O site garante que temos uma grande chance de obter uma estimativa com essa precisão usando o método descrito anteriormente. (O site é bom o suficiente se estivermos confortáveis com um limite inferior de 40% na probabilidade de sucesso)
Solução geral
Como acabamos de ver, se tivermos o vetor próprio de , podemos determinar por meio da estimativa de fase, desde que utilizemos um número suficiente de qubits de controle para realizar isso com precisão adequada. Infelizmente, não é fácil obter o vetor próprio , por isso precisamos descobrir como proceder.
Suponhamos, por um instante, que procedamos exatamente como acima, exceto que utilizaremos o vetor próprio em vez de , para qualquer escolha de que decidirmos considerar. O resultado que obtemos do procedimento de estimativa de fase será uma aproximação
Partindo do pressuposto de que não sabemos nem nem , isso pode ou não nos permitir identificar . Por exemplo, se , obteremos uma aproximação para , o que, infelizmente, não nos diz nada. Este, no entanto, é um caso incomum; para outros valores de , poderemos, pelo menos, aprender algo sobre .
Podemos usar um algoritmo conhecido como algoritmo de fração contínua para transformar nossa aproximação em frações próximas - incluindo se a aproximação for boa o suficiente. Não explicaremos o algoritmo de fração contínua aqui. Em vez disso, aqui está uma declaração de um fato conhecido sobre esse algoritmo.
Dados um número inteiro e um número real , há, no máximo, uma escolha de números inteiros tais que e satisfaçam . Dados e , o algoritmo de frações contínuas encontra e , ou informa que eles não existem. Esse algoritmo pode ser implementado como um circuito booleano com tamanho .
Se tivermos uma aproximação muito próxima para e aplicarmos o algoritmo da fração contínua para e , obteremos e , conforme descrito no enunciado. Uma análise dos fatos nos permite concluir que
Observe, em particular, que não aprendemos necessariamente que e ; aprendemos apenas que na forma mais simples possível.
Por exemplo, e como já percebemos, não vamos aprender nada com . Mas esse é o único valor de em que isso ocorre. Quando é diferente de zero, pode ter fatores comuns com , mas o número que obtemos a partir do algoritmo da fração contínua deve, no mínimo, dividir .
Isso está longe de ser óbvio, mas é verdade que, se tivermos a capacidade de aprender e para para , escolhidos aleatoriamente de maneira uniforme, então é muito provável que consigamos recuperar após apenas algumas amostras. Em particular, se nossa suposição para for o mínimo múltiplo comum de todos os valores do denominador que observamos, estaremos certos com alta probabilidade. Intuitivamente falando, alguns valores de não são bons porque compartilham fatores comuns com , e esses fatores comuns ficam ocultos para nós quando aprendemos e . Mas escolhas aleatórias de provavelmente não ocultarão por muito tempo os fatores de , e a probabilidade de não adivinharmos corretamente ao calcular o mínimo múltiplo comum dos denominadores que observamos diminui exponencialmente com o aumento do número de amostras.
Resta abordar a questão de como obter um vetor próprio de para executar o procedimento de estimativa de fase. Acontece que, na verdade, não precisamos criá-los!
O que faremos, em vez disso, é aplicar o procedimento de estimativa de fase ao estado , ou seja, a codificação binária de bits do número , em vez de um vetor próprio de . Até agora, falamos apenas sobre aplicar o procedimento de estimativa de fase a um vetor próprio específico, mas nada nos impede de aplicar o procedimento a um estado de entrada que não seja um vetor próprio de , e é isso que estamos fazendo aqui com o estado . (Isso não é um vetor próprio de , a menos que , o que não é uma possibilidade que nos interesse.)
A justificativa para escolher o estado em vez de um vetor próprio de é que a equação a seguir é verdadeira.
Uma maneira de verificar essa equação é comparar os produtos internos dos dois lados com cada estado da base padrão, usando as fórmulas mencionadas anteriormente na lição para ajudar a avaliar os resultados do lado direito. Como consequência, obteremos exatamente os mesmos resultados de medição como se tivéssemos escolhido uniformemente de forma aleatória e usado como um vetor próprio.
Mais detalhadamente, imaginemos que executemos o procedimento de estimativa de fase com o estado no lugar de um dos vetores próprios . Após a realização da transformada de Fourier quântica inversa, isso nos deixa com o estado
em que
O vetor representa o estado dos qubits superiores depois que o inverso da transformação quântica de Fourier foi realizado neles.
Assim, em virtude do fato de que é um conjunto ortonormal, descobrimos que uma medição dos principais qubits superior produz uma aproximação do valor em que é escolhido uniformemente de forma aleatória. Como já discutimos, isso nos permite aprender com um alto grau de confiança após várias execuções independentes, que era o nosso objetivo.
Custo total
O custo para implementar cada operação controlada-unitária é . Existem operações controladas-unitárias, e temos , portanto, o custo total das operações controladas-unitárias é . Além disso, temos portas de Hadamard (que contribuem com para o custo), e a transformada de Fourier quântica inversa contribui com para o custo. Assim, o custo das operações unitárias controladas predomina sobre o custo de todo o procedimento — que é, portanto, .
Além do próprio circuito quântico, há alguns cálculos clássicos que precisam ser realizados ao longo do processo. Isso inclui o cálculo das potências em para , necessárias para criar as portas unitárias controladas, bem como o algoritmo de frações contínuas que converte aproximações de em frações. Esses cálculos podem ser realizados por circuitos booleanos com um custo total de .
Como é típico, todos esses limites podem ser aprimorados usando algoritmos assintoticamente rápidos; esses limites pressupõem que estamos usando algoritmos padrão para operações aritméticas básicas.
Factoring por encomenda
A última coisa que precisamos discutir é como a solução do problema de determinação de ordem nos ajuda a fatorar. Essa parte é totalmente clássica - não tem nada a ver especificamente com a computação quântica.
A ideia básica é a seguinte. Queremos fatorar o número e podemos fazer isso de forma recursiva. Especificamente, podemos nos concentrar na tarefa de dividir , o que significa encontrar quaisquer dois números inteiros para os quais . Isso não é possível se for um número primo, mas podemos verificar de forma eficiente se é primo usando primeiro um algoritmo de teste de primalidade; e, se não for primo, tentaremos dividi-lo. Depois de dividir , basta aplicar a recursão em e até que todos os nossos fatores sejam primos e obtenhamos a fatoração em números primos de .
Dividir números inteiros pares é fácil: basta exibir e .
Também é fácil dividir potências perfeitas, ou seja, números da forma para inteiros , simplesmente aproximando as raízes , , e assim por diante, e verificando os inteiros próximos como possíveis candidatos para . Não precisamos ir além de passos nessa sequência, pois, nesse ponto, a raiz fica abaixo de e não revelará candidatos adicionais.
É bom que possamos fazer essas duas coisas, pois a busca de ordem não nos ajudará a fatorar números pares nem no caso de potências de números primos, em que o número por acaso é primo. No entanto, se for ímpar e não for uma potência de um número primo, a determinação da ordem nos permite dividir .
-
Escolha aleatoriamente .
-
Calcule .
-
Se , então exiba e e encerre a execução. Caso contrário, prossiga para a próxima etapa, sabendo que .
-
Seja a ordem de módulo . (É aqui que precisamos da localização de pedidos.)
-
Se estiver empatado:
5.1 Calcule módulo
5.2
Calcule . 5.3
Se , então exiba e e pare. -
Se esse ponto for alcançado, significa que o algoritmo não conseguiu encontrar um fator de .
É possível que uma execução deste algoritmo não consiga encontrar um fator de . Mais especificamente, isso ocorre em duas situações:
- A ordem de modulo é ímpar.
- A ordem de módulo é par e .
Utilizando-se da teoria básica dos números, é possível provar que, para uma escolha aleatória de , com probabilidade de pelo menos , nenhum desses eventos ocorre. De fato, a probabilidade de que qualquer um dos eventos ocorra é, no máximo, , sendo o número de fatores primos distintos de , e é por isso que é necessária a suposição de que não seja uma potência de um número primo. (Para que esse fato seja verdadeiro, também é necessário supor que seja ímpar.)
Isso significa que cada execução tem pelo menos 50% de chance de dividir . Portanto, se executarmos o algoritmo vezes, escolhendo aleatoriamente a cada vez, conseguiremos dividir com uma probabilidade de pelo menos .
A ideia básica por trás do algoritmo é a seguinte. Se tivermos uma opção de para a qual a ordem de modulo seja par, então é um número inteiro e podemos considerar os números
Utilizando a fórmula , concluímos que
Ora, sabemos que , pela definição da ordem — o que é outra forma de dizer que divide inteiramente . Isso significa que divide inteiramente o produto
Para que isso seja verdade, todos os fatores primos de também devem ser fatores primos de ou (ou ambos) - e, para uma seleção aleatória de , é improvável que todos os fatores primos de dividam um dos termos e nenhum divida o outro. Caso contrário, desde que alguns dos fatores primos de dividam o primeiro termo e alguns dividam o segundo termo, poderemos encontrar um fator não trivial de calculando o GCD com o primeiro termo.