Você está na página 1de 73

Linguagens de Programação Quântica: Um

Apanhado Geral

Juliana Kaizer Vizzotto


ESIN/UCPel

Antônio Carlos da Rocha Costa


PPGINF/UCPel

10 Workshop-Escola de Computação e Informação Quântica


Outubro 2006
Roteiro

Motivação
Arquiteturas para Computação Quântica
Propriedades dos dados quânticos
Linguagens com dados quânticos e controle clássico
QCL - Bernhard Ömer, 1998
QPL - Peter Selinger, 2004
Propriedades do controle quântico
Linguagens com dados e controle quânticos
QML - Altenkirch e Grattage, 2005
QHaskell - Vizzotto e Rocha Costa, 2006
Motivação I - Computação Quântica

Computação quântica é uma área jovem!


(Feynman & Benioff, 1982) - Sistema quântico pode ser
utilizado para executar computações
(Deutsch, 1985) - Máquina de Turing quântica
(Shor, 1994) - Algoritmo quântico para fatoração de números
inteiros
(Grover, 1996) - Algoritmo quântico para procura

1. Evidência que computadores quânticos podem realmente


executar algumas tarefas mais eficientemente que os computadores
clássicos!

2. Desenvolvimento de esquemas experimentais para execução de


tais algoritmos!
Motivação II - Programação Quântica

Programação quântica → Linkar 1. e 2.

Estudar algoritmos quânticos do ponto de vista de programação


(Knill, 1996) - primeira proposta de pseudo-código para
programação quântica

Programação quântica:
Compreensão das estruturas de dados e controle quânticos
Entendimento da lógica de programação quântica
Impulsionar o desenvolvimento de algoritmos quânticos
Motivação III - Programação Quântica

Mesmo que a implementação de computadores quânticos ainda


seja muito limitada: poucos qubits em laboratórios!
Acredita-se que a pesquisa na área de linguagens de
programação quântica é consideravelmente importante!
tanto para o desenvolvimento de algoritmos
quando para fundamentos de linguagens quânticas
Além disso:
Em computação clássica o trabalho em linguagens de
programação é datado vários anos antes do desenvolvimento
de dispositivos computacionais práticos na década de 50.
Church, 1936 - Cálculo lambda
Turing, 1936 - Máquina de Turing Universal
Arquiteturas para Programação Quântica

(Knill, 1996): QRAM - Dados quânticos e controle clássico

hardware e software Memoria Quantica


classicos

Entrada Codigo para operacoes


classica quanticas
...

Resultados de
saida Medidas
classica representacao fisica
dos recursos quanticos
Arquiteturas para Programação Quântica

QRAM - Dados quânticos e controle clássico


Máquina clássica controla a memória quântica (recursos
quânticos)
Recursos quânticos: coleção de qubits
Instruções:
Inicializações
Evoluções unitárias
Medidas
Operadores quânticos como componentes pré-definidos:
codificam a definição de um circuito quântico
Arquiteturas para Programação Quântica

(Deutsch, 1985): Máquina de Turing Quântica (MTQ) - Dados e


Controle quânticos
Arquiteturas para Programação Quântica

(Deutsch, 1985): Máquina de Turing Quântica (MTQ) - Dados e


Controle quânticos
Estado da fita é uma coleção de qubits, possivelmente em
superposição.
Como o controle da fita também é quântico, também pode
estar em superposição.

A MTQ evolui em direções diferentes simultaneamente.


Propriedades dos Dados Quânticos

Paralelismo quântico: estado quântico pode estar em uma


superposição dos seus estados básicos:

α|0i + β|1i

Exemplo: versão do algoritmo de Deutsch


Considerando uma função f : B → B
Queremos saber se f é constante ou balanceada
Classicamente: duas aplicações de f

Em uma linguagem quântica: f pode ser aplicada uma única vez!

f (α|0i + β|1i)
Propriedades dos Dados Quânticos

Emaranhamento: estado quântico é GLOBAL


Evolução unitária global do estado!

Exemplo: considerando um estado de dois qubits como:

α|00i + β|11i

