Quantum Computing: an undergraduate approach using Qiskit
Gleydson Fernandes de Jesus, Maria Heloísa Fraga da Silva, Teonas Gonçalves Dourado Netto, Lucas Queiroz Galvão, Frankle Gabriel de Oliveira Souza, Clebson Cruz
CComputa¸c˜ao Quˆantica: uma abordagem para a gradua¸c˜ao usando o Qiskit
Quantum Computing: an undergraduate approach using Qiskit
Gleydson Fernandes de Jesus, Maria Helo´ısa Fraga da Silva, Teonas Gon¸calves DouradoNetto, Lucas Queiroz Galv˜ao, Frankle Gabriel de Oliveira Souza, and Clebson Cruz ∗ Grupo de Informa¸c˜ao Quˆantica, Centro de Ciˆencias Exatas e das Tecnologias,Universidade Federal do Oeste da Bahia - Campus Reitor Edgard Santos. Rua Bertioga,892, Morada Nobre I, 47810-059 Barreiras, Bahia, Brasil. (Dated: 28 de janeiro de 2021)Neste artigo, apresentamos a ferramenta Quantum Information Software Developer Kit -
Qiskit ,para o ensino de computa¸c˜ao quˆantica para estudantes de gradua¸c˜ao, com conhecimento b´asico dospostulados da mecˆanica quˆantica. Nos concentramos na apresenta¸c˜ao da constru¸c˜ao dos programasem qualquer laptop ou desktop comum e a sua execu¸c˜ao em processadores quˆanticos reais atrav´esdo acesso remoto aos hardwares disponibilizados na plataforma
IBM Quantum Experience . Osc´odigos s˜ao disponibilizados ao longo do texto para que os leitores, mesmo com pouca experiˆenciaem computa¸c˜ao cient´ıfica, possam reproduz´ı-los e adotar os m´etodos discutidos neste artigo paraabordar seus pr´oprios projetos de computa¸c˜ao quˆantica. Os resultados apresentados est˜ao de acordocom as previs˜oes te´oricas e mostram a efic´acia do pacote
Qiskit como uma ferramenta de trabalhoem sala de aula, robusta para a introdu¸c˜ao de conceitos aplicados de computa¸c˜ao e informa¸c˜aoquˆantica.
Palavras-Chave:
Python, IBM, Qiskit, Quantum Experience.In this paper, we present the Quantum Information Software Developer Kit -
Qiskit , for tea-ching quantum computing to undergraduate students, with basic knowledge of quantum mechanicspostulates. We focus on presenting the construction of the programs on any common laptop ordesktop computer and their execution on real quantum processors through the remote access tothe quantum hardware available on the
IBM Quantum Experience platform. The codes are madeavailable throughout the text so that readers, even with little experience in scientific computing,can reproduce them and adopt the methods discussed in this paper to address their own quantumcomputing projects. The results presented are in agreement with theoretical predictions and showthe effectiveness of the
Qiskit package as a robust classroom working tool for the introduction ofapplied concepts of quantum computing and quantum information theory.
Keywords:
Python, IBM, Qiskit, Quantum Experience.
I. INTRODUC¸ ˜AO
Com o advento do
IBM Quantum Experience (IBMQE) [1–4], houve uma facilita¸c˜ao ao acesso a plataformasde computa¸c˜ao quˆantica [5–10] por qualquer pessoa comacesso `a internet atrav´es de um computador dom´estico[3, 4]. Entretanto, a maioria dos estudantes dos cur-sos de ciˆencias exatas e tecnol´ogicas n˜ao s˜ao apresenta-dos aos conceitos fundamentais da computa¸c˜ao quˆanticaat´e a p´os-gradua¸c˜ao. Muitos desses estudantes s˜ao fas-cinados com conceitos de Computa¸c˜ao Quˆantica [5–10],uma vez que, antes mesmo de ingressarem em um cursode gradua¸c˜ao, j´a est˜ao familiarizados com o fato de quecomputadores quˆanticos superam o poder de processa-mento dos computadores comerciais dispon´ıveis atual-mente. Nos ´ultimos, anos os avan¸cos mostrados pelacomputa¸c˜ao quˆantica tˆem mostrado o seu o potencialde revolu¸c˜ao tecnol´ogica [11, 12]. Nesse cen´ario, a com-puta¸c˜ao cient´ıfica dos pr´oximos anos ser´a liderada poraqueles que tˆem o conhecimento acerca da utiliza¸c˜ao dedispositivos quˆanticos. Portanto, se torna crucial facili- ∗ [email protected] tar o acesso `a educa¸c˜ao quˆantica, garantindo que os estu-dantes, independentemente de planejarem trabalhar emuma ´area relacionada `a teoria da informa¸c˜ao quˆantica,aprendam conceitos b´asicos de computa¸c˜ao quˆantica.Nesse contexto, a apresenta¸c˜ao da ´area de Computa¸c˜aoe Informa¸c˜ao Quˆantica para alunos de gradua¸c˜ao tematra´ıdo a aten¸c˜ao da comunidade cient´ıfica nos ´ultimosanos [2–4, 6, 13–18]. Al´em de contextualizar o processode ensino e aprendizagem no cotidiano, alguns estudosapontam que o uso de tecnologias como recurso auxiliarde aprendizagem constitui uma realidade para a maiorparte dos estudantes, sendo um caminho prof´ıquo para aconsolida¸c˜ao do que se compreende como democratiza¸c˜aoe universaliza¸c˜ao do conhecimento [19, 20], de modo quetrabalhos recentes tˆem apostado na plataforma IBM QEcomo aliada das pr´aticas pedag´ogicas, propondo, inclu-sive, abordagens did´aticas para o ensino de computa¸c˜aoquˆantica no n´ıvel de gradua¸c˜ao [2–4] e at´e mesmo no en-sino m´edio [18, 21].Em 2017 a IBM (International Business Machines)disponibilizou o seu kit de desenvolvimento de soft-ware para informa¸c˜ao quˆantica (Quantum InformationSoftware Developer Kit), ou simplesmente Qiskit [22–26], permitindo o desenvolvimento de softwares para seuservi¸co de computa¸c˜ao quˆantica em nuvem [1]. As contri- a r X i v : . [ phy s i c s . e d - ph ] J a n bui¸c˜oes podem ser feitas por apoiadores externos, atrav´esda plataforma GitHub [24], onde s˜ao disponibilizadosuma s´erie de exemplos de algoritmos quˆanticos da co-munidade [27] e trazem um conjunto de exerc´ıcios queauxiliam no aprendizado de computa¸c˜ao quˆantica [22].Neste trabalho, analisamos o pacote Qiskit , usando alinguagem Python 3 [28–30], como um recurso educacio-nal para aulas de computa¸c˜ao quˆantica para a gradua¸c˜aoem F´ısica e ´areas afins, al´em do desenvolvimento de po-tenciais projetos de pesquisa e inicia¸c˜ao cient´ıfica sˆeniore j´unior. Mostramos como essa pode ser uma ferramentapoderosa para o ensino de computa¸c˜ao quˆantica, comfoco na implementa¸c˜ao de circuitos quˆanticos simples ealgoritmos quˆanticos bem conhecidos. Apresentamos asprincipais condi¸c˜oes para a constru¸c˜ao dos programas ea sua execu¸c˜ao em processadores quanticos reais, ou at´emesmo em computadores dom´esticos. Os c´odigos s˜ao dis-ponibilizados nos Boxes ao longo do texto, de modo queos leitores possam adotar os m´etodos discutidos neste ar-tigo para abordar seus pr´oprios projetos de computa¸c˜aoquˆantica.Vale destacar que, este artigo traz um resumo das no-tas de aula da disciplina CET0448 - T´opicos EspeciaisIII: Computa¸c˜ao Quˆantica Aplicada, ministrada para es-tudantes do primeiro ao ´ultimo semestre dos cursos deLicenciatura e Bacharelado em F´ısica da UniversidadeFederal do Oeste da Bahia. O pacote
Qiskit foi utilizadocomo uma ferramenta de trabalho para a apresenta¸c˜ao deconceitos b´asicos de computa¸c˜ao e informa¸c˜ao quˆanticapara uma ampla gama de estudantes, com um conhe-cimento b´asico de mecˆanica quˆantica e nenhuma ex-periˆencia em programa¸c˜ao cient´ıfica.Esse trabalho est´a estruturado seguindo um roteirob´asico para a introdu¸c˜ao de conceitos fundamentais paraa computa¸c˜ao quˆantica como qubits, portas quˆanticas,emaranhamento e algoritmos quˆanticos, seguindo a es-trutura apresentada na disciplina. Primeiramente, naSe¸c˜ao 2 fazemos uma apresenta¸c˜ao das ferramentas com-putacionais necess´arias para abordar nossos projetosde computa¸c˜ao quˆantica em computadores dom´esticos;na se¸c˜ao 3 comentamos brevemente os principais con-ceitos b´asicos de computa¸c˜ao e informa¸c˜ao quˆanticacomo bits quˆanticos, portas quˆanticas b´asicas, medi-das e emaranhamento quˆantico; na Se¸c˜ao 4 apresenta-mos as aplica¸c˜oes, fornecendo um conjunto de proble-mas abordados pelos estudantes da disciplina (autoresdeste trabalho), executados em processadores quˆanticosreais. Nessa se¸c˜ao, apresentaremos a constru¸c˜ao de por-tas l´ogicas cl´assicas a partir de portas quˆanticas, o famosoalgoritmo de teleporte quˆantico [3–5, 10] e o algoritmode busca de Grover [5, 17]. Estas aplica¸c˜oes podem serusadas como exemplos de implementa¸c˜ao de algoritmosquˆanticos, apresentando o
Qiskit como uma ferramentade trabalho ´util para o ensino de computa¸c˜ao quˆantica.Finalizamos o trabalho com as conclus˜oes na se¸c˜ao 5.
II. FERRAMENTAS COMPUTACIONAIS
A linguagem Python [28–30] foi projetada para serde f´acil leitura, com r´apido desenvolvimento de c´odigoe de f´acil compreens˜ao, pois tem pouco foco na sintaxee um foco maior nos conceitos b´asicos de l´ogica de pro-grama¸c˜ao [29]. No entanto, apesar da flexibilidade, oPython ´e considerada lenta em compara¸c˜ao com outraslinguagens, mas isso ´e compensado por sua biblioteca ro-busta e f´acil de manipular, adequada para c´alculos ci-ent´ıficos [28–32]. Nesse quesito, a utiliza¸c˜ao do Pythonpara o
Qiskit permite que os conte´udos apresentadosneste artigo possam ser reproduzidos pela maioria dosleitores, mesmo aqueles que tˆem pouca ou nenhuma ex-periˆencia com essa linguagem de programa¸c˜ao.
A. Jupyter Notebook e Anaconda(Python)
Recomendamos que os leitores usem o software li-vre Jupyter Notebook [33–39] em seus projetos Pythonde computa¸c˜ao quˆantica, especialmente aqueles quen˜ao tˆem experiˆencia em computa¸c˜ao cient´ıfica ou est˜aocome¸cando a aprender a linguagem Python. Recente-mente, diversos trabalhos tˆem apontado a efic´acia doJupyter Notebook para o aprendizado de computa¸c˜ao dealta performace [35–39]. O Jupyter Notebook facilita aintera¸c˜ao entre o usu´ario e o computador, permitindo ainclus˜ao de textos na formata¸c˜ao L A TEX e a apresenta¸c˜aode resultados gr´aficos durante a execu¸c˜ao dos programas,permitindo ao usu´ario acompanhar em tempo real cadaetapa do c´odigo, auxiliando na compreens˜ao dos c´odigose seus resultados, sendo uma ferramenta robusta para oensino de computa¸c˜ao quˆantica. Al´em disso, uma dasvantagens no uso do Jupyter ´e que o
IBM QE [1] usaum ambiente Jupyter Notebook, que permite programarcom Python na nuvem usando o pacote Qiskit em umcomputador quˆantico real a partir de um computadordom´estico, e at´e mesmo emular um processador quˆanticoa partir da unidade de processamento local do usu´ariomesmo sem acesso a internet.O Jupyter Notebook, assim como o Python 3, podemser facilmente encontrados para download gratuito na in-ternet. Ambos fazem parte de uma das plataformas deciˆencia de dados mais populares da atualidade, o Ana-conda [31, 38–40].O Anaconda ´e uma ferramenta computacional quevem completamente pronta para uso, sendo um ambi-ente de desenvolvimento para v´arias linguagens popula-res, como Python, C, Java, R, Julia, entre outras [40]. O A ´ultima vers˜ao do Anaconda (4.8.3) pode ser baixada gratui-tamente no site da plataforma [40], baseado no sistema opera-cional do computador do usu´ario. N´os recomendamos utilizara instala¸c˜ao padr˜ao. Depois de instalado, o usu´ario pode abriro Anaconda Navigator no seu computador e atestar que a ins-tala¸c˜ao foi conclu´ıda com ˆexito.
Anaconda vem com todas as bibliotecas necess´arias paramodelar sistemas f´ısicos como numpy, scipy e matplo-tlib, entre outros (150) pacotes pr´e-instalados e mais de250 pacotes de c´odigo aberto que podem ser adicionados[31]. Dentre esses pacotes dispon´ıveis para o reposit´oriodo Anaconda encontramos o
Qiskit [25], elemento fun-damental para esse trabalho. A seguir, mostramos umabreve introdu¸c˜ao ao pacote
Qiskit . B. Quantum Information Software Developer Kit-
Qiskit
O Quantum Information Software Developer Kit -
Qiskit [22–26] ´e uma estrutura computacional de c´odigoaberto desenvolvida para funcionar em diferentes lingua-gens de programa¸c˜ao como Python [24], Swift [41] e Ja-vaScript [42], fornecendo as ferramentas necess´arias paraa cria¸c˜ao de algoritmos quˆanticos, seguindo um modelode circuito para computa¸c˜ao quˆantica universal [5], e asua execu¸c˜ao em dispositivos quˆanticos reais usando oacesso remoto aos hardwares disponibilizados atrav´es doIBM QE. Al´em disso, o Qiskit permite emular um com-putador quˆantico em processador cl´assico local, como umlaptop ou um desktop comum, permitindo a testagemde algoritmos quˆanticos simples em qualquer computa-dor dom´estico, sem a necessidade de acesso `a internet oucria¸c˜ao de uma conta no IBM QE.O IBM QE oferece a estudantes, pesquisadores e entu-siastas da computa¸c˜ao quˆantica acesso r´apido e pr´aticopor meio de uma interface amig´avel, permitindo que osusu´arios executem seus projetos e experimentos [1, 3, 4].Por outro lado, o Qiskit ´e uma ferramenta profisionalpara o desenvolvimento de programa¸c˜ao quˆantica de alton´ıvel [22–26], sendo tanto uma plataforma de desenvol-vimento de softwares quˆanticos como uma linguagem deprograma¸c˜ao quˆantica [26]. Para isso, o
Qiskit conta comcinco elementos essenciais:
Terra: cont´em os elementos fundamentais que s˜aousados para escrever os circuitos dos algoritmosquˆanticos;
Aer: cont´em os recursos para as simula¸c˜oesquˆanticas por meio de computa¸c˜ao de alto desem-penho;
AQUA: algoritmos para aplicativos de com-puta¸c˜ao quˆantica, ou
AQUA , fornece as bibliote-cas para aplicativos espec´ıficos de algoritmos, comoQu´ımica, Finan¸cas e Machine Learning. A forma recomendada de instalar o
Qiskit ´e utilizando o geren-ciador de pacotes do Python, ( pip ), pr´e-instalado nas ´ultimasvers˜oes do Python e Anaconda, utilizando o comando no ter-minal > pip install qiskit . Para uma instala¸c˜ao detalhada,recomendamos acessar a se¸c˜ao de instala¸c˜ao na p´agina do githubdos projetos [24].
Ignis: cont´em ferramentas espec´ıficas para algo-ritmos de corre¸c˜ao de erros, ru´ıdos quˆanticos e ve-rifica¸c˜ao de hardware quˆantico.
IBM Q Provider: n˜ao ´e necessariamente umelemento fundamental, mas fornece as ferramentaspara acessar
IBM Q Experience , a fim de executarprogramas de usu´arios em um processador quˆanticoreal.Neste artigo usamos o
Qiskit na linguagem Python 3para construir os circuitos quˆanticos e para as simula¸c˜oesdos algoritmos em computadores quˆanticos reais, usandoapenas os elementos
Terra , Aer e IBM Q Provider . C. Importando os Pacotes
Uma vez instalados o Anaconda (Python) e o
Qiskit emseus computadores, os usu´arios est˜ao prontos para apren-der como escrever c´odigos para simular seus pr´oprios al-goritmos quˆanticos, construindo circuitos e executando-os em seus pr´oprios computadores dom´esticos. Para ini-ciar o programa, ´e necess´ario adicionar estes recursos noambiente Python no Jupyter Notebook, importando osseguintes m´odulos: qiskit : para projetar os circuitos quˆanticos e exe-cutar algoritmos quˆanticos [22–25]; numpy : para construir um ambiente matem´aticocom arrays e matrizes multidimensionais, usandosua grande cole¸c˜ao de fun¸c˜oes matem´aticas [32]; matplotlib : para a cria¸c˜ao de gr´aficos e visua-liza¸c˜oes de dados em geral [43]; qiskit.tools.monitor : para utilizarmos a fun¸c˜ao job monitor para monitorar em tempo real aexecu¸c˜ao dos nossos algoritmos [22–25]; qiskit.visualization : para utilizar as fun¸c˜oes plot histogram para visualizar os resultadosatrav´es das distribui¸c˜oes de probabilidade e plot bloch multivector para visualizar os esta-dos na representa¸c˜ao da esfera de bloch [5].Esses m´odulos b´asicos podem ser importados logo naprimeira c´elula do notebook do Jupyter e executado como comando shift+enter no teclado , sempre que umnovo notebook for criado. Para isso, usamos os seguintescomandos:Box 1: Importando os Pacotes from qiskit import *import numpy as np As c´elulas do Jupyter Notebook s˜ao sempre executadas atrav´esdo comando shift+enter no teclado. import matplotlib.pyplot as pltfrom qiskit.tools.monitor import job_monitorfrom qiskit.visualization import (cid:44) → plot_histogramfrom qiskit.visualization import (cid:44) → plot_bloch_multivector%matplotlib inline Vale destacar que, o comando %matplotlib inline serve para definir o processo interno do matplotlib , per-mitindo que as sa´ıdas dos comandos de plotagem sejaexibida de forma embutida na interface frontal, como oJupyter Notebook, abaixo da c´elula em que o c´odigo ´eescrito [43].Uma vez que os pacotes est˜ao importados, temos to-das as condi¸c˜oes de come¸car a programar algoritmosquˆanticos em nosso computador pessoal e execut´a-los deforma remota nos computadores quˆanticos disponibiliza-dos pela IBM [1–4].
III. FUNDAMENTOS:
Nesta se¸c˜ao, fornecemos uma breve introdu¸c˜ao aosconceitos fundamentais de informa¸c˜ao quˆantica e com-puta¸c˜ao quˆantica, usando os ambientes computacionaisdescritos na ´ultima se¸c˜ao. Descrevemos os concei-tos de qubits, emaranhamento quˆantico, portas l´ogicasquˆanticas, circuitos e algoritmos. Esses t´opicos fo-ram amplamente estudados e discutidos na literaturanas ´ultimas d´ecadas [5, 7–9, 44, 45]. Para os leitoresque tˆem somente um conhecimento b´asico em mecˆanicaquˆantica, recomendamos a leitura complementar das re-ferˆencias [2–4, 10, 17, 18]. Para leitores com conheci-mento avan¸cado em mecˆanica quˆantica, recomendamosas referˆencias [5, 9, 44] para uma descri¸c˜ao mais deta-lhada dos t´opicos abordados nesta se¸c˜ao.
A. Bits Quˆanticos (Qubits)
BInary DigiT, ou bit ´e a menor unidade de in-forma¸c˜ao em uma teoria da informa¸c˜ao cl´assica, e a te-oria da computa¸c˜ao cl´assica ´e fundamentada neste con-ceito [5, 15]. O bit cl´assico ´e um estado l´ogico que as-sume um dos dois valores poss´ıveis { , } . Outras repre-senta¸c˜oes ´uteis, s˜ao { sim , n~ao } , { verdadeiro , falso } ou { ligado , desligado } . Em computadores cl´assicos, es-sas duas possibilidades podem ser implementadas usandocomponentes eletrˆonicos cl´assicos de dois estados, comodois n´ıveis de tens˜ao ou corrente distintos e est´aveis emum circuito, duas posi¸c˜oes de interruptores el´etricos, doisn´ıveis de intensidade de luz ou polariza¸c˜ao e dois esta-dos el´etricos diferentes de um circuito flip-flop [46], porexemplo. Assim, os computadores s˜ao projetados cominstru¸c˜oes para manipular e armazenar m´ultiplos bits ,chamados bytes (conjunto de 8 bits). Da mesma forma, a teoria da informa¸c˜ao quˆanticae a computa¸c˜ao quˆantica s˜ao constru´ıdas atrav´es deuma unidade de informa¸c˜ao fundamental, an´aloga ao bit (cl´assico): os bits quˆanticos, ou simplesmente qubits [5].No entanto, enquanto os bits cl´assicos podem assumiruma das duas possibilidades acima mencionadas, os qu-bits podem ser representados como uma combina¸c˜ao li-near da base ortonormal de um sistema quˆantico de doisn´ıveis, convencionalmente representada como {| (cid:105) , | (cid:105)} ,chamada de base computacional [3, 5], onde em uma re-presenta¸c˜ao matricial: | (cid:105) = (cid:20) (cid:21) (1) | (cid:105) = (cid:20) (cid:21) (2)Portanto, a principal vantagem dos qubits sobre osbits est´a no princ´ıpio de sobreposi¸c˜ao [5, 10, 44, 47] oque possibilita combina¸c˜oes lineares entre os vetores quecomp˜oem a base computacional. Desta forma, a repre-senta¸c˜ao mais geral para um qubit ´e um vetor | ψ (cid:105) escritocomo: | ψ (cid:105) = α | (cid:105) + β | (cid:105) , (3)onde α e β s˜ao amplitudes complexas que obedecem `acondi¸c˜ao de normaliza¸c˜ao | α | + | β | = 1, com | α | cor-responde `a probabilidade de obter o estado | (cid:105) e | β | aprobabilidade de obter o estado | (cid:105) , atrav´es de uma me-dida no estado | ψ (cid:105) .Ap´os a importa¸c˜ao dos pacotes apresentadas no Box 1,temos todas as condi¸c˜oes de criar o conjunto de regras ouopera¸c˜oes que, aplicadas nos qubits, permitem solucionaralgum problema preestabelecido, ou seja, os algoritmosquˆanticos.O primeiro passo ´e definir as bases do circuito queimplementar´a o algoritmo desejado, come¸cando peloconjunto de qubits que ser´a utilizado no problema.Para isso, definimos uma vari´avel q usando a fun¸c˜ao QuantumRegister da seguinte forma:Box 2: Registrando os qubits q = QuantumRegister(N, 'q')
No Box 2, N ´e um n´umero inteiro e representa o n´umerode qubits que ser´a usado no circuito. Por defini¸c˜ao, osqubits s˜ao sempre registrados no estado | (cid:105) ⊗ N , ou seja,cada um dos N qubits no estado | (cid:105) .Outro elemento importante na constru¸c˜ao do circuitoquˆantico ´e a defini¸c˜ao do conjunto de bits cl´assicos onderegistramos a informa¸c˜ao oriunda das medidas realizadasnos qbits, ap´os a execu¸c˜ao de algum algoritmo, por exem-plo. Para isso, de maneira an´aloga aos qubits, definimosuma vari´avel b usando a fun¸c˜ao ClassicalRegister : O nome das v´ari´aveis ´e de livre escolha do usu´ario.
Box 3: Registrando os bits cl´assicos b = ClassicalRegister(N, 'b')
Finalmente, podemos ent˜ao declarar a vari´avel circuito para construir o nosso circuito usando o con-junto de bits cl´assicos e quˆanticos definidos anteriormenteatrav´es da fun¸c˜ao
QuantumCircuit :Box 4: Criando o circuito circuito = QuantumCircuit(qubits, bits)
Nesse ponto temos a base para o nosso circuito e te-mos todas as condi¸c˜oes de definir os trˆes componentespincipais de todo algoritmo quˆantico:
Inicializa¸c˜ao:
Primeiro, precisamos iniciar nossoprocesso de computa¸c˜ao em um estado bem defi-nido.
Portas Quˆanticas:
Em seguida, aplicamos asequˆencia de opera¸c˜oes (portas) quˆanticas que per-mitem solucionar o problema preestabelecido;
Medidas:
Finalizamos, medindo os estados decada qubit, registramos as medidas nos bitscl´assicos, e usando um computador cl´assico, inter-pretamos as medi¸c˜oes atrav´es das distribui¸c˜oes deprobabilidade correspondente a cada resultado dasmedidas.A seguir apresentamos cada etapa da constru¸c˜ao deum algoritmo quˆantico.
B. Inicializa¸c˜ao
Usando o
Qiskit podemos definir os coeficientes α e β e inicializar cada qubit do circuito no estado descrito naequa¸c˜ao (3). Para isso usamos os seguintes comandos:Box 5: Inicializando um qubit em um determinado es-tado | ψ (cid:105) psi = [alpha,beta]circuito.initialize(psi,q[i]) Onde a vari´avel psi ´e uma matriz que representa o es-tado descrito na equa¸c˜ao (3), com as vari´aveis alpha e beta correspondendo aos coeficientes α e β , respectiva-mente, e q[i] o qubit q ´ındice i que ser´a inicializado noestado | ψ (cid:105) .
1. Esfera de Bloch
Nesse ponto, vale destacar uma representa¸c˜ao ´util parao estado de um qubit, que pode ser obtida atrav´es domapeamento das componentes α e β como fun¸c˜oes deˆangulos θ e φ . Dessa maneira, devido ao fato de α e β obedecerem `a condi¸c˜ao de normaliza¸c˜ao | α | + | β | = 1,equa¸c˜ao (3) pode ser reescrita como | ψ (cid:105) = cos (cid:18) θ (cid:19) | (cid:105) + e iφ sin (cid:18) θ (cid:19) | (cid:105) , (4)Assim, o par { θ, φ } define um ponto em uma esferade raio unit´ario, conhecida na literatura como Esfera deBloch [5], que nos d´a uma representa¸c˜ao geom´etrica parao espa¸co de Hilbert de um qubit.Nessa representa¸c˜ao, o estado de um qubit correspondea um ponto na superf´ıcie da esfera de Bloch e esta-dos ortogonais s˜ao diametralmente opostos . Atrav´es daimporta¸c˜ao do pacote qiskit.visualization , previa-mente instalado junto ao Qiskit , podemos usar a fun¸c˜ao plot bloch multivector para obtermos a visualiza¸c˜aodo qubit de interesse na esfera de Bloch.Assim, escolhendo o par { θ, φ } na equa¸c˜ao (4), pode-mos obter a representa¸c˜ao geom´etrica do qubit descritopor | ψ (cid:105) . Vamos analizar a inicializa¸c˜ao dos qubits atrav´esde alguns exemplos. Primeiramente, importamos os pa-cotes necess´arios conforme descrito no Box 1; em seguidaregistramos um qubit ( N =1) conforme descrito no Box 2;criamos um circuito conforme o Box 4, sem a necessidadede um bit cl´assico auxiliar, pois n˜ao ser˜ao feitas medidasnesse qubit. Finalmente, podemos inicializar nosso qubita partir dos ˆangulos θ e φ . Usando o pacote numpy (cha-mado por np ), definimos os coeficientes α e β a partir dosˆangulos θ e φ e, conforme apresentado no Box 5, iniciali-zamos o nosso estado. Todo esse processo ´e apresentadono Box 6, a seguir:Box 6: Inicializar o qubit a partir dos ˆangulos θ e φ theta = (float(input("Insira o ^angulo (cid:44) → theta( ° ): ")))*np.pi/(180)phi = (float(input("Insira o ^angulo phi( ° ): (cid:44) → ")))*np.pi/(180)alpha = np.cos(theta/2)beta = (np.exp(1j*phi))*np.sin(theta/2)estado_inicial = [alpha,beta]circuito.initialize(estado_inicial,qubit[0]) Finalmente, podemos usar o elemento
Aer do Qis-kit para simular o estado inicializado em nosso compu-tador local, obter o vetor de estado e plot´a-lo na re-presenta¸c˜ao da esfera de Bloch, usando o pacote plotbloch multivector
Box 7: Plotando o qubit na Esfera de Bloch processo = Aer. (cid:44) → get_backend('statevector_simulator')vector_de_estado = execute(circuito, (cid:44) → backend=processo).result(). (cid:44) → get_statevector() Isso explica o fato de usarmos θ na equa¸c˜ao (4) plot_bloch_multivector(vector_de_estado) A fig. 1 mostra a representa¸c˜ao da esfera Bloch paraqubits inicializados em ˆangulos espec´ıficos. (a) (b)(c) (d)
Figura 1. Representa¸c˜ao da esfera de Bloch de um qubit.Escolhendo os ˆangulos θ e φ na equa¸c˜ao (4) obtemos a repre-senta¸c˜ao da esfera Blcoh para os estados (a) | ψ (cid:105) = | (cid:105) ( θ =0 o ); (b) | ψ (cid:105) = | (cid:105) ( θ = 180 o ); (c) | ψ (cid:105) = | + (cid:105) = √ ( | (cid:105) + | (cid:105) ) { θ = 90 o , φ = 0 o } ; e | ψ (cid:105) = | + i (cid:105) = √ ( | (cid:105) + i | (cid:105) ) { θ = 90 o , φ = 90 o } . Um outro caminho para a inicializa¸c˜ao ´e aplica¸c˜ao deopera¸c˜oes que transformam o sistema de qubits inicial-mente registrado no estado | (cid:105) ⊗ N . Essas opera¸c˜oes s˜aoconhecidas como portas quˆanticas. C. Portas Quˆanticas
Uma vez definido o elemento b´asico de informa¸c˜aoquˆantica (os qubits), temos todas as condi¸c˜oes de intro-duzir os conjuntos de opera¸c˜oes que atuam sobre eles.Em computa¸c˜ao cl´assica, essas opera¸c˜oes s˜ao implemen-tadas pelo que conhecemos como portas l´ogicas [10].As Portas L´ogicas Cl´assicas seguem uma ´Algebra Bo-oleana [48] e s˜ao implementadas a partir de circuitoseletrˆonicos [10], geralmente usando diodos ou transisto-res que atuam como interruptores eletrˆonicos, permitindoa implementa¸c˜ao de alguma opera¸c˜ao l´ogica atrav´es deuma determinada fun¸c˜ao booleana [48]. Assim, essasportas s˜ao aplicadas em circuitos l´ogicos para a imple-menta¸c˜ao de processos computacionais, levando a solu¸c˜aode problemas atrav´es de algoritmos. Na Computa¸c˜ao Quˆantica, analogamente `a com-puta¸c˜ao cl´assica, o conjunto de opera¸c˜oes que atuamsobre os qubits s˜ao conhecidos como Portas L´ogicasQuˆanticas, ou simplesmente Portas Quˆanticas. Aocontr´ario das portas l´ogicas cl´assicas, as portas quˆanticass˜ao sempre revers´ıveis [10] . Devido `a grande quanti-dade de portas quˆanticas e `as suas semelhan¸cas de im-plementa¸c˜ao no Qiskit , apresentamos a seguir as prin-cipais Portas Quˆanticas que utilizaremos ao longo dessetrabalho, em sua forma matricial.
1. Portas de 1 qubit
Vamos come¸car com as portas quˆanticas de 1 qubit,a partir do que conhecemos como portas quˆanticas ele-mentares, ou portas de Pauli [10], que correspondem `asmatrizes de Pauli [10, 47]: X = (cid:20) (cid:21) , (5) Y = (cid:20) − ii (cid:21) , (6) Z = (cid:20) − (cid:21) . (7)Consideremos o estado descrito na equa¸c˜ao (3). Aatua¸c˜ao dessas portas nesse estado ´e: X | ψ (cid:105) = α | (cid:105) + β | (cid:105) , (8) Y | ψ (cid:105) = iα | (cid:105) − iβ | (cid:105) , (9) Z | ψ (cid:105) = α | (cid:105) − β | (cid:105) . (10)Assim, pode-se perceber que as portas de Pauli corres-pondem a uma rota¸c˜ao na esfera de Bloch de π rad noeixo correspondente `a dire¸c˜ao representada pela porta.Uma outra porta muito importante, e que comp˜oe oconjunto de portas quˆanticas universais [10] - atrav´es daqual qualquer transforma¸c˜ao unit´aria pode ser implemen-tada em um estado quˆantico gen´erico - ´e a porta de faseou porta S , onde: S = (cid:20) i (cid:21) . (11)Consideremos novamente o estado descrito naequa¸c˜ao (3). A atua¸c˜ao dessas portas nesse estado´e: S | ψ (cid:105) = α | (cid:105) + iβ | (cid:105) . (12)Na literatura [5–10], a porta de fase ´e comumente co-nhecida como porta √ Z , isso porque a aplica¸c˜ao da porta Em computa¸c˜ao cl´assica a ´unica porta revers´ıvel ´e a porta
NOT [10].
S duas vezes consecutivas equivale a aplica¸c˜ao da porta Z . Porta
NOT (X)
No Qiskit, podemos verificar a atua¸c˜ao dessas portasem um qubit gen´erico. Por simplicidade, vamos verificara atua¸c˜ao da Porta X nos estados da base computacional {| (cid:105) , | (cid:105)} como um exemplo:Box 8: Aplicando a Porta X q = QuantumRegister(1, 'q')circuito = QuantumCircuit(qubit)estado_inicial = [1,0]circuito.initialize(estado_inicial,qubit)circuito.x(qubit) A fig. 2 mostra a atua¸c˜ao da porta X sobre os qubits dabase computacional na representa¸c˜ao da esfera de Bloch,implementado no
Qiskit conforme foi apresentado no Box7. (a)(b)
Figura 2. Representa¸c˜ao na esfera de Bloch da atua¸c˜ao daporta X sobre os estados da Base Computacional (a) | (cid:105) (b) | (cid:105) . Como pode ser visto, a aplica¸c˜ao da Porta X corres-ponde a um inversor l´ogico, implementando uma opera¸c˜ao denega¸c˜ao l´ogica. Como podemos ver, a aplica¸c˜ao da Porta X corres-ponde a um inversor l´ogico, uma vez que ela nega o va-lor do bit de entrada, isso pode ser interpretado comoum an´alogo quˆantico para a porta NOT cl´assica [5, 10].Por esse motivo, convencionou-se chamar a porta X comoPorta
NOT quˆantica [4].Analogamente, para atuar as portas Y , Z ou S bastasomente trocar o x pela letra y , z ou s na ´ultima linhado Box 8, respectivamente. Porta Hadamard (H)
Outra porta quˆantica extremamente importante queatua sobre 1 qubit ´e a porta Hadamard ( H ). H = 1 √ X + Z ) = 1 √ (cid:20) − (cid:21) , (13)Essa importˆancia ´e devido ao fato da opera¸c˜ao im-plementada pela porta Hadamard ser respons´avel pelacria¸c˜ao de sobreposi¸c˜ao. Considerando os estados da basecomputacional, a atua¸c˜ao da porta Hadamard resulta em: H | (cid:105) = | + (cid:105) = 1 √ | (cid:105) + | (cid:105) ) , (14) H | (cid:105) = |−(cid:105) = 1 √ | (cid:105) − | (cid:105) ) . (15)Analogamente a aplica¸c˜ao da porta NOT , para atuar aporta Hadamard basta somente trocar o x pela letra h na ´ultima linha do Box 8. A fig. 3 mostra a atua¸c˜aoda porta H sobre os qubits da base computacional narepresenta¸c˜ao da esfera de Bloch. (a)(b) Figura 3. Representa¸c˜ao na esfera de Bloch da atua¸c˜ao daporta H sobre os estados da Base Computacional (a) | (cid:105) (b) | (cid:105) . Um fato interessante ´e que a porta Hadamard podeser combinada com a porta Z para formar a porta X , ecombinada com a porta X para formar a porta Z, atrav´esdas seguintes sequˆencias: X = HZH , (16) Z = HXH . (17)Essas combina¸c˜oes se mostram bastante ´uteis quandoprecisamos criar portas que n˜ao est˜ao presentes na bi-blioteca do
Qiskit , como veremos a seguir na se¸c˜ao deaplica¸c˜oes.Outro fato interessante ´e que as Portas de Pauli, Fasee Hadamard comp˜oem o que chamamos de conjunto uni-versal de portas de 1 qubit, pois atrav´es delas ´e poss´ıvelimplementar qualquer transforma¸c˜ao unit´aria do estadode 1 qubit apresentado na equa¸c˜ao (3).
2. Desenhando Circuitos Quˆanticos
Assim como as Portas l´ogicas cl´assicas s˜ao combinadaspara formar circuitos l´ogicos para a implementa¸c˜ao de al-goritmos, as portas l´ogicas quˆanticas tamb´em podem sercombinadas para a constru¸c˜ao de circuitos para a imple-menta¸c˜ao de algoritmos quˆanticos. Nesse contexto, faz-senecess´ario introduzir a simbologia das portas l´ogicas uni-versalmente utilizadas em computa¸c˜ao quˆantica. Umavez constru´ıdo o nosso circuito, podemos desenh´a-lo noJupyter notebook e export´a-lo na forma de figura, com ocomando :Box 9: Desenhando circuitos quˆanticos circuito.draw(output = 'mpl') A fig. 4 mostra a representa¸c˜ao das portas universaisde 1 qubit apresentadas nessa se¸c˜ao.
Figura 4. Representa¸c˜ao das Portas (a) de Pauli, (b) de Fasee (c) Hadamard.
3. Portas de m´ultiplos qbits
Computadores quˆanticos de um qubit s˜ao t˜ao usuaisquanto computadores cl´assicos de um bit. A grande van-tagem da computa¸c˜ao quˆantica aparece quando traba-lhamos com sistemas de m´ultiplos qubits [3, 15].Como vimos no in´ıcio dessa se¸c˜ao, um ´unico bit temdois estados poss´ıveis { , } , analogamente um estado qu-bit tem duas amplitudes complexas { α, β } , equa¸c˜ao (3). Recomenda-se a instala¸c˜ao do pacote pylatexenc para a vizu-aliza¸c˜ao dos circuitos, utilizando o gerenciador de pacotes doPython ( pip ), utilizando o comando no terminal > pip installpylatexenc . Portanto, da mesma forma que dois bits tˆem qua-tro estados poss´ıveis { , , , } , a base computa-cional para um sistema de dois qubits ´e dada por {| (cid:105) , | (cid:105) , | (cid:105) , | (cid:105)} . De maneira geral, um sistema de N -qubits ´e descrito por um estado quˆantico | Ψ (cid:105) = c | ... (cid:105) + c | ... (cid:105) + c | ... (cid:105) + · · · + c N | ... (cid:105) , (18)onde os N -qubits s˜ao considerados como um ´unico sistemacomposto com 2 N estados na sua base computacional,com N (cid:88) i =1 | c i | = 1 . (19)Trabalhar com v´arios qubits permite realizar opera¸c˜oesem subconjuntos de qubits [5] e ainda assim fazer usodas propriedades quˆanticas de | Ψ (cid:105) como a sobreposi¸c˜ao,por exemplo. Apresentamos a seguir as principais por-tas quˆanticas que operam em m´ultiplos qubits usando o Qiskit . Porta CNOT (CX)
Uma das portas mais importantes de m´ultiplos qubits´e a conhecida porta CNOT (NOT Controlado ou CX). Aporta CNOT ´e uma porta de dois qubits, e sua atua¸c˜aoocorre se, e somente se, o qubit, que chamamos de qu-bit de controle, for igual a | (cid:105) . Nessa ocasi˜ao atua-se aporta NOT no estado do outro qubit, que chamamos dequbit alvo. Assim, podemos representar matricialmentea porta CNOT como: CN OT = . (20)Considerando os estados da base computacional paradois qubits: {| (cid:105) , | (cid:105) , | (cid:105) , | (cid:105)} , a atua¸c˜ao da portaCNOT resulta em: CN OT | (cid:105) = | (cid:105) (21) CN OT | (cid:105) = | (cid:105) (22) CN OT | (cid:105) = | (cid:105) (23) CN OT | (cid:105) = | (cid:105) (24)A porta CNOT pode ser implementada em um circuitocom o qubit[0] como qubit de controle e qubit[1] como qubit alvo da seguinte maneira:Box 10: Implementa¸c˜ao da Porta CNOT q = QuantumRegister(2, 'q')circuito = QuantumCircuit(qubit)circuito.cx(qubit[0],qubit[1])circuito.draw(output = 'mpl') Na Linguagem Python 3, o primeiro ´ındice de uma lista ´e sempreo 0.
Figura 5. Representa¸c˜ao da Porta CNOT em um circuitoquˆantico.
A fig. 5 mostra a representa¸c˜ao da porta CNOT em umcircuito quˆantico. Usando o Box 7 podemos visualizar aatua¸c˜ao dessa porta na representa¸c˜ao da Esfera de Bloch,conforme pode ser visualizado na Fig. 6: (a)(b)
Figura 6. Representa¸c˜ao na esfera de Bloch da atua¸c˜ao daporta
CNOT sobre os estados da Base Computacional (a) | (cid:105) (b) | (cid:105) . O conjunto de portas de Pauli, de Fase, Hadamard eCNOT comp˜oem o que chamamos de conjunto universalde Portas L´ogicas quˆanticas [10], uma vez que ´e poss´ıvelimplementar qualquer opera¸c˜ao unit´aria em um estadogen´erico atrav´es da combina¸c˜ao dessas portas.
Porta Toffoli (CCX)
Uma Porta de m´ultiplos qubits bastante presente emdiversos circuitos ´e a porta Toffoli (CCX) [5]. Suaatua¸c˜ao ´e executar a porta NOT no qubit alvo somentese dois qubits de controle estiverem no estado | (cid:105) , sendoportanto uma porta de 3 qubits. Assim, podemos repre-sentar matricialmente a porta Toffoli como: CCX = . (25)A porta Toffoli pode ser implementada em um circuito com o qubit[0] e qubit[1] como qubits de controle e qubit[2] como qubit alvo da seguinte maneira:Box 11: Implementa¸c˜ao da Porta Toffoli q = QuantumRegister(3, 'q')circuito = QuantumCircuit(qubit)circuito.ccx(qubit[0],qubit[1],qubit[2])circuito.draw(output = 'mpl') Fig. 7 mostra a representa¸c˜ao da porta Toffoli em umcircuito quˆantico:
Figura 7. Representa¸c˜ao da Porta Toffoli em um circuitoquˆantico.
Novamente, podemos obter a atua¸c˜ao da porta Toffolina representa¸c˜ao da esfera de Bloch, devido `a semelhan¸caoperacional com outras portas controladas como a portaCNOT. N˜ao apresentamos essa atua¸c˜ao neste texto.
D. Medidas e Distribui¸c˜oes de Probabilidade
Como mencionamos anteriormente, definimos um con-junto de bits cl´assicos auxiliares de modo que as medi¸c˜oesnos bits quˆanticos s˜ao salvas como resultados cl´assicos { , } . Logo, uma vez que vimos como inicializar os qu-bits e realizar opera¸c˜oes universais sobre eles, temos to-das as condi¸c˜oes para implementar os nossos algoritmosquˆanticos. Entretanto, ainda falta um passo fundamen-tal para completarmos nosso processo de computa¸c˜ao:a caracteriza¸c˜ao do estado final, atrav´es distribui¸c˜ao deprobablidade correspondente.Primeiramente, precisamos iniciar nosso processo com-putacional quˆantico com um estado bem definido, atrav´esdas opera¸c˜oes de inicializa¸c˜ao discutdas anteriormente.Por simplicidade, vamos considerar o exemplo de um sis-tema de 2 qubits inicializados no estado | (cid:105) usando ocomando circuito.reset(q) . Esse comando proporci-ona uma representa¸c˜ao visual que cada qubit do sistemafoi inicializado no estado | (cid:105) e ´e bastante ´util para aorganiza¸c˜ao dos circuitos. Em seguida, aplicamos umasequˆencia de portas quˆanticas que manipulam os doisqubits, conforme exigido pelo algoritmo. Por exemplo,consideremos um algoritmo que coloque todos os estadosda base computacional de 2 qubits {| (cid:105) , | (cid:105) , | (cid:105) , | (cid:105)} em um estado de sobreposi¸c˜ao, com mesma probabilidade0de medida. Isso pode ser obtido aplicando a porta Ha-damard em cada qubit. O Box abaixo traz a sequˆenciade inicializa¸c˜ao, aplica¸c˜ao de portas e a realiza¸c˜ao dasmedidas do nosso exemplo:Box 12: Exemplo - Cria¸c˜ao de um estado de sobre-posi¸c˜ao para 2 qubits q = QuantumRegister(2, 'q') (cid:44) → qubits b = ClassicalRegister(2, 'b') (cid:44) → os Bits circuito = QuantumCircuit(q,b) (cid:44) → Circuito circuito.reset(q) circuito.h(q) circuito.measure(q,b)circuito.draw(output = 'mpl')
A ig. 8 mostra o circuito quˆantico gerador de sobre-posi¸c˜ao equiprov´avel para os estados da base computaci-onal de 2 qubits apresentado no Box 13.
Figura 8. Circuito quˆantico gerador de sobreposi¸c˜ao equi-prov´avel para os estados da base computacional de 2 qubits.
Finalmente, ap´os medir os qubits, podemos utilizar umcomputador cl´assico para interpretar as medi¸c˜oes de cadaqubit como resultados cl´assicos (0 e 1) e armazen´a-losnos bits cl´assicos definidos para esse circuito. O
Qiskit cont´em o simulador
QASM , um dos principais componentesdo elemento
Aer para as simula¸c˜oes quˆanticas por meio decomputa¸c˜ao de alto desempenho. Este simulador emulaa execu¸c˜ao de circuitos quˆanticos em um processador lo-cal e retorna as contagens de cada medida no estado finalpara um dado conjunto de repeti¸c˜oes ou shots do circuitodefinidos pelo usu´ario. Podemos usar esse recurso parasimular nossos circuitos quˆanticos usando nosso computa-dor pessoal para emular numericamente um processador A descri¸c˜ao dos m´etodos num´ericos utilizados nessa emula¸c˜ao quˆantico ideal, sem nenhuma influˆencia de pertuba¸c˜oesexternas devido ao acoplamento inevit´avel entre os siste-mas quˆanticos de processamento da informa¸c˜ao e o ambi-ente externo [1, 3], conhecido como decoerˆencia [5, 10] .O Box 13 a seguir apresenta o c´odigo que simula ocircuito mostrado no Box 12.Box 13: Simulando um circuito em um processadorquˆantico ideal emulado numericamente simular = Aer.get_backend('qasm_simulator')resultadolocal = execute(circuito, backend = (cid:44) → simular, shots = 8000).result() H´a pequenas varia¸c˜oes nas probabilidades de cada es-tado associadas ao processo n´umerico que o
Qiskit utilizapara emular um processador quˆantico, mas h´a maneirasde otimizar esse processo para que a emula¸c˜ao se apro-xime cada vez mais de um processador real. Uma de-las ´e aumentar o n´umero de repeti¸c˜oes de cada circuito( shots ), conforme apresentado no Box 13.Assim, obtemos as contagens dos estados e obtemos adistribui¸c˜ao de probabilidades para cada estado. Pode-mos usar a fun¸c˜ao plot histogram , presente no m´odulo qiskit.visualization , importado no in´ıcio do note-book (Box 1), para visualizar o resultado da contagemdos estados, da seguinte maneira:Box 14: Plotando a distribui¸c˜ao de probabilidade doestado final de um circuito titulo = 'Probabilidades'plot_histogram(resultadolocal. (cid:44) → get_counts(circuito), title=titulo) A fig. 9 mostra a distibui¸c˜ao de probabilidades para oestado final obido para o circuito apresentado no Box 14(Fig. 8). Como pode ser visto, a distribui¸c˜ao de proba-bilidades obtida numericamente corresponde exatamenteao estado quˆantico | Ψ (cid:105) = 12 [ | (cid:105) + | (cid:105) + | (cid:105) + | (cid:105) ] (26) foge dos objetivos principais deste trabalho. Para maiores deta-lhes sugerimos as referˆencias [22–25]. Na aba
User Guide do IBM QE ´e poss´ıvel encontrar detalhesacerca do processo de decoerˆencia que ocorre nos processado-res, mas esse conte´udo encontra-se somente dispon´ıvel em inglˆes.Para mais detalhes sobre a arquitetura do computador quˆanticoda IBM, al´em disso, indicamos as referˆencias [3, 4, 10]. Figura 9. Distribui¸c˜ao de probabilidades para o circuito apre-sentado na Fig. 8.
1. Acessando o IBM QE usando o Qiskit
Al´em de podermos simular nosso circuito em umprocessador ideal emulado numericamente, podemostamb´em executar nossos projetos em processadoresquˆanticos reais usando o
IBM Q Experience por meio doelemento
IBM Q Provider , que vem com o
Qiskit . Paraisso, ´e preciso criar uma conta gratuita no
IBM Q Experi-ence [1]. Acessando as configura¸c˜oes de
Minha Conta , ousu´ario encontra seu token de API, que ´e necessario paraacessar dispositivos IBM Q de seu computador dom´esticousando o
Qiskit . No Notebook Jupyter, podemos usar osseguintes comandos:Box 15: Salvando a conta IBM QE no computador
IBMQ.save_account('Users_Token')
Este comando ir´a salvar o token de API do usu´arioem seu computador, permitindo acessar dispositivosquˆanticos disponibilizados pela IBM. Esse passo s´o pre-cisa ser realizado uma vez.Para carregar a conta, usamos o comando:Box 16: Carregando a conta IBM QE no notebook doJupyter
IBMQ.load_account()
Ap´os o comando apresentado no Box 16 ser executado,a conta ser´a carregada com ˆexito e poderemos ver a contade acesso atrav´es da sa´ıda:Box 17: Sa´ıda padr˜ao atestando o acesso aos hardwaresdisponibilizados pela IBM
Job Status: job has successfully run
Indicando que o trabalho foi executado com sucesso.Assim, obtemos a contagem dos estados e podemos plo-tar as distribui¸c˜oes de probabilidade como apresentadono Box 15 . Usando os comandos apresentados no Box19 (a seguir), fazemos o comparativo das distribui¸c˜oes deprobabilidades obtidas para o circuito da fig 8, simuladonumericamente em um computador dom´estico e execu-tado em um processador quˆantico real.Box 19: Plotando as distribui¸c˜oes de probabilidade deum circuito emulado numericamente e em um proces-sador real. resultadoIBM = trabalho.result()legenda = ['Processador Ideal', 'Processador (cid:44) → Real']titulo = 'Probabilidades'plot_histogram([resultadolocal. (cid:44) → get_counts(circuito), resultadoIBM. (cid:44) → get_counts(circuito)], (cid:44) → legend=legenda,title=titulo) Fica clara a diferen¸ca entre um processador quˆanticoideal (emulado em um computador dom´estico) e um pro-cessador quˆantico real, devido aos efeitos de decoerˆencia. H´a 9 sistemas dispon´ıveis para a execu¸c˜ao. Durante o paper usa-mos sempre os hardwares que estavam com a menor quantidadede trabalhos em execu¸c˜ao, o que pode ser conferido na painel decontrole do IBM QE [1]. Todos os algoritmos apresentados nessetrabalho foram executados no mesmo processador quˆantico de 5qubits ibmq valencia , conforme mostramos no Box 18. Devido a limita¸c˜oes de hardware, o n´umero de repeti¸c˜oes permi-tidas ( shots ) no processador quˆantico real era de 8192. Figura 10. Distribui¸c˜ao de probabilidade para o circuito apre-sentado na fig. 8 emulado numericamente (processador ideal)e em um processador real.
As referˆencias [3, 4] trazem uma an´alise detalhada doprocessador quˆantico de 5 qubits da IBM QE, cujaa arquitetura ´e a mesma do utilizado nesse trabalho( ibmq valencia ). Uma descri¸c˜ao da an´alise de dados[3, 4] e o erro padr˜ao associado a essa arquitetura deprocessador quˆantico [4].
E. Emaranhamento Quˆantico
Uma vez que conhecemos como inicializar nossos qu-bits e vimos as principais opera¸c˜oes que atuam sobre eles,podemos introduzir uma das principais propriedades damecˆanica quˆantica e um recurso fundamental para o pro-cessamento da informa¸c˜ao quˆantica, o
Emaranhamento .O emaranhamento quˆantico ´e um dos fenˆomenos maisinteressantes da mecˆanica quˆantica que emerge da in-tera¸c˜ao entre m´ultiplos qubits. Hoje em dia, o emaranha-mento quˆantico tem recebido aten¸c˜ao consider´avel comoum recurso not´avel para o processamento de informa¸c˜aoquˆantica [5, 49] e para a compreens˜ao de correla¸c˜oes emsistemas compostos. Einstein, Podolsky, e Rosen (EPR)introduziram a ideia de que estados quˆanticos de um sis-tema composto podem apresentar correla¸c˜oes n˜ao locaisentre seus componentes. Schr¨odinger analisou algumasconsequˆencias f´ısicas da mecˆanica quˆantica, observandoque alguns estados quˆanticos bipartidos (estados EPR[49]) n˜ao admitiam atribuir estados individuais de sub-sistemas, implicando em algumas predi¸c˜oes emaranha-das para a natureza quˆantica dos subsistemas [49]. Por-tanto, o emaranhamento implica a existˆencia de estadosquˆanticos globais de sistemas compostos que n˜ao podemser escritos como um produto dos estados quˆanticos desubsistemas individuais [5, 49].Consideremos um estado quˆantico de um sistema com-posto perfeitamente descrito pela fun¸c˜ao de onda | Ψ (cid:105) (cid:54) = | φ (cid:105) ⊗ | φ (cid:105) ⊗ · · · ⊗ | φ n (cid:105) , (27)n˜ao podemos especificar qualquer estado quˆantico puro | φ i (cid:105) ( i = 1 , . . . , n ) dos subsistemas separadamente; isto ´e, o conhecimento de um todo n˜ao implica conhecimentodas partes.Portanto, n˜ao sabemos nada sobre os subsistemas, em-bora tenhamos conhecimento do sistema como um todo,uma vez que conhecemos | Ψ (cid:105) . Isso contrasta com a si-tua¸c˜ao cl´assica, em que sempre podemos considerar osestados individuais dos subsistemas. Esta ´e uma pistade que estados emaranhados s˜ao estados correlacionadosespeciais, cuja natureza f´ısica n˜ao pode ser simulada ourepresentada a partir de correla¸c˜oes cl´assicas.Em um circuito quˆantico, podemos emaranhar doisqubits atrav´es da combina¸c˜ao das portas Hadamard eCNOT, apresentadas anteriormente. Dependendo dosvalores de inicializa¸c˜ao dos qubits q[0] e q[1] , obtemosum dos quatro estados maximamente emaranhados para2 qubits ou Estados de Bell [10].
Tabela I. Estados Maximamente Emaranhados correspon-dente a cada inicializa¸c˜ao dos qubits q[0] e q[1].q[0] q[1] | Ψ (cid:105)| (cid:105) | (cid:105) √ [ | (cid:105) + | (cid:105) ] | (cid:105) | (cid:105) √ [ | (cid:105) + | (cid:105) ] | (cid:105) | (cid:105) √ [ | (cid:105) − | (cid:105) ] | (cid:105) | (cid:105) √ [ | (cid:105) + | (cid:105) ] Vejamos um exemplo para o sistema inicializado no es-tado q[0] = | (cid:105) e q[1] = | (cid:105) . Ao final do processo execu-tado em um hardware quˆantico real, realizamos medidaspara um conjunto de repeti¸c˜oes e obtemos a distribui¸c˜aode probabilidade correspondente ao estado final.Box 20: Circuito quˆantico gerador de estados quˆanticosemaranhado para 2 qubits q = QuantumRegister(2, 'q') (cid:44) → qubits b = ClassicalRegister(2, 'b') (cid:44) → os Bits circuito = QuantumCircuit(q,b) (cid:44) → Circuito circuito.reset(q[0])circuito.reset(q[1]) circuito.h(q[0])circuito.cx(q[0],q[1]) circuito.measure(q,b)circuito.draw(output = 'mpl')
A fig. 11 mostra a representa¸c˜ao do circuito represen-tado no Box 20 e a distribui¸c˜ao de probabilidades corres-pondente ao resultado desse circuito executado em um3hardware quˆantico real, utilizando o IBM QE: (a)(b)
Figura 11. (a) Representa¸c˜ao do circuito gerador de esta-dos quˆanticos emaranhado para 2 qubits. (b) Distribui¸c˜ao deprobabilidade correspondente ao resultado desse circuito exe-cutado em um hardware quˆantico real usando o IBM QE, comos qubits inicializados no estado q[0] = | (cid:105) e q[1] = | (cid:105) . IV. APLICAC¸ ˜OES
Uma vez que sabemos inicializar os qubits, emaranh´a-los, aplicar as portas quˆanticas e obter os resultadosatrav´es de medidas, temos todas as condi¸c˜oes de construiralgoritmos para a solu¸c˜ao de problemas quˆanticos sim-ples. Nessa se¸c˜ao, traremos algumas aplica¸c˜oes de algo-rimos quˆanticos executados em computadores quˆanticosreais. Apresentaremos a constru¸c˜ao de portas l´ogicascl´assicas a partir de portas quˆanticas, o famoso algoritmode teleporte quˆantico [3–5, 10] e o algoritmo de busca deGrover [5, 17]. Os c´odigos s˜ao apresentados ao longo dotexto, de modo que os leitores possam reproduzi-los emseus computadores, podendo inclusive construir os seuspr´oprios projetos a partir deles.
A. Simulando portas l´ogicas cl´assicas usandoportas quˆanticas
Uma porta l´ogica cl´assica pode ser definida como ummodelo ou dispositivo f´ısico que implementa uma deter-minada fun¸c˜ao booleana [48], realizando assim aquilo que ´e conhecido como opera¸c˜ao l´ogica. Essa opera¸c˜ao ´e rea-lizada em uma (porta
NOT , por exemplo) ou mais entra-das bin´arias (bits), produzindo somente uma ´unica sa´ıda { , } .Existe um conjunto de portas l´ogicas (cl´assicas) a par-tir das quais podemos construir qualquer opera¸c˜ao com-putacional em um computador cl´assico [10]. Essas s˜ao asportas AND , OR e NOT , tamb´em conhecidas como conjuntode portas universais da ´Algebra Booleana.Como vimos anteriormente, a porta quˆantica X cor-responde ao an´alogo quˆantico da porta NOT cl´assica. Aseguir, apresentamos como podemos construir as portas
AND e OR , e os seus resultados executados em um compu-tador quˆantico real.
1. Porta AND
A porta cl´assica
AND implementa o que chamamos deconjun¸c˜ao l´ogica [48]. A tabela II traz o que chamamosde tabela verdade para essa opera¸c˜ao l´ogica, a partir daqual ´e poss´ıvel definir o resultado l´ogico dessa opera¸c˜ao.
Tabela II. Tabela verdade para a porta l´ogica cl´assica ANDEntrada Sa´ıda q[0] q[1] q[2]
Como pode ser visto, a partir de dois bits de entrada,a sa´ıda ´e obtida somente se as duas entradas tamb´emforem 1. Assim, podemos dizer que a porta AND encontrao valor m´ınimo entre dois bits.Quanticamente, a porta
AND pode ser implementada apartir da porta Toffoli, conforme apresentamos no Box11. Como todas as portas cl´assicas, exceto a porta
NOT ,a porta
AND n˜ao ´e revers´ıvel. Entretanto, como todaporta quˆantica, a porta Toffoli ´e revers´ıvel, o que significaque implementar a porta
AND em computadores quˆanticospermite a constru¸c˜ao de circuitos revers´ıveis. O Box 22apresenta a constru¸c˜ao do circuito quˆantico para a portaAND. Como as portas cl´assicas tˆem somente uma sa´ıda, amedida ´e realizada apenas no qubit alvo da porta Toffoli.Box 21: Criando o circuito para a porta
ANDq = QuantumRegister(3, 'q')b = ClassicalRegister(1, 'b')circuito = QuantumCircuit(q, b)circuito.ccx(q[0],q[1],q[2])circuito.measure(q[2], b)circuito.draw(output = 'mpl')
A fig. 12 apresenta o circuito quˆantico que implementaa porta AND.A distribui¸c˜ao de probabilidade correspondente `aaplica¸c˜ao desse circuito em um processador quˆantico real4
Figura 12. Representa¸c˜ao do circuito para a aplica¸c˜ao daporta and. ´e apresentada na fig. 13 . Apresentamos os resultadoscorrespondentes `a tabela verdade da porta AND cl´assica(Tabela II). Como pode ser visto, a probabilidade n˜ao´e de 100% para os estados esperados devido aos efeitosde decoerˆencia do processador real, conforme discutidoanteriormente.
Figura 13. Distritui¸c˜ao de probabilidade para o circuito apre-sentado na figura 12 executado em um computador quˆanticoreal. Apresentamos os resultados da tabela verdade corres-pondente `a porta cl´assica
AND (Tabela II).
2. Porta OR
A porta OR ´e uma porta cl´assica universal que imple-menta o que chamamos em ´algebra booleana de disjun¸c˜aol´ogica [48]. A tabela verdade para a aplica¸c˜ao da portacl´assica OR ´e apresentada na Tabela III. Nesse ponto, vale destacar que a apresenta¸c˜ao dos bits no eixo x em todas as distribui¸c˜oes de probabilidade desse artigo seguemo padr˜ao do Qiskit : bit[0]bit[1]bit[2] apresentados de cimapara baixo. Tabela III. Tabela verdade para a porta l´ogica cl´assica OR.Entrada Sa´ıda q[0] q[1] q[2]
Como pode ser visto, uma sa´ıda ´e obtida se pelomenos uma das entradas for . Assim, dizemos que aporta OR encontra o m´aximo entre duas entradas bin´arias.O an´alogo quˆantico para a OR pode ser constru´ıdoatrav´es da combina¸c˜ao das portas Toffoli e CNOT. OBox 22 traz o c´odigo de constru¸c˜ao do circuito para aimplementa¸c˜ao da porta OR .Box 22: Criando o circuito para a porta ORq = QuantumRegister(3, 'q')b = ClassicalRegister(1, 'b')circuito = QuantumCircuit(q, b)circuito.cx(q[1],q[2])circuito.cx(q[0],q[2])circuito.ccx(q[0],q[1],q[2])circuito.measure(q[2], b)circuito.draw(output = 'mpl')
O circuito para essa opera¸c˜ao ´e apresentado na figura14.
Figura 14. Representa¸c˜ao do circuito para a aplica¸c˜ao daporta OR.
A distribui¸c˜ao de probabilidade correspondente `a ta-bela verdade da porta OR (Tabela III), executada em umprocessador quˆantico real ´e apresentada na fig. 15.Assim, atrav´es das portas
NOT (fig. 2),
AND (fig. 13) e OR (fig. 15) ´e possivel implementar qualquer porta l´ogicacl´assica em um computador quˆantico, com a vantagemde que as portas AND e OR quˆanticas s˜ao revers´ıveis, aocontr´ario de seus an´alogos cl´assicos [10]. B. Teleporte Quˆantico
Outra aplica¸c˜ao muito interessante e bastante discu-tida na literatura da computa¸c˜ao quˆantica ´e o
Teleporte Figura 15. Distritui¸c˜ao de probabilidade para o circuito apre-sentado na figura 14 executado em um computador quˆanticoreal. Apresentamos os resultados da tabela verdade corres-pondente a porta classica OR (Tabela III). Quˆantico [3–5, 9, 10]. O protocolo de teleporte quˆanticoconsiste em uma opera¸c˜ao de transmiss˜ao de um es-tado quˆantico entre duas partes, convencionalmente co-nhecidas como Alice e Bob, separadas espacialmente [3–5, 9, 10], usando dois qubits emaranhados. Assim, pode-mos imaginar que Alice queira enviar um estado quˆanticopuro qualquer para Bob. Para isso, Alice dever´a prepa-rar o qubit que cuja informa¸c˜ao ser´a enviada, e possuirum segundo qubit que ser´a emaranhado ao qubit de Bob,que receber´a a informa¸c˜ao.Vamos considerar em nosso exemplo que Alice pre-tende teleportar o estado: | ψ (cid:105) = (cid:114) | (cid:105) + (cid:114) | (cid:105) , (28)para isso iremos inicializar o circuito o qubit de Alicenesse estado. O Box a seguir apresenta o registro dosqubits de Alice e Bob, a inicializa¸c˜ao do estado que ser´ateleportado e o registro do bit cl´assico que Bob armazenao resultado da medida no seu estado recebido.Box 23: Registrando os qubits e inicializando o estadoque ser´a teleportado Alice = QuantumRegister(2, 'alice')ba = ClassicalRegister(1, 'c_alice')Bob = QuantumRegister(1, 'bob')b = ClassicalRegister(1, 'c_bob')teleporte = QuantumCircuit(Alice,Bob,b)estado_inicial = [np.sqrt(1/3),np.sqrt(2/3)]teleporte.initialize(estado_inicial,Alice[0])teleporte.barrier()
O pr´oximo passo ´e emaranhar o qubit auxiliar de Alicecom o qubit de Bob em um dos Estados de Bell apresen-tados na Tabela I, usando o circuito quˆantico gerador deestados quˆanticos emaranhado para 2 qubits (Box 21). OBox 24 apresenta o circuito gerador de emaranhamentoentre o qubit de Alice e Bob: Box 24: Emaranhando o qubit auxiliar de Alice com oqubit de Bob teleporte.h(Bob[0])teleporte.cx(Bob[0],Alice[1])teleporte.barrier()
Em seguida, Alice inicia o processo de envio do estadopreparado, no Box 25.Box 25: Alice prepara o envio do estado que ser´a tele-portado teleporte.cx(Alice[0],Alice[1])teleporte.h(Alice[0])teleporte.barrier()
No protocolo original [5, 9, 10], o pr´oximo passo seriaAlice realizar medidas em seus qubits e, a depender dosresultados, entrar em contato com Bob atrav´es de umcanal cl´assico para informar as corre¸c˜oes que Bob deveaplicar em seu estado para que o teleporte seja execu-tado e ele consiga resgatar o estado enviado por Alice.Esse passo pode ser executado atrav´es de uma opera¸c˜aocondicionada ao resultado das medidas de Alice. Entre-tanto, o IBM QE n˜ao permite a implementa¸c˜ao desse tipode porta condicionada a um canal cl´assico. Nesse caso,podemos substitu´ı-las pela porta CNOT e Z-Controlada(constru´ıda a partir da combina¸c˜ao das portas Hadamarde CNOT a partir da equa¸c˜ao (17)) [4, 10]. Assim, con-seguimos modificar o circuito original, sem mudar seuobjetivo. O Box 26 apresenta a constru¸c˜ao da corre¸c˜aodo protocolo de teleporte.Box 26: Corre¸c˜ao do algoritmo de teleporte para o res-gate do estado enviado por Alice teleporte.h(Bob[0])teleporte.cx(Alice[0], Bob[0])teleporte.h(Bob[0])teleporte.cx(Alice[1], Bob[0])teleporte.measure(Bob, b)teleporte.draw(output = 'mpl')
A Fig. 16 apresenta o circuito que foi constru´ıdo apartir dos Boxes 23 a 26.
Figura 16. Representa¸c˜ao do circuito de teleporte.
Ao final do processo, realizamos uma medida no qubitde Bob e obtemos a distribui¸c˜ao de probabilidade corres-pondente ao seu qubit. A fig. 17 apresenta a distribui¸c˜aode probabilidades para o qubit de Bob ap´os a realiza¸c˜ao6do circuito da fig. 16 em um processador quˆantico real.Como pode ser visto, observa-se que o estado medido noqubit de Bob foi, em boa aproxima¸c˜ao, o estado enviadopor Alice, conforme a equa¸c˜ao (28). O resultado apre-sentado est´a de acordo com a margem de erro esperadapara o algoritmo de teleporte, executado no processadorIBM QE de 5 qubits, conforme reportado na literatura[3, 4].
Figura 17. Distribui¸c˜ao de probabilidade para o algoritmo deteleporte quˆantico do estado (cid:113) | (cid:105) + (cid:113) | (cid:105) executado emum processador quˆantico real. C. Algoritmo de Busca
Um dos algoritmos mais importantes da computa¸c˜aoquˆantica, e uma das principais aplica¸c˜oes do poder com-putacional do computador quˆantico quando comparadocom um computador cl´assico, ´e o Algoritmo de Grover[5, 9, 10, 17].A busca em uma lista n˜ao estruturada ´e um problemabastante comum nos cursos de programa¸c˜ao. Considere-mos um banco de dados n˜ao estruturado com N entradas.Nosso problema ´e determinar o ´ındice da entrada ( x ) dobanco de dados que satisfa¸ca algum crit´erio de pesquisa.Para isso, definimos a fun¸c˜ao resposta ( r ( x )), uma fun¸c˜aoque mapeia classicamente as entradas do banco de dadospara True ( ) ou False ( ), onde r ( x ) = 0 se, e somentese, x satisfaz o crit´erio de pesquisa ( x = p ), onde p ´e oelemento procurado. Para isso, usamos uma subrotinaconhecida como Or´aculo, que realiza consultas `a lista at´eencontrar o elemento p . Quanto mais distante o elementoprocurado estiver na lista, maior o n´umero de consul-tas o Or´aculo precisar´a fazer para encontrar o elemento.Em m´edia, a complexidade desse problema requer que oOr´aculo consulte a lista N vezes [5, 9, 10, 17, 50]. Seo elemento estiver no final da lista, o Or´aculo precisar´aconsult´a-la N vezes. Logo, dizemos que o grau de com-plexidade desse problema ´e de ordem O ( N ). Quantica-mente, o problema de busca em uma lista n˜ao estruturada´e abordado no famoso Algoritmo de Grover [5, 9, 10, 17].Explorar a sobreposi¸c˜ao dos estados quˆanticos inspecio- nando os N itens da lista simultaneamente permite ace-lerar quadraticamente o problema de busca. O algoritmode Grover ´e um algoritmo poderoso e sua utilidade vaial´em desse uso, sendo empregado como subrotina de oti-miza¸c˜ao em uma grande variedade de outros algoritmos[5, 50–53], atrav´es do que chamamos de processo de am-plifica¸c˜ao de amplitude [5].Como exemplo, apresentaremos a constru¸c˜ao do Al-goritmo de Grover no Qiskit para a implementa¸c˜ao doalgoritmo de busca simples para 3 qubits [5, 50], em umprocessador quˆantico real. Os elementos da lista, nessecaso, s˜ao codificados na base computacional para 3 qubits {| (cid:105) , | (cid:105) , | (cid:105) , | (cid:105) , | (cid:105) , | (cid:105) , | (cid:105) , | (cid:105)} . O Al-goritmo de Grover ´e dividido em 4 partes principais: So-breposi¸c˜ao, Or´aculo, Amplifica¸c˜ao e a Medida [5, 50].Para inicializar os qubits em uma sobreposi¸c˜ao igua-lit´aria, utilizamos o m´etodo apresentado na se¸c˜ao 3.3,aplicando a porta Hadamard em todos os qubits no pro-cesso de inicializa¸c˜ao e obtendo o estado | Ψ (cid:105) = 12 (cid:112) (2) [ | (cid:105) + | (cid:105) + | (cid:105) + | (cid:105) ++ | (cid:105) + | (cid:105) + | (cid:105) + | (cid:105) ] . (29)Entretanto podemos implementar o c´odigo que gera o es-tado da equa¸c˜ao (29) durante a inicializa¸c˜ao do algoritmoprincipal. Antes, podemos construir as duas subrotinasauxiliares que formam o Algoritmo de Grover: o Or´aculoe a Amplifica¸c˜ao.
1. Or´aculo:
A fun¸c˜ao principal do Or´aculo ´e marcar o elemento pro-curado na sobreposi¸c˜ao [5]. Existem diferentes m´etodosque implementam essa subrotina [5], os dois principaiss˜ao o booleano e o de invers˜ao de fase [5, 50]. No m´etodobooleano ´e necess´ario a presen¸ca de um qubit auxiliar( ancilla ) inicializado no estado | (cid:105) , sendo alterado so-mente se a entrada para o circuito for o estado procu-rado. Entretanto, este m´etodo equivalente ao m´etodode marca¸c˜ao do problema de busca cl´assica [5, 50] ´e ´utilpara comparar o poder de computa¸c˜ao de um computa-dor cl´assico frente a um computador quˆantico [50].Como o objetivo desse trabalho ´e mostrar a aplica¸c˜aode algoritmos quˆanticos em um processador quˆantico realusando o Qiskit como uma ferramenta de ensino de com-puta¸c˜ao quˆantica, optamos pelo m´etodo mais simples, om´etodo de invers˜ao de fase [5, 50]. Nesse m´etodo n˜ao pre-cisamos de uma ancilla . A fun¸c˜ao do Or´aculo nesse pro-cesso ´e identificar o elemento procurado na sobreposi¸c˜aoequiprov´avel dos estados da base computacional descritaacima e adicionar uma fase negativa. Nesse contexto, oor´aculo pode ser representado pela opera¸c˜ao unit´aria: U p | x (cid:105) = (cid:40) −| x (cid:105) se x = p, | x (cid:105) se x (cid:54) = p, (30)onde U p ´e uma matriz diagonal que adiciona uma fasenegativa `a entrada que corresponde ao item procurado.7 U p pode ser codificado em um circuito quˆantico depen-dendo do item desejado. Os circuitos que implementama subrotina Or´aculo descrita na equa¸c˜ao (30) em cada es-tado da base computacional para 3 qubits ´e apresentadona referˆencia [50].Suponhamos que o elemento procurado seja | p (cid:105) = | (cid:105) . O circuito que implementa U p ´e a porta Z-multicontrolada que pode ser constru´ıda pela combina¸c˜aoda porta Toffoli e Hadamard, conforme apresentado noBox 27 .Box 27: Iniciando o circuito e definindo o or´aculo q = QuantumRegister(3, 'q') oraculo = QuantumCircuit(q,name = "Or´aculo")oraculo.h(q[2])oraculo.ccx(q[0],[1],q[2])oraculo.h(q[2])oraculo.draw(output = 'mpl') Assim, aplicando a equa¸c˜ao (30) na equa¸c˜ao (29), oestado ap´os a implementa¸c˜ao do Box 27 ser´a: | Ψ oraculo (cid:105) = 12 (cid:112) (2) [ | (cid:105) + | (cid:105) + | (cid:105) + | (cid:105) ++ | (cid:105) + | (cid:105) + | (cid:105) − | (cid:105) ] , (31)adicionando uma fase negativa ao elemento | (cid:105) .A Fig. 18 apresenta o circuito que implementa a su-brotina or´aculo constru´ıdo no Box 27. Figura 18. Or´aculo para encontrar o estado | (cid:105) . Nesse ponto, mesmo tendo indicado o elemento procu-rado com uma fase negativa, a rotina Or´aculo ´e insufi-ciente para obtermos o estado procurado, se realizarmosuma medida em nossa sobreposi¸c˜ao, uma vez que a faseadicionada pelo Or´aculo n˜ao muda a distribui¸c˜ao de pro-babilidades. Vale destacar que n˜ao ´e necess´ario adicionar bits cl´assicos aocircuito pois as medidas s´o s˜ao executadas ao final do algoritmoprincipal.
Precisamos amplificar a probablilidade do elementoprocurado | p (cid:105) para aumentar a chance de encontr´a-lo emuma medida no estado sobreposto, e reduzir as probabi-lidades dos demais estados da base | x (cid:105) , qualquer que seja x (cid:54) = p . Para isso, vamos usar o conhecido processo deAmplifica¸c˜ao de Amplitude [5, 9, 10, 17, 50].
2. Amplifica¸c˜ao de Amplitude
A fun¸c˜ao da amplifica¸c˜ao de amplitude ´e, comoo pr´oprio nome indica, aumentar a probabilidade doelemento marcado pelo Or´aculo no estado | Ψ oraculo (cid:105) ,equa¸c˜ao (31), reduzindo, consequentemente, as probabi-lidades dos demais itens [50]. Esse processo pode serdescrito em 5 subetapas [5, 50]:1. Aplicar a porta Hadamard em todos os qubits doestado | Ψ oraculo (cid:105) , equa¸c˜ao (31), obtendo: | Ψ (cid:105) = 34 | (cid:105)
14 [ | (cid:105) + | (cid:105) − | (cid:105)−−| (cid:105) + | (cid:105) − | (cid:105) + | (cid:105) ] ; (32)2. Aplicar a porta X em todos os qubits do estado | Ψ (cid:105) , obtendo: | Ψ (cid:105) = 34 | (cid:105)
14 [ | (cid:105) − | (cid:105) − | (cid:105) ++ | (cid:105) − | (cid:105) + | (cid:105) + | (cid:105) ] ; (33)3. Aplicar a porta Z-multicontrolada no estado | Ψ (cid:105) ,obtendo: | Ψ (cid:105) = − | (cid:105)
14 [ | (cid:105) − | (cid:105) − | (cid:105) ++ | (cid:105) − | (cid:105) + | (cid:105) + | (cid:105) ] ; (34)4. Aplicar novamente a porta X em todos os qubitsdo estado | Ψ (cid:105) , obtendo: | Ψ (cid:105) = − | (cid:105)
14 [ | (cid:105) + | (cid:105) − | (cid:105) ++ | (cid:105) − | (cid:105) − | (cid:105) + | (cid:105) ] ; (35)5. Finalizando o processo aplicando novamente aporta Hadamard em todos os qubits do estado | Ψ (cid:105) e obtendo o estado final | Ψ (cid:105) = 54 √ | (cid:105) + 14 √ | (cid:105) + | (cid:105) + | (cid:105) ++ | (cid:105) + | (cid:105) + | (cid:105) + | (cid:105) ] . (36)O Box 28 apresenta a constru¸c˜ao do circuito de ampli-fica¸c˜ao, conforme descrito nessas 5 etapas:8Box 28: Criando a rotina de reflex˜ao ampl = QuantumCircuit(q,name = (cid:44) → "Amplifica¸c~ao") (cid:44) → (porta H em todos os qbits) ampl.h([q[0],q[1],q[2]]) (cid:44) → (portas X) ampl.x([q[0],q[1],q[2]])ampl.barrier() ampl.h(q[2])ampl.ccx(q[0],q[1],q[2])ampl.h(q[2])ampl.barrier() (cid:44) → (portas X) ampl.x([q[0],q[1],q[2]]) (cid:44) → (porta H em todos os qbits) ampl.h([q[0],q[1],q[2]])ampl.draw(output = 'mpl') A Fig. 19 apresenta o circuito que implementa a su-brotina de amplifica¸c˜ao de amplitude constru´ıda no Box28.
Figura 19. Circuito de amplifica¸c˜ao de probabilidades para oalgoritmo de Grover de 3 qubits.
Assim, chegamos ao estado final da subrotina de am-plifica¸c˜ao de amplitude, equa¸c˜ao (36). O algoritmo deGrover ´e finalizado realizando uma medida sobre esse es-tado. Como pode ser visto na equa¸c˜ao (36), a probaili-dade de encontrarmos o estado procurado | (cid:105) aumenta,em detrimento das probabilidades dos demais estados dabase computacional para 3 qubits, caracterizando o pro-cesso de amplifica¸c˜ao de amplitude. Se realizarmos umamedida sobre o estado | Ψ (cid:105) , equa¸c˜ao (36), a chance deobtermos o estado | (cid:105) ´e de aproximadamente 78 , N itens, a maximiza¸c˜ao da probabilidadede encontrar o estado procurado ´e obtida repetindo essasduas subrotinals O (cid:16) √ N (cid:17) vezes [5, 50]. Por outro lado, oalgoritmo cl´assico de busca em uma lista n˜ao estruturadaprecisa realizar uma m´edia de N consultas `a lista paraobter o elemento procurado [5, 50].
3. Executando o Algoritmo:
A fig. 20 mostra uma representa¸c˜ao esquem´atica paraa evolu¸c˜ao das amplitudes para cada estado da base com-putacional para 3 qubits em cada etapa do algoritmode Grover: ( i ) a inicializa¸c˜ao cria uma sobreposi¸c˜aoigualit´aria de todos os estados de entrada poss´ıveis {| (cid:105) , | (cid:105) , | (cid:105) , | (cid:105) , | (cid:105) , | (cid:105) , | (cid:105) , | (cid:105)} ; ( ii ) Oor´aculo marca o estado desejado de modo que a ampli-tude do estado procurado | p (cid:105) ser´a negativa enquanto asdemais amplitudes | x (cid:105) s˜ao mantidas inalteradas; ( iii ) aamplifica¸c˜ao aumenta a probabilidade de encontrarmos oestado marcado pelo or´aculo; ( iv ) O processo pode agoraser finalizado realizando medidas sobre todos os qubitsobtendo-se o estado procurado ap´os repetir os passos ii e iii O (cid:16) √ N (cid:17) vezes. Figura 20. Esquematiza¸c˜ao de cada etapa do algoritmo de grover, mostrando a evolu¸c˜ao das amplitudes para cada estado dabase computacional para 3 qubits. | Ψ i (cid:105) , equa¸c˜ao (29). Em seguida, usando o comando grover.append() adicionar as subrotinas Or´aculo e Am-plifica¸c˜ao, criadas nos boxes 27 e 28. Finalmente reali-zamos as medidas e finalizamos o Algoritmo de Groverconforme apresentado no Box 29, a seguir.Box 29: Criando o circuito de busca grover = QuantumCircuit(q,b)grover.h([q[0],q[1],q[2]])grover.barrier()grover.append(oraculo,q)grover.barrier()grover.append(ampl,q)grover.barrier()grover.measure(q,b)grover.draw(output = 'mpl') A fig. 21 apresenta o Algoritmo completo de Grovercom as subrotinas Or´aculo e Amplifica¸c˜ao. (a)(b)
Figura 21. Probabilidade encontrada para o algoritmo degrover.
Finalmente, ap´os as medidas, executamos o algoritmode Grover em um processador quˆantico real e obtemosa distribui¸c˜ao de probabilidade correspondente. Compode ser visto, obtemos o item procurado em 76 , ,
6% de chances deencontrar o elemento procurado com sucesso. Em con-tra partida, classicamente a chance de encontrar um
Figura 22. Distribui¸c˜ao de probabilidade obtida para o algo-ritmo de grover. item em uma lista n˜ao estruturada com N = 8 ele-mentos, executando somente uma consulta a lista, ´e de12 . N/ √ N tentativas, com o m´etodo de amplifica¸c˜ao de amplitudede Grover para o problema de busca [5, 50]. Portanto,a jun¸c˜ao das subrotinas Or´aculo e Amplifica¸c˜ao, paraa constru¸c˜ao do algoritmo de Grover, representam umaacelera¸c˜ao quadr´atica do problema de busca, mostrandoque computadores quˆanticos possuem uma vantagem sig-nificativa se comparados a computadores cl´assicos. V. CONCLUS ˜AO
Nesse trabalho apresentamos o kit de desenvolvimentode software para informa¸c˜ao quˆantica da IBM (
Qiskit )como uma ferramenta de trabalho para o ensino de com-puta¸c˜ao e informa¸c˜ao quˆantica para os cursos de gra-dua¸c˜ao em F´ısica e ´areas afins. O trabalho est´a estru-turado na forma de um roteiro b´asico de sala de aulapara a introdu¸c˜ao de conceitos fundamentais da com-puta¸c˜ao quˆantica, como qubits, portas quˆanticas, ema-ranhamento e algoritmos quˆanticos. Destacamos as prin-cipais condi¸c˜oes para a constru¸c˜ao dos programas e a suaexecu¸c˜ao em processadores quanticos reais, mostrandocomo essa pode ser uma ferramenta poderosa para o en-sino de computa¸c˜ao quˆantica de maneira pr´atica, per-mitindo que os estudantes se tornem agentes ativos naconstru¸c˜ao do conhecimento. Nossos resultados est˜ao deacordo com as previs˜oes te´oricas da literatura para osexemplos abordados, e demonstram que o
Qiskit ´e umaferramenta eficaz tanto para a implementa¸c˜ao e a an´alisede algoritmos quˆanticos simples, quanto para o desenvol-vimento de softwares quˆanticos, atuando como uma lin-0guagem de programa¸c˜ao quˆantica de alto n´ıvel acess´ıvelaos estudantes.
AGRADECIMENTOS
Os autores gostariam de agradecer a toda a equipedo
IBM Research e do
Quantum Education & Open Sci- ence at IBM Quantum pelo acesso ao
Qiskit , e toda acomunidade do
Qiskit pelo suporte prestado ao longo dodesenvolvimento desse trabalho. C. Cruz agradece a W.S. Santana pela leitura do material, a E.H.M. Maschiopelas discuss˜oes proveitosas e aos demais estudantes dadisciplina CET0448 - T´opicos Especiais III: Computa¸c˜aoQuˆantica Aplicada, que mesmo n˜ao participando ativa-mente desse trabalho contribuiram para sua concep¸c˜ao. [1] IBM Quantum Experience https://quantum-computing.ibm.com . [Acessado em: 25-Agosto-2020].[2] ´Emerson M Alves, Francisco DS Gomes, H´ercules S San-tana, and Alan C Santos. Simulating single-spin dyna-mics on an ibm five-qubit chip.
Revista Brasileira deEnsino de F´ısica , 42, 2020.[3] Alan C Santos. O computador quˆantico da ibm e o ibmquantum experience.
Revista Brasileira de Ensino deF´ısica , 39(1), 2017.[4] Wilson RM Rabelo and Maria L´ucia M Costa. Uma abor-dagem pedag´ogica no ensino da computa¸c˜ao quˆanticacom um processador quˆantico de 5-qbits.
Revista Bra-sileira de Ensino de F´ısica , 40(4), 2018.[5] Michael A Nielsen and Isaac Chuang. Quantum compu-tation and quantum information, 2002.[6] Valerio Scarani. Quantum computing.
American Journalof Physics , 66(11):956–960, 1998.[7] Vlatko Vedral and Martin B Plenio. Basics of quantumcomputation.
Progress in Quantum Electronics , 22(1):1–39, 1998.[8] Andrew Steane. Quantum computing.
Reports on Pro-gress in Physics , 61(2):117, 1998.[9] Charles H Bennett and David P DiVincenzo. Quantuminformation and computation. nature , 404(6775):247–255, 2000.[10] Ivan S Oliveira.
F´ısica Quˆantica: fundamentos formalis-mos e aplica¸c˜oes , volume 1. Editora Livraria da F´ısica,2020.[11] Barbara M Terhal. Quantum supremacy, here we come.
Nature Physics , 14(6):530–531, 2018.[12] Aram W Harrow and Ashley Montanaro. Quantum com-putational supremacy.
Nature , 549(7671):203–209, 2017.[13] Giuliano Benenti and Giuliano Strini. Quantum simula-tion of the single-particle schr¨odinger equation.
AmericanJournal of Physics , 76(7):657–662, 2008.[14] Marcelo Archanjo Jos´e, Jos´e Roberto Castilho Piqueira,and Roseli de Deus Lopes. Introdu¸c˜ao `a programa¸c˜aoquˆantica.
Revista Brasileira de Ensino de F´ısica , 35(1):1–9, 2013.[15] D Candela. Undergraduate computational physics pro-jects on quantum computing.
American Journal of Phy-sics , 83(8):688–702, 2015.[16] Serguei Fedortchenko. A quantum teleportation ex-periment for undergraduate students. arXiv preprintarXiv:1607.02398 , 2016.[17] Jairo Ernesto Castillo, Yesenia Sierra, and Nelson L Cu-billos. Classical simulation of grovers quantum algorithm.
Revista Brasileira de Ensino de F´ısica , 42, 2020.[18] Anastasia Perry, Ranbel Sun, Ciaran Hughes, Joshua Isa-acson, and Jessica Turner. Quantum computing as a high school module. arXiv preprint arXiv:1905.00282 , 2019.[19] A. C. Teixeira and E. J. R. Brand˜ao. Internet e demo-cratiza¸c˜ao do conhecimento: repensando o processo deexclus˜ao social.
Revista Novas Tecnologias na Educa¸c˜ao ,1(1):1, 2003.[20] E. V. Faria. A tecnologia da informa¸c˜ao e da comunica¸c˜aocomo ferramenta para a constru¸c˜ao e democratiza¸c˜ao doconhecimento.
Revista Scientia FAER , 1(1):18, 2009.[21] Charles C Tappert, Ronald I Frank, Istvan Barabasi,Avery M Leider, Daniel Evans, and Lewis Westfall. Ex-perience teaching quantum computing. In . Association Supporting Computer Users inEducation, 2019.[22] https://qiskit.org/textbook . [Acessado em: 28-Agosto-2020].[23] https://qiskit.org/documentation . [Acessado em:29-Agosto-2020].[24] https://github.com/Qiskit . [Acessado em: 28-Agosto-2020].[25] H´ector Abraham, AduOffei, Rochisha Agarwal, Is-mail Yunus Akhalwaya, et al. Qiskit: An open-sourceframework for quantum computing, 2019. https://doi.org/10.5281/zenodo.2562110 .[26] Ryan LaRose. Overview and comparison of gate levelquantum software platforms.
Quantum , 3:130, 2019.[27] https://github.com/Qiskit/qiskit-tutorials .[Acessado em: 15-Janeiro-2021].[28] Guido Van Rossum and Fred L. Drake.
Python 3 Refe-rence Manual . CreateSpace, Scotts Valley, CA, 2009.[29] Travis E Oliphant. Python for scientific computing.
Com-puting in Science & Engineering , 9(3):10–20, 2007.[30] Guido Van Rossum and Fred L Drake.
The python lan-guage reference manual . Network Theory Ltd., 2011.[31] Akhil Kadiyala and Ashok Kumar. Applications ofpython to evaluate environmental data science pro-blems.
Environmental Progress & Sustainable Energy ,36(6):1580–1586, 2017.[32] Charles R Harris, K Jarrod Millman, St´efan J van derWalt, Ralf Gommers, Pauli Virtanen, David Courna-peau, Eric Wieser, Julian Taylor, Sebastian Berg, Natha-niel J Smith, et al. Array programming with numpy.
Nature , 585(7825):357–362, 2020.[33] Thomas Kluyver, Benjamin Ragan-Kelley, FernandoP´erez, Brian E Granger, Matthias Bussonnier, JonathanFrederic, Kyle Kelley, Jessica B Hamrick, Jason Grout,Sylvain Corlay, et al. Jupyter notebooks-a publishingformat for reproducible computational workflows. In
EL-PUB , pages 87–90, 2016.[34] https://jupyter.org . [Acessado em: 20-Agosto-2020].[35] Ben Glick and Jens Mache. Using jupyter notebooks tolearn high-performance computing.
Journal of Compu- ting Sciences in Colleges , 34(1):180–188, 2018.[36] Alberto Cardoso, Joaquim Leit˜ao, and C´esar Teixeira.Using the jupyter notebook as a tool to support the te-aching and learning processes in engineering courses. In International Conference on Interactive Collaborative Le-arning , pages 227–236. Springer, 2018.[37] Arturo Z´u˜niga-L´opez and Carlos Avil´es-Cruz. Digitalsignal processing course on jupyter–python notebook forelectronics undergraduates.
Computer Applications inEngineering Education , 28(5):1045–1057, 2020.[38] Jeffrey M Perkel. Why jupyter is data scientists’ compu-tational notebook of choice.
Nature , 563(7732):145–147,2018.[39] Zahid Hussain and Muhammad Siyab Khan. Introducingpython programming for engineering scholars.
INTER-NATIONAL JOURNAL OF COMPUTER SCIENCEAND NETWORK SECURITY , 18(12):26–33, 2018.[40]
Anaconda Software Distribution . Computer software.Vers. 2-2.4.0. Anaconda, Nov. 2016. Web: https://anaconda.com . [Acessado em: 20-Agosto-2020].[41] https://github.com/qiskit-community/qiskit-swift . [Acessado em: 15-Janeiro-2021].[42] https://github.com/qiskit-community/qiskit-js .[Acessado em: 15-Janeiro-2021].[43] John D Hunter. Matplotlib: A 2d graphics environment.
Computing in science & engineering , 9(3):90–95, 2007.[44] Vlatko Vedral et al.
Introduction to quantum informationscience . Oxford University Press on Demand, 2006. [45] Laszlo Gyongyosi and Sandor Imre. A survey on quantumcomputing technology.
Computer Science Review , 31:51–71, 2019.[46] Volnei A Pedroni.
Digital electronics and design withVHDL . Morgan Kaufmann, 2008.[47] DJ Griffiths.
Mecˆanica Quˆantica, 2 ª Edi¸c˜ao . EditoraPearson Education, 2011.[48] J Eldon Whitesitt.
Boolean algebra and its applications .Courier Corporation, 2012.[49] Ryszard Horodecki, Pawe(cid:32)l Horodecki, Micha(cid:32)l Horodecki,and Karol Horodecki. Quantum entanglement.
Reviewsof modern physics , 81(2):865, 2009.[50] Caroline Figgatt, Dmitri Maslov, KA Landsman, Nor-bert Matthias Linke, Shantanu Debnath, and C Monroe.Complete 3-qubit grover search on a programmable quan-tum computer.
Nature communications , 8(1):1–9, 2017.[51] Fr´ed´eric Magniez, Miklos Santha, and Mario Szegedy.Quantum algorithms for the triangle problem.
SIAMJournal on Computing , 37(2):413–424, 2007.[52] Christoph D¨urr, Mark Heiligman, Peter HOyer, andMehdi Mhalla. Quantum query complexity of some graphproblems.
SIAM Journal on Computing , 35(6):1310–1328, 2006.[53] Charles H Bennett, Ethan Bernstein, Gilles Brassard,and Umesh Vazirani. Strengths and weaknesses ofquantum computing.