Pular para o conteúdo principal

Circuits

Na ciência da computação, circuitos são modelos de computação em que a informação é transportada por fios através de uma rede de portas (gates), que representam operações sobre a informação carregada pelos fios. Circuitos quânticos são um modelo específico de computação baseado nesse conceito mais geral.

Embora a palavra "circuito" frequentemente remeta a um caminho circular, caminhos circulares não são permitidos nos modelos de circuito de computação mais comumente estudados. Ou seja, geralmente consideramos circuitos acíclicos quando pensamos em circuitos como modelos computacionais. Os circuitos quânticos seguem esse padrão; um circuito quântico representa uma sequência finita de operações que não pode conter laços de realimentação.

Circuitos Booleanos

Aqui está um exemplo de um circuito Booleano (clássico), em que os fios transportam valores binários e as portas representam operações de lógica Booleana:

Exemplo de circuito Booleano

O fluxo de informação ao longo dos fios vai da esquerda para a direita: os fios no lado esquerdo da figura rotulados como X\mathsf{X} e Y\mathsf{Y} são bits de entrada, que podem ser definidos com qualquer valor binário que desejarmos, e o fio no lado direito é a saída. Os fios intermediários assumem os valores determinados pelas portas, que são avaliadas da esquerda para a direita.

As portas são portas AND (rotuladas \wedge), portas OR (rotuladas \vee) e portas NOT (rotuladas ¬\neg). As funções computadas por essas portas provavelmente serão familiares a muitos leitores, mas aqui elas são representadas por tabelas de valores:

a¬a0110abab000010100111abab000011101111\begin{array}{c} \begin{array}{c|c} a & \neg a\\ \hline 0 & 1\\ 1 & 0\\ \end{array}\\ \\ \\ \end{array} \qquad\quad \begin{array}{c|c} ab & a \wedge b\\ \hline 00 & 0\\ 01 & 0\\ 10 & 0\\ 11 & 1 \end{array} \qquad\quad \begin{array}{c|c} ab & a \vee b\\ \hline 00 & 0\\ 01 & 1\\ 10 & 1\\ 11 & 1 \end{array}

Os dois pequenos círculos sólidos nos fios logo à direita dos nomes X\mathsf{X} e Y\mathsf{Y} representam operações de fan-out, que simplesmente criam uma cópia do valor transportado no fio em que aparecem, permitindo que esse valor seja usado como entrada em múltiplas portas. Operações de fan-out nem sempre são consideradas portas no contexto clássico; às vezes são tratadas como se fossem "gratuitas" em algum sentido. Quando circuitos Booleanos são convertidos em circuitos quânticos equivalentes, porém, precisamos classificar explicitamente as operações de fan-out como portas para tratá-las e contabilizá-las corretamente.

Aqui está o mesmo circuito ilustrado em um estilo mais comum na engenharia elétrica, que usa símbolos convencionais para as portas AND, OR e NOT:

Circuito Booleano em estilo clássico

Não usaremos esse estilo nem esses símbolos de porta específicos mais adiante, mas usaremos símbolos diferentes para representar portas em circuitos quânticos, que serão explicados à medida que os encontrarmos.

O circuito em particular neste exemplo computa o OR exclusivo (ou XOR, para abreviar), denotado pelo símbolo \oplus:

abab000011101110\begin{array}{c|c} ab & a \oplus b\\ \hline 00 & 0\\ 01 & 1\\ 10 & 1\\ 11 & 0 \end{array}

No próximo diagrama consideramos apenas uma escolha para as entradas: X=0\mathsf{X}=0 e Y=1.\mathsf{Y}=1. Cada fio é rotulado pelo valor que transporta para que você possa acompanhar as operações. O valor de saída é 11 neste caso, que é o valor correto para o XOR: 01=1.0 \oplus 1 = 1.

Avaliando um circuito Booleano

As outras três configurações de entrada possíveis podem ser verificadas de maneira similar.

Outros tipos de circuitos

Como sugerido acima, a noção de circuito na ciência da computação é muito geral. Por exemplo, circuitos cujos fios transportam valores diferentes de 00 e 11 são às vezes analisados, assim como portas que representam diferentes escolhas de operações.

