Casi siempre, los hombres que realizan esos inventos fundamentales de un nuevo paradigma han sido muy jóvenes o muy noveles en el campo cuyo paradigma cambian. Se trata de hombres que, al no estar comprometidos con las reglas tradicionales de la ciencia normal debido a que tienen poca práctica anterior, tienen muchas probabilidades de ver que esas reglas no definen ya un juego que pueda continuar adelante y de concebir otro conjunto que pueda reemplazarlas. La transición consiguiente a un nuevo paradigma es la revolución científica.

Thomas Kuhn

Hoy Javier me envió esta frase, me parece muy interesante la manera en que Kuhn expresa como las personas que se encuentran fuera del sistema son capaces de ver lo que los que se encuentran dentro no pueden ver. Incluso Murphy expreso esto alguna vez, “quien paso y no tenia nada que ver con el problema te dará la solución“.

Ahora, es de esperar que con gente nueva, joven, con ideas innovadoras, que no temen hacer “preguntas tontas”, que se atreven a preguntar el por qué se llegue más lejos. Esperemos que la inspiración llegue a más personas, y que todos empecemos a realizar las preguntas correctas. La información ya esta afuera, solo espera ser codificada.

Por que la reflexión, preguntaran algunos. Pues, es por Esfera; esperemos que los jovenes que navegan al encontrar sitios donde se publica ciencia divertida, ciencia en linea, ciencia dinámica, donde tienen una retroalimentación sobre lo que se hace actualmente, y aún más interesante, en su país, se involucren y aporten esa chispa que hace falta en la ciencia. :idea:

Esfera gt es un directorio de blogs dedicado a promover la investigación en Guatemala. Para que todos los que estan trabajando en ella puedan compartir y enterarse de que es lo que estan haciendo los colegas.

El proyecto surge con la inquietud de crear espacios permanentes de gestión del conocimiento. Con un poco de esfuerzo (y gracias Isa y Javier, que me prestaron el hosting) ya esta el directorio arriba. Por ahora en fase beta para poder probarlo y ver como se comporta y que tanta respuesta tiene de parte de la comunidad.

Esperemos que pronto todos los que esten realizando investigación se agreguen al directorio y podamos empezar a compartir experiencias.

Cualquier comentario y mejora que crean que es posible se les agredecería que la hicieran (constructivamente) para poder mejorar el sitio.

En tanto a la imagen, estoy esperando cambiar el banner ya unos amigos ofrecieron mejorarlo (no soy muy bueno con el arte digital). Esperemos que lo terminen pronto y gracias por el apoyo.

Consigna: compartir, generar/mezclar y reusar

En la escuela de Sistemas de San Carlos se crea una iniciativa para poder mostrar y compartir el conocimiento que se esta generando con las investigaciones de todos los compañeros que estamos realizando el proyecto de fin de carrera.

Esta iniciativa comprende la creación de blogs para poder mostrar y compartir en todo el mundo nuestros aportes. Todos los estudiantes estan canalizando toda esta información y poniendola a disposición de todas las personas, para que entre todos podamos gestionar el conocimiento y mejorarlo de poco a poco; esto lo podemos lograr a través de retroalimentación y comentarios sobre los distintos posts.

El siguiente paso es mezclar y reusar este conocimiento para poder crear ideas nuevas e innovadoras a través de todo lo que se esta colgando en la red. Esta es una buena muestra de todo el potencial que existe en Guatemala, y aún más en San Carlos.

Creo que este es un buen inicio para la creación de una comunidad de Académicos 3.0 Guatemaltecos en donde todos estemos enterados del trabajo que se realiza en toda Guatemala, y porque no el mundo. De manera que nos convirtamos en una comunidad que comparte y se apoya, y esperemos que ya no tarden las otras universidades y se unan al movimiento.

También espero que los compañeros que trabajan en el tema, se mantengan posteando y generando conocimiento y tráfico para toda la comunidad.

Tenemos la visión, ahora hay que ponerla en acción. :idea:

Invito a todas las personas a visitar los blogs y enterarse, y entusiasmarse, de lo que se esta realizando en Guatemala.

El area de lenguajes de programación cuánticos es un area que se ha estado desarrollando muchisimo en la última decada, tuvo un auge tremendo en el 2001 donde se presentaron muchismas propuestas.