Problema 1. Não temos como separar o primeiro qubit do segundo!

Problema 2. A não ser fazendo uma medida!


O que causa um efeito colateral no estado quântico!

meas(α|00i + β|11i) 7→ {|00i, |11i}


Propriedades dos Dados Quânticos

Non-clonning: dado quântico não pode ser copiado

Exemplo: considerando um estado como

α|0i + β|1i

Não temos como saber os valores de α e β!


Se tentamos, medimos!! Colapsando o estado e perdendo o
estado original!
Linguagens com Dados Quânticos e Controle Clássico

QCL - Bernhard Ömer, 1998


Extensão de uma linguagem clássica estruturada como C.
Possui dados clássicos e estruturas de controle (comandos)
clássicos.

Parte quântica da linguagem:


Essencialmente trata a manipulação de registradores quânticos
através de estruturas de controle clássicas!
Dado quântico é manipulado através de referências a um vetor
de dados quânticos.
QCL

Estado da máquina quântica


O estado da máquina com n qubits é dado por Hn
Exemplo: máquina quântica com 4 qubits
qcl> dump;
: STATE : 4 qubits free
1 |0000>

Registradores quânticos
Qubits: registradores quânticos de tamanho 1.

qcl> qureg a[1]; qureg b[1] // alocando 2 qubits


qcl> Rot(−π/3,a) // rotando o primeiro qubit
qcl> Had(b) // hadamard no segurndo qubit
QCL

Estado da máquina quântica após alocação:

|Ψi = |00i ⊗ (H|0i) ⊗ (Rx (π/3)|0i)


qcl> dump;
: STATE : 2 / 4 qubits allocated, 2 / 4 qubits free
0.612372 |0000> + 0.612372 |0010> +
0.353553 |0001> + 0.353553 |0011>

Considera-se um conjunto universal de portas elementares!


Portas elementares são as primitivas fundamentais para manipular
o estado da máquina quântica! Como atribuições em computação
clássica!
QCL

Operadores sobre registradores quânticos


Dado um operador unitário agindo sobre m qubits
U : Hm → Hm , a ação de U sobre um registrador em uma
máquina quântica com n qubits é dada por:

U(s) = Π†s (U ⊗ I (n − m))Πs

Todos os operadores quânticos em QCL são definidos dessa


maneira!
O tamanho do registrador operando é passado como
parâmetro.
QCL

Operadores sobre registradores quânticos


Portas elementares são tratadas como subrotinas externas
extern operator H(qureg q)
extern operator RotX(real theta, qureg q)
extern qufunct CNOT(qureg q, quconst c)
Chamadas à portas elementares podem ser invertidas:
qcl> qureg a[1];
[1/4] 1.0 |0000>
qcl> H(a);
[1/4] 0.7071 |0000> + 0.7071 |0001>
qcl> !H(a);
[1/4] 1.0 |0000>
QCL

Operadores sobre registradores quânticos


Condicionais
extern cond Not(qureg q) // not condicional
O registrador de controle é passado como um parâmetro
implı́cito se o operador é utilizado no corpo de um condicional.
Exemplo:
qcl> qureg s[1]; qureg e[2];
qcl> if e {Not(s);} // invert s para e = 11
QCL
Operadores sobre registradores quânticos
Medidas
Observáveis são restritos à base computacional
Retorna um valor clássico
Reduz o estado

qcl> qureg q[2];


qcl> int m;
qcl> H(q);
[2/4] 0.5 |0000> + 0.5 |0001> +
0.5 |0010> + 0.5 |0011>
qcl> measure q,m;
[2/4] 0.5 |0011>
qcl> print m;
: 3 // 2 ** 0 + 2 ** 1
QCL

Operadores sobre registradores quânticos


Registradores, portas elementares e medidas são suficientes para
implementação de algoritmos quânticos

QCL apresenta subrotinas quânticas!


Exemplo:
operator U(qureg x,qureg y){
H(x);
Not(y);
}
QCL

Copiando dado quântico?


