Computação quântica 101: Introdução

As implicações do fenômeno quântico em diversas áreas do conhecimento humano são, no mínimo, fascinantes e valem o esforço cognitivo. 

A primeira vez em que conversei com um físico sobre mecânica quântica, ouvi a seguinte frase: “se alguém te falar que é possível você começar a conhecer esse assunto em menos de dez anos, é mentira”. Na minha arrogância juvenil respondi que não tinha interesse na física quântica propriamente dita, tinha interesse em algumas propriedades dela que alguns cientistas da computação achavam adaptáveis à teoria da computação. Esse físico me olhou, como se já tivesse passado por essa situação um milhão de vezes, sorriu e disse “você não vai começar a entender isso em menos de dez anos”. Hoje, com o prazo estimado quase esgotado, posso afirmar que sei muito pouco do assunto. Mas posso também afirmar que não é um privilégio meu. De qualquer forma, as implicações do fenômeno quântico em diversas áreas do conhecimento humano são, no mínimo, fascinantes e valem o esforço cognitivo. 

Trocando em miúdos, um computador quântico é uma máquina que usa o fenômeno quântico para guardar informações e realizar computações [1]. A ideia surgiu de um paper escrito no início dos anos 1980 por Richard Feynman. Feynman sugeriu que, ao se manipular as propriedades da mecânica quântica e das partículas quânticas, seria possível desenvolver um tipo inteiramente novo de computador, que não poderia ser descrito pela teoria clássica da computação, com máquinas de Turing [1] [2]. O racional da ideia original se baseava no fato de que a natureza não executa explicitamente os cálculos para determinar a velocidade de uma bola lançada de um prédio, por exemplo, ela o faz implicitamente. Estendendo essa linha de raciocínio, Feynman se perguntou se seria possível aproveitar os cálculos complexos que a natureza realiza intrinsecamente na mecânica quântica para projetar um computador com mais poder computacional [2]. Essa máquina, que ele chamou de computador quântico [2], daria origem a dois ramos de estudos: (1) a ciência da computação quântica, na qual algoritmos e suas complexidades são analisados por meio de uma abordagem baseada na ciência da computação, e (2) a teoria da informação quântica, na qual protocolos específicos de transmissão de dados são examinados do ponto de vista da teoria da informação e suas propriedades e limites são estudados [3, p.2]. 

Não sei se seria prudente começar a explicar computação quântica sem falar antes de mecânica quântica, mas creio que há pessoas mais qualificadas para explicar o assunto. Por isso deixo o link de uma palestra que gosto muito, do Sean Carroll , disponível no YouTube (infelizmente sem legenda) e a entrada sobre o tópico na Wikipédia em português. Tratarei do assunto sem muito aprofundamento. De qualquer maneira, gostaria de reproduzir uma explicação do Scott Aaronson, tirada do seu livro Quantum Computing since Democritus [4], que penso ser bastante esclarecedora. Aaronson começa o livro contando uma das poucas passagens escritas por Demócrito que sobreviveram até os nossos dias (conhecemos sua obra mais por citações feitas por outros filósofos da antiguidade). A passagem trata de um diálogo entre o intelecto e os sentidos. O intelecto começa dizendo “por convenção há doçura, por convenção amargor, por convenção cor, na realidade apenas átomos e o vazio”. Ao que os sentidos respondem, “intelecto tolo! Você procura nos derrubar, enquanto é de nós que você tira sua evidência? ”. Mas, o que este diálogo tem a ver com um ramo da ciência que começou a se desenvolver quase 2.400 anos após sua escrita? 

Bom, para qualquer região isolada do universo, é possível descrever a evolução do seu estado no tempo, por meio da mecânica quântica. Representamos esse estado como uma combinação linear – uma superposição – de todas as configurações possíveis de partículas elementares existentes naquela região. Como resultado, temos uma imagem um tanto bizarra da realidade, onde uma dada partícula não está necessariamente aqui ou acolá, mas em uma espécie de soma ponderada de todos os lugares em que poderia estar. É estranho, admito, mas funciona. E isto pode ser descrito, muito adequadamente, como os “átomos e o vazio” de que falou Demócrito.

