Pular para o conteúdo principal
Este projeto está em fase beta. Encontrou um bug? Abra uma issue no GitHub. Tem uma pergunta ou ideia? Pergunte no Discussions — adoraríamos receber seu feedback!
Como está a qualidade da tradução nesta página?

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 NN, defina o conjunto ZN\mathbb{Z}_N da seguinte forma.

ZN={0,1,…,N−1}\mathbb{Z}_N = \{0,1,\ldots,N-1\}

Por exemplo, Z1={0},  \mathbb{Z}_1 = \{0\},\; Z2={0,1},  \mathbb{Z}_2 = \{0,1\},\; Z3={0,1,2},  \mathbb{Z}_3 = \{0,1,2\},\; 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 ZN\mathbb{Z}_N como adição e multiplicação — e se concordarmos em sempre tomar nossas respostas módulo NN (isto é, dividir por NN 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 NN, transformam ZN\mathbb{Z}_N em um anel, que é um tipo de objeto fundamentalmente importante em álgebra.

Por exemplo, 33 e 55 são elementos de Z7,\mathbb{Z}_7, e se os multiplicarmos obtemos 3⋅5=15,3\cdot 5 = 15, que deixa um resto de 11 quando dividido por 7.7. Às vezes expressamos isso da seguinte forma.

3⋅5≡1  (mod 7)3 \cdot 5 \equiv 1 \; (\textrm{mod } 7)

Mas também podemos simplesmente escrever 3⋅5=13 \cdot 5 = 1, desde que esteja claro que estamos trabalhando em Z7\mathbb{Z}_7, 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 Z6\mathbb{Z}_6.

+012345001234511234502234501334501244501235501234⋅012345000000010123452024024303030340420425054321\begin{array}{c|cccccc} + & 0 & 1 & 2 & 3 & 4 & 5 \\\hline 0 & 0 & 1 & 2 & 3 & 4 & 5 \\ 1 & 1 & 2 & 3 & 4 & 5 & 0 \\ 2 & 2 & 3 & 4 & 5 & 0 & 1 \\ 3 & 3 & 4 & 5 & 0 & 1 & 2 \\ 4 & 4 & 5 & 0 & 1 & 2 & 3 \\ 5 & 5 & 0 & 1 & 2 & 3 & 4 \\ \end{array} \qquad \begin{array}{c|cccccc} \cdot & 0 & 1 & 2 & 3 & 4 & 5 \\\hline 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 1 & 0 & 1 & 2 & 3 & 4 & 5 \\ 2 & 0 & 2 & 4 & 0 & 2 & 4 \\ 3 & 0 & 3 & 0 & 3 & 0 & 3 \\ 4 & 0 & 4 & 2 & 0 & 4 & 2 \\ 5 & 0 & 5 & 4 & 3 & 2 & 1 \\ \end{array}

Entre os NN elementos de ZN\mathbb{Z}_N, os elementos a∈ZNa\in\mathbb{Z}_N que satisfazem gcd⁡(a,N)=1\gcd(a,N) = 1 são especiais. Frequentemente, o conjunto que contém esses elementos é denotado com um asterisco assim.

ZN∗={a∈ZN:gcd⁡(a,N)=1}\mathbb{Z}_N^{\ast} = \{a\in \mathbb{Z}_N : \gcd(a,N) = 1\}

Se focamos nossa atenção na operação de multiplicação, o conjunto ZN∗\mathbb{Z}_N^{\ast} 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 a∈ZN∗a\in\mathbb{Z}_N^{\ast} e multiplicarmos aa por si mesmo repetidamente, sempre chegaremos ao número 11.

Como primeiro exemplo, vamos tomar N=6N=6. Temos que 5∈Z6∗5\in\mathbb{Z}_6^{\ast} porque gcd⁡(5,6)=1\gcd(5,6) = 1, e se multiplicarmos 55 por si mesmo obtemos 11, como a tabela acima confirma.

52=1(trabalhando dentro de Z6)5^2 = 1 \quad \text{(trabalhando dentro de $\mathbb{Z}_6$)}

Como segundo exemplo, vamos tomar N=21N = 21. Se percorrermos os números de 00 a 2020, os que têm MDC igual a 11 com 2121 são os seguintes.

Z21∗={1,2,4,5,8,10,11,13,16,17,19,20}\mathbb{Z}_{21}^{\ast} = \{1,2,4,5,8,10,11,13,16,17,19,20\}

Para cada um desses elementos, é possível elevar esse número a uma potência inteira positiva para obter 11. Aqui estão as menores potências para as quais isso funciona:

11=182=1163=126=1106=1176=143=1116=1196=156=1132=1202=1\begin{array}{ccc} 1^{1} = 1 \quad & 8^{2} = 1 \quad & 16^{3} = 1 \\[1mm] 2^{6} = 1 \quad & 10^{6} = 1 \quad & 17^{6} = 1 \\[1mm] 4^{3} = 1 \quad & 11^{6} = 1 \quad & 19^{6} = 1 \\[1mm] 5^{6} = 1 \quad & 13^{2} = 1 \quad & 20^{2} = 1 \end{array}

Naturalmente, estamos trabalhando dentro de Z21\mathbb{Z}_{21} 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.

Busca de ordem

Entrada: inteiros positivos NN e aa satisfazendo gcd⁡(N,a)=1\gcd(N,a) = 1
Saída: o menor inteiro positivo rr tal que ar≡1a^r \equiv 1 (mod N)(\textrm{mod } N)

Alternativamente, em termos da notação que acabamos de introduzir acima, nos é dado a∈ZN∗a \in \mathbb{Z}_N^{\ast}, e estamos procurando o menor inteiro positivo rr tal que ar=1a^r = 1. Esse número rr é chamado de ordem de aa módulo NN.

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 ZN\mathbb{Z}_N, onde multiplicamos por um elemento fixo a∈ZN∗a\in\mathbb{Z}_N^{\ast}.

Ma∣x⟩=∣ax⟩(para cada x∈ZN)M_a \vert x\rangle = \vert ax \rangle \qquad \text{(para cada $x\in\mathbb{Z}_N$)}

Para ser claro, estamos fazendo a multiplicação em ZN\mathbb{Z}_N, portanto está implícito que estamos tomando o produto módulo NN dentro do ket no lado direito da equação.

Por exemplo, se tomarmos N=15N = 15 e a=2a=2, então a ação de M2M_2 sobre a base padrão {∣0⟩,…,∣14⟩}\{\vert 0\rangle,\ldots,\vert 14\rangle\} é a seguinte.

M2∣0⟩=∣0⟩M2∣5⟩=∣10⟩M2∣10⟩=∣5⟩M2∣1⟩=∣2⟩M2∣6⟩=∣12⟩M2∣11⟩=∣7⟩M2∣2⟩=∣4⟩M2∣7⟩=∣14⟩M2∣12⟩=∣9⟩M2∣3⟩=∣6⟩M2∣8⟩=∣1⟩M2∣13⟩=∣11⟩M2∣4⟩=∣8⟩M2∣9⟩=∣3⟩M2∣14⟩=∣13⟩\begin{array}{ccc} M_{2} \vert 0 \rangle = \vert 0\rangle \quad & M_{2} \vert 5 \rangle = \vert 10\rangle \quad & M_{2} \vert 10 \rangle = \vert 5\rangle \\[1mm] M_{2} \vert 1 \rangle = \vert 2\rangle \quad & M_{2} \vert 6 \rangle = \vert 12\rangle \quad & M_{2} \vert 11 \rangle = \vert 7\rangle \\[1mm] M_{2} \vert 2 \rangle = \vert 4\rangle \quad & M_{2} \vert 7 \rangle = \vert 14\rangle \quad & M_{2} \vert 12 \rangle = \vert 9\rangle \\[1mm] M_{2} \vert 3 \rangle = \vert 6\rangle \quad & M_{2} \vert 8 \rangle = \vert 1\rangle \quad & M_{2} \vert 13 \rangle = \vert 11\rangle \\[1mm] M_{2} \vert 4 \rangle = \vert 8\rangle \quad & M_{2} \vert 9 \rangle = \vert 3\rangle \quad & M_{2} \vert 14 \rangle = \vert 13\rangle \end{array}

Esta é uma operação unitária, desde que gcd⁡(a,N)=1\gcd(a,N)=1; ela embaralha os elementos da base padrão {∣0⟩,…,∣N−1⟩}\{\vert 0\rangle,\ldots,\vert N-1\rangle\}, 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 rr de aa módulo NN, e reconhecer que o inverso de MaM_a é Mar−1M_a^{r-1}.

Mar−1Ma=Mar=Mar=M1=IM_a^{r-1} M_a = M_a^r = M_{a^r} = M_1 = \mathbb{I}

Há outra maneira de pensar no inverso que não requer nenhum conhecimento de rr (que, afinal, é o que estamos tentando calcular). Para todo elemento a∈ZN∗a\in\mathbb{Z}_N^{\ast} existe sempre um único elemento b∈ZN∗b\in\mathbb{Z}_N^{\ast} que satisfaz ab=1ab=1. Denotamos esse elemento bb por a−1a^{-1}, e ele pode ser calculado eficientemente; uma extensão do algoritmo MDC de Euclides faz isso com custo quadrático em lg⁡(N)\operatorname{lg}(N). E assim

Ma−1Ma=Ma−1a=M1=I.M_{a^{-1}} M_a = M_{a^{-1}a} = M_1 = \mathbb{I}.

Portanto, a operação MaM_a é 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 MaM_a, assumindo que a∈ZN∗a\in\mathbb{Z}_N^{\ast}. Como acabamos de argumentar, essa suposição nos diz que MaM_a é unitária.

Existem NN autovalores de MaM_a, 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 MaM_a.

∣ψ0⟩=∣1⟩+∣a⟩+⋯+∣ar−1⟩r\vert \psi_0 \rangle = \frac{\vert 1 \rangle + \vert a \rangle + \cdots + \vert a^{r-1} \rangle}{\sqrt{r}}

O número rr é a ordem de aa módulo NN, aqui e em todo o restante da aula. O autovalor associado a esse autovetor é 11 porque ele não é alterado quando multiplicamos por aa.

Ma∣ψ0⟩=∣a⟩+⋯+∣ar−1⟩+∣ar⟩r=∣a⟩+⋯+∣ar−1⟩+∣1⟩r=∣ψ0⟩M_a \vert \psi_0 \rangle = \frac{\vert a \rangle + \cdots + \vert a^{r-1} \rangle + \vert a^r \rangle}{\sqrt{r}} = \frac{\vert a \rangle + \cdots + \vert a^{r-1} \rangle + \vert 1 \rangle}{\sqrt{r}} = \vert \psi_0 \rangle

Isso acontece porque ar=1a^r = 1, de modo que cada estado da base padrão ∣ak⟩\vert a^k \rangle é deslocado para ∣ak+1⟩\vert a^{k+1} \rangle para k≤r−1k\leq r-1, e ∣ar−1⟩\vert a^{r-1} \rangle é deslocado de volta para ∣1⟩\vert 1\rangle. Informalmente, é como se estivéssemos mexendo lentamente ∣ψ0⟩\vert \psi_0 \rangle, mas ele já está completamente misturado, então nada muda.

Aqui está outro exemplo de autovetor de MaM_a. Este é mais interessante no contexto de busca de ordem e estimativa de fase.

∣ψ1⟩=∣1⟩+ωr−1∣a⟩+⋯+ωr−(r−1)∣ar−1⟩r\vert \psi_1 \rangle = \frac{\vert 1 \rangle + \omega_r^{-1} \vert a \rangle + \cdots + \omega_r^{-(r-1)}\vert a^{r-1} \rangle}{\sqrt{r}}

Alternativamente, podemos escrever esse vetor usando uma somatória da seguinte forma.

∣ψ1⟩=1r∑k=0r−1ωr−k∣ak⟩\vert \psi_1 \rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^k \rangle

Aqui vemos o número complexo ωr=e2πi/r\omega_r = e^{2\pi i/r} surgindo naturalmente, devido à forma como a multiplicação por aa funciona módulo NN. Desta vez, o autovalor correspondente é ωr\omega_r. Para ver isso, podemos primeiro calcular da seguinte forma.

Ma∣ψ1⟩=1r∑k=0r−1ωr−kMa∣ak⟩=1r∑k=0r−1ωr−k∣ak+1⟩=1r∑k=1rωr−(k−1)∣ak⟩=1rωr∑k=1rωr−k∣ak⟩M_a \vert \psi_1 \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} M_a\vert a^k \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^{k+1} \rangle = \frac{1}{\sqrt{r}}\sum_{k = 1}^{r} \omega_r^{-(k - 1)} \vert a^{k} \rangle = \frac{1}{\sqrt{r}}\omega_r \sum_{k = 1}^{r} \omega_r^{-k} \vert a^{k} \rangle