Se creía que el area no iba a tener un gran impacto dado que el desarrollo de hardware y de computadoras cuánticas de más de unos cuantos qubits no han salido de los laboratorios de física y de las areas de investigación. Esto se ha desmentido, ya que el desarrollo de lenguajes clásicos han demostrado varias cosas:

  • El desarrollo que han tenido los dispositivos cuánticos se ha incrementado. Un buen ejemplo es en el área de criptografía cuántica, en éste se necesitan dispositivos muy complejos y delicados por lo que el desarrollo de protocolos de comunicación y de programación de los mismos es necesaria.
  • El amplio uso de lenguajes de programación que no tienen una buena base semántica ha causado muchos problemas. Un buen ejemplo de un lenguaje de programación con buenos fundamentos teóricos es java 1.5. De modo que el tener un buen fundamento antes de la implementación es necesario.
  • La aplicación de las teorias sobre semántica, lógica y categorias en los lenguajes proveen una nueva perspéctiva sobre la teoría cuántica en si misma.

Los estudios y artículos que se han realizado se pueden resumir en

  • Diseño de lenguajes de programación
  • Semántica
  • Compilación

Los lenguajes con más auge se encuentran en dos paradigmas específicos: el imperativo y el funcional. En el imperativo podemos mencionar lenguajes como QCL, Q-gol, qGCL y Quantum C; los que han tenido un gran desarrollo son QCL y qGCL, aunque este último no cuenta con un compilador como el primero. En los lenguajes funcionales podemos mencionar el Lambda Calculi de Van Tonder y QML, a los cuales recientemente se les ha agregado la medición formalmente, al primero por Alejandro Díaz y al segundo por su creador.

El desarrollo en esta area permitirá obtener abstracción sobre lo que se realiza y ganar una independencia de la arquitectura, así no importará si las computadoras son desarrolladas con esta o aquella otra tecnología. Ya que los lenguajes estarán bien fundamentados y listos para su implementación. Actualmente se plantea una arquitectura híbrida en las computadoras así como en los lenguajes, de modo que podremos utilizar ciertas características clásicas (como las entradas y salidas y algunos flujos de control, entre otros) y las características cuánticas (operadores, superposición e interferencia, paralelismo cuántico, registros de qubits, entrelazamiento, entre otros).

Referencia

  • Gay, Simon J. Quantum Programing Languajes: Survey and Bibliography. Department of Computing Science, University of Glasgow. ( 2006 )

En el mundo clásico estamos tan acostumbrados a observar las cosas que nos olvidamos de lo que esto significa, e implica!. Por ejemplo, como podemos saber si algo esta sonando o no? pues simple escuchamos y sabemos; como sabemos si el programa que tenemos saco los datos que pensamos? pues revisamos los datos y sabremos; como sabemos si el color de algo es blanco o negro? pues vemos y sabremos. Todos estos son ejemplos de mediciones.

En el nivel cuántico la cosas cambian, ya que no podemos observar o medir el sistema en el que estemos trabajando sin perder la información que este posee. Esto es porque colapsamos el sistema en uno de los estados posibles y el resto de información que tenia el sistema, por estar en los otros estados, se pierde y no puede ser recuperada.

Es por esto que decimos que la medición es un proceso destructivo, porque destruye la información que se tenia en el sistema. Al medir un sistema también perdemos la posibilidad de poder revertir las operaciones que se hayan realizado sobre el sistema, de modo que no podemos regresar al estado inicial. En computación cuántica esto equivale a no poder revertir todas las operaciones que se hicieron sobre los qubits, de manera que al medir no podemos revertir este proceso y la información que se tenia almacenada en el qubit se perderá y quedará solo la que hemos observado.

Otro claro ejemplo de esto es el principio de incertidumbre de Heisemberg que dice que no se pueden determinar dos variables con precisión simultaneamente. Esto porque, nuevamente, la medición es un proceso destructivo lo que quiere decir que al medir una variable alteramos la información del sistema y no podemos determinar exactamente la otra variable.