Como algo que basicamente afirma que “tudo o que pode acontecer” (superposição), provavelmente acontece, pode ser usado para fazer cálculos ou predições? Há uma regrinha que ainda não comentei. Essa regrinha diz, basicamente, que o ato de “olhar” (medir) uma partícula, a força a decidir aonde quer aparecer. A partícula “toma essa decisão” probabilisticamente. Quando a “decisão é tomada”, ocorre o que se chama de colapso. Essa natureza probabilística da partícula atribui a ela uma característica de onda. Há um experimento clássico (o experimento da fenda dupla) que demonstra essa característica dupla de partícula-onda. O experimento consiste em disparar um facho de luz em linha reta por um pano com uma fenda. Ao atingir uma tela do outro lado, é possível ver um padrão correspondente ao tamanho e forma da fenda. No entanto, se ao invés de uma fenda no pano, tivermos duas fendas, o padrão visto na tela será de difração, no qual a luz é espalhada. Quanto menor for a fenda, maior será o ângulo de propagação (como na Fig 1). O que acontece, ao se medir, é o colapso da função de onda. É importante comentar que estou seguindo a interpretação de Copenhagen aqui. Há outras interpretações possíveis para a mecânica quântica, mas é a de Copenhagen que foi usada para fazer a generalização quântica da ciência da computação. Neste sentido, a interpretação é usada como uma ferramenta. Em uma palestra do Scott Aaronson a que assisti, ele se refere à mecânica quântica (Copenhagen style) como o “sistema operacional” da natureza  e todo o restante funcionaria como apps dentro desse SO (é o tipo de analogia que o pessoal de computação adora ). Ainda assim, a minha preferida é a interpretação conhecida como Muitos Mundos

1280px Double slit.svg
Fig 1: Experimento da fenda dupla. Fonte Wikipedia.

Preciso reforçar que o colapso da função de onda se refere meramente ao enfoque em um único estado quântico (dentro do estado de superposição) e à probabilidade correspondente da partícula de estar nesse estado (ou conjunto único) de números quânticos. Os estados quânticos não são objetos literais que existem na realidade, eles são simplesmente possibilidades numéricas de uma quantidade observável que uma partícula pode assumir.  O objetivo da computação quântica é “colocar” um computador em superposição. Outro conceito importante é o do chamado “emaranhamento” (entanglement). O emaranhamento é um fenômeno da mecânica quântica em que os estados de dois ou mais objetos devem ser necessariamente descritos com referência um ao outro, mesmo que os objetos estejam separados espacialmente. Isso leva a correlações entre as propriedades físicas observáveis dos sistemas, onde as medições realizadas em um sistema parecem influenciar instantaneamente outros sistemas emaranhados a ele. Assim, o estado de qualquer sistema físico isolado seria um vetor de números complexos chamado amplitude [4]. Além da medição, é possível aplicar transformações lineares sem-preservação (conhecidas como unitary transformations) a esses vetores de números complexos. Essas transformações (unitary transformations) funcionam como portas lógicas em circuitos elétricos (veremos nos próximos parágrafos, não se preocupe), para tal criam uma interferência nas amplitudes, podendo somá-las ou cancelá-las.

Ainda há uma pequena parada a fazer antes de entrarmos em computação quântica propriamente dita. Para poder entender mais claramente essa história, é preciso também entender como um computador clássico (ou seja, não quântico) funciona. Um computador clássico opera com sequências de zeros e uns [3], convertendo-as em outras sequências. Cada posição em uma sequência de caracteres (que chamamos de string) é denominada bit (significa binary digit) e, de maneira não surpreendente, contém 0 ou 1. Para representar essas coleções de bits, o computador deve conter uma coleção correspondente de sistemas físicos, cada um dos quais pode existir em dois estados físicos inequivocamente distinguíveis, associados aos valores 0 ou 1 do bit abstrato que o sistema físico representa [3]. Tal sistema físico poderia ser, por exemplo, um interruptor aberto (0) ou fechado (1), ou um ímã cuja magnetização poderia ser orientada em duas direções diferentes, “para cima” (0) ou “para baixo” (1). Na Figura 2 temos um exemplo de bus switch de 8 bits. Na arquitetura de computadores, um bus é um sistema de comunicação que transfere dados entre componentes dentro de um computador (ou entre computadores). Repare que o bus pode estar aberto ou fechado (daí o termo switch – interruptor). Na Fig.2, temos todas as portas abertas (A1-B1, A2-B2,…, A8-B8). As portas, ou gates, controlam o fluxo da corrente elétrica pelos circuitos. Esse controle é feito pelas chamadas portas lógicas (logic gates).

8 bits switch
Fig 2: Exemplo de bus switch de 8 bits. Fonte: eeweb.