Duplicação de uma referência a um qubit
qcl> qureg x[1];
qcl> CNOT(x,x)
HUMMMM???
Sintaticamente permitido escrever!
Erro detectado em tempo de execução somente!
QCL

Algoritmo de Deutsch
Algoritmo probabilı́stico: com uma aplicação da função
f : B → B consegue-se calcular f (0) ⊕ f (1) com probabilidade
1/2 com uma única aplicação de f .

boolean g(boolean x) { ..}

qufunct G(qureg x, qureg y){...}

operator U(qureg x, qureg y) {


H(x);
G(x,y);
H(x & y);
}
QCL

Algoritmo de Deutsch
procedure deutsch(){
qureg x[1];
qureg y[1];
int m
{ reset ;
U(x,y);
measure y,m
} until m ≡ 1;
measure x,m;
print "g(0) xor g(1) = ",m;
reset;
}
Linguagens com Dados Quânticos e Controle Clássico

QPL - Peter Selinger, 2004


Primeira linguagem funcional quântica!
Cada operação transforma um conjunto especı́fico de entradas
em saı́das.
A primeira versão de QPL tinha uma sintaxe baseada em
diagramas de fluxo com operações para inicialização,
atribuição (única), condicional (medida), permutações, etc
Semântica denotacional baseada em matrizes de densidade e
superoperadores.
Sistema de tipos estático.
QPL

Diagramas de fluxo quânticos

input p,q :qbit input p,q :qbit

p,q:qbit p,q:qbit A B
C D

measure p A 0 measure p
0 0 0 0
p,q:qbit p,q:qbit p,q:qbit p,q:qbit
0 D

q *= N p *= N q *= N p *= N

D 0
p,q:qbit p,q:qbit p,q:qbit p,q:qbit
0 0
NAN*0
0 0
p,q:qbit p,q:qbit NAN*+D0
0 0
output p,q :qbit output p,q :qbit
QPL

Diagramas básicos:

Alocando qubit Descartando qubit

A B
Gamma = A q:qbit,Gamma =
C D

new qbit q := 0 discard q

A 0 Gamma = A + D
q:qbit,Gamma =
0 0
QPL

Diagramas básicos:

Medida Transformacao unitaria


A B
q:qbit, Gamma =
C D
q:qbit, Gamma = A

measure p
q *= S
q:qbit, Gamma = q:qbit, Gamma =
q:qbit, Gamma = (SXI)A(SXI)*
A 0 0 1 0 0
0 0 0 D
QPL

Copiando dado quântico?


Em QPL a cópia de dados quânticos é proibida via sintaxe!
Sistema de tipos (estático)!!
Em qualquer contexto de tipos, variáveis distintas se referem a
objetos distintos em tempo de execução.
q representa uma lista de variáveis distintas!
Isto satisfaz o requerimento que: operações agindo sobre
diversos qubits, precisam de locações fı́sicas diferentes.
Um programa bem tipado nunca causará erros em tempo de
execução!
QPL
Exemplo: atirando uma moeda!

Gamma = A

new qbit q := 0

p:qbit,Gamma A
= 0
0 0

q *= H

= AA
p:qbit,Gamma1/2
AA

measure q

q:qbit,Gamma= q:qbit,Gamma=
0 1
A 0 0 0
0 0 0 A

discard q discard q

Gamma =1/2A Gamma =1/2A


QPL
Loops e Procedimentos

coin toss Gamma = A

new qbit q := 0

p:qbit,Gamma A
= 0
0 0
a:qbit
q *= H

= AA
p:qbit,Gamma1/2 input a
AA
coin toss
measure q
output1 b output2 a
q:qbit,Gamma= q:qbit,Gamma=
0 1 b:qbit a:qbit
A 0 0 0
0 0 0 A

discard q discard q

Gamma =1/2A Gamma =1/2A


Lambda QPL

Cálculo Lambda para Computação Quântica com Controle Clássico


Peter Selinger & Benoı̂t Valiron, 2004.
A linguagem:
M,N, P := x | MN | λ x ⋅ M
| if M then N else P
| 0 | 1 | meas | new | U | *
| <M,N> | let <x,y> = M in N
Lambda QPL