En computación cuántica podemos evitar este fenomeno, aunque sea parcialmente. Esto lo logramos trasladando la medición al final de los algoritmos que estemos trabajando, esto no altera el significado del algoritmo de ninguna manera. Además, podemos transformar cualquier algoritmo en uno equivalente que posea la medición al final del mismo. Logrando con esto, una ventaja sobre el diseño de algortimos cuánticos.

Función de onda que estás
en los espacios de Hilbert,
normalizado sea tu cuadrado
venga a nosotros tu valor medio
así en posiciones como en momentos,
el valor medio de tu energía
dánoslo hoy.
Perdona nuestra incertidumbre
como nosotros perdonamos
tu parte compleja
no nos dejes caer en la degeneración
más libranos de Plank.
Am En

Este me lo tope buscando fotos en Flickr, me mato de la risa así que quice compartirlo con la comunidad. Un poco de humor no cae mal de vez en cuando, y según lo que dicen la risa aumenta la esperanza de vida. Así que si les gusto acaban de ganar un par de días más en la Tierra.

Fuente: http://flickr.com/photos/azugaldia/146066161/

Una de las compuertas cuánticas más importantes es la CNot, esta compuerta es de dos qubits; quiere decir que opera sobre dos qubits. El funcionamiento de la CNot es verificar el valor del primer qubit si este es 1 entonces invierte el valor del segundo qubit. Se dice que es una compuerta controlada, a partir de esta lógica se puede generalizar para cualquier tipo de operador U, de modo que tendriamos cualquier operador controlado.

Podriamos decir que la CNot es un tipo de condicional estático, ya que en computación cuántica no podemos realizar un control de flujo como el que conocemos o estamos acostumbrados a ver en la computación clásica.

Vamos a denotar el funcionamiento de la CNot con sus dos quibtis de la siguiente manera CNot |x, y \rangle = | x , y \oplus x \rangle , esto significa que la compuerta CNot actua sobre los qubits x e y. Llamaremos a x el qubit de control y a y el qubit objetivo, el funcionamiento de la compuerta es realizar un o exclusivo (si lo vemos como lógica booleana) o bien una suma modulo 2 (que es lo que denota \oplus ). La matrix del operador es:

 CNot = \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0  \\ 0 & 0 & 0 &  1 \\ 0 & 0 & 1 & 0 \end{pmatrix}

Veamos unos ejemplos:

  • CNot | 0, 0 \rangle  = | 0, 0 \rangle
  • CNot | 1, 0 \rangle  = | 0, 1 \rangle

Ahora, veamos la demostración para un qubit cualquiera. Supongamos que tenemos un qubit | \psi \rangle = \alpha | 0 \rangle + \beta | 1 \rangle = \begin{pmatrix} \alpha \\ \beta \end{pmatrix} y su qubit invertido | \phi \rangle = \beta | 0 \rangle + \alpha | 1 \rangle = \begin{pmatrix} \beta \\ \alpha \end{pmatrix} , y las bases estan dadas por | 0 \rangle = \begin{pmatrix} 1 \\ 0 \end{pmatrix} y | 1 \rangle = \begin{pmatrix} 0 \\ 1 \end{pmatrix} .

Vamos a empezar por aplicar

CNot | 0 , \psi \rangle

para poder aplicar la CNot es necesario realizar el producto tensorial primero, de modo que si lo realizamos tenemos

| 0 \rangle \otimes | \psi \rangle = \begin{pmatrix} 1 \begin{pmatrix} \alpha \\ \beta \end{pmatrix} \\ 0 \begin{pmatrix} \alpha \\ \beta \end{pmatrix} \end{pmatrix}

| 0 \rangle \otimes | \psi \rangle = \begin{pmatrix} \alpha \\ \beta \\ 0 \\ 0 \end{pmatrix}

ahora, aplicamos el operador al producto tensorial

CNot  | 0 , \psi \rangle = \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \end{pmatrix} \begin{pmatrix} \alpha \\ \beta \\ 0 \\ 0 \end{pmatrix}

CNot | 0 , \psi \rangle = \alpha \begin{pmatrix} 1 \\ 0 \\ 0 \\ 0 \end{pmatrix} + \beta \begin{pmatrix} 0 \\ 1 \\ 0 \\ 0 \end{pmatrix}

si trabajomos sobre la base podemos observar que