O bit é uma base binária. Você provavelmente não encontrará muito uso para combinações binárias no seu dia-a-dia, mas é útil entender que é assim que os computadores funcionam internamente para que possa entender conceitos como transmissão paralela, por exemplo (paralelismo, aliás, é um conceito muito presente na computação clássica, como na estratégia de “testar” todas as respostas possíveis em paralelo). O fato de os computadores usarem binários explica o porquê de tudo ser múltiplo de 2. É por isso que vêm com 8 MB, 16 MB, 32 MB, 64 MB, 128 MB de memória e não com 10 MB, 20 MB, 30 MB e 100 MB. É por isso também que há 1024 bytes em um kilobyte (1024 = 2^10 – 2 elevado a 10) em vez de 1000 bytes. O uso principal da base binária é na combinação com as técnicas de lógica binária (bitwise logic) para juntar e dividir valores armazenados no mesmo byte. 

Em um circuito, as portas lógicas tomam decisões com base em uma combinação de sinais digitais vindos das suas entradas. A maioria das portas lógicas tem duas entradas e uma saída e funcionam baseadas na álgebra booleana com os operadores (AND, OR, NOT). A qualquer momento, cada terminal está em uma das duas condições binárias, “0” ou “1”. Dependendo do tipo de porta lógica que está sendo usada e da combinação de entradas, a saída binária será diferente. As portas lógicas são comumente usadas em circuitos integrados (CI) e podem ser consideradas como os interruptores de luz nas nossas casas, em que em uma posição (e.g., na cozinha) a saída está desligada (0) e, em outra (e.g., na sala), está ligada (1). 

No caso da computação quântica, não se usa o bit e sim o qubit. Embora o termo siga a regra gramatical presente em diversas línguas (como o português, inglês, italiano e alemão) de que a letra “q” deve ser seguida de “u”, ignora solenemente o requisito de que “qu” deve necessariamente ser seguido por uma vogal. Alguns intuem que o termo ganhou adesão por soar parecido com uma unidade obsoleta de medida, o cubit (em português, côvado) [3]. Feito o desagravo, prefiro seguir com a nomenclatura do Nathaniel David Mermin e diferenciar o bit clássico do qubit por Cbit (clássico) e Qbit (qubit). O motivo é devido à estratégia usada para ensinar o suficiente de mecânica quântica para pessoas com conhecimentos matemáticos, mas sem formação em física, para que possam entender e desenvolver algoritmos em computação quântica e teoria da informação quântica. A ideia é reformular a linguagem de computação convencional para poder apresentar o formalismo quântico de maneira familiar. Isso é feito usando-se bits clássicos em espaços vetoriais (Cbits) para representar sua generalização quântica (Qbits). Para tal, é empregada a notação de Dirac, também conhecida como notação Bra-Ket. Assim, a base binária computacional clássica “0” e “1” é representada por |0 > e |1> [5]. Pronuncia-se ket 0 e ket 1.

Antes de continuar, preciso fazer um disclaimer. Assim como o físico que conheço me alertou de que precisaria de tempo e dedicação para começar a entender a mecânica quântica, também é necessário tempo e dedicação para entender a computação clássica. Alguns dos pontos que considero essenciais para um bom entendimento da generalização quântica da computação clássica são: lógica computacional, complexidade computacional, aleatoriedade, amplitude e criptografia. Deixei links das entradas na Wikipedia sobre os assuntos, mas, carxs leitorxs, podem escolher a forma de aprendizado que for mais conveniente. Para as explicações abaixo, me baseio fortemente nas referências [3], [4] e [5].

Os computadores quânticos realizam uma boa parte do seu trabalho por meio de operações reversíveis usando as portas quânticas (quantum gates), que transformam o estado inicial dos Qbits em sua forma final usando apenas processos cuja ação possa ser invertida (lembra, aberto/fechado ou em cima/em baixo). O único componente irreversível para operações em um computador quântico é a medição. Esta é a única maneira de extrair informações úteis dos Qbits depois que seu estado adquiriu sua forma final. Embora a medição seja uma parte essencial de qualquer computação quântica, em um computador clássico a extração de informações do estado dos Cbits não é vista como uma parte inerente do processo computacional, embora seja, claro, uma preocupação para aqueles que projetam monitores ou impressoras digitais. Para entender a computação quântica, não há como evitar os quantum gates (vou usar a expressão em inglês por conta da minha familiaridade com ela). Os quantum gates são portas lógicas (como as que vimos algumas linhas acima). Isso quer dizer que são controlados pelos operadores booleanos (AND, OR, NOT). A diferença deles para as portas lógicas clássicas é que os quantum gates podem utilizar dois aspectos-chave da mecânica quântica que estão totalmente fora do alcance da sua contraparte na computação clássica: superposição e emaranhamento. Outro aspecto importante na sua diferenciação das portas lógicas clássicas, e comentado no início do parágrafo, é a reversibilidade.