Em circuitos aritméticos, por exemplo, os fios podem transportar valores inteiros enquanto as portas representam operações aritméticas, como adição e multiplicação. A figura a seguir representa um circuito aritmético que recebe dois valores de entrada variáveis (xx e yy) além de uma terceira entrada definida com o valor 1.1. Os valores transportados pelos fios, como funções dos valores xx e y,y, são mostrados na figura.

Exemplo de circuito aritmético

Podemos também considerar circuitos que incorporam aleatoriedade, como aqueles em que as portas representam operações probabilísticas.

Circuitos quânticos

No modelo de circuito quântico, os fios representam qubits e as portas representam operações sobre esses qubits. Por ora, vamos nos concentrar nas operações que encontramos até agora, a saber, operações unitárias e medições na base padrão. À medida que aprendermos sobre outros tipos de operações e medições quânticas, podemos ampliar nosso modelo de acordo.

Aqui está um exemplo simples de um circuito quântico:

Circuito quântico simples

Neste circuito, temos um único qubit chamado X,\mathsf{X}, representado pela linha horizontal, e uma sequência de portas que representam operações unitárias sobre esse qubit. Assim como nos exemplos anteriores, o fluxo de informação vai da esquerda para a direita — portanto, a primeira operação realizada é uma operação de Hadamard, a segunda é uma operação SS, a terceira é mais uma operação de Hadamard, e a operação final é uma operação TT. Aplicar o circuito inteiro, portanto, aplica a composição dessas operações, THSH,T H S H, ao qubit X.\mathsf{X}.

Às vezes podemos querer indicar explicitamente os estados de entrada ou saída dos circuitos. Por exemplo, se aplicarmos a operação THSHT H S H ao estado 0,\vert 0\rangle, obtemos o estado 1+i20+121.\frac{1+i}{2}\vert 0\rangle + \frac{1}{\sqrt{2}} \vert 1 \rangle. Isso pode ser indicado da seguinte forma:

Circuito quântico simples avaliado

Os circuitos quânticos geralmente começam com todos os qubits inicializados em 0,\vert 0\rangle, como neste caso, mas há também situações em que os qubits de entrada são inicialmente definidos em estados diferentes. Aqui está outro exemplo de circuito quântico, desta vez com dois qubits:

Circuito quântico que cria um e-bit

Como sempre, a porta rotulada HH refere-se a uma operação de Hadamard, enquanto a segunda porta é uma operação controlled-NOT: o círculo sólido representa o qubit de controle e o círculo que lembra o símbolo \oplus denota o qubit alvo.

Antes de examinar este circuito com mais detalhes e explicar o que ele faz, é fundamental que primeiro esclarecemos como os qubits são ordenados nos circuitos quânticos. Isso se relaciona com a convenção que o Qiskit usa para nomear e ordenar sistemas, mencionada brevemente na lição anterior.

Convenção de ordenação de qubits do Qiskit para circuitos

No Qiskit, o qubit mais ao topo em um diagrama de circuito tem índice 00 e corresponde à posição mais à direita em uma tupla de qubits (ou em uma string, produto cartesiano ou produto tensorial correspondente a essa tupla), o qubit segundo do topo tem índice 11 e corresponde à posição segunda da direita em uma tupla, e assim por diante. O qubit mais abaixo, que possui o maior índice, portanto corresponde à posição mais à esquerda em uma tupla. Em particular, os nomes padrão do Qiskit para os qubits em um circuito de nn qubits são representados pela nn-tupla (qn1,,q0),(\mathsf{q_{n-1}},\ldots,\mathsf{q_{0}}), com q0\mathsf{q_{0}} sendo o qubit no topo e qn1\mathsf{q_{n-1}} na base nos diagramas de circuito quântico.

Observe que esta é uma inversão de uma convenção mais comum para ordenação de qubits em circuitos, e é uma fonte frequente de confusão. Mais informações sobre essa convenção de ordenação podem ser encontradas na página de documentação Bit-ordering in Qiskit.