Então, como ωr−r=1=ωr0\omega_r^{-r} = 1 = \omega_r^0 e ∣ar⟩=∣1⟩=∣a0⟩\vert a^r \rangle = \vert 1\rangle = \vert a^0\rangle, vemos que

1r∑k=1rωr−k∣ak⟩=1r∑k=0r−1ωr−k∣ak⟩=∣ψ1⟩,\frac{1}{\sqrt{r}}\sum_{k = 1}^{r} \omega_r^{-k} \vert a^{k} \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^k \rangle = \vert\psi_1\rangle,

so Ma∣ψ1⟩=ωr∣ψ1⟩M_a \vert\psi_1\rangle = \omega_r \vert\psi_1\rangle.

Usando o mesmo raciocínio, podemos identificar pares adicionais autovetor/autovalor para MaM_a. Para qualquer escolha de j∈{0,…,r−1}j\in\{0,\ldots,r-1\} temos que

∣ψj⟩=1r∑k=0r−1ωr−jk∣ak⟩\vert \psi_j \rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \omega_r^{-jk} \vert a^k \rangle

é um autovetor de MaM_a cujo autovalor correspondente é ωrj\omega_r^j.

Ma∣ψj⟩=ωrj∣ψj⟩M_a \vert \psi_j \rangle = \omega_r^j \vert \psi_j \rangle

