Computação Quântica para Cientistas da Computação
Published:
EM PRODUÇÃO
Escrevi esse post para pessoas que possuem alguma noção de computação e querem saber o que acontece dentro de um computador quântico, porém assim como eu se deparou com muita física e mesmo depois de lerem muito e assistirem vários vídeos ainda não acharam o que estavam procurando. Como funciona um computador quântico na perspectiva computacional, e não física.
Computação Quântica
Em janeiro de 2019 a IBM anunciou seu primeiro, e até então único, computador quântico “comercial”. Bom, então agora que ele existe, toda nossa criptografia foi ameaçada e vamos resolver problemas que só sonhávamos em resolver… mas não é bem assim. O IBM Q System One, com seus 20 qbits(ainda vamos chegar lá), está mais para um símbolo. Ele não consegue superar um computador tradicional em problemas úteis, e mesmo que você queira um programa não útil rodadando em um computador quântico só para ver como é, isso pode se tornar uma tarefa bem difícil. E não digo pelo acesso à um computador quantico, a IBM disponibiliza um para qualquer pessoa usar no IBM Q Experience, o problema é entender o modelo de computação dele o suficiente para contruir um algoritmo e significar os resultados do seu programa.
Para isso vamos passar por alguns conceitos nesse post.
Qbits
Em um computador tradicional trabalhamos com bits, a menor unidade de mémoria que pode representar um Zero(0) ou um Um(1). No computador quantico temos o bit quântico, que também pode representar um Zero(0) ou um Um(1). Vamos chamar o bit clássico de cbit e o bit quântico de qbit.
Podemos dizer que o Qbit Zero(0) é representado pelo vetor abaixo:
ou em uma notação um pouco diferente
|0>
E o Qbit Um(1) por esse outro vetor:
ou em uma notação um pouco diferente
|1>
Agora as coisas começam a ficar mais parecidas com uma copmutação tradicional.
Operações com bits
Com cbits conseguimos fazer 4 operações clássicas:
- Identidade: $f(x) = x$
- Negação: $f(x) = \neg x$
- Constatante 0: $f(x) = 0$
- Constante 1: $f(x) = 1$
E podemos escrever essas operações como matrizes para aplica-las aos qbits:
Identidade:
O Qbit 0 continua 0 e o Qbit 1 continua 1
ou
Negação:
O Qbit 0 se torna 1 e o Qbit 1 se torna 0
ou
Constatante 0:
O Qbit 0 continua 0 e o Qbit 1 se torna 0
ou
Constatante 1:
O Qbit 0 se torna 1 e o Qbit 1 continua 1
ou
Vamos dar guardar essas 4 operações retornamos para elas mais tarde.
Computação Reversível
Agora precisamos saber entender o conceito de Computação Reversível.
No resumo, significa que se você sabe a operação que foi realizada e o resultado dessa operação, você consegue descobrir a entrada que foi utilizada. Um bom exemplo seria: se temos a operação de negação realizada e o resultado for 1, então a entrada tem que ser 0
$ \neg X = 1 \Leftrightarrow X = 0 $
Seguindo essa lógica percebemos que as operações de Identidade e Negação são reversíveis e as de Constante não!
Outra coisa importante de saber agora é que a computação quântica use exclusivamente operações que são reversíveis, e que todas os operadores quânticos são seus próprios inversos. Então se você aplicar um operador à uma entrada e novamente ao resultado, o resultado da segunda operação vai ser a própria entrada
$ f(f(X)) = X $
A operação de Negação é um bom exemplo para isso também
$ \neg(\neg X) = X $
Produto de tensores
Ok, sabendo de tudo isso vamos estudar outra operação, o produto de tensores. No resumo ela funciona seguindo a regra abaixo, pelo menos para os propósitos dessse blog.
E pra que precisamos saber disso ? Bom, na computação tradicional conseguimos representar um valor com dois ou mais cbits (00
, 011
, 1110
), mas na computação quântica representar um valor com dois qbits é um pouco diferente. O valor de dois qbits |10>
é o produto de tensores entre os qbits |1>
e |0>
$ |10> = |0>\otimes|1> $
ou, na forma matricial
o que também vale para uma quantidade maior de qbits
E essa também é uma operação reversível, dado um vetor |10>
podemos fatora-los nos qbits |1>
e |0>
.
Operação CNot
Uma operação bem útil com bits é a negação condicional, também chamada de CNot. Ela recebe dois bits, um de controle e um é a entrada. Caso o bit de controle seja 1, a entrafa é negada, caso o bit de controle seja zero, a entrada continua igual. Assim como as outras operações, ela pode ser representada como uma matriz
Como podemos ver, essa operação além de ser reversível é a sua própria inversa.
E assim como na computação tradicional a porta NAND é usada para construir operações mais complexas e interessantes, usaremos o CNOT para contruir operações mais interessantes e complexas na computação quântica.
Recapitulando
- Aprendemos a representar bits na forma vetorial
- Aprendemos a fazer operações nesses bits com multiplicações
- Sabemos que a computação quântica só usa operações reversíveis, e essas operações - são seus próprios inversos
- Aprendemos que estados com mais de um bit são o produto de tensores entres os bits individuais.
- E por fim aprendemos o CNOT
Qbits e Superposição
Um qbit é representado por um vetor onde a e b são números complexos e $\left | a \right |^2 + \left | b \right |^2 = 1$
os vetores e
que vimos até agora se encaixam nessa definição.
Mas não se preocupe com a parte complexa desses números, neste blog só vamos usar números reais :)
Outros exemplos de Qbits são:
Mas se significa 0 e
significa 1, o que seria
? Ele é um qbit em superposição
Quando temos essa superposição, signica que ele é tanto 0 quanto 1, e nesse estado é como se a computação esteja sendo feita tanto para 0 quanto para 1. Mas isso não é um resultado útil neh ? Ao final de toda computação quantica precisamos passar nossos qbits por uma operação de medição, que colapsa esse qbit ou para 0 ou para 1.
Um qbit colapsa para 0 com probabilidade $\left | a \right |^2$ e colapsa para 1 com probabilidade $\left | b \right |^2$.
Então quando falamos que o qbit significa 1, na verdade estavamos dizendo que ele tem probabilidade 0 de colapsar para o valor 0 tem probabilidade 1 de colapsar para o valor 1 quando for medido.
Um qbit tem probabilidade 0.5 de colapsar para 0 e probabilidade 0.5 de colapsar para 1.
Note também que podemos ter multiplos qbits em superposição usando o produto de tensores
Note que $\left | \frac{1}{2} \right |^2 = \frac{1}{4}$, e $\frac{1}{4}+\frac{1}{4}+\frac{1}{4}+\frac{1}{4} = 1$, então esse qbit tem probabilidade 1/4 de colapsar para $\left|00\right>$, $\left|01\right>$, $\left|10\right>$, $\left|11\right>$.
Hadamard Gate
Agora que sabemos da existência da superposição, como colocamos nossos bits nesse estado ? Para isso usamos outra operação quântica, o Hadamard Gate. Assim como as outras operações ele é representado por uma matriz, e sua função é colocar qbits $\left|0\right>$ e $\left|1\right>$ na mesma superposição.
É interessante notar que o $\frac{-1}{\sqrt{2}}$ aparentemente é desnecessário, mas ele serve para deixar a operação reversível, caso contrário tanto a operação com $\left|0\right>$ quanto com $\left|1\right>$ teriam o mesmo resultado.
Lembrando agora das propriedades das operações, elas também são seus próprios inversos, então o Hadamard gate conseguie tirar um qbit da superposição sem realizar de fato uma medição desse qbit. Dessa maneira podemos estruturar a computação quantica de forma determinística em vez de probabilística!
Então podemos iniciar nossos bits como se fossem cbits clássicos, levalos para superposução, fazemos as operações quânticas que desejarmos e no final transitamos eles de volta para os valores de cbits clássicos, fazendo com que a computação como um todo fosse determinística. Bem massa neh :)