Acessibilidade / Reportar erro

Algoritmos quânticos com IBMQ Experience: Algoritmo de Deutsch-Jozsa

Quantum Algorithms in IBMQ Experience: Deutsch-Jozsa algorithm

Resumos

Processamento de informação quântica tem sido um dos pilares da nova era da informação. Nessa direção, o controle e processamento de informação quântica desempenha um papel fundamental, e computadores capazes de manipular tais informações tem se tornado realidade. Neste artigo nós apresentamos, de forma didática, elementos básicos da versão mais recente do computador quântico da IBM e suas ferramentas. Nós ainda apresentamos em detalhes o algoritmo de Deutsch-Jozsa usado para diferenciar funções constantes de funções balanceadas, incluindo uma discussão de sua eficiência frente aos algoritmos clássicos para a mesma tarefa. A implementação experimental do algoritmo em um sistema de 4 qbits é apresentada. Nosso artigo abre caminho para uma série de investigações didáticas sobre o sistema da IBM, bem como os algoritmos quânticos mais conhecidos.

Palavras-chave:
Computação quântica; algoritmos quânticos; empresa IBM; IBM-Q experience


Quantum information processing has been one of the pillars of the new information age. In this sense, the control and processing of quantum information plays a fundamental role, and computers capable of manipulating such information have become a reality. In this article we didactically present basic elements of the latest version of IBM’s quantum computer and its main tools. We also present in detail the Deutsch-Jozsa algorithm used to differentiate constant functions from balanced functions, also, including a discussion of its efficiency against classical algorithms for the same task. The experimental implementation of the algorithm in a 4-qbit system is presented. Our article paves the way for a series of didactic investigations into the IBM system as well as the best known quantum algorithms.

Keywords
Quantum computation; quantum algorithms IBM company; IBM-Q Experience


1. Introdução

O conceito de computação quântica se refere à utilização e manipulação de sistemas físicos regidos pela mecânica quântica para se realizar computação, de forma que a principal diferença entre um computador quântico e um computador clássico reside justamente na capacidade do primeiro de se favorecer das propriedades quânticas, como superposição, interferência e emaranhamento de estados, na busca por maior eficiência computacional. Assim, a origem da computação quântica nos remete à duas frentes, até então desassociadas, do conhecimento científico: a mecânica quântica e a ciência da computação.

A física quântica datada do início do século XX, com os trabalhos de Max Planck [1[1] M. Planck, Annalen der Physik 309, 553 (1901).], se estabelece definitivamente como teoria moderna nos anos 1920, alicerçada nos trabalhos de Werner Heisenberg [2[2] W. Heisenberg, Zeitschrift für Physik 33, 879 (1925).] e, em paralelo, Erwin Schrödinger [3[3] E. Schrödinger, Phys. Rev. 28, 1049 (1926).] sobre a mecânica e cinemática de sistemas físicos como átomos e moléculas. No entanto, o avanço experimental para controle preciso de um único sistema quântico, individualmente, surge apenas em 1970 com a tecnologia de aprisionamento de átomos [4[4] W. Neuhauser, M. Hohenstatt, P. Toschek e H. Dehmelt, Phys. Rev. Lett. 41, 233 (1978)., 5[5] A. Steane, Applied Physics B: Lasers e Optics 64, 623 (1997)., 6[6] D.J. Wineland e W.M. Itano, Phys. Rev. A 20, 1521 (1979).]. Tal avanço foi fundamental para que hoje se fizesse possível alcançar a manipulação e controle fino de sistemas quânticos para a computação.

Paralelamente, em 1936, a ciência da computação dava seus passos iniciais com os trabalhos de Alan Turing, mostrando a existência de uma máquina universal que realiza operações tendo por base uma lógica de algoritmos. A partir dai, diversos desafios ao conceito de “máquina de Turing” (termo cunhado em sua homenagem) foram propostos, notadamente por R. Solovay e V. Strassen, mostrando a possibilidade do uso de algoritmos probabilísticos, superando o paradigma determinístico [7[7] M.A. Nielsen e I.L. Chuang, Quantum Computation e Quantum Information: 10th Anniversary Edition (Cambridge University Press, Cambridge, 2011), 10ª ed., p. 5.].

A computação quântica, então, nasce de fato no início da década de 1980 quando Paul Benioff propõe um modelo de computador regido por um sistema quântico microscópico, e que satisfaz o conceito de uma máquina de Turing [8[8] P. Benioff, Journal of Statistical Physics 22, 563 (1980).]. Desde seu surgimento, uma das pautas centrais de debate a respeito do paradigma da computação quântica é a sua eficiência frente à computação clássica, e se um computador quântico poderia resolver problemas que não tinham uma solução eficiente na computação clássica.

Em 1985 David Deutsch respondeu positivamente a esta pergunta [9[9] D. Deutsch, Proceeding of the Royal Society A, 400, 97 (1985).], e nessa mesma linha, em 1994, Peter Shor mostrou que um computador quântico pode ser útil para a solução de grandes problemas, como a decomposição de um número inteiro em fatores primos, operação que se torna inviável em computadores clássicos quando o número a ser fatorado contém muitos dígitos [10[10] P.W. Shor, SIAM Journal on Computing 26, 1484 (1997).]. Ainda, um outro marco da área se deu em 1995 com a descoberta, por Lov Grover, de que era possível, utilizando a computação quântica, conduzir uma pesquisa em uma base de dados não estruturada em uma velocidade maior que a desempenhada pelos algoritmos clássicos [11[11] L.K. Grover, em: Proceedings of the Twenty-Eighth Annual ACM Symposium on Theory of Computing, (Association for Computing Machinery, New York, 1996), p. 212.].

Ao lado de todo esse desenvolvimento, uma outra área da computação quântica, sugerida por Richard Feynman em 1982, também se desenvolveu a partir da ideia se usar os computadores quânticos para simular certos sistemas físicos que não poderiam ser simulados em computadores clássicos [12[12] R.P. Feynman, International journal of theoretical physics 21, 467 (1982).].

Neste artigo, o primeiro de uma série sobre algoritmos quânticos, nós apresentamos as ferramentas matemáticas que são a base para o entendimento da construção de algorítimos quânticos e implicações físicas e tecnológicas desses. Traduziremos a complexidade desses algoritmos para uma versão de simples entendimento, ampliando assim a acessibilidade ao público não especialista. Em particular, teremos como foco a descrição do Algoritmo de Deutsch-Jozsa [13[13] D. Deutsch e R. Jozsa, Proceeding of the Royal Society A 439, 553 (1992)., 14[14] Z. Li, J. Dai, S. Pan, W. Zhang e J. Hu, International Journal of Theoretical Physics 59, 1668(2020).] e sua implementação experimental, utilizando os computadores quânticos da IBM, disponíveis na plataforma IBMQ-Experience [15[15] https://quantum-computing.ibm.com/.
https://quantum-computing.ibm.com/....
] e de acesso ao público, para programação na nuvem. O IBMQ-Experience tem sido usado para implementar tarefas quânticas, como por exemplo teletransporte [16[16] A.C. Santos, Revista Brasileira de Ensino de Física 39, e1301 (2017)., 17[17] W. Rabelo e M. Costa, Revista Brasileira de Ensino de Física 40, e4306 (2018).], geração de estados emaranhados [18[18] G.F. de Jesus, M.H.F. da Silva, T.G. Dourado, L.Q. Galvão, F.G. de Oliveira Souza e C. Cruz, Revista Brasileira de Ensino de Física 43, e20210033 (2021).], e simular sistemas quânticos [19[19] É.M. Alves, F.D. Gomes, H.S. Santana e A.C. Santos, Revista Brasileira de Ensino de Física 42, e20190299 (2020).].

1.1. Ferramental matemático da MecânicaQuântica

Esta seção será destinada a uma breve apresentação dos fundamentos e conceitos básicos que serão usados ao longo do artigo, sendo, assim, indispensáveis para o entendimento das seções que se seguem.

O primeiro conceito a ser introduzido é a ideia da representação do estado de um sistema físico através de um vetor |ψ, em notação Bra-ket,1 1 A notação Bra-ket foi proposta por Paul Dirac e por isso também pode ser referida como notação de Dirac. É muito utilizada no campo da mecânica quântica para representar vetores, produtos internos e produtos externos. O Ket é utilizado para representar um vetor coluna |ψ⟩=[ψ1ψ2…ψn]T, sendo T a operação de transposição de matrizes (MT é a transposta da matriz M). Já o Bra representa um vetor no espaço dual de |Ψ⟩, sendo um vetor linha cujos elementos são os complexos conjugados de |Ψ⟩ |ψ⟩=[ψ1*ψ2*…ψn*]. que reside em um espaço vetorial complexo (corpo dado pelos números complexos) composto de vetores ortogonais e normalizados (norma igual à 1). A esse espaço, dá-se o nome de espaço de Hilbert do sistema e denota-se como . Tal espaço vetorial é munido de um produto interno e relação de completeza [20[20] G. Arfken, H. Weber, Mathematical Methods for Physicists (Elsevier Science, Boston, 2005), 6ª ed., p. 658.]. O produto interno entre dois elementos |ψ,|ϕ escreve-se ψ|ϕ=(|ψ,|ϕ), este sendo um número definido no corpo de , ou seja ψ|ϕ é um número complexo (), em geral. No contexto de computação quântica, os sistemas físicos de interesse são aqueles que podem ser representados por vetores de estado pertencentes a um espaço de Hilbert bidimensional, caracterizando um sistema quântico de dois níveis, o qbit. A base ortonormal utilizada na representação dos vetores de estado é a base canônica {|0,|1}, com representação matricial

(1) | 0 = [ 1 0 ] , | 1 = [ 0 1 ] .

Doravante, a base acima será referida como base computacional, sendo |0 e |1 os estados da base computacional. Portanto, qualquer vetor de estado |ψ pode ser, então, escrito como

(2) | ψ = a | 0 + b | 1 ,

um estado de superposição entre os vetores da base, em que os coeficientes complexos a e b são denominados amplitudes de probabilidade. Da normalização do vetor de estado, segue que, a partir dessa representação, os coeficientes a e b obedecem à condição |a|2+|b|2=1. Como objetos que atuam sobre tais vetores, definimos operadores sobre o mesmo espaço vetorial, O, tal que

(3) O | ψ = | ψ ,

com |ψ. Além disso, operadores em geram transformações lineares em , ou seja, para quaisquer |ϕ,|ψ e a,b vale

(4) O ( a | ϕ + b | ψ ) = a O | ϕ + b O | ψ = a | ϕ + b | ψ .

Dado o conjunto infinito de operadores, destacamos as matrizes de Pauli X, Y e Z; matrizes 2x2 que, junto à matriz identidade I, constituem um conjunto que descreve operações em sistemas quânticos de dois níveis, e por isso são de grande importância no campo da computação quântica. Essas matrizes, e o modo com que elas transformam os estados da base computacional são

