Por: Rafael Veríssimo(Cofundador Brazil Quantum)
Computação quântica é um modelo de computação totalmente diferente que, apesar de utilizar a fenômenos quânticos para fazer cálculos, não exige necessariamente uma compreensão profunda da física quântica para se entender os conceitos iniciais e desenvolver algumas aplicações interessantes. Na realidade, no começo do desenvolvimento da computação quântica, existiam dois lados bastante diferentes. O primeiro deles era o de pessoas do campo da ciência da computação teórica, onde a computação quântica era um modelo de computação totalmente matemático e abstrato. O segundo lado eram os físicos, que estavam realmente tentando implantar e controlar sistemas quânticos reais, fossem eles um elétron, um fóton, etc.
Obviamente, esses dois campos foram se juntando cada vez mais, o que foi muito positivo para o desenvolvimento da tecnologia e algoritmos quânticos. Contudo, nesse texto queremos apresentar a linguagem e modelo matemático que irá permitir que você entenda e desenvolva aplicações em computação quântica, sem entrar nos detalhes da física quântica.
O Qubit
O qubit é a unidade básica de processamento utilizada na computação quântica e já foi apresentado previamente em outro texto. Do ponto de vista matemático, um qubit é um vetor de dois números complexos de módulo unitário. Se você já estudou álgebra linear, talvez isso não te traga boas memórias. Se você nunca estudou álgebra linear, provavelmente você não entendeu o que eu disse. Mas não desista ainda, nós vamos por partes. Como já explicado antes, diferentemente do bit, que é 0 ou 1, o qubit pode estar numa superposição desses dois estados. O valor do qubit (0 ou 1) só é definido a partir do momento em que o medimos, e seu resultado será 0 ou 1 de acordo com uma probabilidade. É aqui que entra nosso vetor de dois números complexos! Cada um desses números complexos está diretamente relacionado com a probabilidade de medirmos zero ou um. Mais especificamente, o módulo ao quadrado desses valores é exatamente nossa probabilidade de medir nosso qubit como zero ou um. Vamos exemplificar. Considere um qubit no estado abaixo:
Temos aqui um estado Psi (𝛹) que é uma superposição dos estados zero e um. Nossos números complexos, 𝛼 e 𝛽, são chamados de amplitude de probabilidade. Quando fazemos |𝛼|² and |𝛽|², temos respectivamente a probabilidade de medirmos zero ou um. Mas, na nossa definição, falamos que nosso vetor deveria ser unitário. Por que isso? As probabilidades de medirmos 0 ou 1 somadas têm que resultar 1, visto que só temos essas duas possibilidades. Sendo assim, podemos escrever nossa definição de qubit, sendo 𝛼 e 𝛽 número complexos, como :
Notação para o Qubit
Você talvez tenha percebido que usamos ∣ ⟩ na notação acima, mas não explicamos do que se tratava. Extremamente comum na física quântica, o símbolo se chama “ket” e faz parte da chamada notação de Dirac. Eles representam vetores de algum estado específico. Por exemplo, para o estado zero e um temos:
Podemos também utilizar a notação ⟨ ∣ (denominada “bra”), que nada mais é do que vetor transposto conjugado. Como já mostrado, o vetor pode ter valores complexos. Nesse caso, o vetor transposto conjugado é o transposto com as partes imaginárias com sinal trocado.
Alguns estados são bastantes utilizados na computação quântica e valem ser destacados aqui:
Qubits Múltiplos
Até agora tratamos somente do caso de um único qubit. Porém, depois de compreender a notação não será difícil entendermos a descrição de um sistema com vários qubits utilizando a notação de Dirac. Um sistema com N qubits é descrito por um vetor de 2^n números complexos. Para o caso de dois qubits, vamos ver como seria a representação de um sistema |01>:
O símbolo ⊗ representa um produto tensorial, e esse produto é executado em basicamente dois passos:
- Os escalares multiplicam cada elemento da primeira matriz por toda a segunda matriz
- Combinar as matrizes resultantes de acordo com a posição original de seus elementos
Para sistemas com mais qubits, basta repetir a operação. A operação de produto tensorial é bastante importante e vamos retomá-la quando formos tratar de gates.
Agora que sabemos como representar matematicamente nossos qubits, podemos começar a fazer operações com eles. Essas operações são executadas através de gates que, quando aplicados na sequência adequada, resultam nos nossos algoritmos. Mas isso é conversa para um próximo texto.