Semântica Operacional: sistema de redução probabilı́stico


Passos de redução:

[Q, L, M] →p [Q ′ , L′ , M ′ ]

onde, [Q, L, M] é o estado de um programa dado por um


vetor Q, um termo lambda L e um ambiente M.
Lambda QPL

[α |Q0 > + β |Q1 >, meas pi ] →|α|2 [|Q0 >,0]

Exemplo de redução:
[|0>,(λx ⋅ plus x x) ( meas (H p0))]
→1 [1/sqrt(2)(|0>+|1>),(λx ⋅ plus x x) ( meas p0)]
→1/2 { [|0>,(λx ⋅ plus x x) (0)],
[|1>,(λx ⋅ plus x x) (1)]}
→1/2 { [|0>, plus 0 0],
[|1>, plus 1 1] }
→1/2 { [|0>,0],
[|1>,0]}
Lambda QPL

Considera-se um conjunto U de portas básicas universais


[Q, U<pi , ..., pj >] →1 [Q’,<pi , ..., pj >]
[Q,U<p0 ,p0 >] ???

Sistema de Tipos!
Lambda QPL

Sistema de Tipos
Baseado na lógica linear!
Capturar quais termos podem ser duplicados!
Um termo do tipo A não pode ser duplicado!
Um termo do tipo !A pode ser duplicado!
Lambda QPL

Exemplo: teleportação
EPR = λ x ⋅ CNOT<H (new 0), new 0>
BellMeasure =
λ q2 ⋅ λ q1 ⋅ ( let (p, p’) = CNOT<q1 ,q2 >
in <meas H(p), meas p’>)
U = λ q⋅ λ <x,y> ⋅ if x then ( if y then
U11q else U10q)
else ( if y then U01q else U00q)
Lambda QPL

Exemplo: teleportação
Teleport = let <p,p’> = EPR *
in let f = BellMeasure p
in let g = U p’
in <f,g>
Linguagens com Dados e Controle Quânticos

QML - Altenkirch & Grattage, 2004


Uma linguagem funcional de primeira ordem com dados
quânticos e controle quântico.
Semântica operacional baseada em circuitos quânticos
QML: Syntax

(Variables) x, y, ... ∈ Vars


(Prob⋅ Amplitudes) κ, ι, ... ∈ C
(Patterns) p,q ::= x | (x,y)
(Terms) t,u,e ::= x | () | (t,u)
| let p = t in u
| if ◦ t then u else u’


| false | true | 0 | κ*t | t+u
QML

Exemplo: Not quântico


qnot x = if ◦ x then false else true

qnot false = true

qnot (false + true) = if ◦ false


then false
else true +
if ◦ true
then false
else true
= true + false
QML

Exemplo: Not condicional


cnot c x = if ◦ c
then (true, qnot x)
else (false, x)

Exemplo: Not condicional??


cnot c x = if ◦ c
then (c, qnot x)
else (c, x)
QML

Exemplo: Not condicional


cnot c x = if ◦ c
then (true, qnot x)
else (false, x)

Exemplo: Not condicional??


cnot c x = if ◦ c
then (c, qnot x)
else (c, x)
QML

Copiando dados quânticos.


let x = false + true
in (x,x) ≡ (false,false) + (true, true)

Descartando dados quânticos weakening: não é permitido nos


casos que informação pode ser perdida.
let (x,y) = (false,false) + (true,true)
in x

Dado quântico ligado a y é descartado.


A expressão não é bem tipada!
QML

Copiando dados quânticos.


let x = false + true
in (x,x) ≡ (false,false) + (true, true)

Descartando dados quânticos weakening: não é permitido nos


casos que informação pode ser perdida.
let (x,y) = (false,false) + (true,true)
in x

Dado quântico ligado a y é descartado.


A expressão não é bem tipada!
QML

Sistema de Tipos
Regras de tipo baseadas na lógica linear estrita
Contrações são implı́citas.
Weakenings não são permitidos.
QML

Tipos: coleção de qubits