(5a) X = [ 0 1 1 0 ] { X | 0 = | 1 X | 1 = | 0 ,
(5b) Y = [ 0 - 𝕚 𝕚 0 ] { Y | 0 = 𝕚 | 1 Y | 1 = - 𝕚 | 0 ,
(5c) Z = [ 1 0 0 - 1 ] { Z | 0 = | 0 Z | 1 = - | 1 ,

em que 𝕚=-1 é a unidade imaginária. Ainda, a evolução temporal de um sistema quântico fechado é dada através do operador de evolução temporal U(t), ou seja, um operador quântico que leva um vetor de estado |ψ(0) a um vetor de estado |ψ(t). isto é,

(6) | ψ ( t ) = U ( t ) | ψ ( 0 ) ,

sendo U(t) determinado pela equação de Schrödinger [21[21] J.J. Sakurai e J. Napolitano, Modern Quantum Mechanics (Cambridge University Press, Cambrige, 2017), 2ª ed., p. 66.]. Uma importante propriedade do operador de evolução temporal U(t) é a sua unitariedade, ou seja,

(7) U U = I ,

em que U é o hermitiano conjugado de U. A implicação direta é

(8)ψ(t)|ψ(t)=ψ(0)|U(t)U(t)|ψ(0)=ψ(0)|I|ψ(0)=ψ(0)|ψ(0)=1,
preservando a condição de normalização.

1.2. Sistemas quânticos compostos

Em computação, sempre temos que lidar com muitos dados independentes. Então, sistemas quânticos devem ser capazes de funcionar sob essas condições. Nesse sentido, é sempre possível gerar estados compostos, ou seja, estados quânticos que representam o estado conjunto de dois ou mais qbits. Matematicamente isso é feito via produto tensorial e denotado como

(9) | Ψ = | ψ 1 | ψ 2 | ψ n ,

sendo |ψi o vetor de estado relativo ao i-ésimo qbit com seu espaço de Hilbert i independente. Junto com o estado, o espaço de Hilbert total é também aumentado, sendo |Ψtotal=12n. Analogamente, uma composição de um conjunto de operações é escrita da seguinte forma

(10) O T = O 1 O 2 O n = i = 1 n O i ,

Onde Oi são operadores que atuam no espaço de Hilbert do i-ésimo qbit. O símbolo de produtória tensorial “” é usado para representar o produto de uma forma compacta. A atuação do operador OT no estado |Ψ definido na Eq. (9) é dada por

(11) | Ψ = O T | Ψ = ( O 1 O 2 O n ) ( | ψ 1 | ψ 2 | ψ n ) = ( O 1 | ψ 1 ) ( O 2 | ψ 2 ) ( O n | ψ n ) = | ψ 1 | ψ 2 | ψ n .

Para alívio de notação, também é possível omitir-se o símbolo “” na representação da composição de espaços vetoriais para os vetores de estado |ψi, escrevendo-se |ψ1|ψ2|ψn ou simplesmente |ψ1,ψ2,,ψn.

1.3. Elementos de computação quântica

Além das matrizes de Pauli, existe uma série de operações importantes no contexto da computação quântica, sendo elas atuantes em 1 ou mais qbits. Uma relevante porta lógica quântica de 1 qbit é a porta Hadamard, cuja representação matricial e atuação são

(12) H = 1 2 [ 1 1 1 - 1 ] H | x = | 0 + ( - 1 ) x | 1 2 ,

ou simplesmente,

(13) H | x = { | 0 + | 1 2 = | + , se x = 0 | 0 - | 1 2 = | - , se x = 1 .

que resulta na criação de um estado de superposição entre os vetores de estado da base computacional com igual amplitude de probabilidade.

Definindo as operações de 2 qbits temos a porta lógica CNOT, ou “não controlado” Cx(c ) t ), em que c representa o qbit de controle e t o qbit alvo. Sua atuação muda o estado do qbit alvo dependendo do valor do qbit de controle

(14) C x ( 1 ) 2 ) = [ 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 ] { | 00 | 00 | 01 | 01 | 10 | 11 | 11 | 10 .

Todas as portas quânticas podem ser resumidas a um conjunto limitado de portas de 1 e 2 qbits. Foi demonstrado que esse conjunto envolve as chamadas portas Clifford (porta Hadamard, portas de Pauli, a CNOT e a porta de fase S) somadas às portas de rotação (Ry e Rz) [7[7] M.A. Nielsen e I.L. Chuang, Quantum Computation e Quantum Information: 10th Anniversary Edition (Cambridge University Press, Cambridge, 2011), 10ª ed., p. 5.], outras portas serão detalhadas nos próximos artigos dessa série.

Na computação clássica, a sequência de portas lógicas atuando em um sistema pode ser representada na forma de um circuito e a unidade lógica é definida como o bit, que assume os valores 0 ou 1. De forma análoga, na computação quântica um circuito quântico é uma maneira de caracterizar o sequenciamento das operações quânticas que atuam na unidade lógica, o qbit, com a ressalva de que, nesta, as propriedades quânticas de superposição e emaranhamento surgem como um grande diferencial com relação à computação clássica, conforme será detalhado nas seções seguintes.

A Figura1 mostra o esquema de um circuito quântico, em que cada linha representa um qbit, e a leitura é feita da esquerda para a direita. Na figura mencionada, q é o registro quântico contendo dois qbits, q0 e q1, em que se implementam as operações, sendo que, quando os operadores estão alinhados verticalmente temos a atuação simultânea, no tempo, desses operadores nos seus respectivos qbits. Já o elemento c2 representa um registro clássico de 2 bits, que irá armazenar a informação resultante de uma medida dos qbits, podendo assumir os valores 00, 01, 10 ou 11. Ao final do circuito é realizada, então, a operação de medição, definida como sendo a medição dos qbits na base computacional, ou seja, a base Z.

Figura 1:
Esquema representativo de um circuito quântico, em que as linhas simples representam os registros quânticos, e as linhas duplas representam os registros clássicos. Cada bloco representa uma operação quântica, e ao final do circuito realiza-se as medidas dos qbits q0 e q1, armazenando-se os resultados no registro clássico. Na seção 2 2. Plataforma IBMQ Experience A computação quântica tem se desenvolvido nas últimas décadas e, cada vez mais, grandes empresas de tecnologia como Google, D-Wave, IonQ e IBM entram nesse setor em busca da comprovação da superioridade, de maneira geral, dos computadores quânticos frente aos clássicos, a chamada “supremacia2 quântica” [22, 23, 24]. Neste trabalho nos restringimos ao uso da IBMQ Experience, uma plataforma para computação quântica disponibilizada pela empresa IBM [15]. Gratuita e com uma interface para computação em nuvem, nela temos acesso a diversos computadores quânticos que variam de 5 a 15 qbits. Além disso é possível acessar os simuladores (computadores clássicos que simulam um computador quântico ideal) com capacidade de 32 a 5000 qbits. A plataforma permite a criação de circuitos tanto em uma interface gráfica, em um modelo de “clique e arraste” das portas lógicas, como a partir de linguagens de programação para computação quântica, notadamente a linguagem QASM [25] e a biblioteca Qiskit [26] para programação em linguagem Python. Por meio da utilização da interface gráfica podemos clicar nos ícones que representam os operadores quânticos e posicioná-los no circuito para que atuem sobre um qbit e, desse modo, apliquem sobre eles suas operações matemáticas, como ilustra a Figura1. Na Figura3 podemos ver alguns dos ícones disponíveis referentes às operações já mencionadas anteriormente. Após a construção do algoritmo, este pode ser submetido para processamento em um computador quântico. A possibilidade de escolha, para esse experimento na plataforma, do número de “shots”, contagem dos resultados de experimentos identicamente preparados, objetiva aumentar a acurácia estatística dos resultados. Ao final da execução, os resultados são dispostos na forma de um histograma que reflete as probabilidades das possíveis respostas. Figura 3: Ícones e representações referentes às portas lógicas quânticas de um e dois qbits utilizadas e à operação de medição na base computacional Z, disponíveis na IBM Quantum Experience. A operação de medição converte o valor obtido para os estados quânticos dos qbits em bits, e armazena no registro clássico, em que o primeiro qbit (referente ao registro q0) é o primeiro dígito (menor base de 2) do número binário no registro clássico, e assim por diante, de modo que o resultado da medição do estado |q0,q1⟩=|1,0⟩, por exemplo, seria o número binário01.Fonte: IBM Q [15] e editada pelos autores. O dispositivo utilizado para as implementações descritas nesse artigo foi o IBMQ Manila, um computador quântico com 5 qbits, cuja topologia, que destaca as conexões entre esses qbits, é ilustrada pela Figura2. O número de “shots” escolhido para todas as execuções foi 8000. Figura 2: Topologia do computador quântico IBMQ Manila, em que cada círculo enumerado simboliza 1 qbit, e as ligações entre eles simbolizam as conectividades entre os qbits. A escala de cores representa os erros associados às operações quânticas realizadas neste computador, em que, para os qbits, essa escala está associada à taxa de erros da operação de rotação X, e, para as conexões, está associada à taxa de erros da operação CNOT entre os qbits. Os valores mostrados estão de acordo com a calibração do computador no momento em que os experimentos foram realizados.Fonte: IBM Q [15]. Por fim, cabe ainda a menção de que os computadores quânticos, sendo sistemas físicos não ideias, apresentam erros associados a processos de dissipação e decoerência, inerentes a um sistema quântico não perfeitamente isolado.3 Ainda, a plataforma fornece uma documentação com um rico manual de instruções para os usuários, disponível em [28]. será detalhada a plataforma utilizada para a construção deste circuito, a IBMQ experience, bem como qual operação quântica é representada por cada bloco.Fonte: IBM Q [15[15] https://quantum-computing.ibm.com/.
https://quantum-computing.ibm.com/....
].

Além disso, uma importante propriedade dos circuitos quânticos é sua reversibilidade, isto é, devido à condição de unitariedade dos operadores quânticos, as operações em um circuito quântico podem ser revertidas simplesmente aplicando o mesmo operador seguidamente, como no exemplo que segue para um estado |ψ=|0 e a operação Hadamard atuando sobre esse estado

(15) | 0 Hadamard | 0 + | 1 2 = | + | + Hadamard 1 2 ( | 0 + | 1 2 + | 0 - | 1 2 ) = | 0 .

Por convenção um circuito é iniciado com todos os qbits no estado |0 e a partir dai as portas lógicas quânticas são implementadas. Tais portas nada mais são do que operadores quânticos que atuam em um sistema composto por um ou mais qbits.

2. Plataforma IBMQ Experience

A computação quântica tem se desenvolvido nas últimas décadas e, cada vez mais, grandes empresas de tecnologia como Google, D-Wave, IonQ e IBM entram nesse setor em busca da comprovação da superioridade, de maneira geral, dos computadores quânticos frente aos clássicos, a chamada “supremacia2 2 No contexto da computação quântica e complexidade de algoritmos, o conceito de “superioridade” difere do conceito de “supremacia”. A superioridade se refere à capacidade de um computador quântico necessitar de um tempo menor para executar uma mesma tarefa que um computador clássico já realiza, e a supremacia se refere à capacidade de o computador quântico possibilitar a realização de tarefas impossíveis, em termos práticos, de serem realizadas em um computador clássico. quântica” [22[22] https://research.ibm.com/blog/ibm-quantum-roadmap
https://research.ibm.com/blog/ibm-quantu...
, 23[23] https://quantumai.google/learn/lab.
https://quantumai.google/learn/lab....
, 24[24] F. Lardinois, Ionq claims it has built the most powerful quantum computer yet, disponível em: https://techcrunch.com/2020/10/01/ionq-claims-it-has-built-the-mostpowerful-quantum-computer-yet/, Join TechCrunch+,acessado em 05/03/2021.
https://techcrunch.com/2020/10/01/ionq-c...
]. Neste trabalho nos restringimos ao uso da IBMQ Experience, uma plataforma para computação quântica disponibilizada pela empresa IBM [15[15] https://quantum-computing.ibm.com/.
https://quantum-computing.ibm.com/....
]. Gratuita e com uma interface para computação em nuvem, nela temos acesso a diversos computadores quânticos que variam de 5 a 15 qbits. Além disso é possível acessar os simuladores (computadores clássicos que simulam um computador quântico ideal) com capacidade de 32 a 5000 qbits. A plataforma permite a criação de circuitos tanto em uma interface gráfica, em um modelo de “clique e arraste” das portas lógicas, como a partir de linguagens de programação para computação quântica, notadamente a linguagem QASM [25[25] A.W. Cross, L.S. Bishop, J.A. Smolin e J.M. Gambetta, arxiv:1707.03429 (2017).] e a biblioteca Qiskit [26[26] https://qiskit.org/.
https://qiskit.org/....
] para programação em linguagem Python.

Por meio da utilização da interface gráfica podemos clicar nos ícones que representam os operadores quânticos e posicioná-los no circuito para que atuem sobre um qbit e, desse modo, apliquem sobre eles suas operações matemáticas, como ilustra a Figura1. Na Figura3 podemos ver alguns dos ícones disponíveis referentes às operações já mencionadas anteriormente. Após a construção do algoritmo, este pode ser submetido para processamento em um computador quântico. A possibilidade de escolha, para esse experimento na plataforma, do número de “shots”, contagem dos resultados de experimentos identicamente preparados, objetiva aumentar a acurácia estatística dos resultados. Ao final da execução, os resultados são dispostos na forma de um histograma que reflete as probabilidades das possíveis respostas.

Figura 3:
Ícones e representações referentes às portas lógicas quânticas de um e dois qbits utilizadas e à operação de medição na base computacional Z, disponíveis na IBM Quantum Experience. A operação de medição converte o valor obtido para os estados quânticos dos qbits em bits, e armazena no registro clássico, em que o primeiro qbit (referente ao registro q0) é o primeiro dígito (menor base de 2) do número binário no registro clássico, e assim por diante, de modo que o resultado da medição do estado |q0,q1=|1,0, por exemplo, seria o número binário01.Fonte: IBM Q [15[15] https://quantum-computing.ibm.com/.
https://quantum-computing.ibm.com/....
] e editada pelos autores.

O dispositivo utilizado para as implementações descritas nesse artigo foi o IBMQ Manila, um computador quântico com 5 qbits, cuja topologia, que destaca as conexões entre esses qbits, é ilustrada pela Figura2. O número de “shots” escolhido para todas as execuções foi 8000.

Figura 2:
Topologia do computador quântico IBMQ Manila, em que cada círculo enumerado simboliza 1 qbit, e as ligações entre eles simbolizam as conectividades entre os qbits. A escala de cores representa os erros associados às operações quânticas realizadas neste computador, em que, para os qbits, essa escala está associada à taxa de erros da operação de rotação X, e, para as conexões, está associada à taxa de erros da operação CNOT entre os qbits. Os valores mostrados estão de acordo com a calibração do computador no momento em que os experimentos foram realizados.Fonte: IBM Q [15[15] https://quantum-computing.ibm.com/.
https://quantum-computing.ibm.com/....
].

Por fim, cabe ainda a menção de que os computadores quânticos, sendo sistemas físicos não ideias, apresentam erros associados a processos de dissipação e decoerência, inerentes a um sistema quântico não perfeitamente isolado.3 3 Processos de dissipação e decoerência são resultados da interação de um sistema quântico com o ambiente externo, e têm como principal consequência a perda de algumas propriedades quânticas do sistema, como, por exemplo, a unitariedade das operações descritas de acordo com as Eqs. (11) e (6), e a superposição coerente de estados descrita na Eq. (6). Uma discussão mais completa sobre esse aspecto dos computadores quânticos e da plataforma IBMQ é encontrada em [16, 27] Ainda, a plataforma fornece uma documentação com um rico manual de instruções para os usuários, disponível em [28[28] https://quantum-computing.ibm.com/docs/.
https://quantum-computing.ibm.com/docs/...
].

3. O Algoritmo de Deutsch

O algoritmo de Deutsch se propõe a utilizar da propriedade quântica da superposição coerente de estados, algo inexistente em dispositivos clássicos, para então determinar, a partir de uma única medida, se uma dada função f(x) é constante ou balanceada.

Seja f(x) uma função binária tal que f:{0,1}{0,1}. Se f(x) é balanceada temos as opções f(0)=0,f(1)=1 ou f(0)=1,f(1)=0. Caso ela seja constante temos f(0)=f(1)=0 ou f(0)=f(1)=1. Para ambos os casos, em um computador clássico, seria necessária a avaliação da função f(x) para todos os dois valores x de entrada para se determinar com certeza se a função é constante ou balanceada. Já num computador quântico veremos que, devido às propriedades de superposição de estados quânticos, é possível que a função f(x) seja avaliada para todos os dois valores de x em paralelo e simultaneamente, e ainda, a partir da propriedade interferência quântica, é possível que seja determinado, com certeza, por meio de uma única medida, se f(x) é constante ou balanceada.

Para a construção do algoritmo serão necessários dois registros quânticos de 1 qbit, o primeiro para representar as entradas x e o segundo para representar os valores possíveis da função f(x), da forma |x|f(x). Ainda, definimos a operação unitária Uf cuja atuação em um estado é dada por

(16) U f | x | y = | x | y f ( x ) ,

em que x,y{0,1} e o símbolo “” representar a soma em módulo 2 [29[29] A. Garcia e Y. Lequain, Elementos de álgebra, (Instituto de Matemática Pura e Aplicada, Rio de Janeiro, 2002), p. 318.]. No contexto do algoritmo de Deutsch, a atuação do operador Uf no estado |x representa a avaliação do valor da função f para a entrada x, e armazenamento deste resultado no segundo registro quântico. Entretanto, diferente das operações quânticas já definidas nas seções 1.1 1.1. Ferramental matemático da MecânicaQuântica Esta seção será destinada a uma breve apresentação dos fundamentos e conceitos básicos que serão usados ao longo do artigo, sendo, assim, indispensáveis para o entendimento das seções que se seguem. O primeiro conceito a ser introduzido é a ideia da representação do estado de um sistema físico através de um vetor |ψ⟩, em notação Bra-ket,1 que reside em um espaço vetorial complexo (corpo dado pelos números complexos) composto de vetores ortogonais e normalizados (norma igual à 1). A esse espaço, dá-se o nome de espaço de Hilbert do sistema e denota-se como ℋ. Tal espaço vetorial é munido de um produto interno e relação de completeza [20]. O produto interno entre dois elementos |ψ⟩,|ϕ⟩∈ℋ escreve-se ⟨ψ|ϕ⟩=(|ψ⟩,|ϕ⟩), este sendo um número definido no corpo de ℋ, ou seja ⟨ψ|ϕ⟩ é um número complexo (ℂ), em geral. No contexto de computação quântica, os sistemas físicos de interesse são aqueles que podem ser representados por vetores de estado pertencentes a um espaço de Hilbert bidimensional, caracterizando um sistema quântico de dois níveis, o qbit. A base ortonormal utilizada na representação dos vetores de estado é a base canônica {|0⟩,|1⟩}, com representação matricial (1) | 0 ⟩ = [ 1 0 ] , | 1 ⟩ = [ 0 1 ] . Doravante, a base acima será referida como base computacional, sendo |0⟩ e |1⟩ os estados da base computacional. Portanto, qualquer vetor de estado |ψ⟩ pode ser, então, escrito como (2) | ψ ⟩ = a ⁢ | 0 ⟩ + b ⁢ | 1 ⟩ , um estado de superposição entre os vetores da base, em que os coeficientes complexos a e b são denominados amplitudes de probabilidade. Da normalização do vetor de estado, segue que, a partir dessa representação, os coeficientes a e b obedecem à condição |a|2+|b|2=1. Como objetos que atuam sobre tais vetores, definimos operadores sobre o mesmo espaço vetorial, O∈ℋ, tal que (3) O ⁢ | ψ ⟩ = | ψ ′ ⟩ , com |ψ′⟩∈ℋ. Além disso, operadores em ℋ geram transformações lineares em ℋ, ou seja, para quaisquer |ϕ⟩,|ψ⟩∈ℋ e a,b∈ℂ vale (4) O ⁢ ( a ⁢ | ϕ ⟩ + b ⁢ | ψ ⟩ ) = a ⁢ O ⁢ | ϕ ⟩ + b ⁢ O ⁢ | ψ ⟩ = a ⁢ | ϕ ′ ⟩ + b ⁢ | ψ ′ ⟩ . Dado o conjunto infinito de operadores, destacamos as matrizes de Pauli X, Y e Z; matrizes 2x2 que, junto à matriz identidade I, constituem um conjunto que descreve operações em sistemas quânticos de dois níveis, e por isso são de grande importância no campo da computação quântica. Essas matrizes, e o modo com que elas transformam os estados da base computacional são (5a) X = [ 0 1 1 0 ] ⟹ { X ⁢ | 0 ⟩ = | 1 ⟩ X ⁢ | 1 ⟩ = | 0 ⟩ , (5b) Y = [ 0 - ⁢ 𝕚 ⁢ 𝕚 0 ] ⟹ { Y ⁢ | 0 ⟩ = ⁢ 𝕚 ⁢ | 1 ⟩ Y ⁢ | 1 ⟩ = - ⁢ 𝕚 ⁢ | 0 ⟩ , (5c) Z = [ 1 0 0 - 1 ] ⟹ { Z ⁢ | 0 ⟩ = | 0 ⟩ Z ⁢ | 1 ⟩ = - | 1 ⟩ , em que ⁢𝕚=-1 é a unidade imaginária. Ainda, a evolução temporal de um sistema quântico fechado é dada através do operador de evolução temporal U⁢(t), ou seja, um operador quântico que leva um vetor de estado |ψ⁢(0)⟩ a um vetor de estado |ψ⁢(t)⟩. isto é, (6) | ψ ⁢ ( t ) ⟩ = U ⁢ ( t ) ⁢ | ψ ⁢ ( 0 ) ⟩ , sendo U⁢(t) determinado pela equação de Schrödinger [21]. Uma importante propriedade do operador de evolução temporal U⁢(t) é a sua unitariedade, ou seja, (7) U † ⋅ U = I , em que U† é o hermitiano conjugado de U. A implicação direta é (8)⟨ψ⁢(t)|ψ⁢(t)⟩=⟨ψ⁢(0)|U†⁢(t)⋅U⁢(t)|ψ⁢(0)⟩=⟨ψ⁢(0)|I|ψ⁢(0)⟩=⟨ψ⁢(0)|ψ⁢(0)⟩=1, preservando a condição de normalização. e 1.3 1.3. Elementos de computação quântica Além das matrizes de Pauli, existe uma série de operações importantes no contexto da computação quântica, sendo elas atuantes em 1 ou mais qbits. Uma relevante porta lógica quântica de 1 qbit é a porta Hadamard, cuja representação matricial e atuação são (12) H = 1 2 ⁢ [ 1 1 1 - 1 ] ⟹ H ⁢ | x ⟩ = | 0 ⟩ + ( - 1 ) x ⁢ | 1 ⟩ 2 , ou simplesmente, (13) H | x ⟩ = { | 0 ⟩ + | 1 ⟩ 2 = | + ⟩ , se ⁢ x = 0 | 0 ⟩ - | 1 ⟩ 2 = | - ⟩ , se ⁢ x = 1 . que resulta na criação de um estado de superposição entre os vetores de estado da base computacional com igual amplitude de probabilidade. Definindo as operações de 2 qbits temos a porta lógica CNOT, ou “não controlado” Cx(c ⁢) t ), em que c representa o qbit de controle e t o qbit alvo. Sua atuação muda o estado do qbit alvo dependendo do valor do qbit de controle (14) C x ( 1 ⁢ ) 2 ) = [ 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 ] ⟹ { | 00 ⟩ → | 00 ⟩ | 01 ⟩ → | 01 ⟩ | 10 ⟩ → | 11 ⟩ | 11 ⟩ → | 10 ⟩ . Todas as portas quânticas podem ser resumidas a um conjunto limitado de portas de 1 e 2 qbits. Foi demonstrado que esse conjunto envolve as chamadas portas Clifford (porta Hadamard, portas de Pauli, a CNOT e a porta de fase S) somadas às portas de rotação (Ry e Rz) [7], outras portas serão detalhadas nos próximos artigos dessa série. Na computação clássica, a sequência de portas lógicas atuando em um sistema pode ser representada na forma de um circuito e a unidade lógica é definida como o bit, que assume os valores 0 ou 1. De forma análoga, na computação quântica um circuito quântico é uma maneira de caracterizar o sequenciamento das operações quânticas que atuam na unidade lógica, o qbit, com a ressalva de que, nesta, as propriedades quânticas de superposição e emaranhamento surgem como um grande diferencial com relação à computação clássica, conforme será detalhado nas seções seguintes. A Figura1 mostra o esquema de um circuito quântico, em que cada linha representa um qbit, e a leitura é feita da esquerda para a direita. Na figura mencionada, q é o registro quântico contendo dois qbits, q0 e q1, em que se implementam as operações, sendo que, quando os operadores estão alinhados verticalmente temos a atuação simultânea, no tempo, desses operadores nos seus respectivos qbits. Já o elemento c2 representa um registro clássico de 2 bits, que irá armazenar a informação resultante de uma medida dos qbits, podendo assumir os valores 00, 01, 10 ou 11. Ao final do circuito é realizada, então, a operação de medição, definida como sendo a medição dos qbits na base computacional, ou seja, a base Z. Figura 1: Esquema representativo de um circuito quântico, em que as linhas simples representam os registros quânticos, e as linhas duplas representam os registros clássicos. Cada bloco representa uma operação quântica, e ao final do circuito realiza-se as medidas dos qbits q0 e q1, armazenando-se os resultados no registro clássico. Na seção 2 será detalhada a plataforma utilizada para a construção deste circuito, a IBMQ experience, bem como qual operação quântica é representada por cada bloco.Fonte: IBM Q [15]. Além disso, uma importante propriedade dos circuitos quânticos é sua reversibilidade, isto é, devido à condição de unitariedade dos operadores quânticos, as operações em um circuito quântico podem ser revertidas simplesmente aplicando o mesmo operador seguidamente, como no exemplo que segue para um estado |ψ⟩=|0⟩ e a operação Hadamard atuando sobre esse estado (15) | 0 ⟩ → Hadamard | 0 ⟩ + | 1 ⟩ 2 = | + ⟩ | + ⟩ → Hadamard 1 2 ⁢ ( | 0 ⟩ + | 1 ⟩ 2 + | 0 ⟩ - | 1 ⟩ 2 ) = | 0 ⟩ . Por convenção um circuito é iniciado com todos os qbits no estado |0⟩ e a partir dai as portas lógicas quânticas são implementadas. Tais portas nada mais são do que operadores quânticos que atuam em um sistema composto por um ou mais qbits. , não nos preocuparemos, por enquanto, com a representação matricial do operador Uf, nem com os detalhes do mecanismo interno por trás da implementação deste. Iremos tratá-lo apenas como uma “caixa preta” ou blackbox, em inglês, cujo mecanismo interno, não importa qual, implementa a operação da Eq. (16), esquematizada na Figura4. A única coisa que assumiremos será que a operação Uf nos é dada, e munidos dela, implementaremos o algoritmo de Deutsch para avaliar se a função f(x) é constante ou balanceada. Nas seções que seguirão, discutiremos a respeito desta suposição, fornecendo mais detalhes acerca desta “caixa preta”.

Prosseguindo, será necessário um registro clássico de um bit para, ao final do algoritmo, armazenar o resultado de uma medição do registro de 1 qbit que representa a função f(x). O vetor de estado inicial é então iniciado com o primeiro qbit no estado |0 e o segundo no estado |1

(17) | ψ ( 0 ) = | 0 | 1 .

Aplicando então a operação Hadamard em ambos os registros, colocamos ambos os qbits em um estado de superposição de todos os estados da base computacional (|0 e |1), como mostrado na Eq. (12),

(18) | ψ ( 1 ) = ( H H ) | ψ ( 0 ) = ( H | 0 ) ( H | 1 ) = | + | - .

Assim, aplicando a operação Uf em seguida temos o fenômeno do paralelismo quântico em ação, já que a função f(x) será calculada pra x=0 e x=1, simultaneamente. Assim

(19) | ψ ( 2 ) = U f | ψ ( 1 ) = U f | + | - .

Mas

(20) U f | x | 0 - | 1 2 = | x | 0 f ( x ) - | 1 f ( x ) 2 = { | x | 0 - | 1 2 se f ( x ) = 0 , | x | 1 - | 0 2 se f ( x ) = 1 ,

implicando que

(21) U f | x | - = ( - 1 ) f ( x ) | x | - ,

Logo, a Eq. (19) fica

(41) | ψ ( 2 ) = ( - 1 ) f ( 0 ) | 0 + ( - 1 ) f ( 1 ) | 1 2 | - .

Por fim, aplicamos a operação Hadamard no primeiro registro

(23) | ψ ( 3 ) = ( H I ) | ψ ( 2 ) = [ ( - 1 ) f ( 0 ) | 0 + | 1 2 + ( - 1 ) f ( 1 ) | 0 - | 1 2 ] | - .

É nesta etapa que a interferência entre os estados quânticos atua no sistema, fazendo com que os estados que não representam a resposta esperada se interfiram destrutivamente, e que o estado cuja medida representa a resposta para o problema da função f(x) tenha sua amplitude de probabilidade aumentada. O estado final gerado é, então, do tipo

(24) | ψ ( 3 ) = ( - 1 ) f ( 0 ) | y | - ,

em que

| y = { | 0 , para f ( x ) constante , | 1 , para f ( x ) balanceada ,

ou seja, uma medida no primeiro registro teria como resultado todos o qbit no estado 0, caso a função seja constante, ou o estado 1, caso a função seja balanceada. Assim, em uma única medida deste primeiro registro é possível se determinar a propriedade global da função f(x). No apêndice A apresentamos em detalhes as passagens matemáticas do algoritmo de Deutsch, que levam ao resultado final apresentado na Eq. (24).

4. Algoritmos de Consulta e o Mecanismo de “Caixa Preta”

Na seção anterior vimos que, utilizando o Algoritmo de Deutsch, é possível determinar se uma função binária de duas entradas f(x):{0,1}{0,1} é constante ou balanceada, a partir da operação Uf, em apenas uma avaliação dessa função, o que, num circuito quântico, é representado pelo ato da medida. Entretanto, nada foi mencionado à respeito da estrutura, representação matricial, ou mecanismo por trás desta operação, assumindo, apenas, que ela consistia em uma “caixa preta” que atua conforme a Figura4.

Figura 4:
Esquema ilustrativo da atuação da operação Uf, isto é, uma “caixa preta” que de alguma forma implementa a função f em seu mecanismo interno. Quando é fornecido uma certa entrada x, a resposta obtida na saída é f(x), ou seja, a função f avaliada no valor x.Fonte: Elaborado pelos autores.

Nesse contexto, tal caixa preta pode ser entendida como um agente que, de algum modo, tem um conhecimento acerca da função f(x), sendo, então, capaz de implementá-la a partir de algum mecanismo o qual ainda não conhecemos. Essa definição caracteriza um operador Oráculo, presente na categoria dos chamados Algoritmos Quânticos de Consulta, ou Quantum Query Algorithms, em inglês, tal como os já mencionados algoritmos de Shor e Grover. Nessa categoria de algoritmos o mecanismo de obtenção da resposta do problema inclui consultas a esse Oráculo. No algoritmo de Grover para busca em uma lista não estruturada por exemplo, este operador, a partir de uma certa entrada fornecida, nos devolve como saída, “sim”, se a entrada é o elemento buscado, ou “não”, caso contrário.4 4 Uma interessante analogia que ilustra bem este caso é o mecanismo “chave-fechadura”, em que apesar de a fechadura (Oráculo), devido à sua estrutura interna, “saber” qual das chaves num molho (lista) a destranca, ela não nos aponta de prontidão qual é a correta, exigindo que façamos uma consulta para cada uma das chaves, individualmente – no caso não quântico pelo menos. A fechadura apenas nos retorna “sim” (destrancando) ou “não” (emperrando) a respeito da chave com a qual fazemos a consulta. Esse comportamento binário, é facilmente traduzido no contexto da computação, tanto clássica quanto quântica, e, para o operador Oráculo do algoritmo de Deutsch, a “resposta” é 0 ou1, representando os possíveis valores da função binária dependendo da entrada fornecida na consulta. De certa forma, tal definição introduz uma série de dúvidas no que diz respeito à “transparência” do mecanismo de funcionamento do algoritmo de Deutsch, e de como implementá-lo na prática.

Para exemplificar o ponto acima, suponha que tenhamos em mãos uma certa função, cuja característica (constante ou balanceada) pretendemos determinar a partir do algoritmo de Deutsch. Além da representação das variáveis x e da função f em vetores de estado, e da implementação das operações Hadamard, já detalhadas na seção1.3 1.3. Elementos de computação quântica Além das matrizes de Pauli, existe uma série de operações importantes no contexto da computação quântica, sendo elas atuantes em 1 ou mais qbits. Uma relevante porta lógica quântica de 1 qbit é a porta Hadamard, cuja representação matricial e atuação são (12) H = 1 2 ⁢ [ 1 1 1 - 1 ] ⟹ H ⁢ | x ⟩ = | 0 ⟩ + ( - 1 ) x ⁢ | 1 ⟩ 2 , ou simplesmente, (13) H | x ⟩ = { | 0 ⟩ + | 1 ⟩ 2 = | + ⟩ , se ⁢ x = 0 | 0 ⟩ - | 1 ⟩ 2 = | - ⟩ , se ⁢ x = 1 . que resulta na criação de um estado de superposição entre os vetores de estado da base computacional com igual amplitude de probabilidade. Definindo as operações de 2 qbits temos a porta lógica CNOT, ou “não controlado” Cx(c ⁢) t ), em que c representa o qbit de controle e t o qbit alvo. Sua atuação muda o estado do qbit alvo dependendo do valor do qbit de controle (14) C x ( 1 ⁢ ) 2 ) = [ 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 ] ⟹ { | 00 ⟩ → | 00 ⟩ | 01 ⟩ → | 01 ⟩ | 10 ⟩ → | 11 ⟩ | 11 ⟩ → | 10 ⟩ . Todas as portas quânticas podem ser resumidas a um conjunto limitado de portas de 1 e 2 qbits. Foi demonstrado que esse conjunto envolve as chamadas portas Clifford (porta Hadamard, portas de Pauli, a CNOT e a porta de fase S) somadas às portas de rotação (Ry e Rz) [7], outras portas serão detalhadas nos próximos artigos dessa série. Na computação clássica, a sequência de portas lógicas atuando em um sistema pode ser representada na forma de um circuito e a unidade lógica é definida como o bit, que assume os valores 0 ou 1. De forma análoga, na computação quântica um circuito quântico é uma maneira de caracterizar o sequenciamento das operações quânticas que atuam na unidade lógica, o qbit, com a ressalva de que, nesta, as propriedades quânticas de superposição e emaranhamento surgem como um grande diferencial com relação à computação clássica, conforme será detalhado nas seções seguintes. A Figura1 mostra o esquema de um circuito quântico, em que cada linha representa um qbit, e a leitura é feita da esquerda para a direita. Na figura mencionada, q é o registro quântico contendo dois qbits, q0 e q1, em que se implementam as operações, sendo que, quando os operadores estão alinhados verticalmente temos a atuação simultânea, no tempo, desses operadores nos seus respectivos qbits. Já o elemento c2 representa um registro clássico de 2 bits, que irá armazenar a informação resultante de uma medida dos qbits, podendo assumir os valores 00, 01, 10 ou 11. Ao final do circuito é realizada, então, a operação de medição, definida como sendo a medição dos qbits na base computacional, ou seja, a base Z. Figura 1: Esquema representativo de um circuito quântico, em que as linhas simples representam os registros quânticos, e as linhas duplas representam os registros clássicos. Cada bloco representa uma operação quântica, e ao final do circuito realiza-se as medidas dos qbits q0 e q1, armazenando-se os resultados no registro clássico. Na seção 2 será detalhada a plataforma utilizada para a construção deste circuito, a IBMQ experience, bem como qual operação quântica é representada por cada bloco.Fonte: IBM Q [15]. Além disso, uma importante propriedade dos circuitos quânticos é sua reversibilidade, isto é, devido à condição de unitariedade dos operadores quânticos, as operações em um circuito quântico podem ser revertidas simplesmente aplicando o mesmo operador seguidamente, como no exemplo que segue para um estado |ψ⟩=|0⟩ e a operação Hadamard atuando sobre esse estado (15) | 0 ⟩ → Hadamard | 0 ⟩ + | 1 ⟩ 2 = | + ⟩ | + ⟩ → Hadamard 1 2 ⁢ ( | 0 ⟩ + | 1 ⟩ 2 + | 0 ⟩ - | 1 ⟩ 2 ) = | 0 ⟩ . Por convenção um circuito é iniciado com todos os qbits no estado |0⟩ e a partir dai as portas lógicas quânticas são implementadas. Tais portas nada mais são do que operadores quânticos que atuam em um sistema composto por um ou mais qbits. , a construção do algoritmo compreenderia, também, a implementação da operação Uf, que de certa forma representa a implementação da função f(x). Contudo, isso exigiria um conhecimento prévio desta função! Antes de mais nada, a dúvida que permanece acerca deste paradoxal limbo de recursividade é: se para implementar o algoritmo de Deutsch, com a finalidade de determinar uma característica da função, precisamos de antemão conhecer a função para construir a operação Uf, qual a necessidade, ou ainda, a utilidade de se implementar o algoritmo?

Este questionamento, apesar de absolutamente pertinente,5 5 Tal questionamento nos faz colocar à prova a finalidade prática do algoritmo de Deutsch. De fato, é possível inferir que este não possui um fim em si mesmo, mas sim, o propósito de servir como parte de algum processo, ou mesmo, como prova de princípios, ou seja, mostrar a eficiência de um computador quântico numa circunstância específica. é, para nosso alívio, resultado de um equívoco com relação ao entendimento dos algoritmos de consulta, sua definição e utilidade no contexto da computação quântica. Do que já foi dito até aqui é evidente que o operador Oráculo, que implementa a operação Uf, de fato tem conhecimento acerca da função f(x), sendo que, para cada função teríamos um mecanismo interno diferente. É evidente, também, que se quiséssemos construir tal operador, precisaríamos, necessariamente, conhecer a função para qual desejamos implementar Uf.

Entretanto, a intenção de um algoritmo de consulta é apenas analisar a capacidade de um computador quântico, posto que o operador Oráculo, construído por um terceiro, é fornecido. A complexidade computacional, ou seja, o número de operações lógicas ou tempo de processamento, para um algoritmo de consulta é então definida em termos do número de consultas ao Oráculo.

A motivação para a necessidade do operador Oracular fica mais palpável quando nos atentamos para o fato de que, para um processo análogo num computador clássico e com a mesma finalidade do algoritmo de Deutsch, um mecanismo que implementasse f(x) também seria indispensável. A diferença – além das proprieades da mecânica quântica, é claro – seria de que, neste caso, para uma função binária com 2 entradas, seriam necessárias 2 consultas à esse operador Oráculo. À primeira vista, no entanto, tal motivação não é tão direta pois no contexto clássico esse processo já se tornou um tanto quanto trivial para nós. Uma certa função f:, por exemplo, quando escrita da forma

f ( x ) = x 2 + 3 x + 1 ,

define, implicitamente, um algoritmo, ou seja, um conjunto de passos que precisamos seguir a fim de calcular a função para uma determinada entrada x, e nesse sentido a “operação Uf” seria implementada da mesma maneira – seja ela em uma calculadora clássica, ou até mesmo em nossas mentes. Tomando x=2, para o exemplo acima, teríamos

Nesse sentido, supondo que sejamos nós o terceiro agente e que tenhamos a intenção de propor uma disputa entre um computador quântico e um computador clássico, com objetivo de determinar qual é mais rápido em avaliar se uma função binária, com 2 variáveis de entrada, é constatante ou balanceada. Nós, como agentes externos, iremos determinar qual é a função, construir o operador oráculo, e equipar ambos computadores antes de dar a largada. O computador clássico necessitará 2 consultas ao oráculo, enquanto o computador quântico, utilizando o algoritmo de Deutsch, necessitará apenas uma consulta, vencendo a disputa. Isso pois, em suma, a essência deste algoritmo é a utilização do paralelismo quântico, em que a operação Uf é aplicada uma única vez, e simultaneamente, para todos os possíveis valores de x, em superposição.

Assim, a vantagem de se definir a complexidade do algoritmo em termos de um Oráculo é justamente demonstrar a superioridade do computador quântico frente aos computadores clássicos, na realização de uma certa tarefa, estando estes nas mesmas condições, munidos do mesmo recurso (o Oráculo), nos privando dos detalhes de parte do processo (a construção e mecanismo interno da operação oracular).

5. Algoritmo de Deutsch-Jozsa

O algoritmo de Deutsh-Josza, resultado de uma junção dos trabalhos de David Deutsch e Richard Josza [13[13] D. Deutsch e R. Jozsa, Proceeding of the Royal Society A 439, 553 (1992).], se propõe, assim como seu precursor, o algoritmo de Deutsch, a utilizar a propriedade quântica da superposição coerente de estados para obter vantagem em relação à execução de uma mesma tarefa em um dispositivo clássico. Nesse sentido o algoritmo de Deutsch-Josza pode ser entendido como uma generalização do algoritmo de Deutsch, em que, agora, a função f(x) a ser avaliada permite N entradas em seu domínio. Seguindo essa motivação, é possível extrair, então, uma propriedade global desta função f(x), aplicada em N valores, em uma única avaliação, usando o método da computação por paralelismo quântico. Aqui, são necessários n qbits para representar as N=2n possíveis entradas. Assim, de maneira análoga à introduzida na seção 3 3. O Algoritmo de Deutsch O algoritmo de Deutsch se propõe a utilizar da propriedade quântica da superposição coerente de estados, algo inexistente em dispositivos clássicos, para então determinar, a partir de uma única medida, se uma dada função f⁢(x) é constante ou balanceada. Seja f⁢(x) uma função binária tal que f:{0,1}→{0,1}. Se f⁢(x) é balanceada temos as opções f⁢(0)=0,f⁢(1)=1 ou f⁢(0)=1,f⁢(1)=0. Caso ela seja constante temos f⁢(0)=f⁢(1)=0 ou f⁢(0)=f⁢(1)=1. Para ambos os casos, em um computador clássico, seria necessária a avaliação da função f⁢(x) para todos os dois valores x de entrada para se determinar com certeza se a função é constante ou balanceada. Já num computador quântico veremos que, devido às propriedades de superposição de estados quânticos, é possível que a função f⁢(x) seja avaliada para todos os dois valores de x em paralelo e simultaneamente, e ainda, a partir da propriedade interferência quântica, é possível que seja determinado, com certeza, por meio de uma única medida, se f⁢(x) é constante ou balanceada. Para a construção do algoritmo serão necessários dois registros quânticos de 1 qbit, o primeiro para representar as entradas x e o segundo para representar os valores possíveis da função f⁢(x), da forma |x⟩⁢|f⁢(x)⟩. Ainda, definimos a operação unitária Uf cuja atuação em um estado é dada por (16) U f ⁢ | x ⟩ ⁢ | y ⟩ = | x ⟩ ⁢ | y ⊕ f ⁢ ( x ) ⟩ , em que x,y∈{0,1} e o símbolo “⊕” representar a soma em módulo 2 [29]. No contexto do algoritmo de Deutsch, a atuação do operador Uf no estado |x⟩ representa a avaliação do valor da função f para a entrada x, e armazenamento deste resultado no segundo registro quântico. Entretanto, diferente das operações quânticas já definidas nas seções 1.1 e 1.3, não nos preocuparemos, por enquanto, com a representação matricial do operador Uf, nem com os detalhes do mecanismo interno por trás da implementação deste. Iremos tratá-lo apenas como uma “caixa preta” ou blackbox, em inglês, cujo mecanismo interno, não importa qual, implementa a operação da Eq. (16), esquematizada na Figura4. A única coisa que assumiremos será que a operação Uf nos é dada, e munidos dela, implementaremos o algoritmo de Deutsch para avaliar se a função f⁢(x) é constante ou balanceada. Nas seções que seguirão, discutiremos a respeito desta suposição, fornecendo mais detalhes acerca desta “caixa preta”. Prosseguindo, será necessário um registro clássico de um bit para, ao final do algoritmo, armazenar o resultado de uma medição do registro de 1 qbit que representa a função f⁢(x). O vetor de estado inicial é então iniciado com o primeiro qbit no estado |0⟩ e o segundo no estado |1⟩ (17) | ψ ( 0 ) ⟩ = | 0 ⟩ ⁢ | 1 ⟩ . Aplicando então a operação Hadamard em ambos os registros, colocamos ambos os qbits em um estado de superposição de todos os estados da base computacional (|0⟩ e |1⟩), como mostrado na Eq. (12), (18) | ψ ( 1 ) ⟩ = ( H ⊗ H ) ⁢ | ψ ( 0 ) ⟩ = ( H ⁢ | 0 ⟩ ) ⊗ ( H ⁢ | 1 ⟩ ) = | + ⟩ ⁢ | - ⟩ . Assim, aplicando a operação Uf em seguida temos o fenômeno do paralelismo quântico em ação, já que a função f⁢(x) será calculada pra x=0 e x=1, simultaneamente. Assim (19) | ψ ( 2 ) ⟩ = U f ⁢ | ψ ( 1 ) ⟩ = U f ⁢ | + ⟩ ⁢ | - ⟩ . Mas (20) U f ⁢ | x ⟩ ⁢ | 0 ⟩ - | 1 ⟩ 2 = | x ⟩ ⁢ | 0 ⊕ f ⁢ ( x ) ⟩ - | 1 ⊕ f ⁢ ( x ) ⟩ 2 = { | x ⟩ ⁢ | 0 ⟩ - | 1 ⟩ 2 se ⁢ f ⁢ ( x ) = 0 , | x ⟩ ⁢ | 1 ⟩ - | 0 ⟩ 2 se ⁢ f ⁢ ( x ) = 1 , implicando que (21) U f ⁢ | x ⟩ ⁢ | - ⟩ = ( - 1 ) f ⁢ ( x ) ⁢ | x ⟩ ⁢ | - ⟩ , Logo, a Eq. (19) fica (41) | ψ ( 2 ) ⟩ = ( - 1 ) f ⁢ ( 0 ) ⁢ | 0 ⟩ + ( - 1 ) f ⁢ ( 1 ) ⁢ | 1 ⟩ 2 ⊗ | - ⟩ . Por fim, aplicamos a operação Hadamard no primeiro registro (23) | ψ ( 3 ) ⟩ = ( H ⊗ I ) ⁢ | ψ ( 2 ) ⟩ = [ ( - 1 ) f ⁢ ( 0 ) ⁢ | 0 ⟩ + | 1 ⟩ 2 + ( - 1 ) f ⁢ ( 1 ) ⁢ | 0 ⟩ - | 1 ⟩ 2 ] ⊗ | - ⟩ . É nesta etapa que a interferência entre os estados quânticos atua no sistema, fazendo com que os estados que não representam a resposta esperada se interfiram destrutivamente, e que o estado cuja medida representa a resposta para o problema da função f⁢(x) tenha sua amplitude de probabilidade aumentada. O estado final gerado é, então, do tipo (24) | ψ ( 3 ) ⟩ = ( - 1 ) f ⁢ ( 0 ) ⁢ | y ⟩ ⊗ | - ⟩ , em que | y ⟩ = { | 0 ⟩ , para f ⁢ ( x ) constante , | 1 ⟩ , para f ⁢ ( x ) balanceada , ou seja, uma medida no primeiro registro teria como resultado todos o qbit no estado 0, caso a função seja constante, ou o estado 1, caso a função seja balanceada. Assim, em uma única medida deste primeiro registro é possível se determinar a propriedade global da função f⁢(x). No apêndice A apresentamos em detalhes as passagens matemáticas do algoritmo de Deutsch, que levam ao resultado final apresentado na Eq. (24). , para a construção do algoritmo serão necessários dois registros quânticos, o primeiro com n=log2N qbits para representar as entradas x, e o segundo registro com 1 qbit para representar os valores possíveis da função f(x), da forma |x|f(x). Da mesma forma, é definida, também, a operação unitária Uf cuja atuação é dada pela Eq. (16).

O sistema é então iniciado com todos os qbits do primeiro registro no estado |0 e o qbit do segundo registro no estado |1

(25) | ψ ( 0 ) = | 0 , 0 , , 0 n vezes | 1 = | 0 | 0 | 0 n vezes | 1 = | 0 n x | 1 f ( x ) .

Novamente, para gerar uma superposição entre todos os estados da base, implementamos portas Hadamard em todos os qbits de ambos os registros (como descrito na seção 1.3 1.3. Elementos de computação quântica Além das matrizes de Pauli, existe uma série de operações importantes no contexto da computação quântica, sendo elas atuantes em 1 ou mais qbits. Uma relevante porta lógica quântica de 1 qbit é a porta Hadamard, cuja representação matricial e atuação são (12) H = 1 2 ⁢ [ 1 1 1 - 1 ] ⟹ H ⁢ | x ⟩ = | 0 ⟩ + ( - 1 ) x ⁢ | 1 ⟩ 2 , ou simplesmente, (13) H | x ⟩ = { | 0 ⟩ + | 1 ⟩ 2 = | + ⟩ , se ⁢ x = 0 | 0 ⟩ - | 1 ⟩ 2 = | - ⟩ , se ⁢ x = 1 . que resulta na criação de um estado de superposição entre os vetores de estado da base computacional com igual amplitude de probabilidade. Definindo as operações de 2 qbits temos a porta lógica CNOT, ou “não controlado” Cx(c ⁢) t ), em que c representa o qbit de controle e t o qbit alvo. Sua atuação muda o estado do qbit alvo dependendo do valor do qbit de controle (14) C x ( 1 ⁢ ) 2 ) = [ 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 ] ⟹ { | 00 ⟩ → | 00 ⟩ | 01 ⟩ → | 01 ⟩ | 10 ⟩ → | 11 ⟩ | 11 ⟩ → | 10 ⟩ . Todas as portas quânticas podem ser resumidas a um conjunto limitado de portas de 1 e 2 qbits. Foi demonstrado que esse conjunto envolve as chamadas portas Clifford (porta Hadamard, portas de Pauli, a CNOT e a porta de fase S) somadas às portas de rotação (Ry e Rz) [7], outras portas serão detalhadas nos próximos artigos dessa série. Na computação clássica, a sequência de portas lógicas atuando em um sistema pode ser representada na forma de um circuito e a unidade lógica é definida como o bit, que assume os valores 0 ou 1. De forma análoga, na computação quântica um circuito quântico é uma maneira de caracterizar o sequenciamento das operações quânticas que atuam na unidade lógica, o qbit, com a ressalva de que, nesta, as propriedades quânticas de superposição e emaranhamento surgem como um grande diferencial com relação à computação clássica, conforme será detalhado nas seções seguintes. A Figura1 mostra o esquema de um circuito quântico, em que cada linha representa um qbit, e a leitura é feita da esquerda para a direita. Na figura mencionada, q é o registro quântico contendo dois qbits, q0 e q1, em que se implementam as operações, sendo que, quando os operadores estão alinhados verticalmente temos a atuação simultânea, no tempo, desses operadores nos seus respectivos qbits. Já o elemento c2 representa um registro clássico de 2 bits, que irá armazenar a informação resultante de uma medida dos qbits, podendo assumir os valores 00, 01, 10 ou 11. Ao final do circuito é realizada, então, a operação de medição, definida como sendo a medição dos qbits na base computacional, ou seja, a base Z. Figura 1: Esquema representativo de um circuito quântico, em que as linhas simples representam os registros quânticos, e as linhas duplas representam os registros clássicos. Cada bloco representa uma operação quântica, e ao final do circuito realiza-se as medidas dos qbits q0 e q1, armazenando-se os resultados no registro clássico. Na seção 2 será detalhada a plataforma utilizada para a construção deste circuito, a IBMQ experience, bem como qual operação quântica é representada por cada bloco.Fonte: IBM Q [15]. Além disso, uma importante propriedade dos circuitos quânticos é sua reversibilidade, isto é, devido à condição de unitariedade dos operadores quânticos, as operações em um circuito quântico podem ser revertidas simplesmente aplicando o mesmo operador seguidamente, como no exemplo que segue para um estado |ψ⟩=|0⟩ e a operação Hadamard atuando sobre esse estado (15) | 0 ⟩ → Hadamard | 0 ⟩ + | 1 ⟩ 2 = | + ⟩ | + ⟩ → Hadamard 1 2 ⁢ ( | 0 ⟩ + | 1 ⟩ 2 + | 0 ⟩ - | 1 ⟩ 2 ) = | 0 ⟩ . Por convenção um circuito é iniciado com todos os qbits no estado |0⟩ e a partir dai as portas lógicas quânticas são implementadas. Tais portas nada mais são do que operadores quânticos que atuam em um sistema composto por um ou mais qbits. ). Assim,

(26) | ψ ( 1 ) = ( H n H ) | 0 n | 1 = ( H | 0 ) n ( H | 1 ) = | + n | - ,

em que o primeiro registro está em uma superposição, de igual amplitude de probabilidade, de todos os possíveis estados de x, da forma

(27) | + n = x = 0 2 n - 1 | x 2 n .

Assim, a Eq. (26) fica

(28) | ψ ( 1 ) = x = 0 2 n - 1 | x 2 n | 0 - | 1 2 .

Dando prosseguimento, aplicando a operação Uf, agora para uma função com N entradas, temos

(29) | ψ ( 2 ) = U f | ψ ( 1 ) = x = 0 2 n - 1 | x 2 n ( | 0 f ( x ) - | 1 f ( x ) 2 ) .

Considerando que

(30) | 0 f ( x ) - | 1 f ( x ) = { | 0 - | 1 , se f ( x ) = 0 ( - 1 ) ( | 0 - | 1 ) , se f ( x ) = 1 ,

podemos chegar ao estado final da operação Uf

(31) | ψ ( 2 ) = x = 0 2 n - 1 ( - 1 ) f ( x ) | x 2 n | - .

Deve-se, agora, aplicar a operação Hadamard no primeiro registro, resultando em

(32) | ψ ( 3 ) = ( H n I ) | ψ ( 2 ) = ( x = 0 2 n - 1 H n | x 2 n ) | - .

Aqui, de maneira análoga ao que foi mostrado na seção 3 3. O Algoritmo de Deutsch O algoritmo de Deutsch se propõe a utilizar da propriedade quântica da superposição coerente de estados, algo inexistente em dispositivos clássicos, para então determinar, a partir de uma única medida, se uma dada função f⁢(x) é constante ou balanceada. Seja f⁢(x) uma função binária tal que f:{0,1}→{0,1}. Se f⁢(x) é balanceada temos as opções f⁢(0)=0,f⁢(1)=1 ou f⁢(0)=1,f⁢(1)=0. Caso ela seja constante temos f⁢(0)=f⁢(1)=0 ou f⁢(0)=f⁢(1)=1. Para ambos os casos, em um computador clássico, seria necessária a avaliação da função f⁢(x) para todos os dois valores x de entrada para se determinar com certeza se a função é constante ou balanceada. Já num computador quântico veremos que, devido às propriedades de superposição de estados quânticos, é possível que a função f⁢(x) seja avaliada para todos os dois valores de x em paralelo e simultaneamente, e ainda, a partir da propriedade interferência quântica, é possível que seja determinado, com certeza, por meio de uma única medida, se f⁢(x) é constante ou balanceada. Para a construção do algoritmo serão necessários dois registros quânticos de 1 qbit, o primeiro para representar as entradas x e o segundo para representar os valores possíveis da função f⁢(x), da forma |x⟩⁢|f⁢(x)⟩. Ainda, definimos a operação unitária Uf cuja atuação em um estado é dada por (16) U f ⁢ | x ⟩ ⁢ | y ⟩ = | x ⟩ ⁢ | y ⊕ f ⁢ ( x ) ⟩ , em que x,y∈{0,1} e o símbolo “⊕” representar a soma em módulo 2 [29]. No contexto do algoritmo de Deutsch, a atuação do operador Uf no estado |x⟩ representa a avaliação do valor da função f para a entrada x, e armazenamento deste resultado no segundo registro quântico. Entretanto, diferente das operações quânticas já definidas nas seções 1.1 e 1.3, não nos preocuparemos, por enquanto, com a representação matricial do operador Uf, nem com os detalhes do mecanismo interno por trás da implementação deste. Iremos tratá-lo apenas como uma “caixa preta” ou blackbox, em inglês, cujo mecanismo interno, não importa qual, implementa a operação da Eq. (16), esquematizada na Figura4. A única coisa que assumiremos será que a operação Uf nos é dada, e munidos dela, implementaremos o algoritmo de Deutsch para avaliar se a função f⁢(x) é constante ou balanceada. Nas seções que seguirão, discutiremos a respeito desta suposição, fornecendo mais detalhes acerca desta “caixa preta”. Prosseguindo, será necessário um registro clássico de um bit para, ao final do algoritmo, armazenar o resultado de uma medição do registro de 1 qbit que representa a função f⁢(x). O vetor de estado inicial é então iniciado com o primeiro qbit no estado |0⟩ e o segundo no estado |1⟩ (17) | ψ ( 0 ) ⟩ = | 0 ⟩ ⁢ | 1 ⟩ . Aplicando então a operação Hadamard em ambos os registros, colocamos ambos os qbits em um estado de superposição de todos os estados da base computacional (|0⟩ e |1⟩), como mostrado na Eq. (12), (18) | ψ ( 1 ) ⟩ = ( H ⊗ H ) ⁢ | ψ ( 0 ) ⟩ = ( H ⁢ | 0 ⟩ ) ⊗ ( H ⁢ | 1 ⟩ ) = | + ⟩ ⁢ | - ⟩ . Assim, aplicando a operação Uf em seguida temos o fenômeno do paralelismo quântico em ação, já que a função f⁢(x) será calculada pra x=0 e x=1, simultaneamente. Assim (19) | ψ ( 2 ) ⟩ = U f ⁢ | ψ ( 1 ) ⟩ = U f ⁢ | + ⟩ ⁢ | - ⟩ . Mas (20) U f ⁢ | x ⟩ ⁢ | 0 ⟩ - | 1 ⟩ 2 = | x ⟩ ⁢ | 0 ⊕ f ⁢ ( x ) ⟩ - | 1 ⊕ f ⁢ ( x ) ⟩ 2 = { | x ⟩ ⁢ | 0 ⟩ - | 1 ⟩ 2 se ⁢ f ⁢ ( x ) = 0 , | x ⟩ ⁢ | 1 ⟩ - | 0 ⟩ 2 se ⁢ f ⁢ ( x ) = 1 , implicando que (21) U f ⁢ | x ⟩ ⁢ | - ⟩ = ( - 1 ) f ⁢ ( x ) ⁢ | x ⟩ ⁢ | - ⟩ , Logo, a Eq. (19) fica (41) | ψ ( 2 ) ⟩ = ( - 1 ) f ⁢ ( 0 ) ⁢ | 0 ⟩ + ( - 1 ) f ⁢ ( 1 ) ⁢ | 1 ⟩ 2 ⊗ | - ⟩ . Por fim, aplicamos a operação Hadamard no primeiro registro (23) | ψ ( 3 ) ⟩ = ( H ⊗ I ) ⁢ | ψ ( 2 ) ⟩ = [ ( - 1 ) f ⁢ ( 0 ) ⁢ | 0 ⟩ + | 1 ⟩ 2 + ( - 1 ) f ⁢ ( 1 ) ⁢ | 0 ⟩ - | 1 ⟩ 2 ] ⊗ | - ⟩ . É nesta etapa que a interferência entre os estados quânticos atua no sistema, fazendo com que os estados que não representam a resposta esperada se interfiram destrutivamente, e que o estado cuja medida representa a resposta para o problema da função f⁢(x) tenha sua amplitude de probabilidade aumentada. O estado final gerado é, então, do tipo (24) | ψ ( 3 ) ⟩ = ( - 1 ) f ⁢ ( 0 ) ⁢ | y ⟩ ⊗ | - ⟩ , em que | y ⟩ = { | 0 ⟩ , para f ⁢ ( x ) constante , | 1 ⟩ , para f ⁢ ( x ) balanceada , ou seja, uma medida no primeiro registro teria como resultado todos o qbit no estado 0, caso a função seja constante, ou o estado 1, caso a função seja balanceada. Assim, em uma única medida deste primeiro registro é possível se determinar a propriedade global da função f⁢(x). No apêndice A apresentamos em detalhes as passagens matemáticas do algoritmo de Deutsch, que levam ao resultado final apresentado na Eq. (24). , a interferência entre os estados quânticos atua no sistema, gerando o estado cuja medida representa a resposta para o problema da função f(x). Especificamente, teremos um estado final do tipo

(33) | ψ ( 3 ) = ( - 1 ) α y | y | - ,

em que αy é uma constante que pode assumir os valores 0 ou 1, e

{ | y = | 0 , 0 , , 0 , para f ( x ) constante , | y | 0 , 0 , , 0 , para f ( x ) balanceada ,

ou seja, uma medida no primeiro registro teria como resultado todos os n qbits no estado 0, caso a função seja constante, ou pelo menos um dos n qbits no estado 1, caso a função seja balanceada. Assim, em uma única medida deste primeiro registro é possível se determinar a propriedade global da função f(x). No apêndice B apresentamos em detalhes as passagens matemáticas do algoritmo de Deutsch-Jozsa, que levam ao resultado final apresentado na Eq.(33).

6. Implementação do Algoritmo de Deutsch-Jozsa

Em essência, o algoritmo de Deutsch-Jozsa se beneficia do paralelismo quântico na aplicação da operação Uf, gerando um estado em que cada vetor de estado que representa uma entrada x está emaranhado com o vetor de estado que representa o valor da função f(x) para aquela entrada, da forma

(34) 1 N x = 0 N - 1 | x U f 1 N x = 0 N - 1 | x | f ( x ) .

Ainda, é feito com que esses estados se interfiram destrutivamente, levando a um estado final cuja medida fornece o resposta para o problema.

O objetivo desta seção é mostrar, passo a passo, a implementação do algoritmo de Deutsch-Jozsa utilizando o computador quântico da IBM. Aqui, a intenção é utilizar o algoritmo como prova de princípio, e não como fim em si mesmo, ou seja, ele será utilizado não para avaliar de maneira eficiente uma função desconhecida, mas sim para demonstrar a eficiência do computador quântico, frente aos computadores clássicos, na tarefa de se avaliar uma determinada função. Nesse sentido, nós faremos o papel do terceiro agente, como mencionado na seção 4 4. Algoritmos de Consulta e o Mecanismo de “Caixa Preta” Na seção anterior vimos que, utilizando o Algoritmo de Deutsch, é possível determinar se uma função binária de duas entradas f⁢(x):{0,1}→{0,1} é constante ou balanceada, a partir da operação Uf, em apenas uma avaliação dessa função, o que, num circuito quântico, é representado pelo ato da medida. Entretanto, nada foi mencionado à respeito da estrutura, representação matricial, ou mecanismo por trás desta operação, assumindo, apenas, que ela consistia em uma “caixa preta” que atua conforme a Figura4. Figura 4: Esquema ilustrativo da atuação da operação Uf, isto é, uma “caixa preta” que de alguma forma implementa a função f em seu mecanismo interno. Quando é fornecido uma certa entrada x, a resposta obtida na saída é f⁢(x), ou seja, a função f avaliada no valor x.Fonte: Elaborado pelos autores. Nesse contexto, tal caixa preta pode ser entendida como um agente que, de algum modo, tem um conhecimento acerca da função f⁢(x), sendo, então, capaz de implementá-la a partir de algum mecanismo o qual ainda não conhecemos. Essa definição caracteriza um operador Oráculo, presente na categoria dos chamados Algoritmos Quânticos de Consulta, ou Quantum Query Algorithms, em inglês, tal como os já mencionados algoritmos de Shor e Grover. Nessa categoria de algoritmos o mecanismo de obtenção da resposta do problema inclui consultas a esse Oráculo. No algoritmo de Grover para busca em uma lista não estruturada por exemplo, este operador, a partir de uma certa entrada fornecida, nos devolve como saída, “sim”, se a entrada é o elemento buscado, ou “não”, caso contrário.4 Esse comportamento binário, é facilmente traduzido no contexto da computação, tanto clássica quanto quântica, e, para o operador Oráculo do algoritmo de Deutsch, a “resposta” é 0 ou1, representando os possíveis valores da função binária dependendo da entrada fornecida na consulta. De certa forma, tal definição introduz uma série de dúvidas no que diz respeito à “transparência” do mecanismo de funcionamento do algoritmo de Deutsch, e de como implementá-lo na prática. Para exemplificar o ponto acima, suponha que tenhamos em mãos uma certa função, cuja característica (constante ou balanceada) pretendemos determinar a partir do algoritmo de Deutsch. Além da representação das variáveis x e da função f em vetores de estado, e da implementação das operações Hadamard, já detalhadas na seção1.3, a construção do algoritmo compreenderia, também, a implementação da operação Uf, que de certa forma representa a implementação da função f⁢(x). Contudo, isso exigiria um conhecimento prévio desta função! Antes de mais nada, a dúvida que permanece acerca deste paradoxal limbo de recursividade é: se para implementar o algoritmo de Deutsch, com a finalidade de determinar uma característica da função, precisamos de antemão conhecer a função para construir a operação Uf, qual a necessidade, ou ainda, a utilidade de se implementar o algoritmo? Este questionamento, apesar de absolutamente pertinente,5 é, para nosso alívio, resultado de um equívoco com relação ao entendimento dos algoritmos de consulta, sua definição e utilidade no contexto da computação quântica. Do que já foi dito até aqui é evidente que o operador Oráculo, que implementa a operação Uf, de fato tem conhecimento acerca da função f⁢(x), sendo que, para cada função teríamos um mecanismo interno diferente. É evidente, também, que se quiséssemos construir tal operador, precisaríamos, necessariamente, conhecer a função para qual desejamos implementar Uf. Entretanto, a intenção de um algoritmo de consulta é apenas analisar a capacidade de um computador quântico, posto que o operador Oráculo, construído por um terceiro, é fornecido. A complexidade computacional, ou seja, o número de operações lógicas ou tempo de processamento, para um algoritmo de consulta é então definida em termos do número de consultas ao Oráculo. A motivação para a necessidade do operador Oracular fica mais palpável quando nos atentamos para o fato de que, para um processo análogo num computador clássico e com a mesma finalidade do algoritmo de Deutsch, um mecanismo que implementasse f⁢(x) também seria indispensável. A diferença – além das proprieades da mecânica quântica, é claro – seria de que, neste caso, para uma função binária com 2 entradas, seriam necessárias 2 consultas à esse operador Oráculo. À primeira vista, no entanto, tal motivação não é tão direta pois no contexto clássico esse processo já se tornou um tanto quanto trivial para nós. Uma certa função f:ℝ→ℝ, por exemplo, quando escrita da forma f ⁢ ( x ) = x 2 + 3 ⁢ x + 1 , define, implicitamente, um algoritmo, ou seja, um conjunto de passos que precisamos seguir a fim de calcular a função para uma determinada entrada x, e nesse sentido a “operação Uf” seria implementada da mesma maneira – seja ela em uma calculadora clássica, ou até mesmo em nossas mentes. Tomando x=2, para o exemplo acima, teríamos Nesse sentido, supondo que sejamos nós o terceiro agente e que tenhamos a intenção de propor uma disputa entre um computador quântico e um computador clássico, com objetivo de determinar qual é mais rápido em avaliar se uma função binária, com 2 variáveis de entrada, é constatante ou balanceada. Nós, como agentes externos, iremos determinar qual é a função, construir o operador oráculo, e equipar ambos computadores antes de dar a largada. O computador clássico necessitará 2 consultas ao oráculo, enquanto o computador quântico, utilizando o algoritmo de Deutsch, necessitará apenas uma consulta, vencendo a disputa. Isso pois, em suma, a essência deste algoritmo é a utilização do paralelismo quântico, em que a operação Uf é aplicada uma única vez, e simultaneamente, para todos os possíveis valores de x, em superposição. Assim, a vantagem de se definir a complexidade do algoritmo em termos de um Oráculo é justamente demonstrar a superioridade do computador quântico frente aos computadores clássicos, na realização de uma certa tarefa, estando estes nas mesmas condições, munidos do mesmo recurso (o Oráculo), nos privando dos detalhes de parte do processo (a construção e mecanismo interno da operação oracular). , selecionando a função, preparando a respectiva operação oracular Uf, e equipando o computador quântico.

Serão preparados exemplos para duas funções, uma constante e outra balanceada, sendo ambas da forma f:{0,1}3{0,1}, ou seja, N=2n=8 possíveis entradas, com n=3 qbits para codificar essas entradas. Assim, serão necessários: (i) Um registro quântico com 3 qbits para codificar as variáveis de entrada x; (ii) um registro quântico com 1 qbit para armazenar f(x); e (iii) Um registro clássico com 3 bits para a medida final do registro das entradas. Ainda, para cada função, iremos utilizar determinadas portas lógicas para simular a respectiva operação oracular. O código QASM que implementa o algoritmo, elucidado a seguir, está disponível em [30[30] https://github.com/evboliveira/IBMQ-Experience-Deutsch-Jozsa.
https://github.com/evboliveira/IBMQ-Expe...
].

6.1. Deutsch-Jozsa para uma função constante

Consideremos, inicialmente, uma função constante fc:{0,1}3{0,1} tal que fc(x)=1 para qualquer x{0,7}, cuja Tabela1 relaciona os valores de saída da função para as possíveis entradas, e a Figura5 mostra uma simulação da operação oracular, que implementa a função fc(x), utilizando-se portas lógicas quânticas.

Figura 5:
Simulação do mecanismo interno da operação Uf para a função constante fc(x) selecionada. A operação, definida a partir das portas lógicas quânticas mostradas, implementa a função fc(x).Fonte: IBM Q [15[15] https://quantum-computing.ibm.com/.
https://quantum-computing.ibm.com/....
] e editada pelos autores.
Tabela 1
Tabela verdade da função constante fc(x), com as possíveis entradas (em representação decimal no primeiro bloco, e em representação binária, no segundo bloco) com os respectivos valores da função.

Assim, equipando o computador quântico com a operação oracular, e implementando o algoritmo, conforme mostrado na Figura6, obtemos os resultados, esquematizados no histograma da Figura7. Da análise deste, o resultado mais notório é o de que em 95% dos experimentos encontramos como saída do algoritmo o estado |x2x1x0=|000. Ainda, observamos a ocorrência de probabilidades não nulas para resultados não esperados, relacionadas aos erros intrínsecos ao computador quântico, conforme mencionado ao final da seção2 2. Plataforma IBMQ Experience A computação quântica tem se desenvolvido nas últimas décadas e, cada vez mais, grandes empresas de tecnologia como Google, D-Wave, IonQ e IBM entram nesse setor em busca da comprovação da superioridade, de maneira geral, dos computadores quânticos frente aos clássicos, a chamada “supremacia2 quântica” [22, 23, 24]. Neste trabalho nos restringimos ao uso da IBMQ Experience, uma plataforma para computação quântica disponibilizada pela empresa IBM [15]. Gratuita e com uma interface para computação em nuvem, nela temos acesso a diversos computadores quânticos que variam de 5 a 15 qbits. Além disso é possível acessar os simuladores (computadores clássicos que simulam um computador quântico ideal) com capacidade de 32 a 5000 qbits. A plataforma permite a criação de circuitos tanto em uma interface gráfica, em um modelo de “clique e arraste” das portas lógicas, como a partir de linguagens de programação para computação quântica, notadamente a linguagem QASM [25] e a biblioteca Qiskit [26] para programação em linguagem Python. Por meio da utilização da interface gráfica podemos clicar nos ícones que representam os operadores quânticos e posicioná-los no circuito para que atuem sobre um qbit e, desse modo, apliquem sobre eles suas operações matemáticas, como ilustra a Figura1. Na Figura3 podemos ver alguns dos ícones disponíveis referentes às operações já mencionadas anteriormente. Após a construção do algoritmo, este pode ser submetido para processamento em um computador quântico. A possibilidade de escolha, para esse experimento na plataforma, do número de “shots”, contagem dos resultados de experimentos identicamente preparados, objetiva aumentar a acurácia estatística dos resultados. Ao final da execução, os resultados são dispostos na forma de um histograma que reflete as probabilidades das possíveis respostas. Figura 3: Ícones e representações referentes às portas lógicas quânticas de um e dois qbits utilizadas e à operação de medição na base computacional Z, disponíveis na IBM Quantum Experience. A operação de medição converte o valor obtido para os estados quânticos dos qbits em bits, e armazena no registro clássico, em que o primeiro qbit (referente ao registro q0) é o primeiro dígito (menor base de 2) do número binário no registro clássico, e assim por diante, de modo que o resultado da medição do estado |q0,q1⟩=|1,0⟩, por exemplo, seria o número binário01.Fonte: IBM Q [15] e editada pelos autores. O dispositivo utilizado para as implementações descritas nesse artigo foi o IBMQ Manila, um computador quântico com 5 qbits, cuja topologia, que destaca as conexões entre esses qbits, é ilustrada pela Figura2. O número de “shots” escolhido para todas as execuções foi 8000. Figura 2: Topologia do computador quântico IBMQ Manila, em que cada círculo enumerado simboliza 1 qbit, e as ligações entre eles simbolizam as conectividades entre os qbits. A escala de cores representa os erros associados às operações quânticas realizadas neste computador, em que, para os qbits, essa escala está associada à taxa de erros da operação de rotação X, e, para as conexões, está associada à taxa de erros da operação CNOT entre os qbits. Os valores mostrados estão de acordo com a calibração do computador no momento em que os experimentos foram realizados.Fonte: IBM Q [15]. Por fim, cabe ainda a menção de que os computadores quânticos, sendo sistemas físicos não ideias, apresentam erros associados a processos de dissipação e decoerência, inerentes a um sistema quântico não perfeitamente isolado.3 Ainda, a plataforma fornece uma documentação com um rico manual de instruções para os usuários, disponível em [28]. . A partir do exame destes resultados, assumindo certa condescendência com relação aos erros citados6 6 Apesar de inevitáveis, os erros intrínsecos aos computadores quânticos podem ser minimizados. Protocolos de mitigação de erros podem ser encontrados na documentação fornecida pela plataforma [26, 28]. e nos atendo à interpretação do resultado mais expressivo (95% de ocorrência do estado |000), podemos confirmar a ação do algoritmo de Deutsch na determinação de uma função constante, em apenas uma única medida.

Figura 6:
Sequência de operações lógicas necessária para a implementação do algoritmo de Deustch-Jozsa. Na inicialização, os registros quânticos, configurados todos no estado|0 (padrão), são colocados no estado indicado na Eq. (25). Aqui foi utilizada a operação oracular Uf simulada para implementar a função constante fc(x).Fonte: IBM Q [15[15] https://quantum-computing.ibm.com/.
https://quantum-computing.ibm.com/....
] e editada pelos autores.
Figura 7:
Histograma dos resultados da realização de 8000 experimentos, identicamente preparados no computador quântico IBMQ Manila, na execução do algoritmo de Deutsch-Jozsa para a função constante fc(x) simulada.Fonte: IBM Q [15[15] https://quantum-computing.ibm.com/.
https://quantum-computing.ibm.com/....
] e editada pelos autores.

6.2. Deutsch-Jozsa para uma função balanceada

Consideremos, agora, uma função balanceada fb:{0,1}3{0,1} tal que

(35) f b ( x ) = { 0 se x 3 , 1 se x > 3 ,

cuja Tabela2 relaciona os valores de saída da função para as possíveis entradas, e a Figura8 mostra uma simulação da operação oracular, que implementa a função fb(x), utilizando-se portas lógicas quânticas.

Figura 8:
Simulação do mecanismo interno da operação Uf para a função balanceada fb(x) selecionada. A operação, definida a partir das portas lógicas quânticas mostradas, implementa a função fb(x).Fonte: IBM Q [15[15] https://quantum-computing.ibm.com/.
https://quantum-computing.ibm.com/....
] e editada pelos autores.
Tabela 2
Tabela verdade da função balanceada fb(x), com as possíveis entradas (em representação decimal no primeiro bloco, e em representação binária, no segundo bloco) com os respectivos valores da função, no terceiro bloco.

Assim, equipando o computador quântico com a operação oracular, e implementando o algoritmo, conforme mostrado na Figura9, obtemos os resultados, esquematizados no histograma da Figura10. Novamente, percebemos que o resultado mais expressivo mostra a obtenção do estado final |x2x1x0=|100 em 93% dos 8000 experimentos, além da ocorrência de probabilidades não nulas para resultados não esperados. Outra vez, sendo condescendentes com os erros intrínsecos, vemos que, como pelo menos um dos 3 qbits se encontra num estado diferente de |0, podemos atestar a performance do algoritmo de Deutsch na determinação de uma função balanceada, em apenas uma única medida.

Figura 9:
Esquema análogo ao da Figura6, com as operações lógicas necessárias para a implementação do algoritmo de Deustch-Jozsa, utilizando, aqui, a operação oracular Uf simulada para implementar a função balanceada fb(x).Fonte: IBM Q [15[15] https://quantum-computing.ibm.com/.
https://quantum-computing.ibm.com/....
] e editada pelos autores.
Figura 10:
Histograma dos resultados da realização de 8000 experimentos, identicamente preparados no computador quântico IBMQ Manila, na execução do algoritmo de Deutsch-Jozsa para a função balanceada fb(x) simulada.Fonte: IBM Q [15[15] https://quantum-computing.ibm.com/.
https://quantum-computing.ibm.com/....
] e editada pelos autores.

7. Conclusão

Este artigo teve como propósito introduzir os fundamentos e aspectos básicos da computação quântica, dando como exemplos os algoritmos de Deutsch e Deutcsh-Jozsa, tanto do ponto de vista teórico, com suas etapas matemáticas detalhadas nas seções anteriores, quanto do ponto de vista experimental, a partir da implementação nos computadores quânticos da IBM, disponíveis gratuitamente na plataforma IBM Quantum Experience. Também, para uma melhor compreensão dos algoritmos mencionados, foi dado um importante enfoque às características dos Quantum Query Algorithms e ao mecanismo de caixa preta.

Como prova de princípio, o algoritmo de Deutsch-Jozsa foi implementado, o que permitiu constatar a superioridade do computador quântico na avaliação das características de uma função. Tal avaliação pôde ser realizada em apenas uma única medição, o que não se faz possível quando utiliza-se um computador clássico. O código em linguagem QASM utilizado para a implementação dos algoritmos estão disponíveis em um repositório online no GitHub [30[30] https://github.com/evboliveira/IBMQ-Experience-Deutsch-Jozsa.
https://github.com/evboliveira/IBMQ-Expe...
]. Por meio dele e da criação de uma conta gratuita na plataforma da IBM Quantum Experience, é possível verificar experimentalmente as principais características e vantagens da computação quântica.

Agradecimentos

Este trabalho teve o apoio do Conselho Nacional de Desenvolvimento Científico e Tecnológico (CNPq), da Coordenação de Aperfeiçoamento de Pessoal de Nível Superior (CAPES) - Código 001, e do Instituto Nacional de Ciência e Tecnologia para Informação Quântica (INCT-IQ/CNPq), Processo No. 465469/2014-0. C.J.V.-B. também agradece o apoio da Fundação de Pesquisa do Estado de São Paulo (FAPESP), Processo No. 2019/11999-5, e do CNPq, Processo No. 307077/2018-7. Queremos agradecer ao Grupo de Óptica Quântica e Informação Quântica do Departamento de Física (DF) da Universidade Federal de São Carlos (UFSCar) por todas as ricas discussões, que contribuíram para esse trabalho. E.V.B.O também agradece à Suzana V.B. de Oliveira por sua assistência e considerações à respeito dos aspectos que trariam maior valor didático ao trabalho, para um público não especializado. A.C.S. agradece o apoio financeiro através de bolsa de pesquisa da Fundação de Amparo à Pesquisa do Estado de São Paulo (FAPESP) (2019/22685-1).

References

  • [1]
    M. Planck, Annalen der Physik 309, 553 (1901).
  • [2]
    W. Heisenberg, Zeitschrift für Physik 33, 879 (1925).
  • [3]
    E. Schrödinger, Phys. Rev. 28, 1049 (1926).
  • [4]
    W. Neuhauser, M. Hohenstatt, P. Toschek e H. Dehmelt, Phys. Rev. Lett. 41, 233 (1978).
  • [5]
    A. Steane, Applied Physics B: Lasers e Optics 64, 623 (1997).
  • [6]
    D.J. Wineland e W.M. Itano, Phys. Rev. A 20, 1521 (1979).
  • [7]
    M.A. Nielsen e I.L. Chuang, Quantum Computation e Quantum Information: 10th Anniversary Edition (Cambridge University Press, Cambridge, 2011), 10ª ed., p. 5.
  • [8]
    P. Benioff, Journal of Statistical Physics 22, 563 (1980).
  • [9]
    D. Deutsch, Proceeding of the Royal Society A, 400, 97 (1985).
  • [10]
    P.W. Shor, SIAM Journal on Computing 26, 1484 (1997).
  • [11]
    L.K. Grover, em: Proceedings of the Twenty-Eighth Annual ACM Symposium on Theory of Computing, (Association for Computing Machinery, New York, 1996), p. 212.
  • [12]
    R.P. Feynman, International journal of theoretical physics 21, 467 (1982).
  • [13]
    D. Deutsch e R. Jozsa, Proceeding of the Royal Society A 439, 553 (1992).
  • [14]
    Z. Li, J. Dai, S. Pan, W. Zhang e J. Hu, International Journal of Theoretical Physics 59, 1668(2020).
  • [15]
    https://quantum-computing.ibm.com/.
    » https://quantum-computing.ibm.com/.
  • [16]
    A.C. Santos, Revista Brasileira de Ensino de Física 39, e1301 (2017).
  • [17]
    W. Rabelo e M. Costa, Revista Brasileira de Ensino de Física 40, e4306 (2018).
  • [18]
    G.F. de Jesus, M.H.F. da Silva, T.G. Dourado, L.Q. Galvão, F.G. de Oliveira Souza e C. Cruz, Revista Brasileira de Ensino de Física 43, e20210033 (2021).
  • [19]
    É.M. Alves, F.D. Gomes, H.S. Santana e A.C. Santos, Revista Brasileira de Ensino de Física 42, e20190299 (2020).
  • [20]
    G. Arfken, H. Weber, Mathematical Methods for Physicists (Elsevier Science, Boston, 2005), 6ª ed., p. 658.
  • [21]
    J.J. Sakurai e J. Napolitano, Modern Quantum Mechanics (Cambridge University Press, Cambrige, 2017), 2ª ed., p. 66.
  • [22]
    https://research.ibm.com/blog/ibm-quantum-roadmap
    » https://research.ibm.com/blog/ibm-quantum-roadmap
  • [23]
    https://quantumai.google/learn/lab.
    » https://quantumai.google/learn/lab.
  • [24]
    F. Lardinois, Ionq claims it has built the most powerful quantum computer yet, disponível em: https://techcrunch.com/2020/10/01/ionq-claims-it-has-built-the-mostpowerful-quantum-computer-yet/, Join TechCrunch+,acessado em 05/03/2021.
    » https://techcrunch.com/2020/10/01/ionq-claims-it-has-built-the-mostpowerful-quantum-computer-yet/
  • [25]
    A.W. Cross, L.S. Bishop, J.A. Smolin e J.M. Gambetta, arxiv:1707.03429 (2017).
  • [26]
    https://qiskit.org/.
    » https://qiskit.org/.
  • [27]
    E.V.B. de Oliveira e F.B. de Brito, Computação Quântica com IBMQ Experience, Trabalho de Conclusão de Curso, Universidade de São Paulo, São Paulo (2019).
  • [28]
    https://quantum-computing.ibm.com/docs/
    » https://quantum-computing.ibm.com/docs/
  • [29]
    A. Garcia e Y. Lequain, Elementos de álgebra, (Instituto de Matemática Pura e Aplicada, Rio de Janeiro, 2002), p. 318.
  • [30]
    https://github.com/evboliveira/IBMQ-Experience-Deutsch-Jozsa
    » https://github.com/evboliveira/IBMQ-Experience-Deutsch-Jozsa
  • 1
    A notação Bra-ket foi proposta por Paul Dirac e por isso também pode ser referida como notação de Dirac. É muito utilizada no campo da mecânica quântica para representar vetores, produtos internos e produtos externos. O Ket é utilizado para representar um vetor coluna
    |ψ=[ψ1ψ2ψn]T,
    sendo T a operação de transposição de matrizes (MT é a transposta da matriz M). Já o Bra representa um vetor no espaço dual de |Ψ, sendo um vetor linha cujos elementos são os complexos conjugados de |Ψ
    |ψ=[ψ1*ψ2*ψn*].
  • 2
    No contexto da computação quântica e complexidade de algoritmos, o conceito de “superioridade” difere do conceito de “supremacia”. A superioridade se refere à capacidade de um computador quântico necessitar de um tempo menor para executar uma mesma tarefa que um computador clássico já realiza, e a supremacia se refere à capacidade de o computador quântico possibilitar a realização de tarefas impossíveis, em termos práticos, de serem realizadas em um computador clássico.
  • 3
    Processos de dissipação e decoerência são resultados da interação de um sistema quântico com o ambiente externo, e têm como principal consequência a perda de algumas propriedades quânticas do sistema, como, por exemplo, a unitariedade das operações descritas de acordo com as Eqs. (11) e (6), e a superposição coerente de estados descrita na Eq. (6). Uma discussão mais completa sobre esse aspecto dos computadores quânticos e da plataforma IBMQ é encontrada em [16[16] A.C. Santos, Revista Brasileira de Ensino de Física 39, e1301 (2017)., 27[27] E.V.B. de Oliveira e F.B. de Brito, Computação Quântica com IBMQ Experience, Trabalho de Conclusão de Curso, Universidade de São Paulo, São Paulo (2019).]
  • 4
    Uma interessante analogia que ilustra bem este caso é o mecanismo “chave-fechadura”, em que apesar de a fechadura (Oráculo), devido à sua estrutura interna, “saber” qual das chaves num molho (lista) a destranca, ela não nos aponta de prontidão qual é a correta, exigindo que façamos uma consulta para cada uma das chaves, individualmente – no caso não quântico pelo menos. A fechadura apenas nos retorna “sim” (destrancando) ou “não” (emperrando) a respeito da chave com a qual fazemos a consulta.
  • 5
    Tal questionamento nos faz colocar à prova a finalidade prática do algoritmo de Deutsch. De fato, é possível inferir que este não possui um fim em si mesmo, mas sim, o propósito de servir como parte de algum processo, ou mesmo, como prova de princípios, ou seja, mostrar a eficiência de um computador quântico numa circunstância específica.
  • 6
    Apesar de inevitáveis, os erros intrínsecos aos computadores quânticos podem ser minimizados. Protocolos de mitigação de erros podem ser encontrados na documentação fornecida pela plataforma [26[26] https://qiskit.org/.
    https://qiskit.org/....
    , 28[28] https://quantum-computing.ibm.com/docs/.
    https://quantum-computing.ibm.com/docs/...
    ].

Datas de Publicação

  • Publicação nesta coleção
    17 Dez 2021
  • Data do Fascículo
    2022

Histórico

  • Recebido
    15 Set 2021
  • Revisado
    15 Out 2021
  • Aceito
    14 Nov 2021
Sociedade Brasileira de Física Caixa Postal 66328, 05389-970 São Paulo SP - Brazil - São Paulo - SP - Brazil
E-mail: marcio@sbfisica.org.br