O fato dos quantum gates serem reversíveis significa que eles possuem uma espécie de atalho “ctrl + z”, que desfaz a ação anterior. Isto quer dizer que, ao menos em princípio, os quantum gates não perdem informações. A razão é que os Qbits que estão emaranhados quando “entram” em um quantum gate permanecem emaranhados na “saída”, mantendo suas informações “seladas” em segurança durante a transição. Muitas das portas clássicas encontradas em computadores convencionais, por outro lado, perdem informações e, portanto, não se pode refazer seus passos. Essas informações são perdidas na forma de energia e transmitem calor, é por isso que um computador clássico esquenta (quem já trabalhou com um notebook no colo provavelmente já sentiu o processo na pele).

Os conceitos de vetor e matriz são essenciais para entender os quantum gates. O vetor é representado pela notação de Dirac e, para simplificar, nos referimos a ele pelo nome de vetor ket (de Bra-Ket). Um vetor ket |u>, significa que “u” representa os valores existentes no vetor. Chegou o momento de explicar os dois kets |0> e |1>. Eles representam elétrons nos estados de spin-up (|0>) e spin-down (|1>). Os vetores podem abranger qualquer quantidade de números, mas no caso de representarem um estado binário (como Qbits spin-up/spin-down sendo representados por Cbits), eles abrangem apenas dois (0 e 1) e se parecem mais a números empilhados de dois em dois. Assim, |0> se parece na realidade com a representação abaixo:

/ 1 \

\ 0 /

O que o quantum gate torna possível é a transformação do elétron de um estado quântico a outro, como por exemplo, de um estado de spin-up (|0>) para spin-down (|1>):

/ 1 \ → / 0 \

\ 0 / → \ 1 /

Os exemplos acima representam operações aplicadas a um Cbit apenas. Essas transformações são feitas usando-se a multiplicação de matrizes. Citei acima a característica da reversibilidade das operações em computação quântica e que a única operação irreversível é a extração de suas informações por meio da medição. Em uma operação reversível (como a de spin-up para spin-down), cada estado final surge de um estado inicial único. No caso da medição, por exemplo, ela pode ser usada para a operação irreversível ERASE, que força um Cbit a adquirir um estado |0>, independente do seu estado inicial ser |0> ou |1>. ERASE é irreversível no sentido de que, dado apenas o estado final e o fato de ser uma saída operacional (ERASE), não há como recuperar o seu estado inicial.

Existem apenas duas operações reversíveis que podemos aplicar a um único Cbit, uma trivial e outra não trivial. A operação trivial é a que comunica ao computador “não faça nada” (DO NOTHING), identificada pelo operador “1”. A operação reversível não trivial é a operação NOT, denotada pelo símbolo X, que troca os dois estados |0> e |1>. A operação NOT, também chamada de flipping, é reversível porque pode ser invertida. Na lógica, o operador “não” inverte o sentido da sentença. Por exemplo, um “não” seguido de outro “não” significa “sim”, porque é considerado a negação do “não” – que obviamente é o “sim”. Abaixo, exemplos das duas operações. 

DO NOTHING: 1 |0> = |0>, 1 |1> = |1>.

NOT: X |0> = |1>, X |1> = |0>.

Um único Qbit spin-up ou spin-down corresponde a um espaço de Hilbert bidimensional. Se tivermos N-Qbits, o espaço de Hilbert correspondente terá 2 potências N dimensionais (é preciso ser múltiplo de 2, lembra?). Aqui temos 2^N (2 elevado a N). O tamanho do espaço de Hilbert aumenta exponencialmente à medida que incluímos mais partículas. Para dois ou mais Cbits há bem mais operações. A Wikipedia em inglês tem uma boa explicação sobre o assunto (Quantum Logic Gates). É possível, por exemplo, trocar os valores dos Cbits com o operador SWAP, representado pela letra S.

SWAP: S |xy> = |yx>.

A representação de dois Qbits por dois Cbits se dá em um espaço vetorial linear quadridimensional abrangido pelos seguintes estados de base do produto (Fig. 3):

Fig3
Fig 3: Representação em espaço vetorial de dois Qbits. Fonte: Wikipedia.

