Computação quântica 101: Quantum gates

Para processar informações, é necessário que um computador tenha a possibilidade de modificar seus bits (caso contrário a máquina não teria lá muita utilidade). Para tal, são usados circuitos computacionais. Os circuitos dos computadores clássicos consistem em semicondutores e portas lógicas. Os semicondutores são usados para transportar informações pelo circuito, enquanto as portas lógicas realizam manipulações das informações, convertendo os sinais digitais provenientes de suas entradas [1]. Na computação clássica, uma porta implementa operações binárias em entradas binárias, transformando zeros em uns e vice-versa [2]. 

Para exemplificar a ação da porta lógica, peguemos portas de entrada únicas, que podem receber uma entrada (0 ou 1) e fornecer uma saída (0 ou 1). De uma maneira geral, portas lógicas são definidas por tabelas verdade. A tabela verdade corresponde às saídas de um sistema para todas as combinações de entrada. Uma porta de entrada única que recebe um 0 como entrada e produz um 0 como saída, ou recebe um 1 e produz um 1, não realiza nada – poderia muito bem não estar no circuito. Esse tipo de operação que não produz um resultado, é chamada de trivial. Uma porta que recebe um 0 como entrada e produz um 1, ou recebe um 1 e produz um 0 pode ser útil em um circuito. Neste caso, dizemos que realiza operações não triviais. No exemplo de portas de entrada únicas, somente há uma operação lógica de Cbit não trivial, a operação NOT, que leva de 0 a 1 e de 1 a 0. 

O que governa a saída é uma função booleana. Sei que o termo pode soar como algo misterioso e um tanto complicado, mas acredite em mim, não é. Pense em uma função booleana como uma regra de como responder a perguntas de Sim/Não (1 para Sim e 0 para Não). É simples assim. Como vimos, as portas são então combinadas em circuitos e os circuitos em CPUs ou outros componentes computacionais. 

De maneira similar, os quantum gates são os blocos de construção básicos dos computadores quânticos e realizam as manipulações das informações. Na computação quântica a situação envolvendo a manipulação das informações é bem diferente da clássica, porque os Qbits podem existir em superposições de 0 e 1 e estar emaranhados (falei um pouco sobre os dois conceitos no primeiro texto desta série). Há ainda um outro conceito menos conhecido que talvez seja igualmente importante para essa manipulação: a reversibilidade. Trocando em miúdos, os quantum gates são reversíveis. Se você resolver avançar na computação quântica, aprenderá muito sobre reversibilidade. Por enquanto, mantenha em mente que todos os quantum gates vêm “de fábrica” com um botão de “desfazer”. 

Não podemos falar de quantum gates sem falar de matrizes, e não podemos falar de matrizes sem falar de vetores. Vimos anteriormente (texto introdução e texto postulados) que na linguagem da mecânica e da computação quântica, os vetores são descritos em um pacote chamado ket. Para começar, usaremos dois kets, |0> e |1>, que substituirão os Qbits na forma de elétrons nos estados spin-up (|0>) e spin-down (|1>) . Esses vetores podem abranger qualquer quantidade de números, por assim dizer. Mas no caso de um estado binário, como um Qbit de elétrons de spin up/down, eles têm apenas dois. Então, em vez de se parecerem com vetores de colunas imponentes, eles estão mais para números empilhados em duas alturas. Por exemplo, |0> representa o seguinte empilhamento:

/ 1 \
\ 0 /

O que os quantum gates fazem é transformar esses kets (coluna de números em vetores) em novos kets. Quando isso acontece, dizemos que eles passaram de um estado a outro. Essa mágica acontece por meio da multiplicação de matrizes. É importante lembrar que o produto de duas matrizes é definido somente quando o número de colunas da primeira matriz é igual ao número de linhas da segunda matriz. Desta forma, pode-se usar a definição como direcionador e multiplicar as linhas da segunda matriz pelas colunas da primeira. As Figuras 1 a 7, mostram como acontece esse processo. 

