Uma introdução à matemática da computação quântica

Filipe Chagas Ferraz
12 min readJun 27, 2020

--

Meu objetivo ao escrever este texto é apresentar uma abordagem objetiva e direta sobre a matemática da computação quântica. O conteúdo que será apresentado aqui não vai ser o suficiente para que o leitor termine a leitura capacitado a começar a desenvolver os próprios algoritmos quânticos e escrever artigos a respeito, mas será o bastante para dar uma breve noção introdutória sobre o tema.

Para a plena compreensão deste conteúdo, é importante que o leitor tenha algum conhecimento prévio de álgebra linear e ciência da computação.

Caso você, leitor, não faça nem ideia do que seja a computação quântica, eu sugiro que assista este vídeo antes de prosseguir com a leitura:

Bits clássicos e bits quânticos

Um bit (clássico) é um termo binário: basicamente, um valor numérico pertencente ao conjunto {0,1}. O valor do bit pode ter diversas interpretações físicas: pode ser uma tensão elétrica, uma corrente elétrica, uma carga, etc. A regra é: o bit clássico sempre valerá 0 ou 1, nunca 0 e 1 simultaneamente.

Os qubits (bits quânticos) são termos binários que podem assumir estados superpostos (a grosso modo, 1 e 0 ao mesmo tempo). Os estados desses bits quânticos devem ser representados como vetores.

Os qubits possuem duas bases ortonormais: |0⟩ e |1⟩, onde:

(1)

Como você deve ter reparado, um valor (como 0 ou 1) entre os caracteres “|” e “⟩” corresponde a um vetor. Este símbolo é chamado ket. Também existe o símbolo bra (“⟨…|”), para o qual ⟨x| corresponde à transposta conjugada do ket |x⟩. Neste caso, ⟨x|y⟩ é o produto interno dos vetores |x⟩ e |y⟩. Esta notação é chamada Bra-ket ou notação de Dirac. Os vetores que são representados pela notação Bra-ket pertencem a espaços de Hilbert espaços vetoriais com noções de ângulo e distância que não necessariamente têm dimensões finitas.

Os possíveis estados de um qubit podem ser expressos pela seguinte combinação linear:

(2)

Onde |ψ⟩ é um vetor no espaço vetorial ℂ² que representa o estado do qubit, e os coeficientes ω₀ e ω₁ são números complexos que representam as amplitudes de probabilidade dos estados |0⟩ e |1⟩.

Quando o estado |ψ⟩ é medido experimentalmente, manifesta um dos estados base |0⟩ e |1⟩ (fenômeno este que é conhecido na mecânica quântica como “colapso”). A probabilidade do estado |0⟩ se manifestar é |ω₀|² (quadrado do absoluto de ω₀), e a probabilidade do estado |1⟩ se manifestar é |ω₁|² (quadrado do absoluto de ω₁). Isto significa que:

(3)

Esfera de Bloch

Representar graficamente um vetor em ℂ² não é tão simples. Um único número complexo com parte imaginária diferente de zero é análogo a um vetor em ℝ² (uma dimensão para a parte real e outra para o fator real da unidade imaginária), e seguindo esta mesma lógica, um vetor em ℂ² é análogo a um vetor em ℝ⁴, que não pode ser representado graficamente usando o sistema de coordenadas cartesiano. No entanto, um vetor em ℂ² que representa especificamente o estado de um qubit pode ser generalizado pela seguinte fórmula:

(4)

Onde θ e ϕ são ângulos em radianos.

Usando esta fórmula (4), é possível representar graficamente o estado de um qubit em coordenadas polares, como mostra a imagem a seguir:

Esfera de Bloch. Fonte: https://www.researchgate.net/figure/Figura-A1-Esfera-de-Bloch-O-estado-ps-de-um-qubitequbite-representado-por-um-ponto_fig5_266440528

Esta representação gráfica do estado de um qubit é denominada esfera de Bloch.

Repare que, na esfera de Bloch, θ é representado como o ângulo entre o vetor |ψ⟩ e o eixo z, e ϕ é representado como o ângulo entre a projeção do vetor |ψ⟩ no plano xy e o eixo x.

Registradores quânticos e estados globais

