Pular para o conteúdo principal

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

ZN={0,1,,N1}\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 N,N, 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 35=15,3\cdot 5 = 15, que deixa um resto de 11 quando dividido por 7.7. Às vezes expressamos isso da seguinte forma.

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

Mas também podemos simplesmente escrever 35=1,3 \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.

+012345001234511234502234501334501244501235501234012345000000010123452024024303030340420425054321\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 aZNa\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={aZN: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 aZNa\in\mathbb{Z}_N^{\ast} e multiplicarmos aa por si mesmo repetidamente, sempre chegaremos ao número 1.1.

Como primeiro exemplo, vamos tomar N=6.N=6. Temos que 5Z65\in\mathbb{Z}_6^{\ast} porque gcd(5,6)=1,\gcd(5,6) = 1, e se multiplicarmos 55 por si mesmo obtemos 1,1, 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=21.N = 21. Se percorrermos os números de 00 a 20,20, 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 1.1. 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 ar1a^r \equiv 1 (mod N)(\textrm{mod } N)

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

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 aZN.a\in\mathbb{Z}_N^{\ast}.

Max=ax(para cada xZN)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=2,a=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.

M20=0M25=10M210=5M21=2M26=12M211=7M22=4M27=14M212=9M23=6M28=1M213=11M24=8M29=3M214=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,,N1},\{\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 N,N, e reconhecer que o inverso de MaM_a é Mar1.M_a^{r-1}.

Mar1Ma=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 aZNa\in\mathbb{Z}_N^{\ast} existe sempre um único elemento bZNb\in\mathbb{Z}_N^{\ast} que satisfaz ab=1.ab=1. Denotamos esse elemento bb por a1,a^{-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

Ma1Ma=Ma1a=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 Ma,M_a, assumindo que aZN.a\in\mathbb{Z}_N^{\ast}. Como acabamos de argumentar, essa suposição nos diz que MaM_a é unitária.

Existem NN autovalores de Ma,M_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 Ma.M_a.

ψ0=1+a++ar1r\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 N,N, aqui e em todo o restante da aula. O autovalor associado a esse autovetor é 11 porque ele não é alterado quando multiplicamos por a.a.

Maψ0=a++ar1+arr=a++ar1+1r=ψ0M_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=1,a^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 kr1,k\leq r-1, e ar1\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 Ma.M_a. Este é mais interessante no contexto de busca de ordem e estimativa de fase.

ψ1=1+ωr1a++ωr(r1)ar1r\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=1rk=0r1ωrkak\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 N.N. Desta vez, o autovalor correspondente é ωr.\omega_r. Para ver isso, podemos primeiro calcular da seguinte forma.

Maψ1=1rk=0r1ωrkMaak=1rk=0r1ωrkak+1=1rk=1rωr(k1)ak=1rωrk=1rωrkakM_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 ωrr=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

1rk=1rωrkak=1rk=0r1ωrkak=ψ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,

portanto 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 Ma.M_a. Para qualquer escolha de j{0,,r1}j\in\{0,\ldots,r-1\} temos que

ψj=1rk=0r1ωrjkak\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ψjM_a \vert \psi_j \rangle = \omega_r^j \vert \psi_j \rangle

Existem outros autovetores de Ma,M_a, mas não precisamos nos preocupar com eles — vamos focar exclusivamente nos autovetores ψ0,,ψr1\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 aZN,a\in\mathbb{Z}_N^{\ast}, podemos aplicar o procedimento de estimativa de fase à operação Ma.M_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 N1.N-1. O maior número que precisamos codificar é N1,N-1, então o número de bits necessários é

n=lg(N1)=log(N1)+1.n = \operatorname{lg}(N-1) = \lfloor \log(N-1) \rfloor + 1.

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

0000001000012010100\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.

Max={ax  (mod  N)0x<NxNx<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,,N1,\vert 0\rangle,\ldots,\vert N-1\rangle, precisamos especificar como ela funciona para os 2nN2^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 Ma,M_a, para qualquer escolha de aZN,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

    xyxyfa(x)\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \vert y \oplus f_a(x)\rangle

    onde

    fa(x)={ax  (mod  N)0x<NxNx<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

    xyxyfa1(x)\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \bigl\vert y \oplus f_{a^{-1}}(x)\bigr\rangle

    onde a1a^{-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:

x0nstep 1xfa(x)step 2fa(x)xstep 3fa(x)xfa1(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=akZNb = a^k \in \mathbb{Z}_N^{\ast} e então usando o circuito para Mb.M_b.

O cálculo de potências akZNa^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 prática, precisamos apenas de potências de 22 de a,a, especificamente a2,a4,a2m1ZN,a^2, a^4, \ldots a^{2^{m-1}} \in \mathbb{Z}_N^{\ast}, e podemos obter essas potências elevando ao quadrado iterativamente m1m-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é 2m12^{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 no número de qubits de controle m.m.

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,,2m1}.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/32,5/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 6,6, 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/6,1/r = 1/6, que é 3/16.3/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 5.5.

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/(r1).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 é

1r1r+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

y2m1r<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/(r1).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+εrr22r(r+1)1r2r(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 r,r, 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

y2m1r12N2,\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 Ma,M_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,,r1}k\in\{0,\ldots,r-1\} que queiramos considerar. O resultado que obtemos do procedimento de estimativa de fase será uma aproximação

y2mkr.\frac{y}{2^m} \approx \frac{k}{r}.

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

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 N2N\geq 2 e um número real α(0,1),\alpha\in(0,1), existe no máximo uma escolha de inteiros u,v{0,,N1}u,v\in\{0,\ldots,N-1\} com v0v\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 N,N, o algoritmo de frações contínuas encontra uu e v,v, 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/r,k/r, e executamos o algoritmo de frações contínuas para NN e α=y/2m,\alpha = y/2^m, obteremos uu e v,v, 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=0.k=0. Mas esse é o único valor de kk em que isso acontece. Quando kk é diferente de zero, ele pode ter fatores comuns com r,r, mas o número vv que obtemos do algoritmo de frações contínuas deve pelo menos dividir r.r.

Não é óbvio, mas é verdade que se temos a capacidade de aprender uu e vv com u/v=k/ru/v = k/r para k{0,,r1}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 r,r, e esses fatores comuns ficam ocultos quando aprendemos uu e v.v. 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 1,1, no lugar de um autovetor ψ\vert\psi\rangle de Ma.M_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 Ma,M_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=1,a=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=1rk=0r1ψ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,,r1}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

1rk=0r1ψkγk,\frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \vert \psi_k\rangle \vert \gamma_k\rangle,

onde

γk=12my=02m1x=02m1e2πix(k/ry/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,,ψr1}\{\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,,r1}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).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,,2m1,k = 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 N,N, e podemos fazer isso recursivamente. Especificamente, podemos focar na tarefa de dividir N,N, o que significa encontrar dois inteiros b,c2b,c\geq 2 tais que N=bc.N = 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 N,N, basta aplicar a recursão em bb e cc até que todos os fatores sejam primos e obtenhamos a fatoração prima de N.N.

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

Também é fácil dividir potências perfeitas, ou seja, números da forma N=sjN = s^j para inteiros s,j2,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 N.N.

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

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

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

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

  5. Se rr for par:

    5.1 Calcule x=ar/21x = a^{r/2} - 1 módulo NN
    5.2 Calcule d=gcd(x,N).d = \gcd(x,N).
    5.3 Se d>1,d>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 N.N.

Uma execução desse algoritmo pode falhar em encontrar um fator de N.N. 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/21,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 a,a, 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(m1),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 N.N. Portanto, se rodarmos o algoritmo tt vezes, escolhendo aa aleatoriamente a cada vez, conseguiremos dividir NN com probabilidade de pelo menos 12t.1 - 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/21  (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 Z21=(Z+1)(Z1),Z^2 - 1 = (Z+1)(Z-1), concluímos que

(ar/21)(ar/2+1)=ar1.\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 ar1a^r - 1 exatamente. Isso significa que NN divide o produto

(ar/21)(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/21a^{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 apenas um dos termos sem dividir 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.