Q # language: Cómo escribir código cuántico en Visual Studio

El futuro de la computadora no es el silicio; ya estamos en los límites de la ley de Moore en términos del rendimiento que podemos obtener de los transistores tradicionales. También estamos trabajando en problemas mucho mayores, especialmente cuando se trata de criptografía y modelado matemático; problemas que requieren días de cómputo incluso en las supercomputadoras más grandes.

Entonces, ¿dónde vamos desde aquí? Microsoft Research, como Google e IBM, ha estado invirtiendo fuertemente en computación cuántica. Gran parte de su investigación ha sido en física básica, trabajando con universidades de todo el mundo para producir entornos eficientes de baja temperatura y entornos de computación cuántica estables. Pero crear un qubit, el bit cuántico probabilístico que esencialmente reemplaza los ceros y unos de un bit tradicional, es solo una parte de la historia. Lo que también se necesita es una forma de programar una computadora cuántica e interpretar el estado probabilístico de los qubits.

Construyendo computadoras cuánticas

La arquitectura de un programa cuántico es relativamente simple: un programa tradicional obtiene valores de la entrada del usuario o de otro código. Luego, pasa esos valores a una aplicación cuántica que establece los qubits en un procesador cuántico, utilizando uno de los muchos algoritmos cuánticos, antes de devolver los resultados a la aplicación principal.

Es un proceso muy similar al que usé en mi primer trabajo de programación, escribiendo código de análisis de elementos finitos de Fortran que usaba un procesador vectorial conectado a una supercomputadora para manejar el álgebra matricial. Las bibliotecas vectoriales que usé para construir y resolver mis modelos electromagnéticos 3D funcionaron tanto en ese hardware especializado como en un coprocesador matemático en una estación de trabajo de escritorio, por lo que pude probar mi código antes de usar el costoso tiempo de supercomputadora.

Microsoft lanzó recientemente su Quantum Development Kit, construido alrededor de su nuevo lenguaje Q #. Diseñado para usar construcciones familiares para ayudar a programar aplicaciones que interactúan con qubits, toma un enfoque similar para trabajar con coprocesadores, proporcionando bibliotecas que manejan la programación e interpretación cuántica real, para que pueda escribir código que entregue las operaciones de qubits a una computadora cuántica de Microsoft. .

Unir los mundos de la computación clásica y cuántica no es fácil, así que no espere que Q # sea como Visual Basic. Es más como usar ese conjunto de bibliotecas matemáticas de Fortran, con la misma suposición subyacente: que comprende la teoría detrás de lo que está haciendo.

Un elemento del Quantum Development Kit es un manual de computación cuántica, que explora los problemas relacionados con el uso de simuladores, además de proporcionar un manual básico en álgebra lineal. Si va a programar en Q #, es esencial comprender los conceptos clave del álgebra lineal en torno a vectores y matrices, especialmente los valores propios y los vectores propios, que son elementos clave de muchos algoritmos cuánticos.

Empezando con Q #

El kit de desarrollo se descarga como una extensión de Visual Studio, por lo que puede usarlo con todas las versiones del entorno de desarrollo principal de Microsoft, incluida la edición comunitaria gratuita. El instalador incluye el lenguaje Q #, un simulador cuántico local y bibliotecas que admiten la incorporación de módulos Q # en su código .Net. Una vez instalado, puede conectarse al repositorio Q # Github de Microsoft para clonar y descargar código de muestra y bibliotecas adicionales. Es un proceso rápido; el instalador tarda un par de minutos en descargarse y ejecutarse en una PC de desarrollo razonablemente potente. Las bibliotecas están alojadas en Nuget, por lo que puede actualizar rápidamente a las últimas versiones.

Con una computadora cuántica en funcionamiento todavía a unos años de distancia, el kit de desarrollo cuántico se limita a trabajar con computadoras cuánticas simuladas. Los sistemas de investigación de Microsoft aún tienen que producir un qubit topológico funcional, pero los resultados han sido prometedores. Por lo tanto, hasta que se publiquen los resultados y Azure obtenga sus coprocesadores cuánticos, estará limitado a experimentar con simuladores alojados en la nube y locales. Debido a que se limitan a usar técnicas de programación tradicionales, no van a manejar la gama completa de operaciones matemáticas complejas que promete la computación cuántica. Pero dan una idea de lo que pueden hacer una pequeña cantidad de qubits.

Gran parte del trabajo que necesita hacer para construir un programa cuántico consiste en construir una computadora cuántica a partir de transformaciones de qubit. El lenguaje Q # maneja el proceso por usted, porque incluye expresiones para muchas estructuras de puertas cuánticas, así como algoritmos cuánticos comunes. El lenguaje en sí resultará familiar para los desarrolladores de .Net, con una estructura que se encuentra en algún lugar entre C # y F #.

Conceptos básicos de la programación cuántica

Encontrará que la mayoría de los programas de Q # son relativamente simples, porque lo que está haciendo es configurar matrices de qubits y aplicarles transformaciones matemáticas. Aunque el problema subyacente es complejo (o al menos es probable que lleve mucho tiempo de cálculo utilizando recursos informáticos tradicionales), confía en la computadora cuántica para manejar el trabajo por usted, y sus algoritmos cuánticos significan que puede usar un número pequeño de qubits conectados para solucionar tu problema.

Una cosa importante a tener en cuenta es que algunos lenguajes cuánticos, como el que usa DWave en sus computadoras cuánticas, están diseñados para funcionar con recocido cuántico, no con el modelo de puerta utilizado en el hardware cuántico de Microsoft.

Donde el lenguaje Q # difiere del familiar es en su soporte para algoritmos cuánticos. Esto comienza con tipos: Q # es un lenguaje fuertemente tipado, agregando nuevos tipos que representan qubits y grupos de qubits. Otra diferencia clave es entre las operaciones y funciones de Q #. Las operaciones contienen operaciones cuánticas, mientras que las funciones son puramente para código clásico, aunque pueden trabajar con los resultados de una operación cuántica.

Bibliotecas y algoritmos cuánticos

Q # también incluye tipos de operaciones específicos que funcionan con algoritmos cuánticos, incluidos los que calculan los resultados adjuntos de una matriz de qubits y otros que ayudan a construir circuitos de qubits, que se activan solo si los qubits de control están configurados correctamente.

Es importante recordar que cuando Q # usa cero y uno en los resultados como variables para manejar qubits, no son lo mismo que 0 y 1. binarios. En cambio, son representaciones de los valores propios de los vectores almacenados en los qubits.

Utiliza las bibliotecas estándar de Q # para crear y construir sus aplicaciones cuánticas. Estos incluyen un conjunto de primitivas cuánticas que definen las puertas que está construyendo a partir de sus qubits, además de aplicar operadores cuánticos y medir los resultados. Las bibliotecas se dividen en dos partes: el preludio para configurar su computadora cuántica y el canon para operar la máquina. Es importante comprender las diferencias entre estas dos partes de las bibliotecas, porque deben mantenerse separadas en su código. El uso de operadores de canon ejecuta la máquina cuántica, con operadores que manejan algoritmos cuánticos específicos; por ejemplo, aplicando una Transformada Cuántica de Fourier o encontrando divisores comunes de dos números.

Q # no es un idioma para principiantes. Aunque simplifica algunas operaciones cuánticas, depende de tener un conocimiento de cómo funciona una computadora cuántica, así como de comprender los conceptos básicos de la computación cuántica. Si ha trabajado con álgebra lineal y probabilidades, tendrá una ventaja inicial, pero aún así vale la pena dedicar tiempo primero a los tutoriales y ejemplos de Microsoft.