Embora às vezes nos afastemos dos nomes padrão específicos q0,,qn1\mathsf{q_{0}},\ldots,\mathsf{q_{n-1}} usados pelo Qiskit para os qubits, sempre seguiremos a convenção de ordenação descrita acima ao interpretar diagramas de circuito ao longo deste curso. Assim, nossa interpretação do circuito acima é que ele descreve uma operação em um par de qubits (X,Y).(\mathsf{X},\mathsf{Y}). Se a entrada para o circuito é um estado quântico ψϕ,\vert\psi\rangle \otimes \vert\phi\rangle, por exemplo, isso significa que o qubit inferior X\mathsf{X} começa no estado ψ\vert\psi\rangle e o qubit superior Y\mathsf{Y} começa no estado ϕ.\vert\phi\rangle.

Para entender o que o circuito faz, podemos percorrer suas operações da esquerda para a direita.

  1. A primeira operação é uma operação de Hadamard em Y\mathsf{Y}:

    Primeira operação do criador de e-bit

    Ao aplicar uma porta a um único qubit como este, nada acontece com os outros qubits (que é apenas mais um qubit neste caso). Nada acontecer é equivalente à operação identidade sendo realizada. O retângulo pontilhado na figura acima, portanto, representa esta operação:

    IH=(121200121200001212001212). \mathbb{I}\otimes H = \begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} & 0 & 0\\[2mm] \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} & 0 & 0\\[2mm] 0 & 0 & \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\\[2mm] 0 & 0 & \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{pmatrix}.

    Observe que a matriz identidade está à esquerda do produto tensorial e HH está à direita, o que é consistente com a convenção de ordenação do Qiskit.

  2. A segunda operação é a operação controlled-NOT, em que Y\mathsf{Y} é o controle e X\mathsf{X} é o alvo:

    Segunda operação do criador de e-bit

    A ação da porta controlled-NOT sobre os estados da base padrão é a seguinte:

    Porta controlled-NOT

    Dado que ordenamos os qubits como (X,Y),(\mathsf{X}, \mathsf{Y}), com X\mathsf{X} estando na base e Y\mathsf{Y} no topo do nosso circuito, a representação matricial da porta controlled-NOT é esta:

    (1000000100100100). \begin{pmatrix} 1 & 0 & 0 & 0\\[2mm] 0 & 0 & 0 & 1\\[2mm] 0 & 0 & 1 & 0\\[2mm] 0 & 1 & 0 & 0 \end{pmatrix}.

A operação unitária implementada pelo circuito inteiro, que chamaremos de U,U, é a composição das operações:

U=(1000000100100100)(121200121200001212001212)=(121200001212001212121200).U = \begin{pmatrix} 1 & 0 & 0 & 0\\[2mm] 0 & 0 & 0 & 1\\[2mm] 0 & 0 & 1 & 0\\[2mm] 0 & 1 & 0 & 0 \end{pmatrix} \begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} & 0 & 0\\[2mm] \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} & 0 & 0\\[2mm] 0 & 0 & \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\\[2mm] 0 & 0 & \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{pmatrix} = \begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} & 0 & 0\\[2mm] 0 & 0 & \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}}\\[2mm] 0 & 0 & \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\\[2mm] \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} & 0 & 0 \end{pmatrix}.

Em particular, recordando nossa notação para os estados de Bell,

ϕ+=1200+1211ϕ=12001211ψ+=1201+1210ψ=12011210,\begin{aligned} \vert \phi^+ \rangle & = \frac{1}{\sqrt{2}} \vert 0 0 \rangle + \frac{1}{\sqrt{2}} \vert 1 1 \rangle \\[2mm] \vert \phi^- \rangle & = \frac{1}{\sqrt{2}} \vert 0 0 \rangle - \frac{1}{\sqrt{2}} \vert 1 1 \rangle \\[2mm] \vert \psi^+ \rangle & = \frac{1}{\sqrt{2}} \vert 0 1 \rangle + \frac{1}{\sqrt{2}} \vert 1 0 \rangle \\[2mm] \vert \psi^- \rangle & = \frac{1}{\sqrt{2}} \vert 0 1 \rangle - \frac{1}{\sqrt{2}} \vert 1 0 \rangle, \end{aligned}

