Esta semana estoy en la Conferencia de Desarrolladores de NDC en Sydney. Mientras estaba aquí, asistí a un taller sobre programación de computadoras cuánticas usando Q#, dirigido por John Azariah, el creador del lenguaje de programación Q#.
Q# es un lenguaje de Microsoft recientemente lanzado desarrollado específicamente para programar operaciones de computadora cuántica a partir de una computadora clásica. Es compatible con Mac, Windows y Linux.
Lo que es tan emocionante de Q # es que es una abstracción de la computación cuántica a un nuevo nivel semántico. Puede expresar ideas complejas de forma sucinta (piense en C versus Lenguaje Ensamblador). Nuevos niveles de abstracción semántica permiten el surgimiento de nuevos paradigmas.
Q# no es simplemente un nuevo nivel de abstracción a través de una antigua, familiar, sin embargo. Q # es una abstracción semántica sobre un hardware revolucionario que todavía se está implementando físicamente: una computadora cuántica.
Puede expresar cosas en Q# que simplemente no puede expresar en un lenguaje informático clásico.
Q # es realmente más parecido a un lenguaje ensamblador para computadoras cuánticas, en términos de las primitivas que encapsula. Estamos básicamente con computadoras cuánticas donde estábamos a finales de los 40 / principios de los 50 con computadoras clásicas.
Modelo de programación Q #
El modelo de programación para Q# es tratar a la computadora cuántica como un coprocesador. Es similar a trabajar con una GPU, la Unidad de Procesamiento de gráficos en la tarjeta de video de su computadora. La GPU es un procesador especializado para procesar polígonos y calcular sombreados. Resulta que las GPU también son buenas para el tipo de procesamiento de números necesario para la minería de Bitcoin, por lo que la gente las usa para eso. Para programar una GPU, debe ensamblar las instrucciones para la GPU utilizando un idioma específico del dominio y, a continuación, enviarlas desde la CPU principal del equipo a la GPU para su ejecución.
Con Q# escribes las operaciones cuánticas en el lenguaje específico del dominio Q#, que es un lenguaje funcional sin estado, y luego las envías a la computadora cuántica desde un programa escrito en C# que se ejecuta en una CPU clásica, que también es donde recibes la salida final de la computadora cuántica.
Ejemplo de Código Q #
Después del taller, escribí un programa Q# que demuestra un comportamiento cuántico simple que es distinto del comportamiento de un ordenador clásico.
El programa HGate demuestra un caso especial del famoso Experimento de Doble rendija, donde la observación de un estado intermedio del sistema influye en el comportamiento del sistema.
» Dios no juega a los dados Albert » — Albert Einstein
Para comprender el comportamiento que muestra este programa: imagine tomar una moneda y comenzar con el heads up, luego voltearla. Tiene un 50% de probabilidades de aparecer cara o cruz. Revisas lo que es, luego lo volteas de nuevo. Tiene un 50% de probabilidades de volver a aparecer cara o cruz.
Bastante sencillo. Ahora, aquí está la rareza cuántica. En el reino cuántico, si la moneda es una partícula sujeta a efectos cuánticos, la volteas enviándola a través de un circuito de lógica cuántica llamado puerta Hadamard. Si lo miras después del primer giro, obtienes un 50/50 cara/cruz en ese giro y en el segundo giro. Sin embargo, si no lo miras después de la primera vuelta, la segunda sale cara a cara, cada vez.
Albert Einstein, que descubrió por primera vez la Mecánica Cuántica, no podía creer que el universo pudiera funcionar así. Y, sin embargo, lo hace, porque de lo contrario no tendríamos iPhones y otros dispositivos electrónicos modernos, que operan a escalas extremadamente pequeñas y explotan una serie de comportamientos cuánticos como este. Einstein pasó el resto de su vida tratando de probar que la rareza cuántica que descubrió no era una cosa, sin éxito. Y es por eso que no obtiene el crédito por ello. Pero sí, publicó tres artículos al mismo tiempo: uno era una prueba de la existencia de átomos, el segundo era la relatividad, y el tercero era sobre la radiación del cuerpo negro, que es un fenómeno mecánico cuántico.
Para leer un poco más sobre por qué ocurre este comportamiento cuántico específico, consulte el README.md archivo del programa de ejemplo.
Una Operación cuántica Q #
Aquí hay un ejemplo de una operación cuántica escrita en Q#, tomada del programa de ejemplo vinculado anteriormente:
operation CoinFlip (count: Int) : (Int, Int)
{
body
{
mutable numOnes = 0;
mutable numZeros = 0; // Get a Qubit in Zero state
using (qubit = Qubit) { for (test in 1..count) {
// Set is an operation defined elsewhere
Set (Zero, qubit); // Send the qubit through a Hadamard quantum logic gate
H(qubit); // Measure the value of the q-bit
let state = M(qubit); if (state == Zero) {
set numZeros = numZeros + 1;
}
if (state == One) {
set numOnes = numOnes + 1;
}
}
ResetAll(qubit); // Reset the qubit
}
return (numZeros, numOnes);
}}
El diseño del lenguaje Q#
Q # se inspira en F # como lenguaje funcional (el compilador / analizador está escrito en F#), C# para sintaxis, y extrae algunas ideas de Python (notablemente for in
).
Es un lenguaje sin estado: no hay forma de mantener el estado entre operaciones cuánticas, y la medición del estado para devolver un valor de una operación colapsa el estado cuántico a un solo estado del mundo real. No tiene variables, pero utiliza la unión de constantes inmutables.Los tipos
están basados en tuplas, con aridad arbitraria. Tiene soporte de aplicación parcial sin curry, y tiene genéricos y Funtores. Los funtores permiten expresar y razonar secuencias de operaciones.
El compilador Q# puede hacer análisis de todo el programa y razonar sobre el código para hacer optimizaciones antes de enviar las operaciones al ordenador cuántico. Esto es importante debido al costo de las operaciones, especialmente dada la pequeña porción de tiempo que el estado qubit es coherente con las computadoras cuánticas actuales y probables (a corto plazo) futuras.
¿Qué Problemas Pueden Resolver Las Computadoras Cuánticas?
Las computadoras clásicas usan bits que pueden tener uno de dos estados: uno o cero. Los bits de la computadora cuántica, o qubits, solo tienen uno de esos dos estados cuando los miras, pero dentro de la computadora cuántica pueden tener estados probabilísticos. Con esto, pueden modelar muchos estados, especialmente las formas de onda de estado probabilístico de las partículas. ¿Cómo hacer cálculos útiles con esto? Bueno, es bueno para modelar sistemas físicos.
En 1911, descubrimos cómo hacer amoníaco. Requiere calentar nitrógeno a 5000 grados y comprimirlo a 50 atmósferas. Este amoníaco se usa para pólvora y fertilizante, y este fertilizante permitió la Revolución Verde de los años 60 que nos permitió duplicar la población humana global. el 4% del presupuesto energético mundial se destina a la producción de amoníaco.
La nitrogenasa es una enzima de una bacteria que vive en nódulos parásitos en las raíces de los frijoles. Cuando se cultivan frijoles en un campo, esta enzima fija el nitrógeno de la atmósfera en el suelo, fertilizando el suelo. Así que los agricultores rotan los cultivos, cultivando trigo, luego frijoles, luego trigo, para mantener la tierra fértil.
Para entender cómo producir amoníaco de la forma en que lo hace la bacteria, a temperatura ambiente utilizando H2O + N de la atmósfera, se requiere resolver la interacción de 170 electrones. La nitrogenasa tiene dos metales de transición que actúan como catalizadores: hierro y molibdeno. Eso significa que necesitamos 21 numbers números complejos para modelar las formas de onda de los electrones. Solo hay 21 átomos en la Tierra, por lo que se necesitarían 1.000.000 de Tierras solo para almacenar la definición del problema.
Una computadora cuántica con 200 qubits puede modelar tantos estados.
Con esa computadora podemos ejecutar las simulaciones para entender cómo hacerlo como lo hace la bacteria. Habrá ingeniería adicional una vez que tengamos la solución para construir algo que pueda hacerlo, al igual que se deben producir nuevos compuestos de medicamentos. Y una vez hecho esto, la producción agrícola de la agricultura será significativamente mayor.
Construcción de computadora cuántica
En una computadora cuántica, hay dos componentes para un qubit: un componente físico que mantiene el estado cuántico y un componente que realiza operaciones en el componente físico.
Un qubit — al menos de la forma en que lo estamos abordando ahora — opera a 15 milliKelvin. El helio líquido es de 4 Kelvin.
El modelo de computación cuántica es una generalización de la computación clásica. Es, matemáticamente, álgebra Lineal. Matemáticamente, un cúbit es un vector en un espacio lineal de alta dimensión (un espacio de Hilbert).
No puede observar el cúbit en ese espacio, pero puede operar en él solicitando al sistema que le aplique traducciones rotacionales.
Las computadoras cuánticas actuales son capaces de generar un qubit físico durante 10^-6 segundos. Después de ese período, se descompone, por lo que es necesaria la corrección de errores.
Hay dos modelos de Computación cuántica:
- El modelo de puerta-evolución temporal del estado cuántico utilizando la multiplicación de matrices. Este es el modelo que utiliza Q#.
- Recocido cuántico: encuentra el estado de energía más bajo que resuelve un problema. El ordenador DWave utiliza este método.
La computación clásica es un caso especial de la computación cuántica. Así que los desarrollos y descubrimientos en la computación cuántica están causando conocimientos en la computación clásica.
Impactos de la Computación Cuántica
El hijo del póster del título del probable impacto futuro de la Computación Cuántica es ser capaz de romper los esquemas de cifrado actuales. Sin embargo, es probable que haya muchos más cambios impactantes antes de eso.
Romper la criptografía moderna requerirá computadoras cuánticas con 5000 qubits.
Microsoft ya está implementando cifrado resistente a la computación post-cuántica, incluida la criptografía basada en redes. La criptografía moderna se basa en factorizar grandes números primos, clásicamente caros de resolver, pero triviales para las computadoras cuánticas.
NISQC es «Computación Cuántica a Escala Intermedia Ruidosa». Algunas personas están desarrollando computadoras que tienen un gran número de qubits ruidosos. MS no está haciendo esto. Están trabajando para obtener su primer «qubit topológico», un qubit resistente a la decoherencia. Será más recursos pertinentes. Están en camino de conseguirlo este año. John espera que en su vida veamos 1000-1,000,000 qubits en una oblea a 15milliKelvin.
A medida que conectamos las computadoras cuánticas, una de las cosas que nos ayudarán a hacer es modelar sistemas físicos que podamos usar para hacer computadoras cuánticas más eficientes.
Resolver problemas como la Nitrogenasa, o cómo la clorofila captura el CO2 de la atmósfera y lo convierte en carbohidratos, invirtiendo el efecto invernadero y permitiéndonos crear alimentos de la nada (y del sol), están más cerca en el horizonte y tendrán un gran impacto, al igual que el uso de computadoras cuánticas para desarrollar superconductores.
Y también a desbloquear los problemas y las oportunidades que ni siquiera estamos considerando ahora. Einstein no estaba pensando en el iPhone o en Internet cuando publicó su artículo sobre la radiación del cuerpo negro.
Estamos viviendo en el futuro ahora.
Para un par de buenos libros que introducir la física Cuántica, sin un montón de matemáticas, se los recomiendo:
«En busca del Gato de Schrödinger: Física Cuántica y Realidad » – una historia popular del desarrollo de la Mecánica Cuántica, trazando la evolución del pensamiento y el descubrimiento a través del siglo XX.
«The Fabric of Reality – The Science of Parallel Universes, and its Implications» — un libro de David Deutsch, un pionero de la Computación Cuántica. Este libro comienza con la filosofía de la ciencia (específicamente su epistemología), y pasa a examinar algunas de las implicaciones filosóficas de la mecánica cuántica.
Si quieres entrar en él, echa un vistazo a «Computación Cuántica para Científicos de la Computación». Este es el libro que Juan recomienda.
Hay un estado de la técnica en este espacio, por ejemplo Quipper, que se implementa en Haskell. Sin embargo, Q# viene en un SDK de Computación Cuántica que incluye un simulador local de 3 qubit y acceso a un simulador basado en la nube de 40 qubit. IBM tiene OpenQASM, un lenguaje de programación de ensamblado cuántico, que tiene un editor visual tipo Scratch y una plataforma informática cuántica (real) basada en la nube. Q# es un lenguaje de alto nivel con tipos y flujo de control.