Demonstrando vantagem computacional com
óptica linear
Niterói-RJ
2020
Bibliotecário responsável: Mario Henrique de Oliveira Castro - CRB7/6155
A454d Alonso, Lucas Andrade
Demonstrando vantagem computacional com óptica linear / Lucas Andrade Alonso ; Daniel Jost Brod, orientador. Niterói, 2020.
57 f. : il.
Trabalho de Conclusão de Curso (Graduação em Física)-Universidade Federal Fluminense, Instituto de Física, Niterói, 2020.
1. Computação quântica. 2. Óptica linear. 3. Supremacia computacional. 4. Complexidade computacional. 5. Produção intelectual. I. Brod, Daniel Jost, orientador. II.
Universidade Federal Fluminense. Instituto de Física. III. Título.
-Demonstrando vantagem computacional com óptica
linear
Monografia apresentada no programa de gra-duação em Física da UFF como requisito para obtenção do grau de Graduado em bacharel em Física.
Universidade Federal Fluminense – UFF
Orientador: Daniel Jost Brod
Niterói-RJ
2020
heatless fire and no dragon at all? If there’s no way to disprove my contention, no conceivable experiment that would count against it, what does it mean to say that my dragon exists? Your inability to invalidate my hypothesis is not at all the same thing as proving it true. Claims that cannot be tested, assertions immune to disproof are veridically worthless, whatever value they may have in inspiring us or in exciting our sense of wonder. What I’m asking you to do comes down to believing, in the absence of evidence, on my say-so
No decorrer deste trabalho abordaremos a teoria clássica de computação, tratando especifi-camente da chamada complexidade computacional, em grande detalhe. O desenvolvimento de uma bagagem teórica neste tópico é bastante útil para discussões sobre supremacia computacional quântica, tema muito pesquisado atualmente e que será central neste trabalho.
Espera-se que óptica linear sem pós-seleção não seja universal para computação quântica sendo, portanto, um sistema interessante para se tentar simular classicamente ou buscar evidências de supremacia computacional. Antes, entretanto, é preciso discutir o que significa óptica linear, como ela pode ser usada para o processamento de informação quântica e como essa informação pode ser codificada nos fótons. É comum fazer essa discussão através do modelo de circuitos, embora o modelo de Turing seja brevemente introduzido neste trabalho.
Por fim, vale ressaltar que as ferramentas discutidas aqui podem ser utilizadas em estudos relacionados à supremacia computacional de outros sistemas quânticos restritos.
Palavras-chaves: Computação quântica, óptica linear, complexidade computacional, supremacia computacional.
In this work, we discuss the classical theory of computation, focusing specifically on the so-called computational complexity theory. We develop a theoretical background on this subject which is very useful for discussions on quantum computational supremacy, the main topic of this work, and which is currently researched very actively.
It is expected that linear optics without post-selection is not universal for quantum computation, and thus is an insteresting system to try to simulate classically or to search for evidence of quantum supremacy. To set up this discussion, however, we must first, define what is linear optics, how it can be used for quantum information processing, and how this information can be encoded into photons. It is more usual to address these topics using the circuit model of computation, although the Turing model will also be briefly introduced here.
Finally, by the end of this work, all tools introduced can be combined in the study of quantum computational supremacy using other restricted quantum systems.
Key-words: Quantum computation, linear optics, computational complexity, computati-onal supremacy.
1 INTRODUÇÃO . . . . 10
1.1 Breve história dos computadores clássicos e quânticos . . . 10
1.2 Objetivo principal . . . 11 2 COMPUTAÇÃO CLÁSSICA . . . . 12 2.1 Modelos de Computação . . . 12 2.1.1 Máquina de Turing . . . 13 2.1.1.1 MT universal. . . 14 2.1.2 Modelo de circuitos . . . 16
2.1.3 Computação eficiente e tempo . . . 17
2.1.4 Notação Assintótica . . . 19
2.1.5 Polinomial vs exponencial . . . 19
2.1.6 Computação quântica é possível? . . . 20
2.2 Complexidade Computacional . . . 21 2.2.1 Problemas de decisão . . . 22 2.2.2 Classes de complexidade . . . 23 2.2.2.1 Classe P . . . 23 2.2.2.2 Classes NP e CoNP . . . 25 2.2.2.3 Classes BPP e BQP . . . 27 2.2.2.4 Hierarquia Polinomial . . . 28 3 COMPUTAÇÃO QUÂNTICA . . . . 31 3.1 Circuitos quânticos . . . 31 3.1.1 Qubits . . . 31 3.1.2 Portas Quânticas . . . 33
3.1.3 Computação quântica universal . . . 35
4 COMPUTAÇÃO QUÂNTICA E ÓPTICA LINEAR . . . . 37
4.1 Quantização do campo eletromagnético . . . 37
4.2 Estados do campo quantizado . . . 38
4.3 Óptica Linear . . . 39
4.4 Qubits e fótons . . . 40
4.5 Portas de um qubit . . . 40
4.5.1 Interferômetro . . . 43
4.6 Portas de dois qubits . . . 44
5 SUPREMACIA COMPUTACIONAL . . . . 48
5.1 Circuitos com pós-seleção . . . 48
5.2 Simulações de circuitos quânticos . . . 50
5.3 Colapso da Hierarquia Polinomial . . . 51
5.4 Bósons vs Férmions . . . 54
6 CONCLUSÃO . . . . 55
Cap´ıtulo
1
Introduc¸˜ao
1.1
Breve história dos computadores clássicos e quânticos
Os computadores como conhecemos trouxeram, e ainda trazem, avanços tecnológicos nas mais variadas áreas do conhecimento humano. Os pioneiros no desenvolvimento de uma teoria clássica de computação foram Alan Turing [1] e Alonzo Church[2, 3], responsáveis pela elaboração dos primeiros modelos de computação que capturassem matematicamente a definição de um algoritmo. De fato, a humanidade sempre se preocupou em solucionar problemas via algoritmos, já que inevitavelmente eles fazem parte da nossa rotina.
A computação clássica possui suas limitações tecnológicas, como toda tecnologia existente, e muitos problemas em aberto se devem, em parte, a essa limitação. Um exemplo muito famoso é o problema do milênio do instituto Clay: P=NP? que na realidade envolve uma gama de conhecidos problemas computacionais complexos de serem resolvidos [4].
Outro problema notoriamente complicado para nossos computadores é lidar com sistemas quânticos. Tome, por exemplo, o Hamiltoniano do modelo de Ising unidimensional. Se quisermos extrair informações sobre uma cadeia unidimensional de n elétrons, segundo esse modelo, precisamos diagonalizar o Hamiltoniano cuja dimensão matricial é 2n× 2n. Evidente que o problema torna-se exponencialmente complexo na medida em que
adicionamos elétrons à cadeia, e nosso computador rapidamente falha. A comunidade já conhecia bem essas dificuldades e estava tentando contorna-las, até que Richard Feynman [5], trouxe uma nova óptica para tratar esse problema. Segundo Feynman, deveríamos construir computadores quânticos para simular sistemas quânticos.
A ideia pioneira de Feynman foi apresentada em 1982 e, até os anos 90, muitos cientistas demonstravam ceticismo com a ideia, alguns sob o pretexto de que seria impossível controlar operações sobre qubits e que interferências externas seriam catastróficas para
computadores quânticos escalonáveis. O marco que contribuiu para eliminar grande parte desse ceticismo foi o desenvolvimento de uma sólida teoria de correção quântica de erros nos anos 90.
Atualmente, poucos cientistas duvidam que será possível construir um computador baseado nas leis da Mecânica Quântica, e até mesmo a indústria tem apostado nessa possibilidade. Em 2019, a empresa Google afirma ter demonstrado a supremacia quântica, com seu computador de 53 qubits supercondutores [6]. Essa supremacia consiste em mostrar justamente que um computador quântico possui um poder que um clássico não tem, e tem se tornado uma discussão importante do ponto de vista de implicações tecnológicas. Mais rigorosamente, a supremacia quântica consiste em usar um computador quântico para resolver algum problema muito mais rápido do que em qualquer computador clássico atual.
1.2
Objetivo principal
Desenvolveremos nesse trabalho todo um arcabouço teórico para buscarmos evi-dências da supremacia quântica, usando especificamente computação quântica baseada em óptica linear. Nossa abordagem se baseará no estudo da teoria de complexidade compu-tacional [7] e, por meio dela, aprenderemos também como os cientistas da computação lidam com problemas computacionais.
Cap´ıtulo
2
Computac¸˜ao Cl´assica
There is learning to think like a computer scientist.
— Michael A. Nielsen and Isaac L. Chuang
Neste capítulo abordaremos brevemente a computação clássica como tópico prin-cipal, varrendo os aspectos mais importante da teoria de complexidade computacional, para posteriormente verificarmos seus impactos sobre uma computação baseada nas leis da mecânica quântica.
2.1
Modelos de Computação
Os cientistas da computação estão há quase um século trabalhando na construção de uma teoria sólida na qual a computação clássica se apoia. O nascimento dessa teoria pode ser remetido ao ano de 1930, devido a um problema proposto por David Hilbert. O problema, conhecido como entscheidungsproblem, indagava sobre a existência de um algoritmo capaz de resolver todos problemas matemáticos em princípio [8]. Foram Alan Turing [1] e Alonzo Church [2, 3] os responsáveis por responder negativamente a essa pergunta. A dificuldade da resposta residia em definir de forma matematicamente precisa o que é um algoritmo para uma tarefa computacional, haja visto que no contexto da época, a noção de algoritmo era muito primitiva, ainda apoiada na ideia de uma receita a ser seguida, o que não trazia muito insight matemático para resolver o problema proposto por Hilbert. Assim, Turing e Church, na busca pela resposta, foram os precursores na criação de modelos formais de computação.
2.1.1
Máquina de Turing
Turing criou um modelo matemático abstrato de computação chamado de Máquina de Turing (MT abreviadamente) [1]. Essa máquina é formada por alguns elementos básicos (ver Figura 1):
• Programa e unidade de controle: O programa dita o funcionamento da máquina, enquanto a unidade de controle nos diz qual o estado interno dela. Esses dois elementos em conjunto funcionam como uma CPU.
• Fitas: A máquina tem uma fita de input e pode ter várias fitas de trabalho, onde a última delas é dita fita de output. As fitas funcionam como memórias da máquina. • Cabeça de leitura/gravação: Essas cabeças são responsáveis por ler e gravar símbolos sobre as fitas. Sobre a fita de input só atua a cabeça de leitura, enquanto sobre as fitas de trabalho temos cabeças tanto de leitura quanto de gravação.
Figura 1 – Representação pictórica de uma Máquina de Turing com 3 fitas (imagem reproduzida de[7]).
Existe uma infinidade de Máquinas de Turing, cada uma adequada, via modifi-cações estruturais, de acordo com a necessidade do algoritmo. Embora tenhamos várias
manifestações do modelo de Turing, há algumas regras a todas as MT, as quais podem ser listadas da seguinte forma:
Toda máquina de Turing deve ser capaz de:
1. Ler um bit da fita de input;
2. Ler um bit ou símbolo das fitas de trabalho.
Baseado nos valores lidos:
1. Escrever um bit ou símbolo nas fitas de trabalho;
2. Parar e escrever zero ou um na última fita de trabalho (output). Ou então, repetir todo procedimento.
Embora a MT seja um modelo bastante simples, surpreendentemente ele é bastante poderoso do ponto de vista computacional, sendo capaz de realizar qualquer tarefa que um computador moderno consegue. Essa equivalência é conhecida como Tese fraca de Church-Turing.
Tese fraca de Church-Turing (informal)
Todos os problemas computacionais solúveis por um sistema físico realista podem ser resolvidos por uma MT.
Note que a tese faz menção aos problemas solúveis pois, como Turing mesmo mostrou, existem problemas incomputáveis em um computador clássico, como o halting
problem (ver [1]). Além disso, embora a tese seja um dos pilares da ciência da computação
moderna, ainda é uma hipótese, não um teorema.
Uma forma mais rigorosa de demonstrar o poder computacional de uma MT é discutida em [7], onde o autor mostra que uma MT é capaz de simular qualquer programa de computador, escrito em qualquer linguagem.
2.1.1.1 MT universal
Na seção 2.1.1, vimos os componentes básicos de uma MT. Nesta seção vamos apresentar uma definição matematicamente mais precisa do modelo, no objetivo de utilizar os insights matemáticos que ele traz para discutir a universalidade das MT.
Definição 1 Máquina de Turing (Formal)
Uma MT M é descrita por uma tupla (Γ, Q, δ) e por k fitas. O processo de computação ocorre nas fitas, por meio da leitura e escrita de bits sobre elas.
• Γ é o alfabeto da máquina. O alfabeto mais simples é dado por Γ = {, 0, 1}; • Q é um conjunto finito de possíveis estados de M. Q deve conter, necessáriamente,
qs e qh, que são os estados de partida e de parada, respectivamente;
• δ é a chamada função de transição da máquina, que é o programa segundo o qual a
máquina funciona;
• k ≥ 2, sendo necessário no mínimo uma fita de input e uma de trabalho/ output.
A função δ pode ser vista como um conjunto de regras que ditam o funcionamento da máquina. Um passo computacional na MT sempre segue a seguinte receita:
(i) Inicie no estado qs;
(ii) Leia um símbolo da fita de input. De acordo com o símbolo lido, mova a cabeça do input ou não;
(iii) Leia um símbolo da(s) fita(s) de output/trabalho. Escreva um novo símbolo nessas fitas;
(iv) Verifique o estado em que a máquina se encontra. Se for qualquer estado diferente de qh, mude para um novo estado interno. Se for o estado qh, conclua;
(v) Volte para o estado (ii), executando uma nova linha do programa.
Um objeto matemático pode ser mapeado numa bit string, como uma matriz, grafos, vetores, etc. Uma MT, por sua vez, sendo definida por uma função de transição, também pode ser mapeada dessa forma. Assim, podemos conceber uma MT que recebe, como
input, uma descrição de outra MT, levando ao conceito de MT universal.
Definição 2 MT universal
Seja Mα uma MT cuja representação em bit string é dada por α ∈ {0, 1}n. Existe
uma MT universal U que recebe como input (x,α) e simula o comportamento de Mα
2.1.2
Modelo de circuitos
Church, por sua vez, desenvolveu um modelo computacional baseado em circuitos. A proposta básica de um circuito clássico é receber um input de n bits e computar um output de m bits. Em outras palavras, um circuito computa alguma função f : {0, 1}n→ {0, 1}m.
Entretanto, é comum considerar-se o caso particular de problemas de decisão, isto é, aqueles cuja resposta é sim ou não. Nesse caso, o circuito correspondente computa uma função Booleana no qual o output é um único bit: um ou zero caso a resposta seja sim ou não, respectivamente.
Um circuito clássico pode ser decomposto em operações elementares, conhecidas como portas lógicas, ilustradas em 2:
Figura 2 – Representação de cinco portas lógicas clássicas e as respectivas tabelas de verdade.
Na prática, mesmo que encontremos um circuito capaz de computar uma função
f , a sua construção requer alguns cuidados, já que a montagem do circuito poderia ser
um procedimento mais complexo do que a computação de f em si. Para evitar problemas desse gênero, fazemos uso das famílias uniformes de circuitos. Vamos inicialmente definir o que são essas famílias, para depois impor as condições de uniformidade.
Definição 3 Família de circuitos Booleanos
Seja T : N → N uma função. Uma família de circuitos de tamanho T (n) será o conjunto {Cn}n∈N de circuitos Booleanos, onde Cn recebe um input de tamanho n e um
único bit de output. O tamanho, i. e. o número de portas lógicas, de cada circuito dessa família deve ser |Cn| ≤ T (n).
Note que essa definição se refere aos circuitos Booleanos, que serão os mais relevantes nesse trabalho, mas nada impede de adaptá-la para outras classes de circuitos.
A uniformidade de uma família comporta um conjunto de restrições impostas sobre a construção dos circuitos:
Definição 4 Família uniforme de circuitos
O conjunto {Cn} será uma família uniforme de circuitos se existir um algoritmo
computável em tempo poly(n), em alguma MT, cujo output seja uma descrição do circuito Cn.
A restrição de que o circuito possa ser descrito por uma MT em tempo polinomial está associada ao conceito de eficiência de um algoritmo, que discutiremos na próxima seção.
Por fim, é a condição de uniformidade que conecta o modelo de Turing ao modelo de circuitos de Church. Como todos circuitos factíveis devem ser prescritos por MT’s, o poder computacional dos dois modelos está inevitavelmente em pé de igualdade.
2.1.3
Computação eficiente e tempo
Será essencial para discussão das classes de complexidade na seção 2.2 o conceito de eficiência, que pode ser estabelecido da seguinte forma:
Definição 5 Computação eficiente (informal)
Seja um problema P parametrizado por um tamanho n e um modelo de computação qualquer M. Dizemos que P é eficientemente resolvido por M se existe um algoritmo em M que resolve P usando apenas recursos que crescem como polinômios em n.
Vale ressaltar que, a rigor, os recursos usados por um modelo para resolver algum problema podem ser de diferentes tipos, como tempo, memória, energia, etc. Contudo, por enquanto é suficiente deixarmos a definição de forma mais ampla, sem fazer alusão a nenhum recurso específico.
Um processo ineficiente será qualquer um que não for eficiente. Usualmente, associa-se uma computação ineficiente ao uso de recursos que crescem exponencialmente. Esassocia-se fato, associado à definição 5, nos permite classificar os problemas de duas formas:
• Problema tratável/fácil: Problema cujo melhor algoritmo que o resolve demanda recursos de ordem polinomial.
• Problema intratável/difícil: Problema cujo melhor algoritmo que o resolve de-manda recursos de ordem exponencial.
Algumas críticas podem ser feitas a essa classificação, mas deixaremos para discuti-las na seção 2.1.5, após apresentarmos a chamada notação assintótica.
Agora, podemos discutir os recursos em si, os quais serão relevantes na seção 2.2, onde discutiremos a classificação dos problemas em classes de complexidade. Essencial-mente, três recursos serão importantes: tempo, espaço/memória e energia. O recurso mais relevante para nossos propósitos será o tempo. Antes de apresentar uma definição formal para o mesmo, é interessante definirmos os chamados passos computacionais:
Definição 6 (Passos Computacionais)
Dada uma tarefa computacional, o número de operações básicas que uma MT deve realizar para executar essa tarefa é o que chamamos de passos computacionais.
Foi opcional o uso do modelo de Turing para expressar a definição acima, mas essa escolha não traz perda de generalidade. Além disso, o principal motivo da escolha se deve à facilidade de demarcar os passos computacionais na MT, já que o seu funcionamento é discretizado [ver (1)].
Finalmente, o recurso tempo pode ser definido da seguinte forma:
Definição 7 (Tempo como recurso computacional)
Uma MT realiza certa tarefa computacional, num tempo T(n), se executa no máximo T(n) operações básicas sob inputs de tamanho n.
Como já discutimos no começo do capítulo, Turing e Church foram os precursores na criação de modelos computacionais, mas posteriormente muitos outros modelos físicos e matemáticos foram desenvolvidos. Inevitavelmente surge o seguinte questionamento: qual é o melhor modelo para se fazer computação eficiente? Uma tentativa de resposta pode ser formulada na versão forte da Tese de Church-Turing
Tese forte de Church-Turing (informal)
Todos sistemas físicos realistas são computacionalmente equivalentes, no que diz respeito à computabilidade.
Em outras palavras, se essa tese forte for correta, o que não temos certeza, a computabilidade eficiente independe do sistema físico, bastando apenas que o sistema seja capaz de manipular informações codificadas em bits clássicos e seja factível.
2.1.4
Notação Assintótica
A definição 7 contém implicitamente a noção de uma análise assintótica do recurso tempo. Esse tipo de análise se baseia em observar o comportamento de funções em regimes extremos; por exemplo, no caso do tempo, podemos estudar o comportamento de T (n) no limite n → ∞.
A notação assintótica mais relevante para nosso trabalho será a chamada “Big-O notation” ou notação de Bachmann–Landau, definida a seguir da seguinte forma:
Definição 8 (Big-O Notation)
Uma função g(n) é O(f(n)) se o seu termo dominante cresce como f(n) ou mais devagar, isto é :
lim
n→∞
g(n)
f (n) < ∞ (2.1)
* < ∞ simboliza que o limite não vai para infinito.
Vejamos um exemplo simples e ilustrativo do uso dessa notação:
f (n) = n2 n→∞−→ f (n) = n2
g(n) = n2+ 100n n→∞−→ g(n) = n2+XX100nX
Portanto, f (n) = O(g(n)) e g(n) = O(f (n)). Em palavras, só nos importa o termo dominante nos limites assintóticos.
2.1.5
Polinomial vs exponencial
Vimos que a eficiência e ineficiência de uma computação está ligada ao uso de recursos que crescem como polinômios e exponenciais, respectivamente. Entretanto, o seguinte problema nessa classificação pode surgir:
E se compararmos n100 com 1, 001n? O polinômio n100 pode crescer muito mais
com consumo de recursos que crescem exponencialmente será, nesse caso, mais eficiente que um algoritmo que demande recursos com crescimento polinomial, o que parece contrariar a definição 5. Contudo, historicamente se observa que algoritmos que crescem como polinômios extremos geralmente são melhorados para polinômios mais modestos, em ocasião da descoberta de algoritmos mais otimizados. Além disso, eficiência assintótica nem sempre corresponde a eficiência na prática.
2.1.6
Computação quântica é possível?
Existe um ceticismo entre alguns cientistas da computação quanto à construção de um computador quântico. Muitos acham que seria confiar demais na teoria quântica, e que ela quebraria para um computador com muitos qubits. Uma razão para o ceticismo é o conteúdo da Tese forte de Church-Turing, a qual enunciaremos de modo mais formal a seguir:
Tese forte de Church-Turing (formal)
Qualquer modelo computacional realista pode ser simulado numa Máquina de Turing probabilística, sofrendo um aumento no máximo polinomial no número de operações.
Em outras palavras, se um problema não tem solução com recursos polinomiais na MT probabilística, ele não terá solução eficiente em nenhum outro modelo. Além disso, note que a definição formal acima utiliza a ideia discutida na seção 2.1.1.1, onde um modelo pode ser codificado numa bit string, e dado como input para uma MT, que por sua vez simula o comportamento desse modelo.
Como mencionado no início dessa seção, a tese forte é a grande inspiradora ao ceticismo de alguns cientistas sobre o modelo quântico de computação. Acreditar na superioridade de um computador quântico para resolver certas tarefas seria quebrar a tese, pois isso implica a existência de um modelo de computação que não é equivalente aos demais. É compreensível que parte da comunidade considere essa quebra improvável. Ela foi corroborada por vários exemplos históricos, e em algum sentido tem status empírico semelhante às leis da termodinâmica.
Um argumento menos drástico seria tratar a tese como um caso limite de uma tese mais geral, tal como a mecânica clássica é um limite de grandes massas e distâncias da mecânica quântica. Além disso, do ponto de vista da Física, a teoria quântica não impede a existência de um computador com muitos qubits, não tendo motivo para desacreditar no
modelo computacional quântico.
De qualquer forma, podemos acreditar que, dado o ritmo que a pesquisa nessa área se encontra, seu desenvolvimento ajudará na solução desse impasse. A construção de um computador quântico e, no futuro mais próximo, a demonstração de supremacia quântica, são exemplos de como o impasse poderia ser resolvido.
2.2
Complexidade Computacional
A teoria de complexidade computacional se propõe a quantificar os recursos mínimos necessários para se resolver certos problemas. Naturalmente, surgem uma gama de problemas muito parecidos, no que diz respeito ao esforço computacional/recursos que eles demandam de um determinado modelo. Assim, a semelhança entre alguns problemas nos permite classificá-los em classes de complexidade computacional (ver figura 3). Essa classificação leva em conta dois aspectos da complexidade de um problema: a análise do pior cenário e seu comportamento assintótico.
Figura 3 – Algumas classes de complexidade e como elas estão relacionadas (inclusões são denotadas de baixo para cima).
Podemos exemplificar essa classificação por meio do problema de fatoração de números inteiros. Primeiro, buscamos um algoritmo eficiente para fatorar um número qualquer de tamanho n, desconsiderando casos triviais do problema, como a fatoração de potências de 10. Essa exclusão de casos triviais é chamada análise no pior cenário, sendo necessária para garantir o funcionamento do algoritmo em casos arbitrários. Por fim, precisamos verificar como a demanda de recursos do algoritmo se comporta para n → ∞.
2.2.1
Problemas de decisão
Já vimos, na seção 2.1.2, que os problemas podem ser formulados na forma de problemas de decisão, o que nos permite restringir a atenção para circuitos Booleanos. Pode parecer restritivo, mas uma grande parcela de problemas interessantes podem ser enunciados dessa forma, como veremos no decorrer desta seção.
Para formular os problemas de decisão utilizaremos a terminologia de linguagens formais, que faz uso dos seguintes elementos:
• L → Linguagem/Problema; • Σ → Alfabeto;
• x → Pergunta na forma de uma string sobre o alfabeto Σ; • string → Sequência finita e ordenada de elementos de Σ; • Σ∗ → Conjunto de todas strings finitas de símbolos de Σ.
O melhor jeito de compreender essa terminologia é por meio de um exemplo prático. Exemplo: Decidir se um número é primo.
Utilizaremos o alfabeto binário
Σ = {0, 1},
de modo que o conjunto de todas strings finitas de símbolos do alfabeto é Σ∗ = {0, 10, 100, 110, ...}.
Os elementos de Σ∗ são números inteiros não negativos em codificação binária.
A variável x deve representar a pergunta do problema, que nesse caso é uma bit
x ∈ {000, 001, 010, 011, 100, 101, 110, 111}.
A linguagem L, que representa o problema, é o conjunto de todos os números primos:
L = {010, 011, 101, 111, ...}.
A pergunta deve ser dada como input para uma MT ou para um circuito. Dizemos que o problema é resolvido se a MT/circuito consegue decidir sobre a linguagem L, isto é, decidir se x ∈ L ou se x 6∈ L.
2.2.2
Classes de complexidade
Agora estamos prontos para tratar das classes de complexidade de fato. Dividiremos as classes em subseções estruturadas todas sempre da mesma maneira; iniciaremos com uma definição informal, seguida de uma definição formal, e terminaremos citando um exemplo de problema contido na respectiva classe.
Vale ressaltar também que podemos definir as classes de complexidade tanto em função do modelo de Turing quanto em função do modelo de Church. Entretanto, o modelo de circuitos será mais relevante nesse trabalho, de modo que definiremos as classes pela ótica do modelo de Church.
2.2.2.1 Classe P
Definição 9 Classe P (informal)
Problemas de decisão que podem ser resolvidos eficientemente por um modelo clássico de computação.
Definição 10 Classe P (formal)
Um problema de decisão L está em P ⇐⇒ ∃ uma família uniforme de circuitos clássicos {Cn} que decide em tempo polinomial sobre L, de modo que, para qualquer input
x de tamanho n:
• Se a resposta for sim (x ∈ L) o bit de output será 1; • Se a resposta for não (x /∈ L) o bit de output será 0;
Note que os problemas em P pode ser resolvidos utilizando recursos computacionais no máximo polinomiais.
Exemplo: Problema de decidir se um grafo de n vértices é completamente conectado.
Definição 11 Grafo completamente conectado
Um grafo G de N vértices é dito completamente conectado se, para cada par (x, y) de vértices, existir uma aresta que conecte x e y.
Suponha que o grafo possui N vértices. Um algoritmo para resolver esse problema é o seguinte:
(i) Escolha um vértice;
(ii) A partir desse vértice, verifique N − 1 possíveis arestas que o conecta aos demais vértices do grafo;
(iii) Repita os passos (i-ii) N vezes, já que o grafo possui N vértices;
Assim, precisamos fazer N (N − 1) verificações. Dizemos que T (n) = O(N2) e portanto o problema está em P.
Figura 4 – Exemplo de grafo completamente conectado.
Os problemas de P serão então aqueles que conseguimos resolver em nossos compu-tadores, e que portanto são considerados fáceis.
2.2.2.2 Classes NP e CoNP
Definição 12 Classe NP (informal)
Problemas de decisão cuja solução pode ser verificada eficientemente em um com-putador clássico, mesmo que a solução em si seja muito difícil de encontrar.
Note que verificar a solução de um problema NP é um problema da classe P.
Definição 13 Classe NP(formal)
Um problema de decisão L está em NP ⇐⇒ ∃ uma família uniforme de circuitos clássicos {Cn} que recebe como input
• Uma string x de n bits (pergunta);
• Uma string y de tamanho polinomial em n (testemunha).
Tal que,
• Se a resposta é sim, existe y para qual o circuito retorna 1; • Se a resposta é não, ∀y o circuito retorna 0.
É importante ressaltar que, dado um problema NP, a testemunha y nos convence quando a resposta é sim, mas nada podemos concluir quando a resposta é não.
Exemplo: Fatoração.
O problema de fatoração é notoriamente complexo, isto é, não se espera que fatoração esteja em P, embora não haja provas disso. Entretanto, dados os fatores, é fácil verificar que o número em questão pode ser escrito como produto dos mesmos, já que a operação de multiplicação está em P. Portanto, podemos eficientemente verificar a solução do problema, onde a testemunha y são os próprios fatores, e fatoração está em NP.
No exemplo abaixo, note que é muito mais fácil multiplicar que fatorar (ver no sentido da direita para esquerda):
67030883744037259(difícil)→=
Definição 14 Classe CoNP (informal)
Idêntica à classe NP, exceto que agora a testemunha y convence da resposta não.
Basta trabalharmos com a definição informal, notando que as linguagens de CoNP são o complemento das linguaguens de NP.
Exemplo: Problema de decidir se um número é primo.
Existe uma testemunha que nos convence com certeza de que um número não é primo, basta mostrar seus fatores. Por outro lado, uma testemunha para o caso em que o número é primo é menos óbvia, já que é preciso mostrar que o número é divisível somente por um e ele mesmo (embora essa testemunha exista, pois esse problema está em P).
Mediante essas considerações, temos a seguinte relação entre as classes:
P ⊆ N P ∩ CoN P
onde é fácil se convencer que P ⊆ N P , pois se conseguimos resolver eficientemente o problema, temos consequentemente uma testemunha, que é o próprio algoritmo que o resolve.
É comum o procedimento de redução para tentar resolver um dado problema. Uma redução é um mapa eficiente de um problema A para um B, de modo que é possível resolver B, e por um procedimento intermediário com custo no máximo polinomial, também resolver A [7, 8]. Um problema NP-difícil, é definido utilizando esse conceito:
Definição 15 Problema NP-difícil
Um problema é NP-difícil se qualquer outro problema de NP pode ser reduzido a ele.
A seguir, podemos definir problemas NP-completos:
Definição 16 Problema NP-completo
Um problema é NP-completo se for NP-difícil e estiver em NP.
Problemas NP-completos são os problemas mais difíceis entre os problemas de NP, e os exemplos desse tipo de problema vão desde conseguir pintar um mapa com três cores, até prever como uma proteína irá dobrar. O mais interessante é que qualquer que seja o
exemplo de problema NP-completo, encontrar um algoritmo eficiente que resolva um deles resolverá os demais.
Note também que, se todos problemas de NP possuirem solução eficiente, caimos na definição da classe P, e portanto P=NP. As consequências disso seriam inimagináveis e algumas até catastróficas, como a quebra de qualquer chave criptográfica. Em certos aspectos, essas consequências são exageradas, já que grande parte dos cientistas da área não acreditam que P=NP. Para mais discussões nesse sentido, veja [4].
2.2.2.3 Classes BPP e BQP
Já vimos que as MT’s podem sofrer algumas mudanças estruturais, sem compro-meter o modelo como um todo. Uma mudança interessante é a adição de aleatoriedade ao modelo, que pode ser alcançada incorporando-se duas funções de transição à máquina. Assim, em cada passo computacional, a máquina deve jogar uma moeda e decidir qual função de transição seguir, tendo 12 de probabilidade de seguir cada uma.
No modelo de circuitos, para obtermos o mesmo efeito das máquinas de Turing pro-babilistícas (MTP), o circuito deve ter acesso a inputs de bit strings geradas aleatoriamente. Assim, a classe BPP pode ser definida da seguinte forma:
Definição 17 Classe BPP (informal)
Problemas que podem ser resolvidos, em tempo polinomial, com uma probabilidade suficientemente alta.
Uma definição mais formal pode ser estabelecida da seguinte forma:
Definição 18 Classe BPP (formal)
Uma linguagem L está em BPP ⇐⇒ ∃ uma família uniforme de circuitos clássicos, rodando em tempo polinomial e que tem acesso a inputs de bit strings aleatórias,
tal que,
• Se x ∈ L, o circuito retorna 1 com probabilidade > 2 3;
• Se x /∈ L, o circuito retorna 0 com probabilidade de > 2 3;
Note que o algoritmo pode errar com probabilidade de 1
3, decidindo equivocadamente
sobre a linguagem L. Assim, para aumentar a confiabilidade nas funções computadas por circuitos aleatórios, podemos testar algumas vezes uma certa string x.
A classe BQP é definida através de um modelo quântico de computação (uma MT quântica ou circuitos quânticos, por exemplo) e nasce de uma extensão natural da definição da classe BPP:
Definição 19 Classe BQP (formal)
Uma linguagem L está em BQP ⇐⇒ ∃ uma família uniforme de circuitos quânticos, rodando em tempo polinomial, tal que para qualquer input x de n qubits,
• Se x ∈ L, o circuito retorna 1 com probabilidade > 2 3;
• Se x /∈ L, o circuito retorna 0 com probabilidade de > 2 3;
Note que a classe BQP possui uma aleatoriedade intrínseca, devido a natureza probabilística da Mecânica Quântica. Assim, diferente da classe BPP, não precisamos que os circuitos tenham acesso a inputs gerados aleatoriamente, basta que eles sejam circuitos quânticos (veja 3.1 para mais informações sobre esses circuitos).
2.2.2.4 Hierarquia Polinomial
A Hierarquia Polinomial (PH) não é uma classe de complexidade, mas sim uma torre construída pela união de várias classes, cuja base é formada por P, NP e CoNP (veja a figura 5). Conjectura-se que essa torre seja infinita, e para estruturarmos seus
respectivos níveis, vamos primeiro definir a classe Pp
2.
Definição 20 Classe Pp
2
Uma linguagem L está em Pp
2 ⇐⇒ ∃ uma família uniforme de circuitos clássicos
{Cn}, rodando em tempo poly(n), um polinômio q onde y, z ∈ {0, 1}q(|x|) e
x ∈ L ⇐⇒ ∃y tal que , ∀z; Cn(x, y, z) = 1
para todo x ∈ {1, 0}n.
É fácil verificar que, pelas definições 10, 13 e 14, os problemas de P, NP e CoNP, respectivamente, estão em Pp
2.
Para i ≥ 1, uma linguagem L ⊆ {0, 1}∗ está em Σpi ⇐⇒ ∃ uma família uniforme
de circuitos clássicos {Cn}, rodando em tempo polinomial, e um polinômio q : N → N tal
que, se u1, u2. . . ui ∈ {0, 1}q(|x|), então
x ∈ L ↔ ∃u1tal que , ∀u2. . . Qiui; Cn(x, u1, . . . , ui) = 1.
Onde Qi denota ∀ ou ∃ dependendo se i é par ou ímpar, respectivamente. A Hierarquia
Polinomial é o conjunto P H =S
iΣ p i.
Defina, para todo i,Qp
i = co
Pp
i. Assim, podemos construir os respectivos andares
da torre como na imagem 5.
Vimos uma definição bastante abstrata da união infinita de classes de complexidade que chamamos de Hierarquia polinomial. Cabe agora uma definição mais informal, para melhor elucidar como se estrutura essa torre.
Definição 22 Hierarquia polinomial (informal)
Dado um input x, existe y tal que, para todo z existe um w tal que, para todo...
f (x, y, z, w, ...) = 1? (2.2)
De fato, pela definição 22, vemos que o nível zero da torre contempla os problemas de P, pois são problemas do tipo :"dado x, f (x) = 1?". Por outro lado, o primeiro nível da torre contempla problemas de NP e CoNP, que podem ser enunciados como: "dado
x, existe y tal que f (x) = 1?. Para os níveis mais acima esse argumento facilmente se
Figura 5 – Torre das classes que compõem a Hierarquia Polinomial.
A conjectura sobre a torre ser infinita é uma generalização da hipótese de que P é diferente de NP. É fácil se convencer disso, pois se P=NP, a PH colapsaria para o primeiro andar. Além disso, essa conjectura se baseia em argumentos de contradição, do tipo: “Se tal hipótese fosse verdade, a PH colapsaria, logo a hipótese deve ser falsa”. Abordaremos esse argumento em mais detalhes no capítulo 5.
Para exemplos de problemas que estão no terceiro ou quarto nível da torre, veja [7]. Dessa forma o leitor pode se acostumar com o uso dos quantificadores alternados para enunciar problemas de decisão.
Cap´ıtulo
3
Computac¸˜ao quˆantica
Nature isn’t classical... and if you want to make a simulation of Nature, you’d better make it quantum mechanical, and by golly it’s a wonderful problem, because it doesn’t look so easy.
— Richard Feynman
Neste capítulo vamos estudar como se dá o processamento da informação quântica. Para isso, discutiremos a unidade fundamental de informação no contexto da Mecânica Quântica que, em analogia à computação clássica, foi nomeada de qubit (quantum bit). Usaremos o modelo de computação de circuitos, mas agora as portas lógicas deverão ser capazes de implementar operações unitárias sobre os qubits. O intuito não é expor todos detalhes sobre circuitos quânticos, mas apenas fazer uma breve introdução aos conceitos mais fundamentais dessa teoria (uma descrição completa pode ser encontrada em [8]). Por fim, estudaremos sistemas quânticos interessantes para se realizar computação quântica.
3.1
Circuitos quânticos
Nesta seção discutiremos o que se entende por computação quântica, utilizando especificamente o modelo de circuitos. Isso não traz nenhuma perda de generalidade para teoria, já que também é possível definir máquinas de Turing quânticas.
3.1.1
Qubits
Vimos que a unidade fundamental de informação para computação clássica é o bit. Note que não é necessário fazer alusão a nenhum sistema físico específico para construirmos a teoria da computação clássica, basta a ideia de bits como entes matemáticos e abstratos. Analogamente, os qubits irão partir da mesma premissa, onde, por meio de um tratamento
puramente matemático da unidade fundamental de informação quântica, podemos construir a teoria da computação quântica.
No formalismo da Mecânica Quântica, um qubit será um sistema de dois níveis, ao qual podemos associar um espaço de estados bidimensional. Esse espaço é formado por uma base ortonormal {|0i , |1i}, dita base computacional. Note que essa base representa os estados clássicos 0 e 1 que um bit pode assumir. Entretanto, tratando-se de qubits, a teoria quântica permite combinações lineares desses estados, o que não era possível no contexto clássico:
|ψi = α |0i + β |1i (3.1)
isso quer dizer que se tentarmos descobrir em qual estado o qubit está, observaremos que ele estará no estado 0 com probabilidade |α|2 e no estado 1 com probabilidade |β|2. Essa
informação é bem restritiva, já que o estado quântico, isto é, os valores de α e β, não podem ser determinados numa única medida.
Note que, pela teoria de probabilidade, |α|2 + |β|2 = 1, que é a condição de normalização do estado (3.1). Em outras palavras, |ψi é um vetor unitário do espaço de estados complexo associado ao qubit. Essa representação mais geométrica dos qubits nos permite visualizar os estados como pontos sobre a chamada esfera de Bloch. De fato, isso decorre diretamente da condição de normalização, através da qual podemos escrever que,
|ψi = cosθ
2|0i + e
iφsinθ
2|1i (3.2)
e esse estado configura um ponto qualquer sob a esfera de Bloch, a qual está ilustrada na figura 6.
Figura 6 –Esfera de Bloch.
Mesmo que o tratamento matemático dos qubits seja suficiente para o desen-volvimento da teoria, eventualmente, para fins de implementação tecnológica, torna-se
necessário falar sobre os sistemas físicos que são bons candidatos a representarem os qubits. Como apontado no começo dessa sessão, os qubits são sistemas quânticos caracterizados totalmente por dois vetores de um espaço de Hilbert bidimensional. Assim, um exemplo fácil de visualizar essa característica é um sistema onde temos dois possíveis estados de um elétron orbitando um átomo, digamos que seja um estado fundamental e o primeiro estado excitado. Outro bom candidato a qubit são as duas polarizações da luz. Mais especificamente, as duas polarizações de um fóton, que são entes que surgem de um tratamento quântico da luz.
3.1.2
Portas Quânticas
Veremos agora como podemos fazer o processamento de informações quânticas, sendo necessário recordar dos postulados da mecânica quântica. Por ora, precisamos do postulado da evolução temporal:
Postulado da dinâmica
Um sistema quântico fechado evolui segundo uma transformação unitária U: |ψfi = U |ψii
Note que, diferente da evolução contínua imposta por um Hamiltoniano, o operador U impõe uma evolução discretizada, importando apenas o estado final e o inicial de um dado sistema quântico. Além disso, sendo U um unitário, é fácil mostrar que esse operador preserva o produto interno, e consequentemente a normalização. Assim, U mapeia estados em estados, o que é uma característica fundamental para manipular os qubits. Portanto as portas quânticas deverão corresponder a operações unitárias.
Seja então uma porta quântica U sobre um único qubit. Na notação de circuitos, podemos representá-la como na figura 7, onde a linha representa um qubit, e podemos ver que no início e ao final do circuito temos os estados de entrada e saída, respectivamente.
Figura 7 – Circuito simples ilustrando o postulado da dinâmica.
da seguinte forma:
Postulado de sistemas compostos
O espaço de estados de um sistema físico composto é o produto tensorial dos espaços componentes.
Portanto, se nosso sistema for composto por dois qubits, o estado do sistema global terá dimensão quatro. Podemos ver, na figura 8, esse postulado representado na notação de circuitos, onde o estado mais geral será |ψi ⊗ |Φi = |ψi |Φi.
Figura 8 –Circuito simples ilustrando o postulado da para sistemas compostos.
Outro aspecto importante sobre a notação de circuitos é o tempo. Dizemos que o tempo fluirá da esquerda para direita, e isso traz um efeito inverso quando escrevemos a atuação das portas, isto é, devemos ler a atuação consecutiva das portas da direita para esquerda, contrário ao sentido do tempo. Por exemplo, considere o circuito da figura 9. O
output desse circuito é dado por |ψfi = V U |ψii.
Figura 9 – Circuito com duas portas de 1 qubit.
Na figura 10, temos as principais portas utilizadas para se realizar a computação quântica. Note, na última coluna, da esquerda para direita, que as portas quânticas podem ser representadas matricialmente, o que é esperado, pois elas representam transformações lineares.
A forma de atuação de cada uma das portas será elucidada à medida em que necessitarmos utilizá-las. Para melhor compreensão sobre circuitos, tanto clássicos quanto quânticos, veja [7, 8].
Figura 10 –Lista com as principais portas de 1 e 2 qubits, e suas representações matriciais
3.1.3
Computação quântica universal
Vimos que circuitos quânticos implementam operações unitárias sobre qubits. Nesse contexto, podemos definir computação quântica universal da seguinte forma:
Definição 23 Computação quântica universal (informal)
Dizemos que um sistema quântico realiza computação quântica universal se for capaz de implementar qualquer transformação unitária no seu espaço de estados.
Da definição 23, surge a pergunta de como implementar qualquer transformação unitária. A resposta reside nos ditos conjuntos universais de portas quânticas, cuja definição pode ser expressa da seguinte forma:
Um conjunto de portas,
G = {gi} (3.3)
é universal para computação quântica se um circuito composto somente de elementos gi ∈ G
for capaz de gerar densamente o SU (2n).
Gerar densamente quer dizer que existem sequências de portas de G que aproximam arbitrariamente qualquer transformação do SU (2n). Mediante as considerações feitas até
aqui, chegamos a um dos teoremas mais importantes da computação quântica, e que diz respeito a universalidade de um conjunto de portas:
Teorema 1 O conjunto G = {H, T, CN OT } é universal para computação quântica.
Para uma prova do teorema veja [8].
Na seção 2.2.2.3, definimos a classe BQP usando uma família uniforme de circuitos quânticos. Agora, de acordo com a discussão de universalidade feita, podemos dizer que a classe BQP se refere a circuitos com poly(n) portas de um conjunto universal, como o {H, T, CN OT }.
Cap´ıtulo
4
Computac¸˜ao quˆantica e ´optica linear
What, then, is light according to the electromagnetic theory? It consists of alternate and opposite rapidly recurring transverse magnetic disturbances, ac-companied with electric displacements, the direction of the electric displacement being at the right angles to the magnetic disturbance, and both at right angles to the direction of the ray.
— James Clerk Maxwell
Até agora, discutimos os qubits como sendo entidades puramente matemáticas e abstratas. Contudo, sabemos que precisamos buscar sistemas físicos realizáveis para criar os qubits e manipulá-los na prática, alcançando assim um status de computação quântica aplicada, fugindo um pouco do contexto abstrato e teórico que vinhamos trabalhando.
Nesse capítulo vamos falar especificamente da implementação de uma computação quântica usando óptica linear [9]. Discutiremos brevemente o tratamento quântico da luz [9–11] e o consequente surgimento dos fótons. Identificaremos como produzir qubits nesse contexto, como construir portas que atuem nesses qubits e, por fim, discutiremos o modelo KLM [9, 11].
4.1
Quantização do campo eletromagnético
Sabemos, através da teoria clássica do eletromagnetismo, que a luz é uma onda eletromagnética oriunda de oscilações alternadas e transversais entre um campo elétrico e um campo magnético. As características dos campos ~E e ~B, assim como as equações
de onda que governam suas dinâmicas, seguem diretamente das equações de Maxwell. Contudo, essa descrição da luz é totalmente clássica, e existem regimes onde uma descrição quântica da luz se faz necessária.
A transição de uma descrição clássica de um sistema físico para uma descrição quântica se faz por meio do processo de quantização canônica. Para ilustrar a ideia geral de como funciona essa quantização, vamos tomar um sistema de N partículas de massa m.
Primeiramente, devemos construir o Hamiltoniano clássico associado a esse sistema de N partículas: H(q1, ..., qN; p1, ..., pN) = N X i=1 p2 i 2m + V (q1, .., qN) (4.1) É importante que H esteja em sua forma canônica, isto é, (pi, qi) são variáveis canônicas
conjugadas. Isso garante que as equações de Hamilton sejam da seguinte forma:
dqi dt = ∂H ∂pi , (4.2) dpi dt = − ∂H ∂qi . (4.3)
Tendo obtido a forma canônica de H, o processo de quantização consiste em trocar as variáveis canônicas por operadores,
qi → ˆqi,
pi → ˆpi,
e em seguida impor a seguinte relação de comutação entre os operadores:
[ ˆqi, ˆpj] = δiji~ (4.4)
A quantização do campo eletromagnético deve seguir o mesmo procedimento descrito acima. Isso requer encontrar as variáveis canônicas nesse contexto, garantindo que as equações dinâmicas sejam equações diferenciais desacopladas e de primeira ordem, isto é, que sejam no molde das equações de Hamilton.
4.2
Estados do campo quantizado
É possível mostrar (veja [9, 10]) que pelo processo de quantização descrito na seção 4.1, o campo eletromagnético (EM) quantizado pode ser analisado em termos dos modos normais, onde cada modo respeita uma equação de movimento de um oscilador harmônico simples. Em outras palavras, um tratamento quântico da luz leva à dinâmica de infinitos osciladores harmônicos independentes. Assim, os estados do campo devem ser obtidos de acordo com os estados de cada modo.
Como temos osciladores desacoplados, o Hamiltoniano de um único modo é dado por, Hm = ~m ˆ a†mˆam+ 1 2 (4.5) onde seus os autovetores são denotados por |nim, com n ∈ N.
Notavelmente o Hamiltoniano (4.5) comuta com o operador número Nm = ˆa†mˆam,
de modo que os autovetores |nim também são autovetores de Nm. Como o Hamiltoniano
quântico do campo EM é a soma dos Hamiltonianos de cada modo, o estado do campo pode ser dado por:
|ψi = |n1i1⊗ |n2i2⊗ ... ⊗ |niii⊗ ... (4.6)
Esse estado representa que em cada modo normal i temos ni fótons. Esses fótons são
excitações dos modos normais, e consequentemente do campo EM.
Os estados na forma 4.6 são chamados estados de Fock, e embora eles formem uma base do espaço de estados do campo quantizado, nem todo estado do campo será dessa forma (veja [9, 11]). Outro aspecto relevante desses estados consiste no chamado estado de vácuo |0i, através do qual podemos construir um estado arbitrário para o campo utilizando os operadores de criação e aniquilação:
|ψi = (ˆa
†)n
√
n! |0i . (4.7)
Esse estado de vácuo é o único estado aniquilado por todos operadores de aniquilação, correspondendo ao estado de menor energia possível do campo EM.
4.3
Óptica Linear
Vimos, na seção anterior, a interpretação do campo quantizado em relação aos modos normais. Assim, para realizarmos computação quântica com a luz, precisamos de portas que executem transformações sobre os modos do campo, as quais serão abordadas nas seções 4.5 e 4.6.0.1.
Vamos nos restringir às transformações que sejam lineares, já que elas são tecnologi-camente mais factíveis do que transformações não lineares. Em geral, uma transformação linear sobre os modos é dada, matematicamente, como uma transformação de Bogoliubov [9] sobre os operadores de criação e aniquilação. Como trataremos apenas de computação quântica com óptica linear, essa transformação se traduz, via formalismo de Heisenberg, por meio do seguinte Hamiltoniano:
H =X
j,k
Ajkaˆ
†
Note que esse Hamiltoniano comuta com o operador número ˆn, e isso implica na
conservação dos fótons, que é um aspecto importante da óptica linear. Na realidade, a característica mais fundamental da óptica linear reside no fato de que as transformações dos modos devem ser feitas segundo a equação (4.8), o que garante um mapeamento dos operadores de criação e aniquilação em combinações lineares desses operadores, nunca de segunda ou maior ordem. Explicitamente, a evolução desses operadores será:
ˆ ai → ˆbi = e i ~Hˆaie− i ~H = X i,j Uijaˆj (4.9)
4.4
Qubits e fótons
Sabemos que o estado mais geral de um qubit corresponde a um ponto na superfície da esfera de Bloch, e que deve ser um sistema quântico de dois níveis (veja 3.1.1). Para usarmos a luz como qubit, faremos codificações sobre os graus de liberdade do fóton, associando a cada grau de liberdade um espaço de Hilbert bidimensional.
Dois graus de liberdade são relevantes nesse sentido: os modos espaciais, indexados por cada vetor de onda kkk, e as polarizações, indexadas por λ. Assim, os qubits podem ser
codificados1 em dois modos espaciais (dois feixes luminosos) ou duas polarizações distintas.
Se optarmos por tratar os qubits como dois modos espaciais separados, podemos utilizar uma codificação onde a base computacional do sistema será dada da seguinte forma:
|0iL= ˆa†|ψ0i = |1, 0ia,b, (4.10)
|1iL= ˆb†|ψ0i = |0, 1ia,b, (4.11)
ou seja, a base computacional no espaço codificado é dado por um fóton no modo a, um fóton no modo b, e |ψ0i é o estado de vácuo.
Por outro lado, escolhendo-se os qubits como as polarizações dos fótons, podemos trabalhar com a seguinte base computacional codificada
|0iL = ˆa†H |ψ0i = |Hi , (4.12)
|1iL = ˆa†V |ψ0i = |V i . (4.13)
4.5
Portas de um qubit
Operações sobre estados de um qubit devem representar rotações na esfera de Bloch, e sabemos que as matrizes de Pauli serão os geradores infinitesimais dessas rotações. 1 Essa codificação é conhecida como dual rail.
Veremos a seguir que essas operações podem ser implementadas por phase shifters, beam
splitters e rotações de polarização, já que elas podem geram todos autoestados das matrizes
de Pauli [11]. Assim, a ideia desta seção será trabalhar a matemática por trás dessas operações.
Vimos que os estados do campo quantizado são dados em função dos operadores de criação atuando no estado de vácuo. Usaremos então o formalismo de Heinsenberg para verificar como os operadores de criação e aniquilação evoluem mediante a aplicação das transformações lineares, já que acompanhar a evolução de um estado arbitrário pode ser uma tarefa bastante complexa. Além disso, a evolução pela atuação de uma porta não será uma evolução temporal ordinária, de modo que o operador U(t) na realidade será um U (φ), obtido pela exponenciação do chamado Hamiltoniano de interação, cuja forma depende do espaço codificado que estamos trabalhando.
Phase Shifter: Essa porta muda a fase do campo eletromagnético, atuando em um único modo por vez. Isso nos dá um Hamiltoniano de interação que é H(φ) = φˆa†inaˆin
(~ = 1). Portanto, temos a seguinte transformação ˆ
a†out = eiφˆa†inˆainˆa†
ine
−iφˆa†inaˆin = e−iφˆa†
in (4.14)
onde usamos a equação Heisenberg com U (φ) = e−iH(φ) e a relação de Baker-Campbell (veja [12]). Físicamente, uma porta phase shifter pode ser implementada usando um material com índice de refração diferente daquele onde os fótons estejam se propagando até atingir a porta.
Figura 11 –Porta phase shifter.
Beam Splitter: Essa porta mistura dois modos distintos, e também atua nos qubits codificados em modos espaciais dos fótons. O Hamiltoniano de interação deve envolver os dois modos, garantindo sua Hermiticidade:
HBS = θeiφaˆ†inbˆin+ θe−iφˆainˆb
†
Assim como fizemos para a porta phase shifter, a evolução segundo esse Hamiltoniano de interação será
ˆ
a†out = cos θˆa†in+ ie−iφsin θˆb†in, (4.16) ˆb†
out = ieiφsin θˆa
†
in+ cos θˆb
†
in, (4.17)
onde ˆa†out e ˆb†out foram calculados usando novamente a relação de Baker-Campbell.
Fisicamente, essa porta é implementada por um espelho que permite a passagem de uma certa quantidade de luz, refletindo o restante. Vale destacar que, embora a porta misture dois modos espaciais, ela ainda é uma porta de um qubit, já que estamos trabalhando no espaço codificado de um fóton que pode escolher entre dois modos óticos distintos.
Figura 12 – Porta Beam Splitter.
Fisicamente, o BS pode ser descrito por qualquer escolha dos ângulos θ e φ, onde
θ mede a transmissividade, e φ depende do revestimento do espelho. Assim, usando as
portas phase shift e beam splitter podemos implementar quaisquer operações de um qubit codificado nos modos espaciais do fóton.
Por fim, vejamos uma porta que atua em qubits codificados nas polarizações do fóton.
Rotação de polarização: O funcionamento é análogo ao do beam splitter, mas agora teremos a mistura de dois modos de polarização. Assim, o Hamiltoniano de interação utilizado na evolução dos operadores será o mesmo do BS, e teremos que:
ˆb† 1 = cos θˆa † 1+ ie iφsin θˆa† 2, (4.18) ˆb† 2 = ie iφsin θˆ a†1+ cos θˆa†2, (4.19)
onde o modo espacial está fixo, e a polarização é dada por λ ∈ {1, 2}.
Figura 13 –Porta Rotação de Polarização.
4.5.1
Interferômetro
Com as portas phase shifters e beam splitters podemos montar um circuito ótico para manipular os qubits fotônicos. Um circuito ótico composto por essas portas é chamado de interferômetro.
Podemos pensar nesse circuito como uma transformação unitária U de N modos incidentes, onde essa transformação unitária será uma matriz N × N . Contudo, é possível mostrar que essa matriz N × N pode ser decomposta em termos de matrizes 2×2 unitárias, o que equivale ao uso de O(N2) phase shifters e beam splitters [13].
Figura 14 – Interferômetro de N modos (imagem retirada de [11])
Esse é o circuito mais geral que se utiliza de óptica linear para processamento de qubits fotônicos.
4.6
Portas de dois qubits
Até agora vimos como implementar portas de um qubit, e como montar circuitos com elas. Contudo, para de fato construir um computador quântico universal, precisamos ser capazes de implementar portas de dois qubits, através das quais podemos gerar estados emaranhados. De fato, emaranhamento é impossível de ser gerado apenas com portas de um qubit atuando em estados não emaranhados ou estados produto.
Imagine uma operação de dois qubits que faça o seguinte mapeamento: |H, Hiab → √1
2(|H, Hicd+ |V, V icd), (4.20) ou seja, mapeia um estado produto em um estado de Bell. Se olharmos para os operadores de criação e aniquilação, o mapeamento ocorre da seguinte forma:
ˆ a†Hˆb†H|ψ0i → 1 √ 2 ˆ c†Hdˆ†H + ˆcV†dˆ†V|ψ0i . (4.21)
É preciso recordar também que estamos lidando apenas com óptica linear e trans-formações unitária, logo esses operadores se transformam da seguinte forma:
ˆ a†Hˆb†H = X j Uj1ˆc † j ! X k Uk2dˆ † k ! . (4.22)
onde, por construção, essa expressão é separável, enquanto que o estado gerado é emara-nhado. Em outras palavras, usando portas de um qubit e uma dinâmica de óptica linear, é impossível gerar o estado de Bell acima, sendo necessário utilizar portas de dois qubits. Diferente das portas de 1 qubit, que podem ser facilmente implementadas usando a codificação dual rail, a implementação de uma porta de dois qubits com óptica linear é muito mais complexa, e não poderá ser feita deterministicamente. Matematicamente, isso se deve à linearidade das transformações de Bogoliubov, que é a transformação que rege as mudanças nos operadores de criação e aniquilação (ver [9]). No entanto, como veremos agora, é possível realizar essas portas de forma probabilística apenas com óptica linear. 4.6.0.1 Porta CZ probabilística
Para os propósitos desse trabalho, basta falarmos da porta de dois qubits CZ. Um circuito quântico que implementa essa porta pode ser visto na figura 15, na qual o input |ξi |φi consiste de quatro modos óticos distintos, e pela codificação discutida em 4.12, temos portanto dois qubits.
Figura 15 –Porta CZ.
Os componentes do circuito são duas caixas pretas e dois beam splitters 50:50 (em que as probabilidades de transmissão e reflexão coincidem). A caixa preta tem o seguinte efeito numa superposição de estados de Fock:
|ψi = a |0i + b |1i + c |2i −→ a |0i + b |1i − c |2i . (4.23) O nome caixa preta se origina de uma ignorância a priori de como construir um circuito específico para computar certa função. Embora em muitos casos essa ignorância seja mantida, isso não será verdade para o circuito da Figura 15, no qual é possível efetivamente abrir essas caixas pretas. Antes de abri-las, entretanto, vejamos como o circuito atua na base codificada:
|00iL−→ |00iL (4.24)
|01iL−→ |01iL (4.25)
|10iL−→ |10iL (4.26)
É fácil verificar os mapeamentos acima. Como as caixas pretas só atuam de forma não trivial em modos com dois fótons, como vimos na Eq. (4.23), os únicos efeitos significativos serão os dos beam splitters. Contudo, o último BS inverte o efeito do primeiro, e de fato obtemos os resultados (4.24)-(4.26).
Para o elemento |11iL da base lógica, será importante verificarmos a ação do BS explicitamente. Um BS 50:50 pode ser implementado, matricialmente, da seguinte forma:
ˆb† 1 ˆb† 2 ! = √1 2 1 i i 1 ! ˆ a†1 ˆ a†2 ! . (4.27)
Sua atuação sobre estado |11i realiza o mapeamento: |11i → |20i − |02i√
Note que isso significa que os fótons sempre saem juntos do BS, e esse efeito é conhecido como Hong-Ou-Mandel (HOM) [14]. Como o fenômeno HOM força os dois fótons a viajarem juntos pelo circuito, as duas caixas pretas colocarão um fase de (-1) global no estado, e o segundo BS inverterá o efeito HOM. Assim, o efeito total será |11i → − |11i, o que completa a prova de que esse circuito é uma CZ.
A implementação da CZ probabilística por meio do circuito da Figura 15 foi proposta pioneiramente por Knill, Laflamme e Milburn [15], onde mostrou-se que as caixas pretas podem ser abertas num circuito que envolve apenas elementos de óptica linear e fotodetectores perfeitos (veja a Figura 16).
Figura 16 – Porta CZ probabilística.
O input desse circuito é |ψi |01i, onde |01i denota dois modos auxiliares: um no estado de vácuo e o outro populado por um fóton, respectivamente. Além disso, esse circuito é probabilístico (já que ele erra sempre que o resultado de saída não for |10i) com probabilidade de sucesso de 14, como discutido em [9]. Na realidade, como argumentado em [16], essa probabilidade pode ser otimizada para no máximo 12.
Vale destacar ainda que ao só aceitarmos o output |ψi |10i, estamos usando um procedimento que chamamos de pós-seleção. Em poucas palavras, a pós-seleção condiciona a resposta correta de saída a um evento específico, que no caso do circuito usado, é o evento de medir 01 nos modos auxiliares. Retornaremos a essa discussão no capítulo 5, onde será apresentada uma definição mais formal dessa ferramenta.
Por fim, sabemos que CZ e portas de um qubit formam um conjunto universal para computação quântica, logo, óptica linear com pós-seleção é universal, fato que bastará para discutirmos supremacia quântica no próximo capítulo. Entretanto, se temos uma porta CZ com probabilidade de sucesso p, a probabilidade de sucesso de uma sequência com M delas cairá como pM (veja [9]). Logo, uma única porta probabilística não é suficiente para computação universal.
Nesse sentido, o chamado protocolo KLM [15] foi criado. Esse protocolo utiliza ideias de teletransporte e correção quântica de erros, garantindo um aumento na probabilidade de sucesso da CZ, com custo no máximo polinomial. Graças a esse trabalho, foi mostrado
Cap´ıtulo
5
Supremacia Computacional
More often than not, the only reason we need experiments is that we’re not smart enough.
— Scott Aaronson
Neste capítulo trataremos da chamada supremacia ou vantagem quântica, a qual consiste em demonstrar que computadores quânticos resolvem certas tarefas mais eficiente-mente que computadores clássicos. Verificaremos como a simulação de sistemas quânticos restritos1impacta a teoria de complexidade computacional, e como esses impactos fornecem
evidências para corroborar a ideia de uma supremacia computacional quântica. Mais especificamente, o sistema restrito tratado neste capítulo será o modelo de computação baseado em óptica linear.
No ano de 2019, a empresa Google, afirmou ter demonstrado a supremacia utilizando um computador quântico de apenas 53 qubits supercondutores [6]. Também em 2019, cientistas chineses trataram do mesmo tema utilizando um computador quântico baseado em óptica [17]. De fato, esta área de pesquisa é bastante atual, e seu estudo pode desencadear avanços tecnológicos importantes para computação quântica universal.
5.1
Circuitos com pós-seleção
No capítulo 4 discutimos brevemente o conceito de pós-seleção, quando construimos a porta CZ probabilística. Agora, veremos o impacto que pós-seleção tem sobre algumas classes de complexidade e a discutiremos de forma mais aprofundada.