| 0 0 \rangle = | 0 \rangle \otimes | 0 \rangle = \begin{pmatrix} 1 \\ 0 \\ 0 \\ 0 \end{pmatrix}

| 0 1 \rangle = | 0 \rangle \otimes | 1 \rangle = \begin{pmatrix} 0 \\ 1 \\ 0 \\ 0 \end{pmatrix}

entonces podemos sustituir y tendremos

CNot | 0 , \psi \rangle = \alpha | 0 0 \rangle + \beta | 0 1 \rangle

CNot | 0 , \psi \rangle = | 0 \rangle \otimes ( \alpha | 0 \rangle + \beta | 1 \rangle

CNot | 0 , \psi \rangle = | 0 \rangle \otimes | \psi \rangle

que era lo que queriamos demostrar, de modo que no varia el qubit objetivo. Ahora para demostrar que si lo invierte con 1

CNot | 1 , \psi \rangle

obtenemos del producto tensorial

| 1 \rangle \otimes | \psi \rangle = \begin{pmatrix} 0 \\ 0 \\ \alpha \\ \beta \end{pmatrix}

aplicamos CNot al producto y tenemos

CNot | 1 , \psi \rangle = \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \end{pmatrix} \begin{pmatrix} 0 \\ 0 \\ \alpha \\ \beta \end{pmatrix}

CNot | 1 , \psi \rangle = \alpha \begin{pmatrix} 0 \\ 0 \\ 0 \\ 1 \end{pmatrix} + \beta \begin{pmatrix} 0 \\ 0 \\ 1 \\ 0 \end{pmatrix}

de manera analoga que en la primera parte, al trabajar sobre la base tenemos

| 1 0 \rangle = | 1 \rangle \otimes | 0 \rangle = \begin{pmatrix} 0 \\ 0 \\ 1 \\ 0 \end{pmatrix}

| 1 1 \rangle = | 1 \rangle \otimes | 1 \rangle = \begin{pmatrix} 0 \\ 0 \\ 0 \\ 1 \end{pmatrix}

entonces podemos sustituir y tendremos

CNot | 1 , \psi \rangle = \alpha | 1 1 \rangle + \beta | 1 0 \rangle

CNot | 1 , \psi \rangle = | 1 \rangle \otimes ( \alpha | 1 \rangle + \beta | 0 \rangle

CNot | 1 , \psi \rangle = | 1 \rangle \otimes | \phi \rangle

entonces podemos ver que al aplicar el CNot al qubit | \psi \rangle con el qubit de control en 1 lo convierte en | \phi \rangle que es el qubit invertido del primero, esto lo podemos verificar al aplicar el operador Not a | \psi \rangle .

Como ya vimos los conceptos matemáticos en la primera parte de una forma simple, voy a continuar explicando un poco de los conceptos que hacen a la computación cuántica tan grandiosa.

Veamos un poco sobre la superposición. Esta no es más que la capacidad que tienen los qubits de estar en más de un estado a la vez, donde los estados son las combinaciones de las bases posibles. Por ejemplo sí tenemos el qubit | \psi_a \rangle = {1 \over \sqrt{2}} ( | 00 \rangle + | 11 \rangle ) decimos que se encuentra en una superposición de los estados equiprobables (por que poseen la misma probabilidad) | 00 \rangle y | 11 \rangle .

Cuando medimos uno de los dos qubits que forman a | \psi_a \rangle colapsamos la función de onda del qubit, obteniendo así un valor discreto sobre los estados posibles del qubit. Por ejemplo si obtenemos el valor 0 en la medición del primer qubit | \psi_a \rangle estaría entonces en el estado | 00 \rangle , en cambio si obtenemos 1 estaría en el estado | \psi_a \rangle .

Consideremos otro qubit, por ejemplo | \psi_b \rangle = {1 \over 2} ( | 00 \rangle + | 01 \rangle + | 10 \rangle + | 11 \rangle ) ; ahora al medir éste si obtenemos 0 en el primer qubit | \psi_b \rangle estaría en el estado | 00 \rangle + | 01 \rangle luego al medir nuevamente, solo que ahora el segundo qubit tenemos que esta en el estado | 00 \rangle si medimos un 0 o bien en el estado | 01 \rangle si medimos un 1.

Al igual que en el modelo clásico en la computación cuántica tenemos un modelo para la generación de circuitos. En este modelo tenemos compuertas cuánticas que tiene la caracteristica de ser matrices unitarias que cumplen con la condición M^\dagger M = I , donde M es una matriz cualquiera e I la matriz identidad. Estas matrices son llamadas operadores (unitarios).

Los operadores de un qubit más comunes son:

Hadamard

Genera una superposición de estados, la matriz es:

H = {1 \over \sqrt{2}} \begin{pmatrix} 1 & 1 \\ 1 & -1 \end{pmatrix}

y se comporta así:

  • H | 0 \rangle = {1 \over \sqrt{2}} ( |0 \rangle + | 1 \rangle )
  • H | 1 \rangle = {1 \over \sqrt{2}} ( |0 \rangle - | 1 \rangle )

Identidad

Este operador deja al qubit intacto luego de aplicarselo, se utiliza cuando tenemos que aplicar ciertos operadores a registros y desesamos que ciertos qubits queden intactos.

I = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}

Negación

Este operador invierte las probabilidades de obtener el estado 0 o 1 del qubit al que se le aplique.

X = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}

