Algoritmo de Shor
Agora vamos voltar nossa atenção para o problema da fatoração de inteiros e ver como ele pode ser resolvido eficientemente em um computador quântico usando estimativa de fase. O algoritmo que vamos obter é o algoritmo de Shor para fatoração de inteiros. Shor não descreveu seu algoritmo especificamente em termos de estimativa de fase, mas é uma maneira natural e intuitiva de explicar como ele funciona.
Começaremos discutindo um problema intermediário conhecido como problema de busca de ordem e veremos como a estimativa de fase oferece uma solução para esse problema. Em seguida, veremos como uma solução eficiente para o problema de busca de ordem nos dá uma solução eficiente para o problema de fatoração de inteiros. (Quando a solução de um problema fornece uma solução para outro problema assim, dizemos que o segundo problema se reduz ao primeiro — portanto, neste caso, estamos reduzindo a fatoração de inteiros à busca de ordem.) Essa segunda parte do algoritmo de Shor não usa computação quântica de forma alguma; ela é completamente clássica. A computação quântica é necessária apenas para resolver a busca de ordem.
O problema de busca de ordem
Alguns conceitos básicos de teoria dos números
Para explicar o problema de busca de ordem e como ele pode ser resolvido usando estimativa de fase, é útil começar com alguns conceitos básicos de teoria dos números e apresentar uma notação prática ao longo do caminho.
Para começar, para qualquer inteiro positivo defina o conjunto da seguinte forma.
Por exemplo, e assim por diante.
Esses são conjuntos de números, mas podemos pensar neles como mais do que conjuntos. Em particular, podemos pensar em operações aritméticas em como adição e multiplicação — e se concordarmos em sempre tomar nossas respostas módulo (isto é, dividir por e tomar o resto como resultado), sempre permaneceremos dentro desse conjunto ao realizar essas operações. As duas operações específicas de adição e multiplicação, ambas tomadas módulo transformam em um anel, que é um tipo de objeto fundamentalmente importante em álgebra.
Por exemplo, e são elementos de e se os multiplicarmos obtemos que deixa um resto de quando dividido por Às vezes expressamos isso da seguinte forma.
Mas também podemos simplesmente escrever desde que esteja claro que estamos trabalhando em apenas para manter nossa notação o mais simples possível.
Como exemplo, aqui estão as tabelas de adição e multiplicação para
Entre os elementos de os elementos que satisfazem são especiais. Frequentemente, o conjunto que contém esses elementos é denotado com um asterisco assim.
Se focamos nossa atenção na operação de multiplicação, o conjunto forma um grupo — especificamente um grupo abeliano — que é outro tipo importante de objeto em álgebra. É um fato básico sobre esses conjuntos (e grupos finitos em geral) que, se escolhermos qualquer elemento e multiplicarmos por si mesmo repetidamente, sempre chegaremos ao número
Como primeiro exemplo, vamos tomar Temos que porque e se multiplicarmos por si mesmo obtemos como a tabela acima confirma.
Como segundo exemplo, vamos tomar Se percorrermos os números de a os que têm MDC 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 Aqui estão as menores potências para as quais isso funciona:
Naturalmente, estamos trabalhando dentro de em todas essas equações, o que não nos preocupamos em escrever — tomamos isso como implícito para evitar poluir a notação. Continuaremos fazendo isso ao longo do restante da aula.
Enunciado do problema e conexão com a estimativa de fase
Agora podemos enunciar o problema de busca de ordem.
Alternativamente, em termos da notação que acabamos de introduzir acima, nos é dado e estamos procurando o menor inteiro positivo tal que Esse número é chamado de ordem de módulo
Para conectar o problema de busca de ordem à estimativa de fase, vamos pensar na operação definida em um sistema cujos estados clássicos correspondem a onde multiplicamos por um elemento fixo
Para ser claro, estamos fazendo a multiplicação em portanto está implícito que estamos tomando o produto módulo dentro do ket no lado direito da equação.
Por exemplo, se tomarmos e então a ação de sobre a base padrão é a seguinte.
Esta é uma operação unitária, desde que ela embaralha os elementos da base padrão portanto, como matriz, é uma matriz de permutação. É evidente pela sua definição que essa operação é determinística, e uma forma simples de ver que ela é invertível é pensar na ordem de módulo e reconhecer que o inverso de é
Há outra maneira de pensar no inverso que não requer nenhum conhecimento de (que, afinal, é o que estamos tentando calcular). Para todo elemento existe sempre um único elemento que satisfaz Denotamos esse elemento por e ele pode ser calculado eficientemente; uma extensão do algoritmo MDC de Euclides faz isso com custo quadrático em E assim
Portanto, a operação é tanto determinística quanto invertível. Isso implica que ela é descrita por uma matriz de permutação e, portanto, é unitária.
Agora vamos pensar nos autovetores e autovalores da operação assumindo que Como acabamos de argumentar, essa suposição nos diz que é unitária.
Existem autovalores de possivelmente incluindo o mesmo autovalor repetido várias vezes, e em geral há alguma liberdade na seleção dos autovetores correspondentes — mas não precisamos nos preocupar com todas as possibilidades. Vamos começar de forma simples e identificar apenas um autovetor de
O número é a ordem de módulo aqui e em todo o restante da aula. O autovalor associado a esse autovetor é porque ele não é alterado quando multiplicamos por
Isso acontece porque de modo que cada estado da base padrão é deslocado para para e é deslocado de volta para Informalmente, é como se estivéssemos mexendo lentamente mas ele já está completamente misturado, então nada muda.
Aqui está outro exemplo de autovetor de Este é mais interessante no contexto de busca de ordem e estimativa de fase.
Alternativamente, podemos escrever esse vetor usando uma somatória da seguinte forma.
Aqui vemos o número complexo surgindo naturalmente, devido à forma como a multiplicação por funciona módulo Desta vez, o autovalor correspondente é Para ver isso, podemos primeiro calcular da seguinte forma.
Então, como e vemos que
portanto
Usando o mesmo raciocínio, podemos identificar pares adicionais autovetor/autovalor para Para qualquer escolha de temos que
é um autovetor de cujo autovalor correspondente é
Existem outros autovetores de mas não precisamos nos preocupar com eles — vamos focar exclusivamente nos autovetores que acabamos de identificar.
Encontrando a ordem por estimativa de fase
Para resolver o problema de encontrar a ordem de um dado 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 necessário para obter uma estimativa precisa o suficiente do procedimento de estimativa de fase. Aqui vamos explicar como isso pode ser feito, e determinaremos mais adiante exatamente quanta precisão é necessária.
Vamos começar com a operação por si só. Naturalmente, como estamos trabalhando com o modelo de circuito quântico, usaremos notação binária para codificar os números entre e O maior número que precisamos codificar é então o número de bits necessários é
Por exemplo, se temos Veja como fica a codificação dos elementos de como strings binárias de comprimento
E agora, aqui está uma definição precisa de como é definida como uma operação de qubits.
O ponto é que, embora só nos importe como funciona para precisamos especificar como ela funciona para os estados da base padrão restantes — e precisamos fazer isso de uma forma que ainda nos dê uma operação unitária. Definir de modo que ela não faça nada aos estados da base padrão restantes resolve isso.
Usando os algoritmos de multiplicação e divisão de inteiros discutidos na lição anterior, junto com a metodologia para implementações reversíveis e sem lixo computacional, podemos construir um circuito quântico que realiza para qualquer escolha de com custo Aqui está uma maneira de fazer isso.
-
Construa um circuito para realizar a operação
onde
usando o método descrito na lição anterior. Isso nos dá um circuito de tamanho
-
Troque os dois sistemas de qubits usando portas de swap para trocar os qubits individualmente.
-
De forma semelhante ao primeiro passo, construa um circuito para a operação
onde é o inverso de em
Inicializando os qubits inferiores e compondo os três passos, obtemos esta transformação:
O método requer qubits de espaço de trabalho, mas eles são devolvidos ao estado inicializado ao final, o que nos permite usar esses circuitos para estimativa de fase. O custo total do circuito obtido é
Para realizar 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 então usando o circuito para
O cálculo de potências é o problema de exponenciação modular mencionado na lição anterior. Esse cálculo pode ser feito classicamente, usando o algoritmo de exponenciação modular mencionado na lição anterior (frequentemente chamado de algoritmo de potência na teoria computacional dos números). Na prática, precisamos apenas de potências de de especificamente e podemos obter essas potências elevando ao quadrado iterativamente vezes. Cada elevação ao quadrado pode ser realizada por um circuito booleano de tamanho
Em essência, o que estamos efetivamente fazendo aqui é transferir o problema de iterar até vezes para um cálculo clássico eficiente. E é uma sorte que isso seja possível! Para uma escolha arbitrária de circuito quântico no problema de estimativa de fase, isso provavelmente não seria possível — e nesse caso o custo resultante para a estimativa de fase cresce exponencialmente no número de qubits de controle
Solução dado um autovetor conveniente
Para entender como podemos resolver o problema de encontrar a ordem usando estimativa de fase, vamos começar supondo que executamos o procedimento de estimativa de fase na operação usando o autovetor Obter esse autovetor não é tarefa fácil, como veremos, então essa não será a história completa — mas é útil começar por aqui.
O autovalor de correspondente ao autovetor é
Ou seja, com Então, se executarmos o procedimento de estimativa de fase em usando o autovetor obteremos uma aproximação de Calculando o recíproco, conseguiremos descobrir — desde que nossa aproximação seja boa o suficiente.
Em mais detalhes, quando executamos o procedimento de estimativa de fase usando qubits de controle, o que obtemos é um número Tomamos então como estimativa para que é no caso em questão. Para descobrir a partir dessa aproximação, o natural é calcular o recíproco da nossa aproximação e arredondar para o inteiro mais próximo.
Por exemplo, suponha que e realizamos a estimativa de fase em com o autovetor usando bits de controle. A melhor aproximação de bits para é e temos uma chance razoável (cerca de nesse caso) de obter o resultado da estimativa de fase. Temos
e arredondando para o inteiro mais próximo obtemos que é a resposta correta.
Por outro lado, se não usarmos precisão suficiente, podemos não obter a resposta certa. Por exemplo, se tomarmos qubits de controle na estimativa de fase, podemos obter a melhor aproximação de bits para que é Calculando o recíproco obtemos
e arredondando para o inteiro mais próximo obtemos a resposta incorreta
Então, quanta precisão precisamos para obter a resposta certa? Sabemos que a ordem é um 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 é
Então, se quisermos garantir que não confundimos com é suficiente usar precisão o bastante para garantir que a melhor aproximação para seja mais próxima de do que de Se usarmos precisão suficiente para garantir que
de forma que o erro seja menor que a metade da distância entre e então estará mais próximo de do que de qualquer outra possibilidade, incluindo e
Podemos verificar isso da seguinte forma. Suponha que
para satisfazendo
Ao calcular o recíproco obtemos
Maximizando no numerador e minimizando no denominador, podemos limitar o quanto estamos distantes de da seguinte forma.
Estamos a menos de de então, como esperado, obteremos ao arredondar.
Infelizmente, como ainda não sabemos o que é não podemos usá-lo para nos dizer quanta precisão precisamos. O que podemos fazer em vez disso é usar o fato de que deve ser menor que para garantir que usamos 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 ao calcular o recíproco. Tomar garante que temos uma boa chance de obter uma estimativa com essa precisão usando o método descrito anteriormente. (Tomar é suficiente se você estiver confortável com um limite inferior de 40% na probabilidade de sucesso.)
Solução geral
Como acabamos de ver, se temos o autovetor de podemos aprender por meio da estimativa de fase, desde que usemos qubits de controle suficientes para fazer isso com precisão adequada. Infelizmente, não é fácil obter o autovetor então precisamos descobrir como prosseguir.
Vamos supor momentaneamente que procedemos como acima, exceto com o autovetor no lugar de para qualquer escolha de que queiramos considerar. O resultado que obtemos do procedimento de estimativa de fase será uma aproximação
Trabalhando com a suposição de que não conhecemos nem nem isso pode ou não nos permitir identificar Por exemplo, se obteremos uma aproximação de o que infelizmente não nos diz nada. Esse, no entanto, é um caso incomum; para outros valores de pelo menos conseguiremos aprender algo sobre
Podemos usar um algoritmo conhecido como algoritmo de frações contínuas para converter nossa aproximação em frações próximas — incluindo se a aproximação for boa o suficiente. Não vamos explicar o algoritmo de frações contínuas aqui. Em vez disso, aqui está uma declaração de um fato conhecido sobre esse algoritmo.
Se temos uma aproximação muito próxima de e executamos o algoritmo de frações contínuas para e obteremos e como descritos no fato. Uma análise do fato nos permite concluir que
Observe em particular que não necessariamente aprendemos e separadamente — aprendemos apenas em sua forma irredutível.
Por exemplo, como já notamos, não vamos aprender nada com Mas esse é o único valor de em que isso acontece. Quando é diferente de zero, ele pode ter fatores comuns com mas o número que obtemos do algoritmo de frações contínuas deve pelo menos dividir
Não é óbvio, mas é verdade que se temos a capacidade de aprender e com para escolhido uniformemente ao acaso, então é muito provável que consigamos recuperar após apenas algumas amostras. Em particular, se nosso palpite 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 quando aprendemos e Mas escolhas aleatórias de provavelmente não vão ocultar fatores de por muito tempo, e a probabilidade de não adivinharmos corretamente ao tomar o mínimo múltiplo comum dos denominadores observados cai exponencialmente com o número de amostras.
Resta abordar a questão de como obtemos um autovetor de para executar o procedimento de estimativa de fase. Como se vê, na prática não precisamos criá-los!
O que faremos em vez disso é executar o procedimento de estimativa de fase no estado com o qual queremos dizer a codificação binária de bits do número no lugar de um autovetor de Até agora, falamos apenas em executar o procedimento de estimativa de fase em um autovetor específico, mas nada nos impede de executar o procedimento em um estado de entrada que não seja autovetor de e é isso que estamos fazendo aqui com o estado (Esse não é um autovetor de a menos que o que não é uma escolha de nosso interesse.)
A justificativa para escolher o estado no lugar de um autovetor de é que a seguinte equação é verdadeira.
Uma maneira de verificar essa equação é comparar os produtos internos dos dois lados com cada estado da base padrão, usando 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 que se tivéssemos escolhido uniformemente ao acaso e usado como autovetor.
Em mais detalhes, vamos imaginar que executamos o procedimento de estimativa de fase com o estado no lugar de um dos autovetores Após a transformada de Fourier quântica inversa ser realizada, isso nos deixa com o estado
onde
O vetor representa o estado dos qubits superiores após a transformada de Fourier quântica inversa ter sido realizada sobre eles.
Portanto, em virtude do fato de que é um conjunto ortonormal, encontramos que uma medição dos qubits superiores produz uma aproximação do valor onde é escolhido uniformemente ao acaso. Como já discutimos, isso nos permite aprender com alto grau de confiança após várias execuções independentes, que era nosso objetivo.
Custo total
O custo para implementar cada unitário controlado é Há operações unitárias controladas, e temos então o custo total para as operações unitárias controladas é Além disso, temos portas Hadamard (que contribuem para o custo), e a transformada de Fourier quântica inversa contribui para o custo. Assim, o custo das operações unitárias controladas domina 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 caminho. Isso inclui o cálculo das potências em para que são 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 custo total de
Como é típico, todos esses limites podem ser melhorados usando algoritmos assintoticamente mais rápidos; esses limites assumem que estamos usando algoritmos padrão para operações aritméticas básicas.
Fatoração por busca de ordem
A última coisa que precisamos discutir é como resolver o problema de busca de ordem nos ajuda a fatorar números. Essa parte é completamente clássica — não tem nada de específico com computação quântica.
A ideia básica é a seguinte. Queremos fatorar o número e podemos fazer isso recursivamente. Especificamente, podemos focar na tarefa de dividir o que significa encontrar dois inteiros tais que Isso não é possível se for um número primo, mas podemos testar de forma eficiente se é primo usando um algoritmo de teste de primalidade antes, e se não for primo tentaremos dividi-lo. Assim que dividirmos basta aplicar a recursão em e até que todos os fatores sejam primos e obtenhamos a fatoração prima de
Dividir números pares é fácil: basta retornar e
Também é fácil dividir potências perfeitas, ou seja, números da forma para inteiros aproximando as raízes e assim por diante, e verificando os inteiros próximos como candidatos para Não precisamos ir além de passos nessa sequência, pois nesse ponto a raiz cai abaixo de e não revela candidatos adicionais.
É bom que consigamos fazer ambas essas coisas, pois a busca de ordem não nos ajudará a fatorar números pares nem potências de primos, onde o número é primo. Se for ímpar e não for uma potência de primo, porém, a busca de ordem nos permite dividir
Uma execução desse algoritmo pode falhar em encontrar um fator de Especificamente, isso ocorre em duas situações:
- A ordem de módulo é ímpar.
- A ordem de módulo é par e
Usando teoria dos números elementar, pode-se provar que, para uma escolha aleatória de com probabilidade de pelo menos nenhum desses eventos ocorre. Na verdade, a probabilidade de que algum desses eventos ocorra é no máximo onde é o número de fatores primos distintos de — e é por isso que a hipótese de que não é uma potência de primo é necessária. (A hipótese de que é ímpar também é necessária para que esse resultado seja válido.)
Isso significa que cada execução tem pelo menos 50% de chance de dividir Portanto, se rodarmos o algoritmo vezes, escolhendo aleatoriamente a cada vez, conseguiremos dividir com probabilidade de pelo menos
A ideia fundamental por trás do algoritmo é a seguinte. Se temos uma escolha de para a qual a ordem de módulo é par, então é um inteiro e podemos considerar os números
Usando a fórmula concluímos que
Agora, sabemos que pela definição da ordem — o que é equivalente a dizer que divide exatamente. Isso significa que divide o produto
Para que isso seja verdade, todos os fatores primos de devem ser também fatores primos de ou de (ou de ambos) — e para uma escolha aleatória de é improvável que todos os fatores primos de dividam apenas um dos termos sem dividir o outro. Caso contrário, desde que alguns fatores primos de dividam o primeiro termo e outros dividam o segundo, será possível encontrar um fator não trivial de calculando o MDC com o primeiro termo.