Figura 1: Multiplicação de matrizes. Fonte: http://matrixmultiplication.xyz/
Figura 2: Multiplicação de matrizes. Fonte: http://matrixmultiplication.xyz/ 
Figura 3: Multiplicação de matrizes. Fonte: http://matrixmultiplication.xyz/ 
Figura 4: Multiplicação de matrizes. Fonte: http://matrixmultiplication.xyz/
Figura 5: Multiplicação de matrizes. Fonte: http://matrixmultiplication.xyz/
Figura 6: Multiplicação de matrizes. Fonte: http://matrixmultiplication.xyz/
Figura 7: Multiplicação de matrizes. Fonte: http://matrixmultiplication.xyz/

Geralmente usamos uma matriz para substituir um quantum gate. O tamanho total da matriz dependerá do número de Qbits que se está operando. Se estivermos tratando da transformação de apenas um Qbit, a matriz será agradável e simples (2 x 2 com quatro elementos). Se temos dois, três ou mais Qbits, o tamanho da matriz explode. Isso ocorre, porque o tamanho da matriz (e, portanto, a sofisticação do quantum gate) é definido por uma equação decididamente exponencial:

2ⁿ x 2ⁿ = total de elementos da matriz

É por esse motivo que, para mantermos a didática da explicação, limitamos os exemplos a apenas um Qbit.

Há diversos tipos de quantum gates, mas pretendo me concentrar nos Pauli gates e no  Hadamard gate, que são muito utilizados na computação quântica para o ensino das operações com as portas lógicas por serem algumas das mais empregadas. Os Pauli gates são importantes devido ao fato das propriedades essenciais dos quantum gates decorrerem da possibilidade deles serem descritos por matrizes unitárias (quando sua matriz inversa é igual ao seu conjugado transposto) que possuem propriedade hermitiana, exatamente as características dos Paulis. O Hadamard gate pode ser usado para converter o Qbit do estado de agrupamento para o estado superposto uniforme. 

Pauli gates

Para início de conversa, vale dizer que essas portas foram nomeadas em homenagem ao físico Wolfgang Pauli, que se imortalizou por conta de dois dos conceitos mais conhecidos da física moderna: o célebre princípio de exclusão de Pauli e o temido efeito Pauli. Os Pauli gates são baseados nas super conhecidas matrizes de Pauli, que são incrivelmente úteis para calcular mudanças no spin de um único elétron. Como o spin do elétron é a propriedade preferida usada para transformar um Qbit nos quantum gates atuais, conhecer as matrizes de Pauli e seus quantum gates é importantíssimo para quem quer manipular computadores quânticos. De qualquer forma, existe essencialmente um gate/matriz de Pauli para cada eixo no espaço (X, Y e Z), como pode ser visto na Figura 8.

pauli
Figura 8: Eixo dos Pauli gates em um espaço 3D. Fonte: Jason Roell (jasonroell.com).

Importante comentar que este espaço 3D, representado na Figura 8, chama-se esfera de Bloch, e é o lugar geométrico onde os vetores são representados [3].

O primeiro Pauli gate que veremos é o Pauli-X gate. Ele representa a porta clássica NOT, responsável pela operação de negação. Em uma configuração de circuito computacional quântico, o X-gate geralmente é usado para transformar o estado de spin-up |0> de um elétron em um estado de spin-down |1> e vice-versa (Figura 9).

Pauli X gate
Figura 9: Pauli X-gate. Fonte: Jason Roell (jasonroell.com). 

Um “X” maiúsculo geralmente representa o Pauli-X gate ou a própria matriz e se parece com o seguinte empilhamento:

/ 0 1 \
\ 1 0 /

A operação representada em ket:

|0>   -->   |1>   OU   |1> --> |0>

Em termos de notação adequada, aplicar um quantum gate a um Qbit é a operação de multiplicar um vetor ket por uma matriz. Nesse caso, multiplicamos o vetor ket spin-up |0> pelo X-gate. Dessa forma, obtemos X|0> como:

/ 0 1 \ /1\
\ 1 0 / \0/

Observe que a matriz é colocada à esquerda do ket. Aplicando a multiplicação de matrizes, como vimos nas Figuras 1 a 7, e mantendo a ordem dos elementos em mente, a notação completa para aplicar o X-gate ao nosso Qbit (o estado de spin-up de um elétron), será:

X|0> = / 0 1 \ /1\ = /0\ = |1>
       \ 1 0 / \0/   \1/

Aplicada a um vetor spin-down, a notação completa ficaria da seguinte forma:

X|1> = / 0 1 \ /0\ = /1\ = |0>
       \ 1 0 / \1/   \0/

O que temos em ambos os casos, é um Qbit, na forma de um único elétron, passando por um quantum gate e saindo do outro lado com seu spin completamente invertido.

Vejamos agora os gates Pauli Y e Pauli Z. Vou poupá-los da matemática desses dois, mas gostaria que vocês soubessem pelo menos o seguinte:

Pauli-X = [0   1]
          [1   0]

Pauli-Y = [0  -i]
          [i   0]

Pauli-Z = [1   0]
          [0  -1]

O que significa que enquanto o Pauli-X é um NOT gate, o Pauli-Y é um NOT gate com i múltiplo (i é o número imaginário que insanamente representa a raiz quadrada de -1) e o Pauli-Z inverte o sinal do segundo estado emaranhado. O Pauli-Y se parece muito com o Xgate, mas com um i no lugar do 1 normal e um sinal negativo no canto superior direito. Em termos de empilhamento, Y ficaria:

/ 0 -i \
\ i  0 /

O Pauli-Z é mais fácil de se entender, uma vez que se parece com a imagem espelhada do Xgate, mas com um sinal negativo no segundo 1. Dessa forma, Z é representado:

/ 1  0 \
\ 0 -1 /

Ambos (Pauli-Y e Pauli-Z) mudam o spin do nosso elétron Qbit. Com o Pauli-Y, temos:

Pauli Y

Com o Pauli-Z, temos:

Pauli Z

Hadamard gate

Enquanto em alguns aspectos os Pauli gates são muito parecidos com os portões lógicos clássicos, o Hadamard gate, ou H-gate, é um verdadeiro monstro quântico. Não é à toa que ele aparece em todos os lugares na computação quântica. O Hadamard gate tem a capacidade de transformar um estado quântico definido, como spin-up, em um estado obscuro, como uma superposição de spin-up e spin-down ao mesmo tempo. Uma vez que enviarmos um elétron spin-up ou spin-down através de um H-gate, o seu comportamento se torna similar a uma moeda de cara e coroa, com 50% de chances de terminar cara (spin-up) ou coroa (spin-down) quando for medido. Esse H-gate é extremamente útil para realizar a primeira computação em uma programação quântica, porque transforma Qbits predefinidos ou inicializados de volta ao seu estado natural. A Figura 10, mostra o processo visualmente:

Hadamard
Figura 10: Hadamard gate. Fonte: Jason Roell (jasonroell.com).

Em termos de matriz, temos a seguinte representação: 

H gate

Por exemplo, ao aplicarmos o H-gate aos nossos vetores ket spin-up |0> e ket spin-down |1>, geramos os kets |+⟩ e |-⟩:

H gate2

Como comentei, há outros quantum gates (lista em inglês, aqui). Assim como podemos realizar qualquer computação clássica com uma combinação de portas NOT + OR = NOR ou portas NOT + AND = NAND, é possível reduzir a lista de quantum gates a um conjunto simples de quantum gates universais. Sobre esse assunto, deixo o link para um texto do Scott Aaronson a respeito. Importante comentar que para um conjunto de quantum gates ser considerado universal, é preciso que ele possa ser usado para realizar qualquer transformação unitária em qualquer número de Qbits, com qualquer precisão desejada. Explico, Qbits também podem ser usados como uma métrica de quantificação precisa. Se o conjunto de quantum gates puder ser usado para aproximar uma unidade arbitrária com qualquer precisão desejada, ele pode ser considerado universal.

Referências

[1] Nielsen, M., and Chuang, I. Quantum Computation and Quantum Information, Cambridge University Press, 2000.
[2] Bais, F. Alexander, and Farmer, J. Doyne. The Physics of Information. Philosophy of Information, Elsevier, 2008, p. 609–83. 
[3] Carvalho, L. M., Lavor, C., Motta, V.S. Caracterização Matemática e Visualização da Esfera de Bloch: Ferramentas para Computação Quântica. Trends in Computational and Applied Mathematics, vol. 8, no 3, junho de 2007, p. 351–60. tema.sbmac.org.br, https://doi.org/10.5540/tema.2007.08.03.0351.
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