En general podemos decir que:

  • X | 0 \rangle =  | 1 \rangle
  • X | 1 \rangle =  | 0 \rangle

Estos son algunos de los operadores más utilizados aunque también tenemos por ejemplo el operador de cambio de fase y el de negación y cambio de fase. También tenemos operadores que se aplican a dos qubits (estos los tocaremos en otro post).

Es importante recalcar tres propiedades principales de la computación cuántica gracias a los operadores

  • Reversivilidad: dado que los operadores son unitarios existen operadores inversos, por lo tanto las opearaciones se pueden realizar para un lado y para el otro. Esto asegura una mejor eficiencia y no exitirá perdida de energia.
  • Superposición: como ya explicamos anteriormente, la posibilidad de un qubit de estar en más de un estado a la vez permite un mayor poder de computo, para lograr esto se utiliza la transformada de Hadamard.
  • Paralelismo: a través de crear qubits en superposición y aplicar operadores podemos operar todos los estados a la vez!! lo que nos da un mayor poder de computación y un verdadero paralelismo.

Bueno, hoy les voy a hablar un poco de las bases necesarias si quieren meterse a estudiar un poco más a fondo QC. Voy a tratar de no volverme tan metódico en los post, en los siguientes quiero mostrarles un par de curiosidades en QC; de modo que para que me entiendan vamos a necesitar saber como funciona lo básico. Así que empecemos.

Primero vamos a empezar recordando y/o conociendo ciertos conceptos necesarios para entender más facilmente los conceptos subsecuentes.

Numeros complejos

Un número complejo es una pareja ordenada (a,b) de modo que a es la parte real y b es la parte imaginaria, tambien podemos expresarlo como (a,b) = a + bi donde i = \sqrt{-1} . Supongamos que tenemos dos complejos z_1 = (a_1,b_1)\ y\ z_2 = (a_2,b_2) , definimos la suma como z_1+z_2=(a_1+a_2,b_1+b_2) y la multiplicación como z_1 z_2 = a_1 a_2 - b_1 b_2, a_1 b_2 + a_2 b_1).

Otra operación que a veces necesitamos hacer sobre los complejos es cambiar el signo de la parte imaginaria, a esta operación se denota con * y el complejo resultante es llamado el conjugado. Por ejemplo, z=(a,b), z^*=(a,-b). También es útil obtener la norma del complejo; la norma de z=(a,b) es el número real definido por \sqrt{a^2 + b^2} y se denota por | z | .

Matrices

Decimos que una matriz n x m tiene n filas y m columnas. Y la representamos como

M = \begin{pmatrix} a_{11 } & a_{12} \\ a_{21} & a_{22} \end{pmatrix}

Podemos hacer referencia a cada valor de la matriz, así M_{11} = a_{11}. Llamaremos matriz fila a la matriz cuando m = 1 y matriz columna a la matriz cuando n = 1, y vector a una matrix tanto fila como columna. Una operación importante con las matrices es la transposición; esto es cuando cambiamos las filas por las columnas y se denota por M^t , por ejemplo M_{ij}^t = M_{ji} .