descobrimos que

U00=ϕ+U01=ϕU10=ψ+U11=ψ.\begin{aligned} U \vert 00\rangle & = \vert \phi^+\rangle\\ U \vert 01\rangle & = \vert \phi^-\rangle\\ U \vert 10\rangle & = \vert \psi^+\rangle\\ U \vert 11\rangle & = -\vert \psi^-\rangle. \end{aligned}

Esse circuito, portanto, nos fornece uma maneira de criar o estado ϕ+\vert\phi^+\rangle se o executarmos em dois qubits inicializados em 00.\vert 00\rangle. De forma mais geral, ele nos fornece uma maneira de converter a base padrão na base de Bell. (Observe que, embora não seja importante para este exemplo, o fator de fase 1-1 no último estado, ψ,-\vert \psi^-\rangle, poderia ser eliminado se desejássemos, fazendo uma pequena adição ao circuito. Por exemplo, poderíamos adicionar uma porta controlled-ZZ no início, que é semelhante a uma porta controlled-NOT, exceto que uma operação ZZ é aplicada ao qubit alvo em vez de uma operação NOT quando o controle é definido como 1.1. Alternativamente, poderíamos adicionar uma porta swap ao final. Qualquer uma das escolhas elimina o sinal de menos sem afetar a ação do circuito nos outros três estados da base padrão.)

Em geral, circuitos quânticos podem conter qualquer número de fios de qubit. Podemos também incluir fios de bits clássicos, que são indicados por linhas duplas, como neste exemplo:

Circuito de exemplo com medições

Aqui temos uma porta Hadamard e uma porta controlled-NOT em dois qubits X\mathsf{X} e Y,\mathsf{Y}, assim como no exemplo anterior. Também temos dois bits clássicos, A\mathsf{A} e B,\mathsf{B}, bem como duas portas de medição. As portas de medição representam medições na base padrão: os qubits são alterados para seus estados pós-medição, enquanto os resultados das medições são sobrescritos nos bits clássicos para os quais as setas apontam.

É frequentemente conveniente representar uma medição como uma porta que recebe um qubit como entrada e produz um bit clássico como saída (em vez de produzir o qubit em seu estado pós-medição e escrever o resultado em um bit clássico separado). Isso significa que o qubit medido foi descartado e pode ser ignorado com segurança a partir desse ponto, seu estado tendo sido alterado para 0\vert 0\rangle ou 1\vert 1\rangle dependendo do resultado da medição.

Por exemplo, o diagrama de circuito a seguir representa o mesmo processo que o do diagrama anterior, mas em que desconsideramos X\mathsf{X} e Y\mathsf{Y} após medi-los:

Circuito de exemplo com medições compacto

À medida que o curso avança, veremos mais exemplos de circuitos quânticos, que geralmente são mais complexos do que os exemplos simples acima. Aqui estão alguns exemplos de símbolos usados para denotar portas que aparecem com frequência em diagramas de circuito:

  • Portas de qubit único são geralmente mostradas como quadrados com uma letra indicando qual operação é, assim:

    Portas de qubit único

    Portas NOT (ou equivalentemente, portas XX) também são às vezes denotadas por um círculo ao redor de um sinal de mais:

    Porta NOT

  • Portas swap são denotadas da seguinte forma:

    Porta swap

  • Portas controladas, ou seja, portas que descrevem operações unitárias controladas, são denotadas por um círculo preenchido (indicando o controle) conectado por uma linha vertical à operação que está sendo controlada. Por exemplo, portas controlled-NOT, portas controlled-controlled-NOT (ou Toffoli) e portas controlled-swap (Fredkin) são denotadas assim:

    Porta controlada

  • Operações unitárias arbitrárias sobre múltiplos qubits podem ser vistas como portas. Elas são representadas por retângulos rotulados com o nome da operação unitária. Por exemplo, aqui está uma representação de uma operação unitária (não especificada) UU como uma porta, junto com uma versão controlada dessa porta:

    Porta unitária arbitrária junto com versão controlada