σ = Q1 | Q2 | σ ⊗ τ

Contexto de tipos
Γ = • | Γ,x:σ
QML

Tipos: coleção de qubits


σ = Q1 | Q2 | σ ⊗ τ

Contexto de tipos
Γ = • | Γ,x:σ
QML

Algumas regras do sistema de tipos


Γ⊢t :σ ∆, x : σ ⊢ u : τ
let
Γ ⊗ ∆ ⊢ let x = t in u : τ
f-intro t-intro
• ⊢ false : Q2 • ⊢ true : Q2

var
x :σ⊢x :σ
QML

Ortogonalidade
if ◦ x then true else true

A expressão retorna true sem realmente utilizar qualquer


informação sobre x.
A expressão não é bem-tipada.

if ◦ x then t else u
A expressão somente deve ser aceita se t e u são valores quânticos
ortogonais (t ⊥ u).

t ⊥ u holds if ht|ui = 0
QML

Ortogonalidade
if ◦ x then true else true

A expressão retorna true sem realmente utilizar qualquer


informação sobre x.
A expressão não é bem-tipada.

if ◦ x then t else u
A expressão somente deve ser aceita se t e u são valores quânticos
ortogonais (t ⊥ u).

t ⊥ u holds if ht|ui = 0
QML

Ortogonalidade
if ◦ x then true else true

A expressão retorna true sem realmente utilizar qualquer


informação sobre x.
A expressão não é bem-tipada.

if ◦ x then t else u
A expressão somente deve ser aceita se t e u são valores quânticos
ortogonais (t ⊥ u).

t ⊥ u holds if ht|ui = 0
QML

Ortogonalidade
if ◦ x then true else true

A expressão retorna true sem realmente utilizar qualquer


informação sobre x.
A expressão não é bem-tipada.

if ◦ x then t else u
A expressão somente deve ser aceita se t e u são valores quânticos
ortogonais (t ⊥ u).

t ⊥ u holds if ht|ui = 0
QML

Altenkirch, Grattage, Vizzotto, Sabry, 2005 - Teoria equacional


Dada a seguinte definição para o porta de Hadamard:
H x = if ◦ x
then ( false + (−1)*true )
else ( false + true )

Gostarı́amos de verificar que H (H x) é observacionalmente


equivalente à x.
QML: teoria equacional

As equações quânticas são:


(if ◦ )
if ◦ (λ*t0 + κ*t1 ) then u0 else u1
≡ λ*(if ◦ t0 then u0 else u1 ) +
κ*(if ◦ t1 then u0 else u1 )
(superpositions)
t+u ≡ u+t


t + 0 ≡ t
t+(u+v) ≡ (t+u)+v
λ*(t+u) ≡ λ*t + λ*u
λ*t+κ*t ≡ (λ+κ)*t


0*t ≡ 0
QML: teoria equacional

By definition of H
H(H x) = if ◦ ( if ◦ x
then ( false + (−1)*true )
else ( false + true ))
then ( false + (−1)*true )
else ( false + true )
QML: teoria equacional

By commuting conversion for if ◦


= if ◦ x
then if ◦ ( false + (−1)*true )
then ( false + (−1)*true )
else ( false + true )
else if ◦ ( false + true )
then ( false + (−1)*true )
else ( false + true )
QML: teoria equacional

By ifo
= if ◦ x
then ( if ◦ false
then (false + (−1)*true )
else ( false + true ) +
(−1) if ◦ true
then (false + (−1)*true )
else ( false + true ) )
else ( ◦
if false
then (false + (−1)*true )
else ( false + true ) +
(−1) if ◦ true
then (false + (−1)*true )
else ( false + true ) )
QML: teoria equacional

By β
= if ◦ x
then ( false − false + true + true )
else ( false + false + true − true )

By simplification and normalisation


= if ◦ x then true else false

By η-rule for if o
= x
QML: teoria equacional

By β
= if ◦ x
then ( false − false + true + true )
else ( false + false + true − true )

By simplification and normalisation


= if ◦ x then true else false

By η-rule for if o
= x
QML: teoria equacional