Existem outros autovetores de MaM_a, mas não precisamos nos preocupar com eles — vamos focar exclusivamente nos autovetores ∣ψ0⟩,…,∣ψr−1⟩\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle que acabamos de identificar.

Encontrando a ordem por estimativa de fase​

Para resolver o problema de encontrar a ordem de um dado a∈ZN∗a\in\mathbb{Z}_N^{\ast}, podemos aplicar o procedimento de estimativa de fase à operação MaM_a.

Para isso, precisamos implementar não apenas MaM_a de forma eficiente com um circuito quântico, mas também Ma2,M_a^2, Ma4,M_a^4, Ma8,M_a^8, 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 MaM_a 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 00 e N−1N-1. O maior número que precisamos codificar é N−1N-1, então o número de bits necessários é

n=lg⁡(N−1)=⌊log⁡(N−1)⌋+1.n = \operatorname{lg}(N-1) = \lfloor \log(N-1) \rfloor + 1.

Por exemplo, se N=21N = 21 temos n=lg⁡(N−1)=5n = \operatorname{lg}(N-1) = 5. Veja como fica a codificação dos elementos de Z21\mathbb{Z}_{21} como strings binárias de comprimento 55.

0↦000001↦00001⋮20↦10100\begin{gathered} 0 \mapsto 00000\\[1mm] 1 \mapsto 00001\\[1mm] \vdots\\[1mm] 20 \mapsto 10100 \end{gathered}