Com n bits, é possível formar 2ⁿ combinações de 1 e 0. Por exemplo: com um par de bits (um crumb) é possível formar as combinações 00, 01, 10 e 11 (um total de 2² combinações). Isso pode ser expresso matematicamente usando conjuntos, considerando bit={0,1}, da seguinte forma:

(5)

Este símbolo parecido com a letra “x” na equação 5 é um produto cartesiano um operador que produz um conjunto de tuplas com todas as combinações possíveis de elementos pertencentes aos conjuntos operandos. Este operador tem a seguinte definição:

(6)

Com qubits é diferente: todos os estados devem ser representados por vetores, inclusive estados formados por mais de um qubit. Neste caso, o produto cartesiano não serve. É necessário usar um operador que produza um terceiro vetor ao invés de um conjunto de tuplas para representar as combinações de estados dos qubits. Este operador é o produto tensorial (também conhecido como kronecker), representado pelo símbolo “⊗”.

O estado de um “crumb de qubits” de estados |a⟩ e |b⟩ pode ser expresso como um produto tensorial de |a⟩ e |b⟩ da seguinte forma:

(7)

Onde |ab⟩ é o estado global do par de qubits.

Este produto tensorial pode ser expresso mais detalhadamente da seguinte forma:

(8)

No geral, um produto tensorial entre um par de matrizes A e B tem a seguinte definição:

(9)

Voltando ao exemplo do crumb — definindo os qubits |a⟩ e |b⟩ como:

(10)

O estado global |ab⟩ pode ser definido como a seguinte combinação linear de 4 bases:

(11)

Considerando |ψ⟩=|ab⟩, α=α₀β₀, β=α₀β₁, γ=α₁β₀, δ=α₁β₁, substituindo as amplitudes αₙβₘ pelas equivalentes α, β, γ e δ, temos:

(12)

Onde:

(13)

Partindo do pressuposto de que (α₀β₀)(α₁β₁)=(α₀β₁)(α₁β₀), é possível afirmar que, para que a combinação linear de |ψ⟩ (12) seja de fato um produto tensorial das combinações lineares de |a⟩ e |b⟩ (10), a seguinte relação deve ser satisfeita:

(14)

Caso o estado global de um par de qubits não satisfaça esta relação, este estado global não pode ser representado como um produto tensorial de um par de combinações lineares independentes. Casos em que isto acontece serão explicados na seção sobre qubits emaranhados.

No geral, agrupamentos de múltiplos qubits usados por um algoritmo quântico são denominados registradores quânticos. Em contraste com os computadores clássicos, que normalmente só trabalham com agrupamentos de 2ⁿ bits — normalmente 4 bits (nyble), 8 bits (byte), 16 bits (word), 32 bits (long word) e 64 bits (very long word) — os computadores quânticos não são projetados para trabalhar necessariamente com agrupamentos de 2ⁿ qubits. Um exemplo disso é o computador quântico ibmqx4, da IBM, que trabalha com 5 qubits.

Qubits emaranhados

Suponha que um registrador quântico de 2 qubits tem o seguinte estado global:

(15)

Este é um estado bell, um estado de dois qubits emaranhados.

Representando o estado bell no mesmo formato da equação 12, onde as amplitudes de probabilidade são α, β, γ e δ, temos que:

(16)

Neste caso, é evidente que a relação αδ=βγ, que equivale a ½=0, é falsa (ou seja, αδ≠βγ). Isto significa que o estado bell não é um produto tensorial de duas combinações lineares independentes, e é isso o que define um emaranhamento na computação quântica — se um estado global de n qubits não pode ser representado como um “produtório tensorial” de n combinações lineares independentes, então há um emaranhamento no registrador.

O emaranhamento quântico é fundamental para a computação quântica, pois com ele é possível estabelecer uma relação lógica entre os estados base que os qubits manifestam quando são submetidos a medições. No estado bell, por exemplo, em uma situação em que ambos os qubits do registrador são submetidos a uma medição: se o primeiro qubit manifesta o estado |1⟩, o segundo qubit necessariamente também manifesta estado |1⟩; se o primeiro qubit manifesta o estado |0⟩, o segundo qubit necessariamente também manifesta o estado |0⟩. Representando o estado |1⟩ como V, o estado |0⟩ como F, o estado que o primeiro qubit manifesta como q₀ e o estado que o segundo qubit manifesta como q₁, podemos representar esta relação pela seguinte expressão lógica:

(17)

Se fizermos o mesmo com o seguinte estado de dois qubits emaranhados:

(18)

Temos a seguinte relação lógica:

(19)

E se fizermos o mesmo com o seguinte estado de três qubits:

(20)

Temos a seguinte relação lógica:

(21)

Utilizando emaranhamento quântico, é possível criar as mais diversas relações lógicas entre os estados que os qubits manifestam nas medições, possibilitando até que operações lógicas, relacionais e aritméticas sejam feitas com grandes quantidades de informações quânticas.

Portas lógicas quânticas

Na eletrônica digital, os circuitos são constituídos por portas lógicas NOT, AND, OR, XOR, e derivadas, que criam relações lógicas com os bits.

Portas lógicas digitais. Fonte: https://instrumentationtools.com/logic-gates/

Já na computação quântica, existem as portas lógicas quânticas, que são matrizes unitárias responsáveis por modificar os estados dos qubits. Entre elas, podemos citar as portas Pauli-X, Pauli-Y, Pauli-Z, Hadamard, Phase, T, Controlled-NOT, entre outras. Além destas, existem portas compostas por combinações de outras portas (como as portas Toffoli, Swap e Controlled-Z), portas de rotação em ângulo livre na esfera de Bloch (Rx, Ry e Rz), e portas transpostas conjugadas (como as portas S† e T† ). A aplicação de uma porta lógica quântica se da, em termos matemáticos, por um produto matricial da matriz unitária da porta com o vetor de estado de um ou mais qubits.

Portas logicas quânticas (em inglês). Fonte: https://commons.wikimedia.org/wiki/File:Quantum_Logic_Gates.png