By β
= if ◦ x
then ( false − false + true + true )
else ( false + false + true − true )

By simplification and normalisation


= if ◦ x then true else false

By η-rule for if o
= x
QHaskell: sintaxe

x, y, ... ∈ Vars
κ, ι ∈ C
d ::= false | true | κ * d | q + r
p ::= e | x | meas x
| if x then p1 else p2
| proc xl → do cl
| pr −< xl
| let x = p1 in p2
| x ← e
| p1;p2
| qif x then p1 else p2
| returnA −< xl
QHaskell: exemplos

qnot = proc x → do
qif x then x’ ← false
else x’ ← qtrue
returnA −< x’
hadamar = proc x → do
qif x then x’ ← (false + (−1) * true)
else x’ ← false + true
returnA −< x’
QHaskell: exemplos

qnot (κ false + ι true) =


x’ ← ι false +
x’ ← κ true =
x’ ← ι false + κ true
QHaskell: exemplos

cqnot = let qnot = proc x → do


qif x then x’ ← false
else x’ ← true
returnA −< x’
in proc (c,y) → do
qif c then y’ ← qnot −< x
else y’ ← y
returnA −< (c,y’)
QHaskell: teleportação

teleportation = proc (eprL,eprR,q) → do


(m1,m2) ← alice −< (eprL,q)
q’← bob −< (eprR,(m1,m2))
returnA −< q’

alice = let qnot = ...


hadamard = ...
in proc (eprL,q) → do
(q1 ,e1) ← qcnot −< (q,eprL)
q2 ← hadamard −< q1
(m1,m2) ← meas −< (e1,q2 )
returnA −< (m1,m2)
QHaskell: teleportação

bob = proc (eprR,(m1,m2)) → do


if m1 then r’ ← qnot −< eprR
else r’ ← eprR
if m2 then r’’ ← z −< r’
else r’’ ← r’
returnA r’’
QHaskell

Sistema de tipos
Controlar o uso de variáveis!!
Sistema de tipos baseado na lógica linear!
Tipos clássicos:
σ = 1 | Bool | σ ⊗ τ
Tipos quânticos:
θ = Q1 | QBool | θ ⊗ υ
QHaskell

Sistema de tipos
Valores clássicos:
false true
• ◭ Γ ⊢ false : Bool • ◭ Γ ⊢ true : Bool

Variáveis:
cvar qvar
• ◭ x : σ, Γ ⊢ x : σ x :θ◭ Γ⊢x :θ
QHaskell

Sistema de tipos
Medida: transforma dado quântico em clássico

Θ ◭ x : |θ|, Γ ⊢ x
meas
x : θ ⊗ Θ ◭ Γ ⊢ meas x
QHaskell

Sistema de tipos
returnA: todas e somente todas as variáveis quânticas
retornas em um procedimento quântico devem ser provadas!

Θ ◭ Γ ⊢ (x1′ : θ1′ , . . . , xn′ : θn′ )


returnA
Θ ◭ Γ ⊢ returnA(x1′ : θ1′ , . . . , xn′ : θn′ ) : θ1′ ⊗ . . . ⊗ θn′
QHaskell

Sistema de tipos
Procedimentos quânticos:

x1 : θ1 , . . . , xn : θn , Θ ◭ Γ ⊢ cl; returnA(x1′ : θ1′ , . . . , xn′ : θn′ ) : t


pro
Θ ◭ Γ ⊢ proc (x1:θ1 , ...,xn:θn) do
cl
returnA(x1′ : θ1′ , . . . , xn′ : θn′ )
QHaskell

QHaskell: uma proposta para uma linguagem quântica mista!


Sintaxe para manipulação de dados quânticos possivelmente
emaranhados baseada na notação do para setas em Haskell.
Sistema de tipos baseado na lógica linear para controlar a
utilização de variáveis quânticas.
Um dado quântico que é medido se transforma em dado
clássico!
Trabalho futuro: definição de uma semântica de reescrita para
QHaskell utilizando o cálculo-ρ.
Fim

Obrigada!

Você também pode gostar