E agora, aqui está uma definição precisa de como MaM_a é definida como uma operação de nn qubits.

Ma∣x⟩={∣ax  (mod  N)⟩0≤x<N∣x⟩N≤x<2nM_a \vert x\rangle = \begin{cases} \vert ax \; (\textrm{mod}\;N)\rangle & 0\leq x < N\\[1mm] \vert x\rangle & N\leq x < 2^n \end{cases}

O ponto é que, embora só nos importe como MaM_a funciona para ∣0⟩,…,∣N−1⟩\vert 0\rangle,\ldots,\vert N-1\rangle, precisamos especificar como ela funciona para os 2n−N2^n - N estados da base padrão restantes — e precisamos fazer isso de uma forma que ainda nos dê uma operação unitária. Definir MaM_a 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 MaM_a, para qualquer escolha de a∈ZN∗a\in\mathbb{Z}_N^{\ast}, com custo O(n2)O(n^2). Aqui está uma maneira de fazer isso.

  1. Construa um circuito para realizar a operação

    ∣x⟩∣y⟩↦∣x⟩∣y⊕fa(x)⟩\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \vert y \oplus f_a(x)\rangle

    onde

    fa(x)={ax  (mod  N)0≤x<NxN≤x<2nf_a(x) = \begin{cases} ax \; (\textrm{mod}\;N) & 0\leq x < N\\[1mm] x & N\leq x < 2^n \end{cases}

    usando o método descrito na lição anterior. Isso nos dá um circuito de tamanho O(n2)O(n^2).

  2. Troque os dois sistemas de nn qubits usando nn portas de swap para trocar os qubits individualmente.

  3. De forma semelhante ao primeiro passo, construa um circuito para a operação

    ∣x⟩∣y⟩↦∣x⟩∣y⊕fa−1(x)⟩\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \bigl\vert y \oplus f_{a^{-1}}(x)\bigr\rangle

    onde a−1a^{-1} é o inverso de aa em ZN∗\mathbb{Z}_N^{\ast}.

Inicializando os nn qubits inferiores e compondo os três passos, obtemos esta transformação:

∣x⟩∣0n⟩↦step 1∣x⟩∣fa(x)⟩↦step 2∣fa(x)⟩∣x⟩↦step 3∣fa(x)⟩∣x⊕fa−1(fa(x))⟩=∣fa(x)⟩∣0n⟩\vert x \rangle \vert 0^n \rangle \stackrel{\text{step 1}}{\mapsto} \vert x \rangle \vert f_a(x)\rangle \stackrel{\text{step 2}}{\mapsto} \vert f_a(x)\rangle \vert x \rangle \stackrel{\text{step 3}}{\mapsto} \vert f_a(x)\rangle \bigl\vert x \oplus f_{a^{-1}}(f_a(x)) \bigr\rangle = \vert f_a(x)\rangle\vert 0^n \rangle

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 é O(n2)O(n^2).

Para realizar Ma2,M_a^2, Ma4,M_a^4, Ma8,M_a^8, e assim por diante, podemos usar exatamente o mesmo método, exceto que substituímos aa por a2,a^2, a4,a^4, a8,a^8, e assim por diante, como elementos de ZN∗.\mathbb{Z}_N^{\ast}. Ou seja, para qualquer potência kk que escolhermos, podemos criar um circuito para MakM_a^k não iterando kk vezes o circuito para Ma,M_a, mas sim calculando b=ak∈ZN∗b = a^k \in \mathbb{Z}_N^{\ast} e então usando o circuito para Mb.M_b.

O cálculo de potências ak∈ZNa^k \in \mathbb{Z}_N é 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 verdade, precisamos apenas das potências de aa cujos expoentes são potências de 22, especificamente a2,a4,…a2m−1∈ZN∗a^2, a^4, \ldots a^{2^{m-1}} \in \mathbb{Z}_N^{\ast}, e podemos obter essas potências elevando ao quadrado iterativamente m−1m-1 vezes. Cada elevação ao quadrado pode ser realizada por um circuito booleano de tamanho O(n2)O(n^2).

Em essência, o que estamos efetivamente fazendo aqui é transferir o problema de iterar MaM_a até 2m−12^{m-1} 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 com o número de qubits de controle mm.

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 MaM_a usando o autovetor ∣ψ1⟩\vert\psi_1\rangle. 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 MaM_a correspondente ao autovetor ∣ψ1⟩\vert \psi_1\rangle é

ωr=e2πi1r.\omega_r = e^{2\pi i \frac{1}{r}}.

Ou seja, ωr=e2πiθ\omega_r = e^{2\pi i \theta} com θ=1/r.\theta = 1/r. Então, se executarmos o procedimento de estimativa de fase em MaM_a usando o autovetor ∣ψ1⟩,\vert\psi_1\rangle, obteremos uma aproximação de 1/r.1/r. Calculando o recíproco, conseguiremos descobrir rr — desde que nossa aproximação seja boa o suficiente.

Em mais detalhes, quando executamos o procedimento de estimativa de fase usando mm qubits de controle, o que obtemos é um número y∈{0,…,2m−1}y\in\{0,\ldots,2^m-1\}. Tomamos então y/2my/2^m como estimativa para θ\theta, que é 1/r1/r no caso em questão. Para descobrir rr a partir dessa aproximação, o natural é calcular o recíproco da nossa aproximação e arredondar para o inteiro mais próximo.

⌊2my+12⌋\left\lfloor \frac{2^m}{y} + \frac{1}{2} \right\rfloor

Por exemplo, suponha que r=6r = 6 e realizamos a estimativa de fase em MaM_a com o autovetor ∣ψ1⟩\vert\psi_1\rangle usando m=5m = 5 bits de controle. A melhor aproximação de 55 bits para 1/r=1/61/r = 1/6 é 5/325/32, e temos uma chance razoável (cerca de 68%68\% nesse caso) de obter o resultado y=5y=5 da estimativa de fase. Temos

2my=325=6.4,\frac{2^m}{y} = \frac{32}{5} = 6.4,

e arredondando para o inteiro mais próximo obtemos 66, 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 m=4m = 4 qubits de controle na estimativa de fase, podemos obter a melhor aproximação de 44 bits para 1/r=1/61/r = 1/6, que é 3/163/16. Calculando o recíproco obtemos

2my=163=5.333⋯\frac{2^m}{y} = \frac{16}{3} = 5.333 \cdots

e arredondando para o inteiro mais próximo obtemos a resposta incorreta 55.

Então, quanta precisão precisamos para obter a resposta certa? Sabemos que a ordem rr é um inteiro, e intuitivamente o que precisamos é de precisão suficiente para distinguir 1/r1/r de possibilidades próximas, incluindo 1/(r+1)1/(r+1) e 1/(r−1)1/(r-1). O número mais próximo de 1/r1/r com o qual precisamos nos preocupar é 1/(r+1)1/(r+1), e a distância entre esses dois números é

1r−1r+1=1r(r+1).\frac{1}{r} - \frac{1}{r+1} = \frac{1}{r(r+1)}.

Então, se quisermos garantir que não confundimos 1/r1/r com 1/(r+1)1/(r+1), é suficiente usar precisão o bastante para garantir que a melhor aproximação y/2my/2^m para 1/r1/r seja mais próxima de 1/r1/r do que de 1/(r+1)1/(r+1). Se usarmos precisão suficiente para garantir que

∣y2m−1r∣<12r(r+1),\left\vert \frac{y}{2^m} - \frac{1}{r} \right\vert < \frac{1}{2 r (r+1)},

de forma que o erro seja menor que a metade da distância entre 1/r1/r e 1/(r+1)1/(r+1), então y/2my/2^m estará mais próximo de 1/r1/r do que de qualquer outra possibilidade, incluindo 1/(r+1)1/(r+1) e 1/(r−1)1/(r-1).

Podemos verificar isso da seguinte forma. Suponha que

y2m=1r+ε\frac{y}{2^m} = \frac{1}{r} + \varepsilon

para ε\varepsilon satisfazendo

∣ε∣<12r(r+1).\vert\varepsilon\vert < \frac{1}{2 r (r+1)}.

Ao calcular o recíproco obtemos

2my=11r+ε=r1+εr=r−εr21+εr.\frac{2^m}{y} = \frac{1}{\frac{1}{r} + \varepsilon} = \frac{r}{1+\varepsilon r} = r - \frac{\varepsilon r^2}{1+\varepsilon r}.

Maximizando no numerador e minimizando no denominador, podemos limitar o quanto estamos distantes de rr da seguinte forma.

∣εr21+εr∣≤r22r(r+1)1−r2r(r+1)=r2r+1<12\left\vert \frac{\varepsilon r^2}{1+\varepsilon r} \right\vert \leq \frac{ \frac{r^2}{2 r(r+1)}}{1 - \frac{r}{2r(r+1)}} %= \frac{r^2}{2 r (r+1) - r} = \frac{r}{2 r + 1} < \frac{1}{2}

Estamos a menos de 1/21/2 de rr, então, como esperado, obteremos rr ao arredondar.

Infelizmente, como ainda não sabemos o que é r,r, não podemos usá-lo para nos dizer quanta precisão precisamos. O que podemos fazer em vez disso é usar o fato de que rr deve ser menor que NN para garantir que usamos precisão suficiente. Em particular, se usarmos precisão suficiente para garantir que a melhor aproximação y/2my/2^m para 1/r1/r satisfaça

∣y2m−1r∣≤12N2,\left\vert \frac{y}{2^m} - \frac{1}{r} \right\vert \leq \frac{1}{2N^2},

então teremos precisão suficiente para determinar rr corretamente ao calcular o recíproco. Tomar m=2lg⁡(N)+1m = 2\operatorname{lg}(N)+1 garante que temos uma boa chance de obter uma estimativa com essa precisão usando o método descrito anteriormente. (Tomar m=2lg⁡(N)m = 2\operatorname{lg}(N) é 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 ∣ψ1⟩\vert \psi_1 \rangle de MaM_a, podemos aprender rr 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 ∣ψ1⟩\vert\psi_1\rangle, então precisamos descobrir como prosseguir.

Vamos supor momentaneamente que procedemos como acima, exceto com o autovetor ∣ψk⟩\vert\psi_k\rangle no lugar de ∣ψ1⟩\vert\psi_1\rangle, para qualquer escolha de k∈{0,…,r−1}k\in\{0,\ldots,r-1\} que queiramos considerar. O resultado que obtemos do procedimento de estimativa de fase será uma aproximação

y2m≈kr.\frac{y}{2^m} \approx \frac{k}{r}.

Trabalhando com a suposição de que não conhecemos nem kk nem rr, isso pode ou não nos permitir identificar rr. Por exemplo, se k=0k = 0 obteremos uma aproximação y/2my/2^m de 00, o que infelizmente não nos diz nada. Esse, no entanto, é um caso incomum; para outros valores de kk, pelo menos conseguiremos aprender algo sobre rr.

Podemos usar um algoritmo conhecido como algoritmo de frações contínuas para converter nossa aproximação y/2my/2^m em frações próximas — incluindo k/rk/r 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.

Fato

Dados um inteiro N≥2N\geq 2 e um número real α∈(0,1)\alpha\in(0,1), existe no máximo uma escolha de inteiros u,v∈{0,…,N−1}u,v\in\{0,\ldots,N-1\} com v≠0v\neq 0 e gcd⁡(u,v)=1\gcd(u,v)=1 satisfazendo ∣α−u/v∣<12N2\vert \alpha - u/v\vert < \frac{1}{2N^2}. Dados α\alpha e NN, o algoritmo de frações contínuas encontra uu e vv, ou informa que eles não existem. Esse algoritmo pode ser implementado como um circuito booleano de tamanho O((lg⁡(N))3)O((\operatorname{lg}(N))^3).

Se temos uma aproximação muito próxima y/2my/2^m de k/rk/r, e executamos o algoritmo de frações contínuas para NN e α=y/2m\alpha = y/2^m, obteremos uu e vv, como descritos no fato. Uma análise do fato nos permite concluir que

uv=kr.\frac{u}{v} = \frac{k}{r}.

Observe em particular que não necessariamente aprendemos kk e rr separadamente — aprendemos apenas k/rk/r em sua forma irredutível.

Por exemplo, como já notamos, não vamos aprender nada com k=0k=0. Mas esse é o único valor de kk em que isso acontece. Quando kk é diferente de zero, ele pode ter fatores comuns com rr, mas o número vv que obtemos do algoritmo de frações contínuas deve pelo menos dividir rr.

Está longe de ser óbvio, mas é verdade que se temos a capacidade de aprender uu e vv com u/v=k/ru/v = k/r para k∈{0,…,r−1}k\in\{0,\ldots,r-1\} escolhido uniformemente ao acaso, então é muito provável que consigamos recuperar rr após apenas algumas amostras. Em particular, se nosso palpite para rr for o mínimo múltiplo comum de todos os valores do denominador vv que observamos, estaremos certos com alta probabilidade. Intuitivamente falando, alguns valores de kk não são bons porque compartilham fatores comuns com rr, e esses fatores comuns ficam ocultos quando aprendemos uu e vv. Mas escolhas aleatórias de kk provavelmente não vão ocultar fatores de rr por muito tempo, e a probabilidade de não adivinharmos rr 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 ∣ψk⟩\vert\psi_k\rangle de MaM_a 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 ∣1⟩\vert 1\rangle, com o qual queremos dizer a codificação binária de nn bits do número 11, no lugar de um autovetor ∣ψ⟩\vert\psi\rangle de MaM_a. 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 MaM_a, e é isso que estamos fazendo aqui com o estado ∣1⟩\vert 1\rangle. (Esse não é um autovetor de MaM_a a menos que a=1a=1, o que não é uma escolha de nosso interesse.)

A justificativa para escolher o estado ∣1⟩\vert 1\rangle no lugar de um autovetor de MaM_a é que a seguinte equação é verdadeira.

∣1⟩=1r∑k=0r−1∣ψk⟩\vert 1\rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \vert \psi_k\rangle

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 k∈{0,…,r−1}k\in\{0,\ldots,r-1\} uniformemente ao acaso e usado ∣ψk⟩\vert\psi_k\rangle como autovetor.

Em mais detalhes, vamos imaginar que executamos o procedimento de estimativa de fase com o estado ∣1⟩\vert 1\rangle no lugar de um dos autovetores ∣ψk⟩\vert\psi_k\rangle. Após a transformada de Fourier quântica inversa ser realizada, isso nos deixa com o estado

1r∑k=0r−1∣ψk⟩∣γk⟩,\frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \vert \psi_k\rangle \vert \gamma_k\rangle,

onde

∣γk⟩=12m∑y=02m−1∑x=02m−1e2πix(k/r−y/2m)∣y⟩.\vert\gamma_k\rangle = \frac{1}{2^m} \sum_{y=0}^{2^m - 1} \sum_{x=0}^{2^m-1} e^{2\pi i x (k/r - y/2^m)} \vert y\rangle.

O vetor ∣γk⟩\vert\gamma_k\rangle representa o estado dos mm qubits superiores após a transformada de Fourier quântica inversa ter sido realizada sobre eles.

Portanto, em virtude do fato de que {∣ψ0⟩,…,∣ψr−1⟩}\{\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle\} é um conjunto ortonormal, encontramos que uma medição dos mm qubits superiores produz uma aproximação y/2my/2^m do valor k/rk/r onde k∈{0,…,r−1}k\in\{0,\ldots,r-1\} é escolhido uniformemente ao acaso. Como já discutimos, isso nos permite aprender rr 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 MakM_a^k é O(n2)O(n^2). Há mm operações unitárias controladas, e temos m=O(n)m = O(n), então o custo total para as operações unitárias controladas é O(n3)O(n^3). Além disso, temos mm portas Hadamard (que contribuem O(n)O(n) para o custo), e a transformada de Fourier quântica inversa contribui O(n2)O(n^2) para o custo. Assim, o custo das operações unitárias controladas domina o custo de todo o procedimento — que é portanto O(n3)O(n^3).

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 aka^k em ZN\mathbb{Z}_N para k=2,4,8,…,2m−1k = 2, 4, 8, \ldots, 2^{m-1}, 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 θ\theta em frações. Esses cálculos podem ser realizados por circuitos booleanos com custo total de O(n3)O(n^3).

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 NN, e podemos fazer isso recursivamente. Especificamente, podemos focar na tarefa de dividir NN, o que significa encontrar dois inteiros b,c≥2b,c\geq 2 tais que N=bcN = bc. Isso não é possível se NN for um número primo, mas podemos testar de forma eficiente se NN é primo usando um algoritmo de teste de primalidade antes, e se NN não for primo tentaremos dividi-lo. Assim que dividirmos NN, basta aplicar a recursão em bb e cc até que todos os fatores sejam primos e obtenhamos a fatoração prima de NN.

Dividir números pares é fácil: basta retornar 22 e N/2N/2.

Também é fácil dividir potências perfeitas, ou seja, números da forma N=sjN = s^j para inteiros s,j≥2,s,j\geq 2, aproximando as raízes N1/2,N^{1/2}, N1/3,N^{1/3}, N1/4,N^{1/4}, e assim por diante, e verificando os inteiros próximos como candidatos para s.s. Não precisamos ir além de log⁡(N)\log(N) passos nessa sequência, pois nesse ponto a raiz cai abaixo de 22 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 ss é primo. Se NN for ímpar e não for uma potência de primo, porém, a busca de ordem nos permite dividir NN.

Algoritmo probabilístico para dividir um inteiro ímpar e composto N que não é potência de primo
  1. Escolha aleatoriamente a∈{2,…,N−1}a\in\{2,\ldots,N-1\}.

  2. Calcule d=gcd⁡(a,N)d=\gcd(a,N).

  3. Se d>1d > 1, retorne b=db = d e c=N/dc = N/d e pare. Caso contrário, continue para o próximo passo sabendo que a∈ZN∗a\in\mathbb{Z}_N^{\ast}.

  4. Seja rr a ordem de aa módulo NN. (É aqui que precisamos da busca de ordem.)

  5. Se rr for par:

    5.1 Calcule x=ar/2−1x = a^{r/2} - 1 módulo NN
    5.2 Calcule d=gcd⁡(x,N)d = \gcd(x,N).
    5.3 Se d>1d>1, retorne b=db=d e c=N/dc = N/d e pare.

  6. Se esse ponto for atingido, o algoritmo falhou em encontrar um fator de NN.

Uma execução desse algoritmo pode falhar em encontrar um fator de NN. Especificamente, isso ocorre em duas situações:

  • A ordem de aa módulo NN é ímpar.
  • A ordem de aa módulo NN é par e gcd⁡(ar/2−1,N)=1\gcd\bigl(a^{r/2} - 1, N\bigr) = 1.

Usando teoria dos números elementar, pode-se provar que, para uma escolha aleatória de aa, com probabilidade de pelo menos 1/21/2 nenhum desses eventos ocorre. Na verdade, a probabilidade de que algum desses eventos ocorra é no máximo 2−(m−1)2^{-(m-1)}, onde mm é o número de fatores primos distintos de NN — e é por isso que a hipótese de que NN não é uma potência de primo é necessária. (A hipótese de que NN é í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 NN. Portanto, se rodarmos o algoritmo tt vezes, escolhendo aa aleatoriamente a cada vez, conseguiremos dividir NN com probabilidade de pelo menos 1−2−t1 - 2^{-t}.

A ideia fundamental por trás do algoritmo é a seguinte. Se temos uma escolha de aa para a qual a ordem rr de aa módulo NN é par, então r/2r/2 é um inteiro e podemos considerar os números

ar/2−1  (mod  N)ear/2+1  (mod  N).a^{r/2} - 1\; (\textrm{mod}\; N) \quad \text{e} \quad a^{r/2} + 1\; (\textrm{mod}\; N).

Usando a fórmula Z2−1=(Z+1)(Z−1)Z^2 - 1 = (Z+1)(Z-1), concluímos que

(ar/2−1)(ar/2+1)=ar−1.\bigl(a^{r/2} - 1\bigr) \bigl(a^{r/2} + 1\bigr) = a^r - 1.

Agora, sabemos que ar  (mod  N)=1a^r \; (\textrm{mod}\; N) = 1 pela definição da ordem — o que é equivalente a dizer que NN divide ar−1a^r - 1 exatamente. Isso significa que NN divide o produto

(ar/2−1)(ar/2+1).\bigl(a^{r/2} - 1\bigr) \bigl(a^{r/2} + 1\bigr).

Para que isso seja verdade, todos os fatores primos de NN devem ser também fatores primos de ar/2−1a^{r/2} - 1 ou de ar/2+1a^{r/2} + 1 (ou de ambos) — e para uma escolha aleatória de aa é improvável que todos os fatores primos de NN dividam um mesmo termo e nenhum divida o outro. Caso contrário, desde que alguns fatores primos de NN dividam o primeiro termo e outros dividam o segundo, será possível encontrar um fator não trivial de NN calculando o MDC com o primeiro termo.