La programación cuántica es el proceso de diseñar o ensamblar secuencias de instrucciones, llamadas circuitos cuánticos, utilizando puertas, interruptores y operadores para manipular un sistema cuántico para obtener el resultado deseado o los resultados de un experimento determinado. Los algoritmos de circuitos cuánticos se pueden implementar en circuitos integrados, realizarse con instrumentación o escribirse en un lenguaje de programación para usar con una computadora cuántica o un procesador cuántico.
Con los sistemas basados en procesadores cuánticos, los lenguajes de programación cuánticos ayudan a expresar algoritmos cuánticos utilizando construcciones de alto nivel. [1] El campo está profundamente arraigado en la filosofía de código abierto y, como resultado, la mayor parte del software cuántico analizado en este artículo está disponible gratuitamente como software de código abierto . [2]
Las computadoras cuánticas, como las basadas en el protocolo KLM , un modelo de computación cuántica óptica lineal (LOQC), utilizan algoritmos (circuitos) cuánticos implementados con electrónica, circuitos integrados, instrumentación, sensores y/o mediante otros medios físicos. [ no verificado en el cuerpo ]
Otros circuitos diseñados para la experimentación relacionada con sistemas cuánticos pueden estar basados en instrumentación y sensores. [ no verificado en el cuerpo ]
Los conjuntos de instrucciones cuánticas se utilizan para convertir algoritmos de nivel superior en instrucciones físicas que pueden ejecutarse en procesadores cuánticos. A veces, estas instrucciones son específicas de una plataforma de hardware determinada, por ejemplo, trampas de iones o qubits superconductores .
Blackbird [3] [4] es un conjunto de instrucciones cuánticas y una representación intermedia utilizada por Xanadu Quantum Technologies y Strawberry Fields. Está diseñado para representar programas cuánticos de variable continua que pueden ejecutarse en hardware cuántico fotónico.
cQASM, [5] también conocido como QASM común, es un lenguaje ensamblador cuántico independiente del hardware que garantiza la interoperabilidad entre todas las herramientas de simulación y compilación cuántica. Fue presentado por el QCA Lab de TUDelft .
OpenQASM [6] es la representación intermedia introducida por IBM para su uso con Qiskit e IBM Q Experience .
Quil es una arquitectura de conjunto de instrucciones para la computación cuántica que introdujo por primera vez un modelo de memoria cuántica/clásica compartida. Fue introducido por Robert Smith, Michael Curtis y William Zeng en Una arquitectura práctica de conjunto de instrucciones cuánticas . [7] Muchos algoritmos cuánticos (incluidos la teletransportación cuántica , la corrección de errores cuánticos , la simulación, [8] [9] y los algoritmos de optimización [10] ) requieren una arquitectura de memoria compartida.
Los kits de desarrollo de software cuántico proporcionan colecciones de herramientas para crear y manipular programas cuánticos. [11] También proporcionan los medios para simular los programas cuánticos o prepararlos para ejecutarlos utilizando dispositivos cuánticos basados en la nube y dispositivos cuánticos autohospedados.
Los siguientes kits de desarrollo de software se pueden utilizar para ejecutar circuitos cuánticos en prototipos de dispositivos cuánticos, así como en simuladores.
Un proyecto de código abierto desarrollado por Google , que utiliza el lenguaje de programación Python para crear y manipular circuitos cuánticos. Los programas escritos en Cirq se pueden ejecutar en IonQ , Pasqal, [12] Rigetti y Alpine Quantum Technologies. [13]
Un IDE cuántico basado en la nube desarrollado por Classiq utiliza un lenguaje cuántico de alto nivel, Qmod, para generar circuitos cuánticos escalables y eficientes con el motor de síntesis compatible con hardware, que se puede implementar en una amplia gama de QPU. La plataforma incluye una gran biblioteca de algoritmos cuánticos.
Un proyecto de código abierto desarrollado por Rigetti , que utiliza el lenguaje de programación Python para crear y manipular circuitos cuánticos. Los resultados se obtienen utilizando simuladores o prototipos de dispositivos cuánticos proporcionados por Rigetti. Además de la capacidad de crear programas utilizando operaciones cuánticas básicas, el paquete Grove dispone de algoritmos de nivel superior. [14] Forest se basa en el conjunto de instrucciones de Quil .
Un conjunto de herramientas de código abierto desarrollado por D-Wave. Escrito principalmente en el lenguaje de programación Python, permite a los usuarios formular problemas en los formatos Ising Model y Quadratic Unconstrained Binary Optimization (QUBO). Los resultados se pueden obtener enviándolos a una computadora cuántica en línea en Leap, el entorno de aplicaciones cuánticas en tiempo real de D-Wave, máquinas propiedad del cliente o muestreadores clásicos. [ cita necesaria ]
Una biblioteca Python de código abierto desarrollada por Xanadu Quantum Technologies para la programación diferenciable de computadoras cuánticas. [15] [16] [17] [18] PennyLane ofrece a los usuarios la posibilidad de crear modelos utilizando TensorFlow , NumPy o PyTorch , y conectarlos con backends de computadoras cuánticas disponibles en IBMQ , Google Quantum , Rigetti , Quantinuum [19] y Alpine. Tecnologías cuánticas. [13] [20]
Un proyecto de código abierto creado por Quandela Python . Las simulaciones se ejecutan en el propio ordenador del usuario o en la nube . Perceval también se utiliza para conectarse al procesador cuántico fotónico basado en la nube de Quandela . [21] [22]
para diseñar circuitos cuánticos fotónicos y desarrollar algoritmos cuánticos, basados enUn proyecto de código abierto desarrollado en el Instituto de Física Teórica de ETH , que utiliza el lenguaje de programación Python para crear y manipular circuitos cuánticos. [23] Los resultados se obtienen utilizando un simulador o enviando trabajos a dispositivos cuánticos de IBM.
Una API completa de código abierto para simulación cuántica, control y calibración de hardware cuántico desarrollada por múltiples laboratorios de investigación, incluidos QRC , CQT e INFN . Qibo es un marco modular que incluye múltiples backends para simulación cuántica y control de hardware. [24] [25] Este proyecto tiene como objetivo proporcionar un marco de control de hardware cuántico independiente de la plataforma con controladores para múltiples instrumentos [26] y herramientas para la calibración, caracterización y validación cuántica. [27] Este marco se centra en dispositivos cuánticos autohospedados al simplificar el desarrollo de software requerido en los laboratorios.
Un proyecto de código abierto desarrollado por IBM . [28] Los circuitos cuánticos se crean y manipulan utilizando Python . Los resultados se obtienen utilizando simuladores que se ejecutan en el propio dispositivo del usuario, simuladores proporcionados por IBM o prototipos de dispositivos cuánticos proporcionados por IBM. Además de la capacidad de crear programas utilizando operaciones cuánticas básicas, se encuentran disponibles herramientas de nivel superior para algoritmos y evaluaciones comparativas dentro de paquetes especializados. [29] Qiskit se basa en el estándar OpenQASM para representar circuitos cuánticos. También admite el control del nivel de pulso de sistemas cuánticos a través del estándar QiskitPulse. [30]
Qrisp [31] es un proyecto de código abierto coordinado por la Fundación Eclipse [32] y desarrollado en programación Python por Fraunhofer FOKUS [33] Qrisp es un lenguaje de programación de alto nivel para crear y compilar algoritmos cuánticos. Su modelo de programación estructurado permite un desarrollo y mantenimiento escalables. La sintaxis expresiva se basa en variables en lugar de qubits, con QuantumVariable como clase principal y funciones en lugar de puertas. Herramientas adicionales, como un simulador de alto rendimiento y un cálculo automático, complementan el amplio marco. Además, es independiente de la plataforma, ya que ofrece una compilación alternativa de funciones elementales hasta el nivel de circuito, basada en conjuntos de puertas específicos del dispositivo.
Un proyecto desarrollado por Microsoft [34] como parte de .NET Framework . Los programas cuánticos se pueden escribir y ejecutar en Visual Studio y VSCode utilizando el lenguaje de programación cuántica Q#. Los programas desarrollados en QDK se pueden ejecutar en Azure Quantum de Microsoft, [35] y en computadoras cuánticas de Quantinuum , [19] IonQ y Pasqal. [12]
Una biblioteca Python de código abierto desarrollada por Xanadu Quantum Technologies para diseñar, simular y optimizar circuitos ópticos cuánticos de variable continua (CV) . [36] [37] Se proporcionan tres simuladores: uno basado en Fock , otro que utiliza la formulación gaussiana de la óptica cuántica, [38] y otro que utiliza la biblioteca de aprendizaje automático TensorFlow . Strawberry Fields es también la biblioteca para ejecutar programas en el hardware fotónico cuántico de Xanadu. [39] [40]
Un entorno de programación cuántica y un compilador de optimización desarrollado por Cambridge Quantum Computing dirigido a simuladores y varios back-ends de hardware cuántico, lanzado en diciembre de 2018. [41]
Hay dos grupos principales de lenguajes de programación cuántica: lenguajes de programación cuántica imperativos y lenguajes de programación cuántica funcionales .
Los representantes más destacados de los lenguajes imperativos son QCL, [42] LanQ [43] y Q|SI>. [44]
Ket [45] es un lenguaje integrado de código abierto diseñado para facilitar la programación cuántica, aprovechando la sintaxis familiar y la simplicidad de Python. Sirve como un componente integral de la plataforma de programación Ket Quantum, [46] integrándose perfectamente con una biblioteca de tiempo de ejecución de Rust y un simulador cuántico. Mantenido por Quantuloop, el proyecto enfatiza la accesibilidad y la versatilidad para investigadores y desarrolladores. El siguiente ejemplo demuestra la implementación de un estado Bell usando Ket:
de importación de ket * a , b = quant ( 2 ) # Asignar dos bits cuánticosH ( a ) # Poner el qubit `a` en una superposicióncnot ( a , b ) # Enreda los dos qubits en el estado Bellm_a = medida ( a ) # Mide el qubit `a`, colapsando también el qubit `b`m_b = medida ( b ) # Medir qubit `b`# Afirmar que la medida de ambos qubits siempre será igualafirmar m_a . valor == m_b . valor
La Lógica de Programas Cuánticos (LQP) es una lógica cuántica dinámica, capaz de expresar características importantes de mediciones cuánticas y evoluciones unitarias de estados multipartitos, y proporciona caracterizaciones lógicas de diversas formas de entrelazamiento. La lógica se ha utilizado para especificar y verificar la exactitud de varios protocolos en computación cuántica. [47] [48]
Q Language es el segundo lenguaje de programación cuántica imperativo implementado. [49] Q Language se implementó como una extensión del lenguaje de programación C++. Proporciona clases para operaciones cuánticas básicas como QHadamard, QFourier, QNot y QSwap, que se derivan de la clase base Qop. Se pueden definir nuevos operadores utilizando el mecanismo de clase C++.
La memoria cuántica está representada por la clase Qreg.
Qreg x1 ; // registro cuántico de 1 qubit con valor inicial 0 Qreg x2 ( 2 , 0 ); // registro cuántico de 2 qubits con valor inicial 0
El proceso de cálculo se ejecuta utilizando un simulador proporcionado. Se pueden simular entornos ruidosos utilizando los parámetros del simulador.
Un lenguaje desarrollado por Microsoft para usarse con el kit de desarrollo Quantum. [50]
El lenguaje de computación cuántica (QCL) es uno de los primeros lenguajes de programación cuántica implementados . [51] La característica más importante de QCL es el soporte para operadores y funciones definidos por el usuario. Su sintaxis se asemeja a la sintaxis del lenguaje de programación C y sus tipos de datos clásicos son similares a los tipos de datos primitivos en C. Se puede combinar código clásico y código cuántico en el mismo programa.
El lenguaje de comando protegido cuántico (qGCL) fue definido por P. Zuliani en su tesis doctoral. Está basado en Guarded Command Language creado por Edsger Dijkstra .
Puede describirse como un lenguaje de especificación de programas cuánticos.
Quantum Macro Assembler (QMASM) es un lenguaje de bajo nivel específico para recocedores cuánticos como el D-Wave. [52]
El lenguaje de modelado cuántico (Qmod) es un lenguaje de alto nivel que abstrae la operación del qubit a nivel de puerta, proporcionando un enfoque funcional para la implementación de algoritmos cuánticos en registros cuánticos. El lenguaje es parte de la plataforma Classiq y se puede usar directamente con su sintaxis nativa, a través de un SDK de Python o con un editor visual; todos los métodos pueden aprovechar la biblioteca más grande de algoritmos y la optimización eficiente del circuito.
Q|SI> es una plataforma integrada en el lenguaje .Net que admite la programación cuántica en una extensión cuántica del lenguaje while. [44] [53] Esta plataforma incluye un compilador del lenguaje while cuántico [54] y una cadena de herramientas para la simulación de computación cuántica, optimización de circuitos cuánticos, análisis de terminación de programas cuánticos, [55] y verificación de programas. [56] [57]
El pseudocódigo cuántico propuesto por E. Knill es el primer lenguaje formalizado para la descripción de algoritmos cuánticos . Se introdujo y, además, se relacionó estrechamente con un modelo de máquina cuántica llamada Máquina Cuántica de Acceso Aleatorio (QRAM).
Scaffold es un lenguaje similar a C, que se compila en QASM y OpenQASM. Está construido sobre la infraestructura del compilador LLVM para realizar optimizaciones en el código Scaffold antes de generar un conjunto de instrucciones específico. [58] [59]
Silq es un lenguaje de programación de alto nivel para computación cuántica con un fuerte sistema de tipo estático, desarrollado en ETH Zürich . [60] [61]
Se están realizando esfuerzos para desarrollar lenguajes de programación funcionales para la computación cuántica . Los lenguajes de programación funcionales son muy adecuados para razonar sobre programas. Los ejemplos incluyen QPL de Selinger, [62] y el lenguaje QML similar a Haskell de Altenkirch y Grattage. [63] [64] Van Tonder, [65] Selinger y Valiron [66] y Arrighi y Dowek han propuesto lenguajes de programación cuántica de orden superior, basados en el cálculo lambda . [67]
LIQUi|> (pronunciado líquido ) es una extensión de simulación cuántica del lenguaje de programación F# . [68] Actualmente está siendo desarrollado por el Grupo de Computación y Arquitecturas Cuánticas (QuArC) [69] como parte de los esfuerzos de StationQ en Microsoft Research. LIQUi|> busca permitir a los teóricos experimentar con el diseño de algoritmos cuánticos antes de que las computadoras cuánticas físicas estén disponibles para su uso. [70]
Incluye un lenguaje de programación, algoritmos de optimización y programación y simuladores cuánticos. LIQUi|> se puede utilizar para traducir un algoritmo cuántico escrito en forma de programa de alto nivel en instrucciones de máquina de bajo nivel para un dispositivo cuántico. [71]
QFC y QPL son dos lenguajes de programación cuántica estrechamente relacionados definidos por Peter Selinger. Sólo se diferencian en su sintaxis: QFC usa una sintaxis de diagrama de flujo, mientras que QPL usa una sintaxis textual. Estos lenguajes tienen un flujo de control clásico pero pueden operar con datos cuánticos o clásicos. Selinger ofrece una semántica denotacional para estos lenguajes en una categoría de superoperadores .
QML es un lenguaje de programación cuántica similar a Haskell de Altenkirch y Grattage. [72] [63] A diferencia del QPL de Selinger, este lenguaje toma la duplicación, en lugar de descartar, la información cuántica como una operación primitiva. En este contexto, se entiende por duplicación la operación que se corresponde con la operación imposible de clonación , y no debe confundirse con ella ; Los autores afirman que es similar a cómo se modela el compartir en las lenguas clásicas. QML también introduce operadores de control clásicos y cuánticos, mientras que la mayoría de los demás lenguajes se basan en el control clásico.
Se proporciona una semántica operativa para QML en términos de circuitos cuánticos , mientras que se presenta una semántica denotacional en términos de superoperadores , y se demuestra que estos concuerdan. Tanto la semántica operativa como la denotacional se han implementado (clásicamente) en Haskell. [73]
Los cálculos lambda cuánticos son extensiones del cálculo lambda clásico introducido por Alonzo Church y Stephen Cole Kleene en la década de 1930. El propósito de los cálculos lambda cuánticos es ampliar los lenguajes de programación cuántica con una teoría de funciones de orden superior .
El primer intento de definir un cálculo lambda cuántico fue realizado por Philip Maymin en 1996. [74] Su cálculo lambda-q es lo suficientemente potente como para expresar cualquier cálculo cuántico. Sin embargo, este lenguaje puede resolver eficientemente problemas NP-completos y, por lo tanto, parece ser estrictamente más fuerte que los modelos computacionales cuánticos estándar (como la máquina cuántica de Turing o el modelo de circuito cuántico ). Por lo tanto, el cálculo lambda-q de Maymin probablemente no se pueda implementar en un dispositivo físico [ cita necesaria ] .
En 2003, André van Tonder definió una extensión del cálculo lambda adecuada para demostrar la exactitud de los programas cuánticos. También proporcionó una implementación en el lenguaje de programación Scheme . [75]
En 2004, Selinger y Valiron definieron un cálculo lambda fuertemente tipado para la computación cuántica con un sistema de tipos basado en lógica lineal . [76]
Quipper se publicó en 2013. [77] [78] Se implementa como un lenguaje integrado, utilizando Haskell como lenguaje anfitrión. [79] Por esta razón, los programas cuánticos escritos en Quipper se escriben en Haskell utilizando las bibliotecas proporcionadas. Por ejemplo, el siguiente código implementa la preparación de una superposición
importar Quipper spos :: Bool -> Circ Qubit spos b = hacer q <- qinit b r <- hadamard q devolver r