La suma y multiplicación de matrices esta definida de la siguiente manera, sean

A = \begin{pmatrix} a_{11 } & a_{12} \\ a_{21} & a_{22} \end{pmatrix} \ y\ B = \begin{pmatrix} b_{11 } & b_{12} \\ b_{21} & b_{22} \end{pmatrix}

A + B = \begin{pmatrix} a_{11} + b_{11} & a_{12} + b_{12} \\ a_{21} + b_{21} & a_{22} + b_{22} \end{pmatrix}

AB = \begin{pmatrix} a_{11} b_{11} + a_{12} b_{21} & a_{11} b_{12} + a_{12} b_{22} \\ a_{21} b_{11} + a_{22} b_{21} & a_{21} b_{12} + a_{22} b_{22} \end{pmatrix}

Matrices complejas

Una matriz compleja es igual que una matriz de las anteriores, con la diferencia que cada uno de sus elementos son complejos. Una operación que se realiza con éstas matrices es la transposición y luego conjugación de sus elementos, a la matriz resultante se le llama adjunta, se denota por A^\dagger y se define como A^\dagger_{ij} = A^*_{ji}.

En las matrices complejas definimos la matriz identidad de n x n y se denota como I_n , como la matriz que tiene en sus coordenadas i = j al uno complejo (1,0) y en el resto de posiciones al (0,0). Y se cumple la propiedad M^\dagger M = I_n , donde M es una matriz compleja de m x n. También se cumple que si A y B son matrices complejas entonces (AB)^\dagger = B^\dagger A^\dagger .

Notación de Dirac

Dirac creo una notación especial para manejar los vectores. Llamaremos ket a un vector (matriz columna) que tenga la forma

| \psi \rangle = \begin{pmatrix} \alpha_0 \\ \vdots \\ \alpha_N \end{pmatrix}

y bra al vector (matriz fila) de la forma

\langle \psi | = ( \alpha_0^* , \dots , \alpha_N^* )

donde \alpha_i^* es el conjugado de \alpha_i .

Los ket son lineales respecto a la suma y la multiplicación:

| \lambda_1 \psi_1  + \lambda_2 \psi_2 \rangle = \lambda_1 | \psi_1 \rangle + \lambda_2 | \psi_2 \rangle

Espacio de Hilbert

Para nuestros fines diremos que el espacio de Hilbert no es más que un conjunto de vectores que cumplen con varias propiedades, dichos vectores poseen elementos complejos y nos permiten sumarlos y multiplicarlos tanto entre ellos como con escalares complejos. Podemos decir que el espacio de Hilbert \mathbf{H} = \mathbb{C}^2 .

Producto Tensorial

Tenemos dos matrices P y Q, de orden n x m y k x l, respectivamente (como vemos no necesariamente tienen que tener la misma dimensión como cuando trabajamos producto entre matrices). Definimos el producto tensorial entre P y Q como

P \otimes Q = \begin{pmatrix} p_{11} Q & \dots & p_{1m} Q \\ \vdots & & \vdots \\ p_{n1} Q & \dots & p_{nm} Q \end{pmatrix}

Como vemos, el producto tensorial lo que hace es tomar cada uno de los elementos de P y los multiplica por la matriz Q, entonces tendremos una matriz resultante de nk x ml elementos.

Si tenemos las matrices u, v y z complejo las propiedades siguientes se cumplen:

  • (zu) \otimes v = z ( u \otimes v)
  • u \otimes (zv) = z ( u \otimes v)
  • (u_1 + u_2) \otimes v = (u_1 \otimes v) + (u_2 \otimes v)
  • u \otimes (v_1 + v_2) = (u \otimes v_1) + (u \otimes v_2)

Bits cuánticos

Como ya hemos visto en los posts anteriores la unidad básica en QC es el bit cuántico (qubit, abreviando). Este es la unidad básica, como en la computación clásica tenemos 0 y 1, en QC tenemos los qubits básicos | 0 \rangle y | 1 \rangle que son análogos a sus partes clásicas.