Quem teve a oportunidade de olhar a entrada da Wikipedia sobre Quantum Logic Gates, pode ter percebido dois tipos de quantum gates chamados Hadamard e Toffoli. Foi demostrado em [6] que estes dois tipos constituem uma espécie de conjunto universal de quantum gates [4], o que significa, informalmente, que eles possuem todas as operações de que se precisa para fazer um computador quântico funcionar. Com isso, podemos usá-los para aproximar qualquer outro tipo de quantum gate arbitrariamente. Posteriormente, ficou provado pelo teorema de Solovay-Kitaev que qualquer conjunto universal de quantum gates pode simular qualquer outro conjunto universal de maneira eficiente [7]. De forma que, não importa se a sua escolha é Hadamard ou Toffoli, desde que esteja dentro da teoria da complexidade computacional, você consegue manipular um computador quântico. Exatamente como, na computação clássica, se pode manipular circuitos usando-se portas AND, OR e NOT. Assim, qualquer conjunto de um ou dois Cbits será universal e poderá ser usado para representar circuitos com um ou dois Qbits. 

A importância de conhecermos esse assunto mais técnico se dá pelo fato de ainda não estarmos em um estágio tão avançado em programação computacional quântica. Diferentemente da computação clássica, em que as linguagens de programação facilitaram enormemente o trabalho de se comunicar com um computador, na computação quântica, a “programação” acontece por meio da construção de circuitos elétricos e manipulação dos quantum gates. Embora já seja possível programar “computadores quânticos” usando a linguagem Python e o IBM quantum (com o framework Qiskit), o processo funciona mais por meio de simulações de computadores quânticos em computadores clássicos, com o apoio do hardware quântico da IBM via API.

Para início de conversa, creio que está bom. Há muitos pontos interessantes em computação quântica que podem ser úteis para a computação clássica. Até muito pouco tempo atrás, usava-se o termo “supremacia quântica” para descrever a potencialidade desse tipo de computação sobre a clássica (comento um pouco sobre isso no texto “o futuro da ciência de dados”). Hoje, tem caído em desuso por dois motivos. O primeiro é que, em uma abordagem pós-estruturalista, o próprio termo traz uma carga negativa. O segundo é que o termo é simplesmente falso. Não se crê mais que os computadores quânticos substituirão os computadores clássicos e sim, que trabalharão em conjunto ou mesclados (como no caso do framework da IBM). Mesmo porque, para se confirmar a “vantagem” quântica, não basta o computador quântico realizar a tarefa mais rápido que o computador clássico, é preciso que o faça usando a sua característica de superposição. Possivelmente você não lerá este texto, no futuro, em um computador quântico. Ele provavelmente será usado para tarefas que são difíceis de serem processadas em computadores clássicos, como simular sistemas quânticos complexos (por exemplo, moléculas biológicas) ou fatorar números incrivelmente grandes (para uso em criptografia). 

Minha ideia é desenvolver, ao longo dos próximos meses, mais textos a respeito do assunto e também sobre teoria da informação quântica – essencial para aumentar a velocidade de transmissão e permitir a produção de energia fora do nosso planeta, como no caso dos discos solares que podem gerar energia para a Terra [8], proposta pela Agência Espacial Europeia. Vou numerando os textos ao modo do sistema de numeração de disciplinas em cursos universitários. O número 101, por exemplo, é usado para um curso introdutório em um nível iniciante.

Referências

[1] Jaden Pieper and Manuel E. Lladser. Quantum Computation. Scholarpedia, 13(2):52499. (2018). 
[2] R. P. Feynman. Simulating physics with computers. International Journal of Theoretical Physics, 21(6):467–488, (1982).
[3] Masahito Hayashi. Quantum Information: An Introduction. Springer-Verlag. (2006).
[4] Scott Aaronson. Quantum Computing since Democritus. Cambridge University Press, USA. (2013).
[5] N. David Mermin. From Cbits to Qbits: Teaching computer scientists quantum mechanics. American Journal of Physics 71, 23-30 (2003).
[6] Yaoyun Shi. Both Toffoli and Controlled-NOT need little help to do universal quantum computation. arXiv:quant-ph/0205115. arXiv.org, http://arxiv.org/abs/quant-ph/0205115. (2002).
[7] Christopher M. Dawson and Michael A. Nielsen. The Solovay-Kitaev algorithm. arXiv:quant-ph/0505030. arXiv.org, http://arxiv.org/abs/quant-ph/0505030. (2005).
[8] Amanda Jane Hughes and Stefania Soldini. The Solar Discs That Could Power Earth. BBC The Conversation. https://www.bbc.com/future/article/20201126-the-solar-discs-that-could-beam-power-from-space. (2020).
Receba nossos posts GRÁTIS!
Deixe um comentário

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More