Академический Документы
Профессиональный Документы
Культура Документы
Alejandro Daz-Caro
CONICET & Universidad Nacional de Quilmes
2016
Enfoque de este apunte
Materia:
Introduccin a la computacin cuntica y fundamentos de lenguajes de programacin
CC Este apunte tiene Licencia Creative Commons Attibution 4.0 Internacional.
Pods ver una copia de la licencia en http://creativecommons.org/licenses/by/4.0/.
ndice general
3
3. Introduccin a la mecnica cuntica 35
3.1. Postulados de la mecnica cuntica . . . . . . . . . . . . . . . . . . . . . 35
3.1.1. Medicin proyectiva . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.1.1.1. Preliminares . . . . . . . . . . . . . . . . . . . . . . . . 36
3.1.1.2. Medicin proyectiva . . . . . . . . . . . . . . . . . . . . 38
3.1.2. Fase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.2. Operador densidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.2.1. Preliminares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.2.2. Conjuntos de estados cunticos . . . . . . . . . . . . . . . . . . . 40
3.2.3. Propiedades generales del operador densidad . . . . . . . . . . . . 42
3.2.4. El operador densidad reducido . . . . . . . . . . . . . . . . . . . . 44
3.2.4.1. Teleportacin cuntica y el operador densidad reducido . 45
3.3. Descomposicin de Schmidt . . . . . . . . . . . . . . . . . . . . . . . . . 46
I feel that a deep understanding of why quantum algorithms work is still lac-
king. Surely the power of quantum computers has something to do with entan-
glement, quantum parallelism, and the vastness of Hilbert space, but I think
that it should be possible to pinpoint more precisely the true essence of the
matter. John Preskill [1998]
1.1. Introduccin
La computacin cuntica, una rama de las ciencias de la computacin terica, tiene su
origen en la fsica, y ms precisamente en el fsico estadounidense Richard Feynman,
quien en 1981 dedic una charla en el Massachusetts Institute of Technology (MIT) al
problema de la simulacin de la fsica cuntica con computadoras clsicas. Sus ya clebres
palabras finales resumen su frustracin de ese entonces:
And Im not happy with all the analyses that go with just the classical theory,
because nature isnt classical, dammit, and if you want to make a simulation of
nature, youd better make it quantum mechanical, and by golly its a wonderful
problem, because it doesnt look so easy. Thank you.
(ver, por ejemplo, [Brown, 2001, pp.100])
Esta provocacin, lejos de plantear soluciones, abri las puertas a interrogantes nunca
antes concebidos. Qu ganancia se lograra si las computadoras fuesen regidas por las
leyes de la mecnica cuntica? Fueron los algoritmos de Grover [1996] y Shor [1997] los
cuales despertaron el gran inters desde las ciencias de la computacin en este nuevo
paradigma. El primero es un algoritmo de bsqueda sobre registros desordenados, el cual
provee una ganancia cuadrtica de complejidad temporal frente a cualquier algoritmo
clsico conocido. El segundo es un algoritmo para la factorizacin de nmeros, con una
ganancia exponencial.
Actualmente existen muchas reas de investigacin dentro de la computacin cuntica.
Por ejemplo, desde un punto de vista prctico se plantea el problema de construir el
hardware de una computadora cuntica. Desde sus orgenes, en las palabras de Feinmann,
7
8 1.1. Introduccin
la idea es que un algoritmo cuntico sea una simulacin cuntica en hardware que se
comporta de acuerdo a las leyes de la fsica cuntica. Es decir que un experimento cuntico
en un laboratorio, puede considerarse como un algoritmo. O dicho de otro modo: podemos
describir el comportamiento de un sistema cuntico a travs de un algoritmo. La pregunta
es, podemos realizar el experimento cuntico que describe un algoritmo dado? All es
donde se manifiesta el desafo tcnico.
Otra rea es la de desarrollar algoritmos que obtengan una ganancia con respecto a su
contraparte clsica. En general los algoritmos de Grover y Shor mencionados anterior-
mente se consideran como los ejemplos cannicos de aceleracin obtenida gracias a la
computacin cuntica. Muchos otros algoritmos cunticos son derivados de ellos. La pre-
gunta aqu es qu otros algoritmos podemos obtener que nos den una ganancia respecto
a los algoritmos clsicos?
Otra rama de investigacin es la del diseo de lenguajes de programacin que permitan
expresar los algoritmos cunticos de una manera amigable, y quiz permitiendo descubrir
nuevos algoritmos al tener una herramienta de alto nivel para pensarlos.
Desde un punto de vista ms fundamental, y como lo expresara Preskill en la cita que
abre este captulo, los fundamentos lgicos detrs de la computacin cuntica, siguen
siendo un misterio. Si bien existe una lgica cuntica [Birkhoff y von Neumann, 1936],
sta fue propuesta muchos aos antes de la computacin cuntica, por lo que encontrar la
correspondencia entre computacin y lgica cuntica no es trivial. Esta rea tiene muchas
subreas con metodologas diferentes. En particular, el estudio de semntica de lenguajes
de programacin sigue este objetivo. En este caso no se persigue el estudio del lenguaje
en s mismo, sino que el objetivo es el estudio de la lgica subyacente. Estudiar la lgica
detrs de la computacin cuntica implica estudiar la lgica detrs de la fsica cuntica,
lo cual puede tener influencia en el desarrollo de nuevas teoras sobre el mundo que nos
rodea.
En esta materia nos interesan los dos ltimos aspectos: lenguajes de programacin que
permitan expresar el cmputo cuntico de una manera estructurada y amigable, y el
estudio de propiedades de lenguajes que nos acerquen hacia una lgica computacional de
la fsica cuntica.
Definicin 1.3 (Sucesin de Cauchy). Sea ~vn una sucesin de vectores del espacio E.
Si k~vn ~vm k 0 cuando n, m , entonces la sucesin ~vn es una sucesin de Cauchy.
(Esto quiere decir que puedo hacer distar entre s los trminos tan poco como quiera).
Definicin 1.6 (Producto tensorial). Sean E y F dos espacios vectoriales con bases
cannicas B = {~bi | i I} y C = {~cj | j J} respectivamente. El producto tensorial
E F de E y F es el espacio vectorial de base cannica {~bi ~cj | i I y j J}, donde
~bi ~cj es el par ordenado formado por el vector ~bi y el vector ~cj . La operacin se
extiende a vectores de E y F bilinearmente:
X X X
( i~bi ) ( j~cj ) = i j (~bi ~cj )
i j ij
S T = {~u ~v | ~u S, ~v T }
Ejemplos 1.10.
5 6 5 6 5 6 10 12
1 2
1 2 5 6
7 8 7 8 7 8 14
16
= =
3 4 7 8 5 6 5 6 15 18 20 24
3 4
7 8 7 8 21 24 28 32
3 3
1
1 3
4 = 4
=
2 4 3 6
2
4 8
Captulo 1. Introduccin a la computacin cuntica 11
Demostracin. Supongamos que existen ~v1 y ~v2 tales que ~v1 ~v2 = ~v , entonces
ac
ac =
a c ad 0 ad = 0
= =
b d bc 0
bc = 0
bd bd =
y como estos son dos vectores ortogonales (por ende, forman una base), ahora es posible
tambin escribir cualquier vector de C2 como combinacin lineal de |+i y |i.
Por ejemplo:
1 1
= |0i + |1i = ( + )|+i + ( )|i
2 2
Observacin. Al menos que se indique lo contrario, en el resto del apunte consideraremos
n
el espacio complejo de dimensin N = 2n , CN = C2 .
Observaciones.
Haciendo un abuso de notacin, podemos escribir vectores como el siguiente:
|1 1 + 2 2 i = 1 |1 i + 2 |2 i
Si tomamos la base cannica de CN , con |ui i el vector i-simo de dicha base, pode-
mos calcular la componente i-sima de un vector cualquiera de la siguiente manera:
N
X N
X
hui |i = hui | aj |uj i = aj hui |uj i = ai
| {z }
j=1 j=1
ij
Captulo 1. Introduccin a la computacin cuntica 13
N
P
Teorema 1.13. Sea B = {|u1 i, . . . , |uN i} una base ortonormal, entonces |ui ihui | = I.
i=1
Demostracin.
N
! N
! N
!
X X X
|ui ihui | |i = |ui ihui | aj |ui i
i=1 i=1 j=1
N X
X N N
X
= aj |ui i hui |uj i = ai |ui i = |i
| {z }
i=1 j=1 i=1
ij
Observaciones.
N
bi hui |.
P
Anlogamente a los kets, todo bra h| puede ser descompuesto como h| =
i=1
Observacin. De aqu en ms, trabajaremos slo con los vectores normalizados de CN (es
decir, vectores cuya norma es 1). Esto es
N
! N ! N N
X X X X
2
1 = kk = h|i = aj huj | ai |ui i = aj ai huj |ui i = |ai |2 = 1
| {z }
j=1 i=1 i,j=1 i=1
ij
Es decir, trabajamos con vectores cuya suma de los mdulos al cuadrado de sus compo-
nentes es 1.
PN
Es decir, las componentes del vector A|i son bi = j=1 ij aj .
Observacin. Considerando la base {|0i, |1i} de C2 , cualquier qubit puede escribirse como
|i = |0i + |1i, con ||2 + ||2 = 1.
Observaciones.
En lugar de escribir |0i |1i |0i escribimos |01 . . . 0i.
1.3.3. Operadores
Definicin 1.16 (Operador). Un operador de CN es una matriz cuadrada de dimensin
N a coeficientes complejos.
P |i = |i h|i = a|i
| {z }
aC
1 0
Ejemplo 1.19. Tomemos la base {|0i, |1i}, con |0i = y |1i = . Un vector |i
0 1
cualquiera puede escribirse como |i = |0i + |1i. Por lo tanto
U 1 es unitario.
Definicin 1.23 (Compuertas cunticas). A los operadores unitarios se les llama com-
puertas cunticas, como analoga a las compuertas lgicas de la computacin clsica, ya
que sern esos los que se utilizan para realizar el cmputo.
Observacin. La mayora de las compuertas cunticas que usaremos a lo largo del curso
sern adems de operadores unitarios, hermticos, por lo que coinciden con su inversa.
Definicin 1.24 (Evolucin). Se dice que un sistema representado por un ket |i evo-
luciona al sistema |i, cuando se realiza una de las siguientes operaciones:
|i = U |i
16 1.3. Bits cunticos y operadores
p(i) = h|Mi Mi |i
Observaciones.
U M
Usaremos tambin la notacin |i
|i o |i |i para indicar que el ket |i
evoluciona al ket |i.
Cuando se quiera hacer evolucionar slo un qubit de un sistema de n-qubits, digamos
el qubit i, se premultiplica tensorialmente i 1 veces y se postmultiplica n i 1
veces la compuerta a aplicar por la matriz identidad. Ejemplo: U aplicada al segundo
qubit de un sistema de 2qubits, ser la compuerta I U .
Ejemplo 1.25. Consideramos el operador medicin de {M0 , M1 } con
1 0 0 0
M0 = |0ih0| = M1 = |1ih1| =
0 0 0 1
p(0) = h|M0 M0 |i
= ( h0| + h1|)M0 (|0i + |1i)
= ||2 h0|M0 |0i + h0|M0 |1i + h1|M0 |0i + ||2 h1|M0 |1i
= ||2 h0|0i h0|0i + h0|0i h0|1i + h1|0i h0|0i +||2 h1|0i h0|1i
| {z } | {z } | {z } | {z } | {z } | {z } | {z } | {z }
1 1 1 0 0 1 0 0
2
= ||
La identidad I:
I|0i = |0i 1 0
donde: I=
I|1i = |1i 0 1
La negacin X:
X|0i = |1i 0 1
donde: X=
X|1i = |0i 1 0
El cambio de fase Z:
Z|0i = |0i 1 0
donde: Z=
Z|1i = |1i 0 1
La No-controlada CN OT :
CN OT |0xi = |0xi I 0
donde: CN OT =
CN OT |1xi = |1i X|xi 0 X
En particular, las matrices I, X, iXZ y Z son las llamadas matrices de Pauli en honor
a Wolfgang Pauli
|xi H
xy
|yi
Es decir, partiendo del estado inicial |xyi, se aplica H al primer qubit. Luego se aplica
CN OT a ambos, donde el primero es el de control (marcado con el punto negro). En
otras palabras, este circuito representa la siguiente ecuacin:
xy = CN OT (H I)|xyi
Las posibles salidas de este circuito, cuando x e y varan entre 0 y 1 son las siguientes:
H(1) 1 1 CN OT (1,2) 1
|00i (|0i + |1i) |0i = (|00i + |10i) (|00i + |11i) = 00
2 2 2
H(1) 1 1 CN OT (1,2) 1
|01i (|0i + |1i) |1i = (|01i + |11i) (|01i + |10i) = 01
2 2 2
H(1) 1 1 CN OT (1,2) 1
|10i (|0i |1i) |0i = (|00i |10i) (|00i |11i) = 10
2 2 2
H(1) 1 1 CN OT (1,2) 1
|11i (|0i |1i) |1i = (|01i |11i) (|01i |10i) = 11
2 2 2
Observacin. 00 = (X I)01 = (Z I)10 = (XZ I)11 .
A estos cuatro estados se les llama Estados de Bell, en honor a John S. Bell. Estos son
estados entrelazados, es decir, estados que no pueden representarse como el producto
tensorial de dos estados individuales.
A los estados entrelazados tambin se les llama estados EPR por Einstein, Podolsky, y
Rosen [1935] quienes detectaron, en pleno auge de las formulaciones de la teora cuntica,
que exista una accin a distancia que pareca no razonable. Por muchos aos se llam la
paradoja EPR. Lo que determinaron es que cuando se tiene un par entrelazado (fsica-
mente el estado representa por ejemplo el spin en un par de electrones, o la polarizacin
de un par de fotones), sucede que cuando se colapsa (por accin de la medicin) un estado
del par, el segundo tambin colapsar, incluso cuando fsicamente se encuentren a aos
luz de distancia. Con el tiempo se demostr experimentalmente que esto es exactamente
lo que sucede, y por lo tanto no hay paradoja. Tambin se demuestra que esto no contra-
dice la teora de la relatividad (que entre otras cosas determina que nada puede viajar
a mayor velocidad que la luz, ni siquiera la informacin), ya que no hay trasmisin de
informacin en este colapso a distancia.
Matemticamente la accin de medir un estado de un par se ve con el siguiente ejemplo:
Ejemplo 1.28. Consideremos el siguiente operador de medicin: M = {M0 , M1 } donde
M0 = |0ih0| y M1 = |1ih1|.
Aplicando este operador al primer qubit del estado 00 , se obtiene uno de los siguientes
resultados:
Captulo 1. Introduccin a la computacin cuntica 19
Es decir, al medir el primer qubit del estado entrelazado 00 , se obntiene |00i o |11i, es
decir que ambos qubits colapsan.
2. Alice se queda con el primer qubit del par y Bob se lleva el segundo. Podemos
considerar que estos dos pasos son la preparacin del canal cuntico.
20 1.6. Usando los estados de Bell
3. Alice aplica una transformacin a su qubit, de acuerdo a los bits que quiere enviar:
Z b1 X b2 , donde C 0 = I y C 1 = C.
5. Bob aplica CNOT a los dos elementos del par y luego Hadamard al primero.
Z b1 X b2 | H |b1 i
00 |
| |b2 i
donde la lnea punteada determina el paso 4, en el que Alice enva su qubit a Bob.
Ejemplo 1.29. Se quiere enviar los bits 11. Por lo tanto se aplica (ZX I) a 00 , con lo
que se obtiene 11 (en general, la aplicacin de la compuerta Z b1 X b2 cambia el estado 00
a b1 b2 ):
2. Alice se queda con el primer qubit del par y Bob se lleva el segundo.
3. Alice aplica CNOT entre el qubit a transmitir y el primero del par 00 , y luego
Hadamard al primero.
4. Alice realiza una medicin sobre los dos qubits en su posesin y enva el resultado
de la medicin (2 bits clsicos) a Bob.
5. Bob aplica una transformacin sobre su qubit, de acuerdo a los bits recibidos:
Z b1 X b2 .
El circuito completo queda de la siguiente manera
|i H
00
Z b1 X b2 |i
donde |i es el qubit a transmitir (o teleportar).
Ejemplo 1.30. Se quiere transmitir el qubit |i = |0i + |1i, entonces
1
|i 00 = (|0i + |1i) (|00i + |11i)
2
1
= (|0i(|00i + |11i) + |1i(|00i + |11i))
2
CN OT (1,2) 1
(|0i(|00i + |11i) + |1i(|10i + |01i))
2
H(1) 1 1 1
(|0i + |1i)(|00i + |11i) + (|0i |1i)(|10i + |01i)
2 2 2
1
= [|00i(|0i+|1i) + |01i(|1i+|0i) + |10i(|0i|1i) + |11i(|1i|0i)]
2
1 1
1XX
= |b1 b2 i(X b2 Z b1 )|i
2 b =0 b =0
1 2
Por lo tanto, aplicando Z b1 X b2 , Bob obtendr el estado original |i. (Ntese que para
toda compuerta U , U = U 1 ).
Observacin. Si se quiere escribir la compuerta Z b1 X b2 como dos dos compuertas,
b b b
debe escribirse b
X2 Z 1 , ya que en Z X primero se aplica la compuerta X 2 y
b 1 2
luego Z b1 .
Esta es una funcin que toma un bit y devuelve un bit. Si fuese un bit cuntico, sera
posible evaluar la funcin en una superposicin de 0 y 1 (por ejemplo 12 (|0i + |1i)), lo
cual nos dara como resultado una superposicin de f aplicada a 0 y a 1.
El mtodo es el siguiente. Primero se debe construir una matriz unitaria Uf de C4 que
calcule la funcin, de la siguiente manera:
En realidad, aunque vamos a usar la definicin que acabamos de dar, se debe definir
tambin qu sucede cuando el segundo qubit es |1i, por lo que esta compuerta se define
ms generalmente como Uf |x, yi = |x, y f (x)i, donde es la suma mdulo 2.
Lo que se pretende es aplicar f a todas las entradas posibles, por lo que primero se aplicar
Hadamard al |0i, a fin de obtener una superposicin, y luego se aplicar la compuerta
Uf . El circuito es el siguiente:
|0i H
|0,f (0)i+|1,f (1)i
Uf |i =
2
|0i
Es decir:
H(1) 1 1 Uf 1
|00i (|0i + |1i)|0i = (|00i + |10i) (|0, f (0)i + |1, f (1)i)
2 2 2
La salida de este circuito es un estado que es superposicin de todos los resultados posibles
de la aplicacin de la funcin f . Y la compuerta Uf fue utilizada una sola vez. El problema
ahora pasa porque el resultado es una superposicin de todos los resultados posibles, y
al querer leerlo (es decir, al medirlo), ste colapsar a uno de los dos. El problema de
los algoritmos cunticos pasa por utilizar la superposicin de manera inteligente para
aprovechar el paralelismo, pero obteniendo el resultado buscado y no una superposicin
de resultados sin utilidad.
En el siguiente captulo mostraremos algunos de los algoritmos que, haciendo uso del
paralelismo, consiguen ganancias en complejidad respecto a su contrapartida clsica.
Captulo 2
|0i H H
Uf
|1i H
Las primeras dos compuertas Hadamard, aplicadas a |0i y |1i, producen lo siguiente:
H(1,2) 1 1 1 1
|01i (|0i + |1i) (|0i |1i) = |xi (|0i |1i) = (|x, 0i |x, 1i) (2.1)
2 2 2 2
23
24 2.2. Algoritmo de Deutsch-Jotza
1
Uf ( (|x, 0i |x, 1i))
2
1
= (Uf |x, 0i Uf |x, 1i)
2
(2.2)
1 1 1
= (|0, f (0)i + |1, f (1)i) (|0, 1 f (0)i + |1, 1 f (1)i)
2 2 2
1
= (|0, f (0)i + |1, f (1)i |0, 1 f (0)i |1, 1 f (1)i)
2
Si f (0) 6= f (1), (2.2) es igual a
1 |0i |1i |0i |1i
(|00i + |11i |01i |10i) =
2 2 2
Es decir, el primer qubit es |i, si f (0) 6= f (1) y |+i si f (0) = f (1). Aplicando
Hadamard al primer qubit, obtenemos |1i si ste era |i y |0i si ste era |+i.
|0i |1i
Si f (0) 6= f (1), aplicando Hadamard se obtiene |1i
2
|0i |1i
Si f (0) = f (1), aplicando Hadamard se obtiene |0i
2
es decir, aplicando Hadamard, se obtiene
|0i |1i
|f (0) f (1)i
2
Dado que el primer qubit es |0i o |1i, podemos medirlo y nos dar con probabilidad 1 el
valor 0 si f es constante y con probabilidad 1 el valor 1 si f no lo es.
Observacin. Este algoritmo hace uso del paralelismo, ya que la evaluacin de la funcin se
realiza una vez sobre el estado en superposicin de 0 y 1. El algoritmo clsico equivalente
hara dos evaluaciones de la funcin y una comparacin.
El circuito es el siguiente:
|0i H H
|0i H H
Uf
.. ..
. .
|1i H
La entrada de este algoritmo son n + 1 qubits: |0in |1i = |0 . . . 01i.
Aplicando las n + 1 compuertas Hadamard sobre la entrada, se obtiene
n X |xi |0i |1i
|0i + |1i |0i |1i
= (2.3)
2 2 2n 2
x{0,1}n
La compuerta Uf que se utiliza es una generalizacin del caso anterior definida por
Uf |x, yi = |x, y f (x)i
donde x son cadenas de n bits.
Es decir
Uf |x, 0i = |x, f (x)i Uf |x, 1i = |x, 1 f (x)i
Por lo tanto, aplicando Uf sobre el estado (2.3) se obtiene
X |xi |0i |1i X 1
|0i |1i
Uf = Uf |xi
2n 2 2 n 2
x{0,1}n x{0,1}n
X 1
= (Uf |x, 0i Uf |x, 1i)
2 n+1
x{0,1}n
(2.4)
X 1
= (|x, f (x)i |x, 1 f (x)i)
x{0,1}n
2n+1
X 1 |f (x)i |1 f (x)i
= |xi
2 n 2
x{0,1}n
1 X
= (1)xz |zi
n
2 z{0,1}n
donde x z = x1 z1 + . . . + xn zn .
26 2.3. Algoritmo de Bsqueda de Grover
Con esta notacin, se aplica Hadamard a los primeros n qubits del estado (2.4) (es decir,
al ket |xi), obteniendo
X 1 1 X
xz |f (x)i |1 f (x)i
(1) |zi
2n 2n 2
x{0,1}n z{0,1}n
(2.5)
X X (1)xz |zi |f (x)i |1 f (x)i
=
n n
2n 2
x{0,1} z{0,1}
Casos:
Por lo tanto, dado que este vector tiene norma 1, el resto de los trminos de la
suma deben anularse, debido a que el resultado tiene que ser forzosamente un vector
normalizado. Por lo tanto, cuando f es constante, el estado (2.5) es
n |0i |1i
|0i
2
Es decir, midiendo los primeros n qubits se obtiene 0 . . . 0 en este caso.
Es decir que los primeros n qubits no incluyen al qubit |0in , y por lo tanto, al
medir los primeros n qubits no se puede obtener 0 . . . 0 en este caso.
2.3.1. Orculo
1
Uf |x, yi = Uf |xi (|0i |1i)
2
1
= (Uf |x, 0i Uf |x, 1i)
2
1
= (|x, f (x)i |x, 1 f (x)i)
2
1
= |xi (|f (x)i |1 f (x)i)
2
f (x)
= (1) |x, yi
G = 2|ih| I
1
2n
= 2 ...
1 12n I
2n
2n
1
2n 2n
2 2 2
2n
1 2n
2n
2 2 2
2n 2n
1 2n
=
.. .. ..
. . .
2 2 2
2n 2n
2n
1 2n 2n
P
La aplicacin de G sobre un estado cualquiera |i = x{0,1}n ax |xi es la siguiente
28 2.3. Algoritmo de Bsqueda de Grover
a0
..
G|i .
a2n 1
X 2ax
2 2 a0
2 n
1
2n x{0,1}n
2n
.. ..
..
. .
.
2 2
1
X 2ax
2n 2n a2n 1
n
2n
x{0,1}
Es decir:
X X X 2ay X
G ax |xi = ax |xi = (2A ax )|xi
2n
x{0,1}n x{0,1}n n
y{0,1} x{0,1}n
2.3.3. El algoritmo
El algoritmo de Grover es un algoritmo de bsqueda sobre una lista desordenada. Supo-
nemos una lista de tamao N , con N = 2n (observar que siempre es posible aumentar
la lista con datos irrelevantes para cumplir la condicin sobre N ). Los ndices de la lista
son x 0, 1n , es decir x = 0 . . . 2n 1.
El objetivo del algoritmo es localizar el x0 tal que f (x0 ) = 1, para una funcin booleana
f dada.
El input del circuito es |0in .
H n 1 X
|0in |xi (2.6)
2n x{0,1}n
Este estado es una superposicin de todos los elementos de la lista. La idea del algoritmo
es subir la probabilidad de que al medir este estado obtengamos el elemento x0 .
U 1 X
(2.6) (1)f (x) |xi (2.7)
2n x{0,1}n
Captulo 2. Algoritmos cunticos y aplicacin a criptografa 29
X (1)f (x)
(2.7) = |xi
2n
n
x{0,1} | {z }
ax
G
X
(2A ax )|xi
x{0,1}n
X X (1)f (y) (1)f (x)
= 2 |xi
2n 2n 2 n
x{0,1}n y{0,1}n
(2.8)
2n+1 + 2n 4
= |x0 i
2n 2n
n
n+1 n
X 1 2(1) 2 2 2 2 4
2 + + |xi =
|xi
y{0,1}n 2n 2n 2n 2n 2n 2n 2n 2n
y6=x0
y6=x
El algoritmo ha cambiado las amplitudes del estado, aumentando la amplitud del estado
x0 y disminuyendo las otras.
Repitiendo este proceso (pasos 2 y 3) se va subiendo la amplitud del estado que se
quiere encontrar y disminuyendo las otras. Sin embargo es cclico: pasado cierto nmero
de repeticiones, esa amplitud vuelve a decrecer. En la Seccin 2.3.4 se calcula el nmero
optimo de repeticiones para obtener la amplitud mxima. Cuando la amplitud es mxima,
se realiza una medicin, obteniendo el estado x0 con la mxima probabilidad. En la
Seccin 2.3.4 se muestra que la probabilidad de error tiene cota mxima en 1/2n .
30 2.3. Algoritmo de Bsqueda de Grover
Ejemplo
Sea una lista de 24 = 16 elementos, de los que slo uno, x0 , verifica la propiedad f (x0 ) = 1.
El algoritmo comienza por tomar el estado |0i4 y aplicar H 4 obteniendo,
1 X
|xi
4 4
x{0,1}
Inicialmente todas las amplitudes son iguales a 1/4. Se aplica el orculo y se obtiene
1 X
(1)f (x) |xi
4 4
x{0,1}
Luego se aplica la inversin sobre el promedio, y la nueva amplitud del estado x0 ser
25 + 24 4 11
= = 0,6875
24 24 16
y para el resto de los x la amplitud ser
25 24 4 3
= = 0,1875
24 24 16
Con las sucesivas repeticiones de la aplicacin del orculo y la inversin sobre el promedio,
se obtienen las siguientes amplitudes:
Repeticin Amplitud de x0 Amplitud de x 6= x0 Probabilidad de error
1 0.6875 0.1875 0.527
2 0.953125 0.078125 0.092
3 0.98046875 -0.05078125 0.039
A partir de la iteracin 4 la probabilidad de error comienza a subir, por lo tanto el nmero
ptimo de iteraciones es 3, con una probabilidad de error de 0,039.
1
m0 = b0 =
2n (2n 1)mk bk
mk+1 = 2Ak mk donde Ak =
2n
bk+1 = 2Ak + bk
Captulo 2. Algoritmos cunticos y aplicacin a criptografa 31
1 |1i 1
(1) Alice Esquema + Esquema + Bob
1 |1i 1o0
(2) Alice Esquema + Esquema Bob
Figura 2.2: Ejemplo: (1) Alice transmite un 1 codificado mediante el esquema + y Bob
elije al azar el esquema + obteniendo un 1 (2) si Bob elige el esquema obtiene 0 1
con probabilidad 1/2.
5. Usando solamente los bits de los esquemas idnticos a dos puntas, ambos han defi-
nido una sucesin aleatoria de bits que servir como one-time pad de encriptacin
para transmisiones futuras por cualquier canal.
Esquemas de Alice + + + +
Valores de Alice |i |0i |0i |+i |i |0i |i |1i
Esquemas de Bob + + + +
Valores de Bob |0i |+i |0i |+i |1i |0i |i |i
Coincidencias
Clave 0 1 0 0
6. Alice y Bob intercambian hashes de las claves (en bloques) para aceptarla o descar-
tarla.
Inviolabilidad Este protocolo es, en teora, inviolable. Supongamos que Cliff espa el
canal de comunicacin entre Alice y Bob e intenta recuperar la clave. Cliff est en la
misma situacin que Bob y no conoce cul esquema es el correcto, + o . Por lo tanto
elige al azar y se equivocar, en promedio, la mitad de las veces.
En el paso 5 Alice y Bob se ponen de acuerdo en cules valores tomar en cuenta (las coin-
cidencias de la secuencia de esquemas). Esta informacin no le es til a Cliff porque slo
en la mitad de las veces habr usado el detector correcto, de manera que mal interpretar
sus valores finales.
Adems el QKD brinda el mtodo para que Alice y Bob puedan detectar el potencial
espionaje de Cliff:
Imaginemos que Alice envi un 0 con el esquema (es decir, el qubit |i). Si Cliff usa el
esquema +, colapsar el qubit a |0i o |1i. Si Bob usa el esquema y mide |i coincide con
lo enviado por Alice, pero si mide |+i Alice y Bob descubrirn esa discrepancia durante
el intercambio de hashes, por lo tanto descartarn el bloque.
34 2.4. Aplicacin criptogrfica
Captulo 3
| 0 i = U |i
El postulado anterior se puede tomar con tiempo continuo, para lo cual hace falta una
ecuacin diferencial, y el postulado se transforma en el siguiente:
Postulado 20 . La evolucin del estado de un sistema fsico cuntico aislado es
descripta por la ecuacin de Shcrdinger,
d|i
i~ = H|i
dt
En esta ecuacin, ~ es una constante fsica conocida como constante de Planck
cuyo valor debe ser determinado experimentalmente. El valor exacto no es im-
portante, en la prctica es comn absorber el valor ~ en H y tomando ~ = 1. El
operador H no es la compuerta Hadamard vista anteriormente sino un operador
hermtico fijo conocido como el Hamiltoniano del sistema.
35
36 3.1. Postulados de la mecnica cuntica
Mm |i
q
h|Mm Mm |i
|1 i |2 i |n i
3.1.1.1. Preliminares
Definicin 3.1 (Autovectores y autovalores). Un autovector de un operador lineal A en
un espacio vectorial dado es un vector no-nulo |vi tal que A|vi = v|vi, donde v es un
nmero complejo conocido como autovalor de A correspondiente a |vi.
3.1.2. Fase
Consideremos por ejemplo el estado ei |i , donde |i es un vector de estado, y es un
nmero real. Decimos que el estado ei |i es igual a |i, excepto por la fase global ei .
La medicin sobre ambos estados es la misma: Supongamos que Mm es una matriz de
un operador de medicin. Entonces las probabilidades de aplicar esa matriz vienen dadas
por h|Mm Mm |i y por h|ei Mm
Mm ei |i = h|Mm
Mm |i . Por lo tanto, desde un
punto de vista observacional, ambos estados son idnticos.
Por esta razn solemos ignorar las fases globales ya que son irrelevantes a las propiedades
observacionales de sistemas fsicos.
i
e = cos + i sin (aei es la llamada notacin exponencial de un nmero complejo, donde a su
mdulo y su argumento).
i i
e e = ei+i = e0 = 1.
Captulo 3. Introduccin a la mecnica cuntica 39
3.2.1. Preliminares
Definicin P
3.11
P(Traza). La traza de una matriz es la suma de sus elementos diagonales.
As, si A = i j ij |ui ihuj |, la traza se define por
X
tr(A) = ii
i
Ejemplos 3.13.
1. Sea A = |ih| con |i = |0i y |i = |i. Entonces, A = 1/ 2(|0ih0| |0ih1|) y
tr(A) = 1/ 2.
Por otro lado, siguiendo el teorema, tr(A) = h|i = 1/ 2(h0|0i h0|1i) = 1/ 2.
2. Sea A = |+ih| = 1/2(|0ih0| |0ih1| + |1ih0| |1ih1|).
Entonces, tr(A) = 1/2 1/2 = 0 = h+|i.
Propiedades (de la traza de una matriz). Sean A y B matrices de la misma dimensin,
U un operador unitario y C. Entonces
tr(A|ih|) = h|A|i
Demostracin. Ejercicio.
Ejemplo 3.15. tr(X|0ih0|) = h0|X|0i = h0|0ih1|0i + h0|1ih0|0i = 0.
40 3.2. Operador densidad
Ejemplo 3.17. El operador densidad del conjunto de estados puros {(1/4, |+i); (3/4, |1i)}
tiene operador densidad
Es decir
1/8 1/8
= 1/8 7/8
U
X X
= pi |i ihi |
pi U |i ihi |U = U U
i i
Medicin Supongamos que realizamos una medicin descripta por las matrices Mm . Si
el estado inicial era |i i, entonces la probabilidad de obtener el resultado m es
Teor.3.14
p(m|i) = hi |Mm Mm |i i = tr(Mm Mm |i ihi |)
Mm |i i
|im i = q
hi |Mm Mm |i i
Por lo tanto, luego de una medicin que de resultado m tendremos el conjunto de estados
|im i, con probabilidades p(i|m) respectivamente. Por lo tanto, el operador densidad m
correspondiente es
X X Mm |i ihi |Mm
m = p(i|m)|im ihim | = p(i|m)
(3.1)
i i hi |Mm Mm |i i
Podemos ver que el conjunto de estados est en el estado |1i con probabilidad 3/4. Si ese
es efectivamente el estado inicial, la probabilidad de medir 1 sera 1. Por otro lado, en el
estado |+i, la probabilidad de medir 1 es 1/2. De ah que la probabilidad de medir 1 es
Efectivamente, si se midi 1 y el estado inicial era |+i, el estado final ser |1i, pero lo
mismo pasa si el estado inicial era |1i, por lo que la matriz densidad es la matriz densidad
del conjunto de estados {1, |1i}.
Demostracin. Ejercicio.
Teorema 3.22. Un estado cunticoP que est en estado i con probabilidad pi , puede ser
descripto por la matriz densidad i pi i .
Demostracin. Supongamos que i viene de un conjunto {pij , |ij i de estados puros (con
i fijo). Por lo tanto, la probabilidadP estar en el estado |P
de P ij i viene dada por pi pij . Es
decir que la matriz densidad es = i j pi pij |ij ihij | = i pi i .
1. tr() = 1
2. es un operador positivo
Demostracin.
P
) Sea = i pi |i ihi | un operador densidad. Entonces,
P P
1. tr() = i pi tr(|i ihi |) = i pi = 1.
2. Sea |i un vector arbitrario en el espacio de estados. Entonces,
!
X X X
h||i = h| pi |i ihi | |i = pi h|i ihi |i = pi |h|i i|2 0
i i i
0 = U U
44 3.2. Operador densidad
Definicin 3.26. Sean A y B dos sistemas fsicos tales que su estado es descripto por el
operador densidad AB . El operador densidad reducido para A se define por
A = trB (AB )
donde trB es la traza parcial sobre el sistema B, y es un operador lineal definido por
trB (|a1 iha2 | |b1 ihb2 |) = |a1 iha2 |tr(|b1 ihb2 |) = hb2 |b1 i|a1 iha2 |
para todo |a1 i, |a2 i en el espacio de estados de A y |b1 i, |b2 i en el espacio de estados de
B.
A = trB ( ) = tr() =
Similarmente, B = .
Captulo 3. Introduccin a la mecnica cuntica 45
Un ejemplo menos trivial es el estado de Bell 00 = 1/ 2(|00i + |11i), que tiene el siguiente
operador densidad
|00i + |11i h00| + h11| |00ih00| + |11ih00| + |00ih11| + |11ih11|
= =
2 2 2
Haciendo la traza sobre el segundo qubit obtenemos el operador densidad del primer
qubit:
1 = tr2 ()
tr2 (|00ih00|) + tr2 (|11ih00|) + tr2 (|00ih11|) + tr2 (|11ih11|)
=
2
tr2 (|0ih0| |0ih0|) + tr2 (|1ih0| |1ih0|) + tr2 (|0ih1| |0ih1|) + tr2 (|1ih1| |1ih1|)
=
2
h0|0i|0ih0| + h0|1i|1ih0| + h1|0i|0ih1| + h1|1i|1ih1|
=
2
|0ih0| + |1ih1|
=
2
I
=
2
Notar que este es un estado mixto, ya que tr((I/2)2 ) = 1/2 < 1. Es decir que al estar
enredados, por ms que el estado de dos qubits sea un estado puro, el primer qubit slo
est en un estado mixto: es decir, un estado que no conocemos completamente.
1
(|00i(|0i + |1i) + |01i(|1i + |0i) + |10i(|0i |1i) + |11i(|1i |0i))
2
1
= (|00ih00|(|0i + |1i)( h0| + h1|)
4
+|01ih01|(|1i + |0i)( h1| + h0|)
+|10ih10|(|0i |1i)( h0| h1|)
+|11ih11|(|1i |0i)( h1| h0|))
Por lo tanto, si hacemos la traza parcial sobre el sistema de Alice, obtenemos que operador
densidad del sistema de Bob es
1
B = ((|0i + |1i)( h0| + h1|) + (|1i + |0i)( h1| + h0|)
4
+ (|0i |1i)( h0| h1|) + (|1i |0i)( h1| h0|))
2(||2 + ||2 )|0ih0| + 2(||2 + ||2 )|1ih1|
=
4
|0ih0| + |1ih0|
=
2
I
=
2
Por lo tanto, el estado de Bob despus de que Alice hizo la medicin, pero antes de que
Bob obtuvo el resultado de esa medicin es I/2. Este estado no depende del estado |i que
se transmiti, y por lo tanto, cualquier medicin que haga Bob no contendr informacin
sobre |i, lo que previene que Alice use la teleportacin para enviar informacin a mayor
velocidad que la luz.
P
Demostracin. Por el Teorema 3.28, |i = i |iA i|iB i. Por lo tanto,
i
! !
X X
AB = i |iA i|iB i j hjA |hjB |
i j
X
= i j |iA i|iB ihjA |hjB |
ij
X
= i j (|iA ihjA | |iB ihjB |)
ij
Entonces
X X X
A = trB (AB ) = i j trB (|iA ihjA ||iB ihjB |) = i j hiB |jB i|iA ihjA | = 2i |iA ihiA |
ij ij i
Observaciones.
Todo es funcin: Una funcin tomando un argumento constante u otra funcin, es lo
mismo. Por ejemplo, la funcin que toma una funcin y la compone consigo misma,
es
f.x.f (f x)
PCF es un lenguaje de programacin para funciones computables, basado en la lgica de Scott para
funciones computables LCF [Plotkin, 1977].
Dado que slo usamos naturales, consideraremos que n m = 0 si m > n, y / representa la divisin
euclidiana (con resto), donde la divisin por 0 da error.
49
50 4.1. PCF no tipado
Recursin
En PCF hay un smbolo (palabra clave) que liga una variable en su argumento tal
que f.G es el punto fijo de f.G.
f.G = (f.G)(f.G)
Por lo tanto,
F act = f. n.n?1 : n (f (n 1))
| {z }
G
Ejemplo 4.1.
F act 2 = (f.G)2
= ((f.G)F act)2
= (n.n?1 : n F act(n 1))2
= 2?1 : 2 F act 1
= 2 F act 1
= 2 (f.G)1
= 2 ((f.G)F act)1
= 2 (n.n?1 : n F act(n 1))1
= 2 1?1 : 1 F act 0
=21
=2
x es el punto fijo de f si y slo si f (x) = x.
Captulo 4. Introduccin al lambda clculo y a la teora de tipos 51
Let
La construccin let no es necesaria, pero ser til ms adelante y por lo tanto tambin la
vamos a considerar:
let x = t in u
es equivalente a (x.u)t.
4.1.4. No terminacin
Ejemplos 4.2.
1. x.x x[x.x/x] = x.x
2. Sin : = (x.xx)(x.xx) xx[x.xx/x] = (x.xx)(x.xx) =
Ejercicio:
(f.x.f x)0
Termina?
52 4.1. PCF no tipado
Fix sin
Y F es el punto fijo de F !
f.G (f.G)(f.G)
| {z } | {z } | {z }
YF F YF
2. (x.y.((x.(x + y))x)54
3. let x = 4 in
let f = y.y + x in En las primeras versiones de Lisp, este
let x = 5 in
ejemplo daba 11 en lugar de 10.
f6
x[u/x] = u
y[u/x] = y
(x.t)[u/x] = x.t
(y.t)[u/x] = y.t[u/x] Si y
/ FV(u)
(y.t)[u/x] = z.t[z/y][u/x] Si y FV(u)
(tv)[u/x] = t[u/x]v[u/x]
n[u/x] = n
(t v)[u/x] = t[u/x] v[u/x]
(t?v1 : v2 )[u/x] = t[u/x]?v1 [u/x] : v2 [u/x]
(x.t)[u/x] = x.t
(y.t)[u/x] = y.t[u/x] Si y
/ FV(u)
(y.t)[u/x] = z.t[z/y][u/x] Si y FV(u)
(let x = t in v)[u/x] = let x = t[u/x] in v
(let y = t in v)[u/x] = let y = t[u/x] in v[u/x] Si y
/ FV(u)
(let y = t in v)[u/x] = let y = t[u/x] in v[z/y][u/x] Si y FV(u)
Captulo 4. Introduccin al lambda clculo y a la teora de tipos 53
Definicin 4.5.
u
R es Church-Rosser o confluente si R satisface la propiedad del diamante. Es
decir, si t R v1 y t R v2 implica que v1 R u y v2 R u para algn u.
Lema 4.7.
Demostracin. Ejercicio.
2+3
Pero esta propiedad, cuando hay trminos que no terminan, no es suficiente. Por ejemplo:
Entonces:
F act 0 = (f.G)0
(G[F act/f ])0
(G[G[F act/f ]/f ])0
(G[G[G[F act/f ]/f ]/f ])0
C0 = x,0
b1 = (f.x.f x)0
Entonces,
Es decir,
b 1 b2 b1 b2
Por lo tanto, tenemos el siguiente diagrama:
C 0 b1 0
C 0 b2 C 0 b1 C 0 b2 C 0 b1 ...
En Caml,
let rec f x = f x in
let g x = 0 in
g (f 0)
Captulo 4. Introduccin al lambda clculo y a la teora de tipos 55
no termina nunca.
Mismo ejemplo en Java:
class Omega {
static int f (int x) {return f(x);}
static int g (int x) {return 0;}
static public void main (String [] args) {
System.out.println (g(f(0)));
}
}
(x.x + 9)3
Observacin. La estrategia dbil no optimiza programa, los ejecuta. Slo hace falta para
sto eliminar la regla
tu
x.t x.u
4.2.3. Call-by-name
C 0 b1 0
C 0 b2 C 0 b1 C 0 b2 C 0 b1 ...
56 4.3. PCF tipado
4.2.4. Call-by-value
C 0 b1 0
C 0 b2 C0 b 1 C 0 b2 C 0 b1 ...
Definicin 4.14. A los trminos t de PCF tales que FV(t) = y que t est en forma
normal, se les llaman valores.
Definicin 4.15. La estrategia call-by-value consiste en evaluar siempre los argumentos
antes de pasarlos a la funcin. La idea es que
(x.t)v
reduce slo cuando v est en forma normal (si la estrategia es dbil, y slo reducimos
trminos cerrados, v es un valor).
En (x.x + x)(Fact 10) comenzamos por reducir el factorial, obtenemos 3628800 y recin
ah lo pasamos a la funcin. De esa manera el factorial es calculado una vez.
Ejercicio: Escribir las reglas que implementan call-by-value.
Observacin. Un poco de pereza es necesaria: ifz siempre debe evaluar primero la condi-
cin, estemos en call-by-name o call-by-value.
Todo es aplicable a todo! Sin restricciones. Sumar 1 a una funcin no tiene sentido. Hacer
un ifz sobre algo que no es un nmero o pasarle un argumento a un nmero, tampoco.
Idea: detectar este tipo de errores sintcticamente. Por ejemplo:
Es decir, deducimos que no tiene sentido pasarle un argumento a (x.x)1, ya que es una
constante, y lo dedujimos sin tener que ejecutar el programa.
En matemticas:
Cualquier conjunto
Ejemplo:
f : Pares N
x
f (x) 7
2
Est bien definido f (3 + (4 + 1))? Hay que determinar si 3 + (4 + 1) pertenece al dominio,
es decir, si es par.
En general, determinar si un objeto cualquiera pertenece a un conjunto cualquiera es un
problema indecidible.
De todas maneras, x2 lo podemos calcular si x es un nmero (y no, por ejemplo, una
funcin), y poco importa si es par o no. As que vamos a restringir las clases de conjuntos
que se pueden utilizar como dominios. A estos conjuntos los llamamos tipos.
Teniendo tipos, tendremos que escribir de qu tipo son cada una de las variables. Como
slo nos vamos a interesar en trminos sin variables libres (slo los subtrminos tendrn
variables libres), es suficiente con escribir el tipo cuando se liga la variable. Por ejemplo,
en lugar de x.x la funcin identidad es una para cada tipo:
A ::= nat | A A
t ::= x | x : A.t | tt | n | t t | t?t : t | x : A.t | let x : A = t in t
donde = +, , , / y n N.
axv axc
, x : A ` x : A ` n : nat
, x : A ` t : B ` t : A B ` u : A e
i
` x : A.t : A B ` tu : B
4.3.4. Correctitud
Si deducimos el tipo A para un trmino (usando la Definicin 4.17), o sea, sin ejecutar
el programa, y luego ejecutamos el programa obteniendo u, entonces queremos que el
trmino u tienga el mismo tipo, ya que la intencin fue desde el principio saber qu
tipo de resultado voy a tener al ejecutar un programa (un nmero, una funcin, etc). El
teorema de subject reduction o de conservacin de tipos (Teorema 4.20) nos asegura eso
en el sistema que acabamos de definir. Para demostrar este teorema necesitaremos un
resultado previo (Lema 4.19).
x : nat.x + 1
Sin embargo, en este caso es un poco innecesario, ya que la operacin + slo puede ocurrir
entre naturales, y por lo tanto era posible inferir que x deba ser de tipo nat.
Podemos entonces liberar al programador de escribir los tipos y escribir un algoritmo que
los infiera.
Estilo Curry. Escribimos variables sin tipos, como hicimos con PCF no tipado, y
definimos independientemente el lenguaje de tipos, como ya lo definimos.
As, en vez de ` x : nat.x + 1 : nat nat escribimos ` x.x + 1 : nat nat.
Gramtica
A ::= nat | A A
t ::= x | x.t | tt | n | t t | t?t : t | x.t | let x = t in t
Reglas de tipado
axv axc
, x : A ` x : A ` n : nat
, x : A ` t : B ` t : A B ` u : A e
i
` x.t : A B ` tu : B
Ahora, para el mismo trmino, podemos derivar diferentes tipos. Por ejemplo:
axv axv
x : nat ` x : nat i x : nat nat ` x : nat nat i
` x.x : nat nat ` x.x : (nat nat) (nat nat)
axv axc
f : nat nat ` f : nat nat f : nat nat ` 1 : nat
axc e
f : nat nat ` 2 : nat f : nat nat ` f 1 : nat
+
f : nat nat ` 2 + f 1 : nat
i
` f ,2 + f 1 : nat nat
Definicin 4.27. Sea una substitucin A1 /X1 , . . . , An /Xn . Decimos que es una so-
lucin del conjunto de ecuaciones si para todo B = C en , B y C son idnticos.
4.5. Polimorfismo
4.5.1. Introduccin
En la seccin anterior vimos que el tipo principal de x.x es X X. Es decir, x.x tiene
tipo X X para todo X. Podemos entonces atribuirle el tipo
X.(X X)
y agregar una regla segn la cual si t tiene tipo X.A, entonces t tiene tipo A[B/X] para
cualquier B.
A tales lenguajes se los llama polimrficos.
Ejemplo 4.30. Usemos los algoritmos de Hindley y Robinson para inferir el tipo del
trmino let i = x.x in ii:
i:X`i X, i : X ` i X, x:Z`x Z,
i : X ` ii Y, {X = X Y } ` x.x Z Z,
` let i = x.x in ii Y, {X = X Y, X = Z Z}
El algoritmo de Robinson finalizar con error al leer la ecuacin X = X Y .
Sin embargo, el trmino equivalente (x.x)(x.x) s puede ser tipado:
x:X`x X, x:Y `x Y,
` x.x X X, ` x.x Y Y,
` (x.x)(x.x) Z, {X X = (Y Y ) Z}
X = Y Y
X X = (Y Y ) Z = = Y Y = Z
X = Z
Es decir, el trmino tiene tipo Y Y para cualquier Y .
La diferencia entre el primer trmino y el segundo es que en el primero, i debe tener
el mismo tipo en ambas instancias, Z Z para cualquier Z, en cambio en el segundo
ejemplo, cada funcin identidad puede instanciar la Z de manera diferente.
Con un tipo , podemos hacer que el i del let tenga tipo X.(X X) y cada ocurrencia
de i se instancie en un tipo diferente, haciendo que el trmino let i = x.x in ii pueda ser
tipado como Y.(Y Y ).
El ejemplo anterior no es un ejemplo aislado. Podramos por ejemplo hacer una funcin
map para rboles, sea cual sea el tipo de los elementos en los rboles, lo que permite
reusabilidad de cdigo y por lo tanto programas ms concisos.
`t: ` t : X.
Si X
/ FV(),
` t : X. i ` t : [A/X] e
Observaciones.
En la definicin anterior se atribuye un esquema de tipo a cada trmino, en par-
ticular a las variables. Las reglas y piden x : [A], es decir, un esquema sin
cuantificar. Slo let permite darle a la variable cualquier esquema.
La condicin de la regla i permite tipar, por ejemplo,
axv
x : [X] ` x : [X]
i
` xx : [X X]
` x.x : X.[X X] i
` x.x : [nat nat] e
66 4.6. Interpretacin
1. x.x
2. let i = x.x in ii
3. (f.f f )(x.x)
4. (x.xx)(x.xx)
4.6. Interpretacin
El programa que calcula el valor de un trmino se llama intrprete.
t , r t r y r irreducible
donde es la clausura reflexiva y transitiva de .
JnatK = N
JA BK = JAK JBK
JxK = (x)
Jx : A.tK = a : JAK.JtK,x=a
JtrK = JtK JrK
JnK =n
Jt rK = JtK JrK
JrK si JtK = 0
Jt?r : sK =
JsK si JtK N
Jlet x : A = r in tK = JtK,x=JrK
1. t/0 tirar error en PCF y no est definida en matemtica. Para que esta definicin
sea correcta hay que agregar un elemento error a cada conjunto JAK y adaptar la
definicin
error si JrK = 0
Jt/rK =
JtK/JrK si JtK N, JrK N
2. f : nat nat.x : nat.(f x) + 1 tampoco tiene punto fijo. . . y basta con cmabiar el
primer y tengo el .
4. x : nat.x tambin.
Teorema 4.43. Si tomamos el punto fijo de una funcin que no tiene punto fijo o que
tiene varios, el programa que obtenemos no termina.
Observacin. Tambin existen programas con un slo punto fijo y que no terminan en
PCF. Por ejemplo x : nat.x + x.
Ahora vemos que la funcin Jx : nat.x + 1K que no tena punto fijo cuando JnatK = N, si
JnatK = N le podemos dar como semntica a ese trmino.
Jx : nat.xK que tena muchos puntos fijos, ahora tiene uno ms: .
Jx : nat.x + xK que tena slo un punto fijo en 0, ahora tiene 2: 0 y , y el segundo es el
que queremos atribuirle como semntica.
JxK = (x)
Jx : A.tK = a : JAK.JtK,x=a
JtrK = JtK JrK
JnK =n
JtK JrK si JtK , JrK N
Jt rK =
N si no
JrK si JtK = 0
Jt?r : sK = JsK si JtK N
A si JtK = N y A es el tipo del trmino
Jlet x : A = r in tK = JtK,x=JrK
Jx : A.tK = FIX(a : JAK.JtK,x=a )
Donde
new mapea un bit clsico en un qubit.
Programas
El estado de un programa se representa con una tripleta [q, `, t] donde
q es un vector normalizado de ni=1 C2 , para algn n > 0.
N
73
74 5.1. Control clsico, datos cunticos
t es un trmino lambda.
` es una funcin de W en Nn , donde FV(t) W . A L se la llama funcin de
linkeado.
La funcin de linkeado linkea variables libres especficas de t a qubits especficos de q.
Ejemplo 5.1. La tripleta
1
[ (|00i + |11i), {x 7 2}, y.Xx]
2
representa el programa que comienza con el estado de Bell 00 y al pasarle un argumento
cualquiera aplica la compuerta X (not) al segundo qubit, transformando dicho estado en
01 , pero an no hemos dicho cmo reduce un programa para poder verificar esta ltima
afirmacin.
Notacin. Para simplificar la notacin, se usan pi para denotar las variables libres x
tal que `(x) = i. Es decir, pi es la variable que referencia al i-simo qubit. De esa manera,
un programa [q, `, t] es abreviado en [q, t0 ], donde t0 = t[p`(x1 ) /x1 ] . . . [p`(xn ) /xn ].
Ejemplo 5.2. La tripleta del ejemplo 5.1 se escribe abreviadamente como
1
[ (|00i + |11i), y.Xp2 ]
2
Observacin. El teorema de no clonado (ver Teorema 1.27) en este lenguaje es traducido
en que cada qubit cuntico no puede ser referenciado ms de una vez a travs de la funcin
de linkeado. Sintcticamente esta restriccin se traduce en la condicin de linealidad: una
lambda abstraccin x.t se dice lineal si la variable x aparece exactamente una vez en t.
El sistema de tipos se encargar de que las variables linkeadas a travs de la funcin ` se
usen linealmente, mientras al resto de las variables se permite una utilizacin no-lineal.
Donde las dos ramas tienen probabilidad 1/2 cada una, por lo tanto, en call-by-value este
programa produce el valor booleano 0 con probabilidad 1.
(No se detalla paso a paso ya que hay algunas sutilezas con la construccin ? : que an
no hemos mencionado).
Entonces, en call-by-name este programa produce 0 o 1 con la misma probabilidad.
Sin estrategia. Si no se establece una estrategia, este trmino podra incluso reducir
a un trmino mal formado, por ejemplo:
[|0i + |1i, meas p1 ] ||2 [|0i, 0] y [|0i + |1i, meas p1 ] ||2 [|1i, 1]
i1
donde |0j i, |1j i C2 .
n
( ) q C2
Tipos
El sistema de tipos captura la nocin de duplicabilidad, como se discuti anteriormente.
Se utiliza la notacin de la lgica lineal de Girard [1987]. Un trmino de tipo A se asume no
duplicable, y a los trminos duplicables se les asignar tipos de la forma !A. La gramtica
de los tipos se define como sigue:
A ::= | X | !A | A ( A | > | A A
A <: B Ac <: B
(var ) (const)
, x : A ` x : B `c:B
1 , ! ` t : bit 2 , ! ` r : A 2 , ! ` s : A
(if )
1 , 2 , ! ` t?r : s : A
1 , ! ` t : A ( B 2 , ! ` r : A
(app)
1 , 2 , ! ` tr : B
x : A, ` t : B , !, x : A ` t : B
(1 ) Si FV(t) || = , (2 )
` x.t : A ( B , ! ` x.t :!n+1 (A ( B)
1 , ! ` t :!n A1 2 , ! ` r :!n A2
(i ) (>)
1 , 2 , ! ` (t, r) :!n (A1 A2 ) ` :!n >
1 , ! ` t :!n (A1 A2 ) 2 , !, x :!n A1 , y :!n A2 ` r : A
(e )
1 , 2 , ! ` let (x, y) = t in r : A
Ejemplo: Teleportacin
La teleportacin fue presentada en la Seccin 1.6.2. Reproducimos el circuito aqu por
conveniencia.
|i H
|0i H
|0i Z b1 X b2 |i
Las lneas punteadas delimitan tres partes del circuito: la primera es la creacin del
estado de Bell 00 , y le llamaremos Bell. La segunda es las operaciones que realiza Alice,
78 5.2. Control y datos cunticos
y llamaremos a esta parte del algoritmo Alice. Finalmente, la tercera es la que realiza
Bob, por lo que le llamaremos Bob. Los tipos de cada parte del programa sern:
Luego,
Telep = q.(let (p, p0 ) = Bell in (Bob p0 (Alice q p)))
Ejercicios:
Inicialmente van Tonder plantea una gramtica simple, con constantes para las operacio-
nes cunticas
t ::= x | x.t | tt | c
c ::= 0 | 1 | H | CN OT | X | Z | . . .
donde, como puede observarse, no hay medicin.
La computacin reversible fue estudiada en los 70s, en particular, el trabajo de Bennett
[1973] mostr una manera simple de obtener reversibilidad: llevar un historial de los pasos
de reduccin. Por ejemplo, si t0 t1 t2 . . . , la reduccin reversible sera
(t0 ) (t0 , t1 ) (t0 , t1 , t2 ) . . .
Sin embargo, en el caso cuntico, no es tan directo. Supongamos que el estado inicial
viene dado por H aplicada al qubit |0i, que van Tonder lo representa dentro de un ket
de la siguiente manera:
|(H 0)i
Las reglas de reduccin para este trmino deberan ser tales que |(H 0)i reduzca a 12 (|0i+
|1i) y |(H 1)i a 12 (|0i|1i). Sin embargo, estas reglas no son reversibles. Usando el truco
de Bennett podramos tener
1 1
|(H 0)i (|(H 0); 0i + |(H 0); 1i) = |(H 0)i (|0i + |1i)
2 2
En este ejemplo, el historial se factoriza a la izquierda y el trmino reducido queda a la
derecha. Sin embargo, consideremos el siguiente ejemplo:
1
|(H (H 0))i (|(H (H 0)); (H 0)i + |(H (H 0)); (H 1)i)
2
1
|(H (H 0))i (|(H 0); 0i + |(H 0); 1i + |(H 1); 0i |(H 1); 1i)
2
Aqu el trmino reducido no puede ser factorizado: el registro quedo enredado con parte
del historial.
Pero en este ejemplo vemos que se est guardando ms informacin de la necesaria. Con
guardar simplemente que subtrmino redujo y con qu operacin es suficiente. Retomando
el mismo ejemplo, tendramos:
1
|(H (H 0))i (|(_ (H _)); (H 0)i + |(_ (H _)); (H 1)i)
2
1
|(_ (H _))i (|(H _); 0i + |(H _); 1i + |(H _); 0i |(H _); 1i)
2
= |(_ (H _)); (H _)i |0i
Con estas ideas en mente se define el modelo computacional. El estado computacional se
toma como una superposicin cuntica de secuencias
h1 ; . . . ; hn ; t
donde h1 ; . . . ; hn es llamado historial, y t registro computacional.
No vamos a discutir el clculo de van Tonder en este curso, slo estas observaciones y se
recomienda al interesado el paper [van Tonder, 2004].
80 5.2. Control y datos cunticos
Gramtica
La gramtica del lenguaje incluye todos los trminos de lambda clculo, y sus combina-
ciones lineales.
t ::= x | x.t | tr | 0 | .t | t + t
Semntica operacional
Las reglas de reduccin son, adems de la beta reduccin, una versin orientada de los
axiomas de espacios vectoriales. La orientacin de cada regla ha sido elegida de manera
de obtener un clculo confluente.
La idea principal es que una abstraccin, sobre una combinacin lineal, se comporte
linealmente como lo hace una matriz sobre un vector. As,
De esa manera no se impone no clonado con una restriccin de lgica lineal (ver el clculo
de Selinger y Valiron en la Seccin 5.1.1), sino que siempre que haya una superposicin,
la funcin actuar linealmente, y por lo tanto slo actuar en los vectores de base. Re-
cordemos que los vectores de base son clonables: por ejemplo, la compuerta CNOT clona
los qubits |0i y |1i:
Por lo tanto el clculo deber ser call-by-value, ya que si el argumento reduce a una
superposicin, es necesario reducirlo antes de pasarlo a una abstraccin.
Ejemplo 5.3. Consideremos los trminos true y false de Church, x.y.x y x.y.y como
los qubits |0i y |1i. De esa manera podemos codificar el trmino t?r : s simplemente como
trs, ya que si t es |0i, x.y.xrs r y si t es |1i, x.y.yrs s.
La compuerta Hadamard podra ser codificada en Lineal de la siguiente manera:
1 1
Hx = x( (|0i + |1i))( (|0i |1i))
2 2
Sin embargo, de esta manera trivial no funciona, ya que los mecanismos utilizados para
no-clonado (las reglas de aplicacin), harn que el trmino reduzca de la siguiente manera:
H|0i = Hx.y.x
1 1
= x.y.x( (|0i + |1i))( (|0i |1i))
2 2
1 1
x.y.x(|0i + |1i)( (|0i |1i))
2 2
1 1
(x.y.x|0i + x.y.x|1i)( (|0i |1i))
2 2
1
(y.|0i + y.|1i)(|0i |1i)
2
1
(|0i |0i + |1i |1i)
2
0
El problema est en la linealidad. Lo que debemos hacer es que el encodaje del ? : detenga
la linealidad. Por ejemplo:
t?r : s = (t(x.r)(x.s))(x.x)
82 5.2. Control y datos cunticos
t?r : s = {t[r][s]}
1 1
{Hx} = {x[( (|0i + |1i))][( (|0i |1i))]}
2 2
Tipos
El sistema de tipos vectorial para Lineal [Arrighi, Daz-Caro, y Valiron, 2013] propone
que los tipos lleven cuenta de las superposiciones en los trminos. As, si el trmino t
tiene tipo A y el trmino r tiene tipo B, el trmino .t + .r tendr tipo .A + .B.
Si consideramos T = X Y X y F = X Y Y , el trmino 12 (|0i + |1i) tendr
tipo 12 (T + F ). Notar que este tipo tiene norma 1, al igual que el trmino, y por lo
tanto, un tal tipo nos permite verificar facilmente la norma del vector que produce un
programa.
Dada la estrategia call-by-value, las variables slo pueden tener tipos no superpuestos,
los que llamamos unit types. Esta necesidad se comprende mejor con el siguiente ejemplo:
Supongamos que permitimos variables con tipos escalados, como .V . Entonces, el tr-
mino x.x + t podra tener tipo (.V ) .V + U , con t de tipo U . Luego, tomemos un
trmino v de tipo V y tenemos (x.x + t)(.v) de tipo .V + U . Sin embargo
Donde [A] = (X .X X ) A.
Captulo 5. Extensiones cunticas al lambda clculo 83
A ::= U | .A | A + A | X
U ::= X | U A | X .U | X.U
Consideramos tambin las siguientes equivalencias entre tipos, la cual es una congruencia:
1.A A .A + .A ( + ).A
.(.A) ( ).A A+B B+A
.A + .B .(A + B) A + (B + C) (A + B) + C
Reglas de tipado. Las reglas de tipado se detallan a continuacin. Usamos [T /X] para
referir a [U/X ] o [A/X].
`t:A 0 , x : U ` t : A
ax I
, x : U ` x : U ` 0 : 0.A I ` x.t : U A
` t : ni=1 i .X.(U Ai ) ` r : m
P P
j=1 j .U [T /X]
Pn Pm E
` tr : i=1 j=1 i j .Ai [Tj /X]
` |0i : X Y.X Y X ,
` |1i : X Y.X Y Y.
1 1
|+i = .(|0i + |1i) y |i = .(|0i |1i).
2 2
84 5.2. Control y datos cunticos
De la misma manera,definimos
1
= .((X Y.X Y X ) + (X Y.X Y Y)),
2
1
= .((X Y.X Y X ) (X Y.X Y Y)).
2
Es fcil verificar que ` [|+i] : [] y ` [|i] : [].
Para simplificar la notacin, tomamos A = [] [] [X]. Entonces
ax
x:A`x:A x : A ` [|+i] : []
E
x : A ` x[|+i] : [] [X] x : A ` [|i] : []
E
x : A ` x[|+i][|i] : [X]
E
x : A ` {x[|+i][|i]} : X
I
` x.{x[|+i][|i]} : A X
` x.{x[|+i][|i]} : X.([] [] [X]) X I
Ahora podemos aplicar Hadamard a un qubit para obtener el tipo correcto. Sea H =
x.{x[|+i][|i]}.
` |0i : X Y.X Y X
` H : X.([] [] [X]) X ` |0i : Y.[] Y [] E
E
` H : ([] [] []) ` |0i : [] [] [] E
E
` H|0i :
Un ejemplo an ms interesante es el siguiente. Sea
1
I = .(([] [] []) + ([] [] []))
2
Es decir, I es donde los forall han sido instanciados. Es fcil verificar que ` |+i : I .
Entonces,
` H : X.([] [] [X]) X ` |+i : I
E
` H|+i : 12 . + 12 .
Y dado que 1 . + 12 . X Y.X Y X , podemos concluir
2
` H|+i : X Y.X Y X .
Notar que H|+i |0i.
(AL) Usar un sistema de reescritura que defina las aplicaciones como aplicaciones lineales,
as x.x x es permitido, pero al aplicarlo a .|0i + .|1i producir .|00i + .|11i
y no (.|0i + .|1i) (.|0i + .|1i).
Sin embargo, definir aplicaciones lineales por medio de reescritura no funciona si el clculo
tiene medicin, ya que slo las compuertas cunticas se comportan de esa manera. Por
ejemplo, digamos que tenemos un operador de medicin notado por , entonces
Gramticas
La gramtica de tipos se separa en dos niveles ya que este clculo es de primer orden (por
razones que luego discutiremos).
con C.
Utilizamos la notacin t?r : s para (? : )trs. El motivo de considerar a ? : como una funcin
es aprovechar la linealidad AL de las funciones, de esa manera,
v ::= b | v + v | .v | 0S(A)
86 5.2. Control y datos cunticos
Tipos
A S(A)
S(S(A)) S(A)
Si A B, entonces
AB
S(A) S(B)
ax ax ~0 ax |0i ax |1i
x:`x: ` ~0S(A) : S(A) ` |0i : Q ` |1i : Q
`t:A ` t : A ` u : A S+ ` t : S(Q)
S S
` .t : S(A) I , ` (t + u) : S(A) I ` t : Q E
` t : A (AB) , x : ` t : A
if I
`t:B ` ?: : Q Q Q Q ` x : t : A
` t : A ` u : E ` t : S( A) ` u : S()
ES
, ` tu : A , ` tu : S(A)
`t:A , x : Q, y : Q ` t : A
W C
, x : Q ` t : A , x : Q ` (x/y)t : A
Captulo 5. Extensiones cunticas al lambda clculo 87
Semntica operacional
si un k est ausente, |k |2 = 1, y
1 k n.
Primer orden. El motivo de utilizar primer orden es que en este clculo hemos mez-
clado los dos enfoques precedentes: LL y AL, y por lo tanto ahora es posible construir
una mquina de clonado si se permite alto orden. El truco es esconder dentro de una
abstraccin una superposicin, por ejemplo x : Q..|0i + .|1i. ste es un trmino du-
plicable, y no hay problema en ello (no es una superposicin, es un programa que produce
una). Sin embargo, dado que ahora tenemos trminos LL, podramos tambin producir
y : S(Q).x : Q.y, el cual nos permite generar superposiciones duplicables. La solucin
es impedir tomar una abstraccin como argumento, y por lo tanto este trmino no podr
ser duplicado.
El primer trmino podra ser tipado con Q S(Q), en cambio el segundo debera ser
tipado con S(Q Q). Naturalmente el subipado va en sentido contrario al necesario:
Q S(Q) S(Q Q), y por lo tanto este ejemplo rompe la propiedad de preservacin
de tipos.
Es normal, en matemtica, que al desarrollar un trmino perdamos informacin. Por
ejemplo, (x 1)(x 2) = x2 3x + 2. La informacin del trmino izquierdo, que da
sus races y una factorizacin, es perdida al desplegar el trmino. Por este motivo, no
permitimos la reduccin (5.1). En cambio, para poder realizar esa reduccin, se debe
castear el trmino, y entonces el tipo es preservado:
S(QQ)
S(QS(Q)) |0i (|0i + |1i) |00i + |01i
Q ::= Q | Q Q
::= Q | S() |
A ::= | A | S(A) | A A
Para las reglas de tipado, primero definimos el tipo QSn , donde S es un conjunto de
nmeros menores que n, de la siguiente manera:
ASn1 Q
si n
/S
QSn = S\{n}
An1 S(Q) si n S
ASn1 Q Q
si n
/S
ASn Q= S\{n}
An1 S(Q) Q si n S
ASn1 Q S(B)
si n
/S
ASn S(B) = S\{n}
An1 S(Q B) si n S
A0 B = B
Ejemplo 5.6.
{1,2,4} {4,5}
Q5 Q5
{1,2,4} {4}
= A4 Q = A4 S(Q)
{1,2}
= A3 S(Q) Q = A3 S(Q Q)
{1,2}
= A2 Q S(Q) Q = A2 Q S(Q Q)
{1}
= A1 S(Q) Q S(Q) Q = A1 Q Q S(Q Q)
= A0 S(Q Q) Q S(Q) Q = A0 Q Q Q S(Q Q)
= S(Q Q) Q S(Q) Q = Q Q Q S(Q Q)
A S(A)
S(S(A)) S(A)
If A B, then
AB
AC BC
S(A) S(B)
C AC B
ax ax ~0 ax |0i ax |1i
x:`x: ` ~0S(A) : S(A) ` |0i : Q ` |1i : Q
` t : QSn SNn
`t:A S ` t : A ` u : A S+ SE ( )
S\{1,...,j}
` .t : S(A) I , ` (t + u) : S(A) I ` j t : Qn jn
` t : A (AB) , x : ` t : A
if I
`t:B ` ?: : Q Q Q Q ` x : t : A
` t : A ` u : E ` t : S( A) ` u : S()
ES
, ` tu : A , ` tu : S(A)
`t:A , x : Q, y : Q ` t : A
W C
, x : Q ` t : A , x : Q ` (x/y)t : A
`t:A `u:B `t:QQ `t:QQ
, ` t u : A B I ` head t : Q Er ` tail t : Q El
` t : S(S(A) B) ` t : S(A S(B))
S(AB)
r l
`S(S(A)B) t : S(A B) `S(AB)
S(AS(B)) t : S(A B)
90 5.2. Control y datos cunticos
`S(A)
S(B) t : S(A)
S(A)
`S(B) t : S(A) `S(A)
S(B) r : S(A)
+
`S(A)
S(B) .t : S(A)
S(A)
, `S(B) (t + r) : S(A)
Finalmente, las reglas de reduccin son las siguientes:
donde
|i |2/Pn |i |2 ),
P
p= iP ( i=1
j m, k n,
Algoritmo de Deutsch
La compuerta Hadamard puede ser implementada de la siguiente manera:
H = x : Q.1/ 2.(|0i + (x?(|1i) : |1i))
Notar que la variable es un tipo de base, y por lo tanto, si H se aplica a una superposicin,
por ejemplo (.|0i + .|1i), reduce de la siguiente manera:
(lin+ ) (lin )2
H(.|0i + .|1i) r (1) (H.|0i + H.|1i) r (1) (.H|0i + .H|1i)
Entonces, Uf es:
Los casteos luego de las compuertas Hadamard se necesitan para desarrollar el trmino
por completo para luego poder pasarlo a una abstraccin que espera trminos de base.
El trmino Deutschf se tipa como sigue:
` Deutschf : Q S(Q)
Notar que la nica diferencia con H1 es el tipo de la variable. Tambin, necesitamos aplicar
cnot a los dos primeros qubits de un sistema de tres qubits, por lo que definimos cnot312 :
Z = x : Q (x?(|1i) : |0i)
Notar que antes de pasar a cnot312 el parmetro de tipo S(Q) S(Q Q), necesitamos
desarrollar el trmino por completo usando dos casteos, y de nuevo luego de la compuerta
Hadamard.
El lado de Bob del algoritmo aplicar ciertas compuertas basado en los bits que reciba
de Alice. Por lo tanto, para cualquier ` U : Q S(Q) o ` U : Q Q, definimos U(b)
como la funcin que aplica U o no dependiendo del bit b:
Bob = x : Q Q Q (Z(head x)
(not(head tail x)
(tail tail x)))
Este tipo tiene el tipo esperado S(Q) S(Q), y aplicado a cualquier superposicin
(.|0i + .|1i) reduce, como es de esperarse, a (.|0i + .|1i).
Bibliografa
Charles Bennett y Gilles Brassard. Quantum cryptography: Public key distribution and
coin tossing. En Proceedings of IEEE International Conference on Computers, Systems
and Signal Processing, pgs. 175179. 1984.
Charles Bennett, Gilles Brassard, Claude Crpeau, Richard Jozsa, Asher Peres, y William
Wootters. Teleporting an unknown quantum state via dual classical and Einstein
PodolskyRosen channels. Physical Review Letters, 70(13):18951899, 1993.
Charles Bennett y Stephen Wiesner. Communication via one- and two-particle operators
on EinsteinPodolskyRosen states. Physical Review Letters, 69(20):28812884, 1992.
Garret Birkhoff y John von Neumann. The logic of quantum mechanics. Annals of
Mathematics, 37(4):823843, 1936.
Julian Brown. The Quest for the Quantum Computer. Touchstone, 2001.
David Deutsch. Quantum theory, the church-turing principle and the universal quantum
computer. Proceedings of the Royal Society of London. Series A, Mathematical and
Physical Sciences, 400(1818):97117, 1985.
93
94 Bibliografa
Lov K. Grover. A fast quantum mechanical algorithm for database search. En Proceedings
of the 28th Annual ACM Symposium on Theory of computing, STOC-96, pgs. 212219.
ACM, 1996.
Michael Nielsen y Isaac Chuang. Quantum Computation and Quantum Information. 10th
Anniversary Edition. Cambridge University Press., 2010.
John Preskill. Quantum computing: pro and con. Proceedings of the Royal Society of
London A, 454:469486, 1998.
Peter Selinger y Benot Valiron. A lambda calculus for quantum computation with clas-
sical control. Mathematical Structures in Computer Science, 16(3):527552, 2006.
Peter W. Shor. Polynomial-time algorithms for prime factorization and discrete loga-
rithms on a quantum computer. SIAM Journal on Computing, 26(5):14841509, 1997.
Andr van Tonder. A lambda calculus for quantum computation. SIAM Journal on
Computing, 33:11091135, 2004.
Gilbert S. Vernam. Cipher printing telegraph systems for secret wire and radio telegrap-
hic communications. Transactions of the American Institute of Electrical Engineers,
XLV:295301, 1926.
Bibliografa 95
Joe B. Wells. Typability and type checking in the second-order lambda-calculus are equi-
valent and undecidable. En Proceedings of LICS-1994, pgs. 176185. IEEE Computer
Society, 1994.
William K. Wootters y Wojciech .H. Zurek. A single quantum cannot be cloned. Nature,
299:802803, 1982.