Matemáticamente un qubit no es más que un vector que se encuentra definido en el espacio de Hilbert. Lo podemos escribir como | \psi \rangle = \alpha | 0 \rangle + \beta | 1 \rangle , donde \alpha y \beta son complejos y cumplen con la propiedad | \alpha | ^2 + | \beta | ^2 = 1 . El qubit | psi \rangle decimos que esta en una superposición de los estados básicos | 0 \rangle \text{y} | 1 \rangle con una probabilidad | \alpha | ^2 de que sea | 0 \rangle y una probabilidad | \beta | ^2 de que sesa | 1 \rangle ; estas probabilidades son las que usamos al momento de medir el qubit. De modo que cuando medimos u observamos al qubit colapsamos su función de onda y deja de estar en una superposición de estados y se vuelve un valor puntual, con este proceso se pierde el resto de la información que contenian los otros estados posibles. Este procedimiento no es reversible.

Podemos tener registros de qubits, esto lo hacemos multiplicando a través del producto tensorial los qubits del registro. Por ejemplo podemos tener un registro de dos qubits | 0 \rangle \otimes | 0 \rangle = | 0 0 \rangle . Este registro estaría definido en un espacio \mathbf{H}^{\otimes 2} = \mathbb{C} ^4 .

Un algoritmo es una sucesión de instrucciones para resolver un problema específico. Un algoritmo cuántico es como un algoritmo clásico con la diferencia que podemos aplicar y utilizar propiedad de la mecánica cuántica.

Como ya he mencionado antes, existen varios algoritmos que son relevantes en el campo, estos son el algoritmo de factorización de Shor y el de busqueda de Grover. El primero da una ganancia muy por encima de su contraparte clásica, mientras que el segundo da una ganancia cuadrática. Estos hacen creer que la computación cuántica tiene muchas posibilidades y mucho más poder de computo que su hermana la computación clásica.

Podemos clasificar los algoritmos cuánticos en tres clases principales y que son de gran interes:

  • Algoritmos basados en la Transformada de Fourier: estos se basan en que podemos formar la serie de Fourier en una superposición de estados, y poder operar con ella para obtener los resultados que deseamos. Es muy importante ya que muchos problemas actuales se resuelven a través de la Transformada de Fourier, y un algoritmo que provee de un cálculo aún más rápido emociona a muchos investigadores. Sin embargo existe un pero en el uso del algoritmo, por la naturaleza de la superposición no podemos obtener todos los valores de la transformada sino solo uno de sus terminos si la medimos; en cambio en los algoritmos nos enfocaremos en generar la transformada y utilizarla a nivel cuántico para luego extraer los resultados que nos interesen.
  • Algoritmos de búsqueda: estos algoritmos se basan en el algoritmo de Grover, el cual permite encontrar un ciertos valores que satisfacen una función en un conjunto de datos que no presentan una estructura definida. Se considera este tipo de algoritmos ya que muchos problemas pueden reducirse a una busqueda en un conjunto de datos. Además promete una eficiencia cuadrática en las busquedas. Uno de los beneficios de utilizar este tipo de algoritmos es que no destruye el conjunto de busqueda, sino que simplemente marca los valores que satisfacen la condición de busqueda. Lo cuál es muy bueno, ya que al no poder copiar cualquier qubit podría ser un trabajo tedioso el cuidar estos qubits.
  • Algoritmos de simulación: la computación cuántica es una gran candidata para realizar simulaciones en sistemas cuánticos y por consiguiente clásicos. En una computadora clásica se necesitan una cantidad exponencial de recursos para poder simular un sistema, sin embargo en una computadora cuántica la cantidad de recursos es lineal. Sin embargo, la eficiencia que se obtiene al simular el sistema no garantiza que se obtenga la información que se desea de la simulación ya que al medir obtenemos una cantidad lineal de datos y no toda la información del sistema. Entonces el reto esta en encontrar la manera de encontrar como extraer la información necesaria del sistema.

Otro de los retos con los que nos encontramos al desarrollar algoritmos cuánticos es que estamos acostumbrados a vivir un día a día en un mundo clásico, por lo que tenemos que forzarnos a pensar de manera cuántica y explotar de esa manera todos los beneficios que nos pueden brindar este tipo de algoritmos. Y es que aún falta mucho por explorar en ellos. :!:

Referencias

  • M.A. Nielsen, I.L. Chuang, Quantum Computation and Quantum Information, Cambridge University Press (2001)