Programación cuántica - Quantum programming
La programación cuántica es el proceso de ensamblar secuencias de instrucciones, llamadas programas cuánticos, que pueden ejecutarse en una computadora cuántica . Los lenguajes de programación cuántica ayudan a expresar algoritmos cuánticos mediante construcciones de alto nivel.
Conjuntos de instrucciones cuánticas
Los conjuntos de instrucciones cuánticas se utilizan para convertir algoritmos de nivel superior en instrucciones físicas que se pueden ejecutar 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 .
cQASM
cQASM, también conocido como QASM común, es un QASM independiente del hardware que garantiza la interoperabilidad entre todas las herramientas de simulación y compilación cuántica. Fue presentado por QCA Lab en TUDelft .
Quil
Quil es una arquitectura de conjunto de instrucciones para la computación cuántica que introdujo por primera vez un modelo de memoria clásica / cuántica compartida. Fue presentado por Robert Smith, Michael Curtis y William Zeng en A Practical Quantum Instruction Set Architecture . Muchos algoritmos cuánticos (incluida la teletransportación cuántica , la corrección de errores cuánticos , la simulación y los algoritmos de optimización) requieren una arquitectura de memoria compartida.
OpenQASM
OpenQASM es la representación intermedia introducida por IBM para su uso con Qiskit y IBM Q Experience .
Mirlo
Blackbird 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.
Kits de desarrollo de software Quantum
Los kits de desarrollo de software cuántico proporcionan colecciones de herramientas para crear y manipular programas cuánticos. También proporcionan los medios para simular los programas cuánticos o prepararlos para su ejecución utilizando dispositivos cuánticos basados en la nube .
SDK con acceso a procesadores cuánticos
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.
Oceano
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.
ProjectQ
Un 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. Los resultados se obtienen utilizando un simulador o enviando trabajos a dispositivos cuánticos de IBM.
Qiskit
Un proyecto de código abierto desarrollado por IBM . Los circuitos cuánticos se crean y manipulan con 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 alto nivel para algoritmos y evaluaciones comparativas dentro de paquetes especializados. Qiskit se basa en el estándar OpenQASM para representar circuitos cuánticos. También admite el control de nivel de pulso de sistemas cuánticos a través del estándar QiskitPulse.
bosque
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. Forest se basa en el conjunto de instrucciones de Quil .
t | ket>
Un entorno de programación cuántica y un compilador de optimización desarrollado por Cambridge Quantum Computing que apunta a simuladores y varios back-end de hardware cuántico, lanzado en diciembre de 2018.
campos de fresas
Una biblioteca de Python de código abierto desarrollada por Xanadu Quantum Technologies para diseñar, simular y optimizar circuitos ópticos cuánticos de variable continua (CV) . Se proporcionan tres simuladores: uno en la base de Fock , otro que utiliza la formulación gaussiana de la óptica cuántica 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.
PennyLane
Una biblioteca de Python de código abierto desarrollada por Xanadu Quantum Technologies para la programación diferenciable de computadoras cuánticas. PennyLane brinda a los usuarios la capacidad de crear modelos usando TensorFlow , NumPy o PyTorch , y conectarlos con backends de computadora cuántica disponibles en IBMQ , Google Quantum , Rigetti , Honeywell y Alpine Quantum Technologies.
SDK basados en simuladores
El acceso público a los dispositivos cuánticos está previsto actualmente para los siguientes SDK, pero aún no se ha implementado.
Kit de desarrollo cuántico
Un proyecto desarrollado por Microsoft como parte de .NET Framework . Los programas Quantum se pueden escribir y ejecutar dentro de Visual Studio y VSCode .
Cirq
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 resultados se obtienen mediante simuladores que se ejecutan en el propio dispositivo del usuario.
Lenguajes de programación cuántica
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.
Idiomas imperativos
Los representantes más destacados de los lenguajes imperativos son QCL, LanQ y Q | SI>.
QCL
El lenguaje de computación cuántica (QCL) es uno de los primeros lenguajes de programación cuántica implementados . La característica más importante de QCL es la compatibilidad con 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.
Pseudocódigo cuántico
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 conectó estrechamente con un modelo de máquina cuántica llamada Quantum Random Access Machine (QRAM).
Q #
Un lenguaje desarrollado por Microsoft para ser utilizado con Quantum Development Kit .
Q | SI>
Q | SI> es una plataforma integrada en el lenguaje .Net que admite la programación cuántica en una extensión cuántica de while-language. Esta plataforma incluye un compilador del lenguaje while cuántico 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 y verificación de programas cuánticos.
Q idioma
Q Language es el segundo lenguaje de programación cuántica imperativo implementado. 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; // 1-qubit quantum register with initial value 0
Qreg x2(2,0); // 2-qubit quantum register with initial value 0
El proceso de cálculo se ejecuta utilizando un simulador proporcionado. Los entornos ruidosos se pueden simular utilizando los parámetros del simulador.
qGCL
El lenguaje de comando cuántico guardado (qGCL) fue definido por P. Zuliani en su tesis doctoral. Se basa en el lenguaje de comandos guardado creado por Edsger Dijkstra .
Puede describirse como un lenguaje de especificación de programas cuánticos.
QMASM
Quantum Macro Assembler (QMASM) es un lenguaje de bajo nivel específico para templadores cuánticos como el D-Wave.
Andamio
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 de Scaffold antes de generar un conjunto de instrucciones específico.
Silq
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 .
Lenguajes funcionales
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 adecuados para razonar sobre programas. Los ejemplos incluyen QPL de Selinger y el lenguaje QML similar a Haskell de Altenkirch y Grattage. Los lenguajes de programación cuántica de orden superior, basados en el cálculo lambda , han sido propuestos por van Tonder, Selinger y Valiron y por Arrighi y Dowek.
QFC y QPL
QFC y QPL son dos lenguajes de programación cuántica estrechamente relacionados definidos por Peter Selinger. Se diferencian solo 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 da una semántica denotacional para estos lenguajes en una categoría de superoperadores .
QML
QML es un lenguaje de programación cuántica similar a Haskell de Altenkirch y Grattage. 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. Duplicación en este contexto se entiende que es la operación que se asigna a , y es que no debe confundirse con la operación imposible de clonación ; los autores afirman que es similar a cómo se modela el intercambio en los lenguajes clásicos. QML también introduce operadores de control tanto clásicos como cuánticos, mientras que la mayoría de los otros lenguajes se basan en el control clásico.
Una semántica operacional para QML se da en términos de circuitos cuánticos , mientras que una semántica denotacional se presenta en términos de superoperadores , y se muestra que estos coinciden. Tanto la semántica operacional como la denotacional se han implementado (clásicamente) en Haskell.
LIQUi |>
LIQUi |> (pronunciado líquido ) es una extensión de simulación cuántica en el lenguaje de programación F # . Actualmente está siendo desarrollado por Quantum Architectures and Computation Group (QuArC) 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.
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 las instrucciones de máquina de bajo nivel para un dispositivo cuántico.
Cálculos cuánticos lambda
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 extender 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. Su cálculo lambda-q es lo suficientemente poderoso como para expresar cualquier cálculo cuántico. Sin embargo, este lenguaje puede resolver de manera eficiente 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.
En 2003, André van Tonder definió una extensión del cálculo lambda adecuada para demostrar la corrección de los programas cuánticos. También proporcionó una implementación en el lenguaje de programación Scheme .
En 2004, Selinger y Valiron definieron un cálculo lambda fuertemente tipado para el cálculo cuántico con un sistema de tipos basado en lógica lineal .
Quipper
Quipper se publicó en 2013. Se implementa como un lenguaje integrado, utilizando Haskell como idioma anfitrión. 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
import Quipper
spos :: Bool -> Circ Qubit
spos b = do q <- qinit b
r <- hadamard q
return r
funQ
Un grupo de estudiantes de pregrado de la Universidad Tecnológica de Chalmers desarrolló un lenguaje de programación cuántica funcional en 2021. Está inspirado en el cálculo lambda de tipo cuántico de Selinger y Valiron. El simulador cuántico subyacente es parte de una biblioteca Haskell con el mismo nombre. El siguiente código implementa la superposición en funQ
spos : !(Bit -o QBit)
spos b = H (new b)
El mismo ejemplo en la biblioteca Haskell sería
import FunQ
spos :: Bit -> QM QBit
spos b = hadamard =<< new b
Referencias
Otras lecturas
- Mingsheng, Ying (2016). Fundamentos de la programación cuántica . Cambridge, MA. ISBN 978-0128025468. OCLC 945735387 .
enlaces externos
- Bibliografía sobre lenguajes de programación cuántica (actualizada en mayo de 2007)
- V Taller Internacional de Física y Lógica Cuántica
- IV Taller Internacional de Lenguajes de Programación Cuánticos
- 3er Taller Internacional de Lenguajes de Programación Cuánticos
- 2do Taller Internacional de Lenguajes de Programación Cuánticos
- Lenguaje de programación cuántica en Quantiki
- Documentación QMASM
- Documentación de pyQuil que incluye Introducción a la Computación Cuántica
- Fuente de andamio
- Lista seleccionada de todos los proyectos de software cuántico de código abierto