Portas como Pauli-X, Pauli-Y, Pauli-Z, Hadamard, Phase, T, Rx, Ry e Rz são portas de qubit único. Estas portas servem para rotacionar o vetor de estado do qubit na esfera de Bloch em determinado ângulo e eixo de rotação. Por exemplo: as portas Pauli-X, Pauli-Y e Pauli-Z induzem rotações de π radianos nos respectivos eixos x, y e z da esfera de Bloch, como mostra as animações a seguir (que foram retiradas da página https://quantum-computing.ibm.com/docs/circ-comp/q-gates):

Rotação da porta Pauli-X. Fonte: https://quantum-computing.ibm.com/docs/circ-comp/q-gates
Rotação da porta Pauli-Y. Fonte: https://quantum-computing.ibm.com/docs/circ-comp/q-gates
Rotação da porta Pauli-Z. Fonte: https://quantum-computing.ibm.com/docs/circ-comp/q-gates

As portas Phase e T produzem rotações no eixo z com os respectivos ângulos π/2 e π/4, como mostra as seguintes animações:

Rotação da porta Phase. Fonte: https://quantum-computing.ibm.com/docs/circ-comp/q-gates
Rotação da porta T. Fonte: https://quantum-computing.ibm.com/docs/circ-comp/q-gates

Portas como Controlled-NOT, Controlled-Z e Toffoli trabalham com mais de um qubit. Elas servem para criar ou desfazer um emaranhamento nos qubits operandos. A porta Controlled-NOT (que aqui será simbolizada por Cx), por exemplo, produz a seguinte relação lógica com os estados base dos qubits operandos:

(22)

Ou seja, ela cria uma relação lógica XOR (o operador booleano “⊕”) entre os dois qubits operandos, comportando-se como uma porta Pauli-X no qubit a quando o estado do qubit b se manifesta como |1⟩ na medição.

Já a porta Toffoli (que aqui será simbolizada por Ccx) produz a seguinte relação lógica com os estados base dos qubits operandos:

(23)

Ou seja, ela cria uma relação lógica XOR com AND, comportando-se como uma porta Pauli-X no qubit a quando o estado dos qubits b e c se manifesta como |11⟩ na medição.

Eis a função principal das portas controladas (como Controlled-NOT, Controlled-Z e Toffoli): elas se comportam como uma rotação no estado de um qubit alvo quando o estado de um ou mais qubits de controle se manifestam como |1⟩ na medição.

Algoritmos quânticos

Agora que você, leitor, já tem uma breve noção do que são portas lógicas quânticas, é hora de abordar o que provavelmente é a parte mais importante da computação quântica: os algoritmos quânticos.

Um algoritmo quântico é uma combinação de portas lógicas quânticas trabalhando sobre um registrador quântico com o objetivo de processar informações codificadas no estado global do registrador. Estas combinações de portas lógicas quânticas são programadas com o auxilio de computadores clássicos. As respostas do algoritmo quântico são obtidas pela medição dos estados dos qubits.

Uma combinação de portas lógicas é, matematicamente, uma série de produtos matriciais e produtos tensoriais entre matrizes unitárias. Por exemplo: um algoritmo quântico capaz de transformar o estado |00⟩ em um estado bell pode ser descrito algebricamente pela seguinte equação:

(24)

Onde Cx é a porta Controlled-NOT, H é a porta Hadamard e I₂ é uma matriz identidade 2x2. Esta mesma equação pode ser “aberta” da seguinte forma:

(25)

É claro que equações não são uma forma muito intuitiva de representar algoritmos quânticos, principalmente quando há uma quantidade grande de qubits e portas lógicas quânticas no algoritmo. Uma representação mais intuitiva para os algoritmos quânticos são os circuitos quânticos, que são diagramas em que os qubits são representados por linhas horizontais e as portas lógicas quânticas são representadas por blocos, símbolos e linhas verticais, desenhados sobre as linhas horizontais dos qubits. A imagem a seguir mostra o circuito quântico correspondente ao algoritmo da equação 24:

Circuito quântico que produz o estado bell

Neste diagrama, um bloco com a letra “H” representa a porta Hadamard operando sobre o qubit q₀, e uma linha vertical com um ponto na extremidade superior e o simbolo “⊕” na extremidade inferior representa a porta Controlled-NOT operando sobre os qubits q₀ (controle) e q₁ (alvo). Os blocos com “reloginhos” representam as medições dos estados dos qubits.

Simulando 1024 medições sucessivas da saída deste circuito, o seguinte histograma é obtido:

Histograma do resultado de 1024 medições do estado bell

Observe que as probabilidades calculadas experimentalmente têm um pequeno erro e não são exatamente iguais a 50%. Isto é normal. Quanto mais medições forem feitas, menos errático será este calculo experimental. Mas vale lembrar que este experimento foi feito em um simulador. Se estivéssemos trabalhando com um dos atuais computadores NISQ (Noisy Intermediate-Scale Quantum), ainda teríamos uma quantidade razoável de ruídos interferindo nos resultados finais do experimento (o que é péssimo).

Existem alguns algoritmos quânticos notáveis. O algoritmo de Shor, por exemplo, é um algoritmo quântico capaz de decompor números inteiros grandes em fatores primos de forma rápida, e pode ser usado para quebrar a segurança de sistemas de informação que usam criptografia RSA.

Sub-rotina quântica do algoritmo de Shor. Fonte: https://commons.wikimedia.org/wiki/File:Shor%27s_algorithm.svg

Outro exemplo é o protocolo de comunicação superdense coding, que codifica a informação de um par de bits clássicos em um estado quântico de dois qubits para transmiti-la de um remetente para um destinatário com segurança.

Esquemático do circuito quântico usado no protocolo superdense coding. Fonte: https://commons.wikimedia.org/wiki/File:Superdense_coding.png

Existem muitos algoritmos quânticos notáveis dos quais simplesmente não vale a pena abordar aqui. Caso o leitor tenha interesse em conhecê-los, sugiro que dê especial atenção ao algoritmo quântico de busca (também conhecido como algoritmo de Grover) e à transformada discreta quântica de Fourier (ou simplesmente QFT), que inclusive é a base do algoritmo de Shor. São dois algoritmos muito importantes para a computação quântica.

Conclusão

Ainda que objetiva, esta foi uma abordagem muito breve e superficial, cujo intuito foi apenas dar uma pequena noção ao leitor sobre a teoria por trás da computação quântica. Para um estudo mais aprofundado do assunto, os livros e artigos nas referências bibliográficas deste texto podem ser consultados.

Bibliografia

--

--

Filipe Chagas Ferraz

Brasil, Cuiabá-MT; engenheiro de computação pela Universidade Federal de Mato Grosso; professor e pesquisador. https://github.com/FilipeChagasDev