Квантовое программирование — это процесс проектирования или сборки последовательностей инструкций, называемых квантовыми схемами, с использованием вентилей, переключателей и операторов для управления квантовой системой для получения желаемого результата или результатов данного эксперимента. Алгоритмы квантовых схем могут быть реализованы на интегральных схемах, выполнены с помощью приборов или написаны на языке программирования для использования с квантовым компьютером или квантовым процессором.
В системах на базе квантовых процессоров квантовые языки программирования помогают выражать квантовые алгоритмы с использованием высокоуровневых конструкций. [1] Эта область глубоко укоренена в философии открытого исходного кода , и в результате большая часть квантового программного обеспечения, обсуждаемого в этой статье, свободно доступна как программное обеспечение с открытым исходным кодом . [2]
Квантовые компьютеры, например, основанные на протоколе KLM , модели линейных оптических квантовых вычислений (LOQC), используют квантовые алгоритмы (схемы), реализованные с помощью электроники, интегральных схем, приборов, датчиков и/или других физических средств. [ не проверено в тексте ]
Другие схемы, разработанные для экспериментов, связанных с квантовыми системами, могут быть основаны на приборах и датчиках. [ не проверено в тексте ]
Наборы квантовых инструкций используются для преобразования алгоритмов более высокого уровня в физические инструкции, которые могут быть выполнены на квантовых процессорах. Иногда эти инструкции специфичны для данной аппаратной платформы, например, ионные ловушки или сверхпроводящие кубиты .
Blackbird [3] [4] — это набор квантовых инструкций и промежуточное представление, используемое Xanadu Quantum Technologies и Strawberry Fields. Он разработан для представления непрерывно-переменных квантовых программ, которые могут работать на фотонном квантовом оборудовании.
cQASM [5], также известный как common QASM, — это аппаратно-независимый квантовый язык ассемблера, который гарантирует совместимость между всеми инструментами квантовой компиляции и моделирования. Он был представлен лабораторией QCA в TUDelft .
OpenQASM [6] — это промежуточное представление, представленное IBM для использования с Qiskit и IBM Q Experience .
Quil — это архитектура набора инструкций для квантовых вычислений, которая впервые представила общую модель квантовой/классической памяти. Она была представлена Робертом Смитом, Майклом Кертисом и Уильямом Зенгом в работе A Practical Quantum Instruction Set Architecture . [7] Многие квантовые алгоритмы (включая квантовую телепортацию , квантовую коррекцию ошибок , моделирование, [8] [9] и алгоритмы оптимизации [10] ) требуют архитектуры общей памяти.
Комплекты для разработки квантового программного обеспечения предоставляют наборы инструментов для создания и управления квантовыми программами. [11] Они также предоставляют средства для моделирования квантовых программ или подготовки их к запуску с использованием облачных квантовых устройств и самостоятельных квантовых устройств.
Следующие комплекты средств разработки программного обеспечения можно использовать для запуска квантовых схем на прототипах квантовых устройств, а также на симуляторах.
Проект с открытым исходным кодом, разработанный Google , который использует язык программирования Python для создания и управления квантовыми схемами. Программы, написанные на Cirq, могут быть запущены на IonQ , Pasqal, [12] Rigetti и Alpine Quantum Technologies. [13]
Облачная квантовая IDE, разработанная Classiq, использует квантовый язык высокого уровня Qmod для генерации масштабируемых и эффективных квантовых схем с аппаратно-ориентированным движком синтеза, который может быть развернут в широком диапазоне QPU. Платформа включает большую библиотеку квантовых алгоритмов.
Проект с открытым исходным кодом, разработанный Rigetti , который использует язык программирования Python для создания и управления квантовыми схемами. Результаты получаются либо с помощью симуляторов, либо с помощью прототипов квантовых устройств, предоставленных Rigetti. Помимо возможности создания программ с использованием базовых квантовых операций, в пакете Grove доступны алгоритмы более высокого уровня. [14] Forest основан на наборе инструкций Quil .
MindQuantum — это квантовая вычислительная среда на основе MindSpore , ориентированная на реализацию алгоритмов NISQ . [15] [16] [17]
Набор инструментов с открытым исходным кодом, разработанный D-Wave. Написанный в основном на языке программирования Python, он позволяет пользователям формулировать задачи в форматах Ising Model и Quadratic Unconstrained Binary Optimization (QUBO). Результаты можно получить, отправив их в онлайн-квантовый компьютер в Leap, в среду квантовых приложений D-Wave в реальном времени, на машины, принадлежащие клиентам, или в классические сэмплеры. [ необходима цитата ]
Библиотека Python с открытым исходным кодом, разработанная Xanadu Quantum Technologies для дифференцируемого программирования квантовых компьютеров. [18] [19] [20] [21] PennyLane предоставляет пользователям возможность создавать модели с использованием TensorFlow , NumPy или PyTorch и подключать их к бэкэндам квантовых компьютеров, доступным от IBMQ , Google Quantum , Rigetti , Quantinuum [22] и Alpine Quantum Technologies. [13] [23]
Проект с открытым исходным кодом, созданный Quandela Python . Моделирование выполняется либо на компьютере пользователя, либо в облаке . Perceval также используется для подключения к облачному фотонному квантовому процессору Quandela . [24] [25]
для проектирования фотонных квантовых схем и разработки квантовых алгоритмов на основеПроект с открытым исходным кодом, разработанный в Институте теоретической физики ETH , который использует язык программирования Python для создания и управления квантовыми схемами. [26] Результаты получаются либо с помощью симулятора, либо путем отправки заданий на квантовые устройства IBM.
API полного стека с открытым исходным кодом для квантового моделирования, управления квантовым оборудованием и калибровки, разработанный несколькими исследовательскими лабораториями, включая QRC , CQT и INFN . Qibo — это модульная структура, которая включает несколько бэкэндов для квантового моделирования и управления оборудованием. [27] [28] Целью этого проекта является предоставление платформенно-независимой структуры управления квантовым оборудованием с драйверами для нескольких инструментов [29] и инструментами для квантовой калибровки, характеризации и проверки. [30] Эта структура фокусируется на автономных квантовых устройствах, упрощая разработку программного обеспечения, требуемого в лабораториях.
Проект с открытым исходным кодом, разработанный IBM . [31] Квантовые схемы создаются и управляются с помощью Python . Результаты получаются либо с помощью симуляторов, которые работают на собственном устройстве пользователя, симуляторов, предоставленных IBM, либо прототипов квантовых устройств, предоставленных IBM. Помимо возможности создания программ с использованием базовых квантовых операций, в специализированных пакетах доступны инструменты более высокого уровня для алгоритмов и бенчмаркинга. [32] Qiskit основан на стандарте OpenQASM для представления квантовых схем. Он также поддерживает управление уровнем импульсов квантовых систем с помощью стандарта QiskitPulse. [33]
Qrisp [34] — проект с открытым исходным кодом, координируемый Eclipse Foundation [35] и разработанный в программировании Python компанией Fraunhofer FOKUS [36] Qrisp — это язык программирования высокого уровня для создания и компиляции квантовых алгоритмов. Его структурированная модель программирования обеспечивает масштабируемую разработку и обслуживание. Выразительный синтаксис основан на переменных вместо кубитов, с QuantumVariable в качестве основного класса и функциями вместо вентилей. Дополнительные инструменты, такие как производительный симулятор и автоматическое невычисление, дополняют обширную структуру. Кроме того, он не зависит от платформы, поскольку предлагает альтернативную компиляцию элементарных функций вплоть до уровня схемы на основе наборов вентилей, специфичных для устройства.
Проект, разработанный Microsoft [37] как часть .NET Framework . Квантовые программы могут быть написаны и запущены в Visual Studio и VSCode с использованием квантового языка программирования Q#. Программы, разработанные в QDK, могут быть запущены на Microsoft Azure Quantum [ 38] и запущены на квантовых компьютерах Quantinum [22] IonQ и Pasqal. [12]
Библиотека Python с открытым исходным кодом, разработанная Xanadu Quantum Technologies для проектирования, моделирования и оптимизации квантовых оптических схем с непрерывными переменными (CV) . [39] [40] Предоставляются три симулятора — один на основе Фока , один с использованием гауссовой формулировки квантовой оптики, [41] и один с использованием библиотеки машинного обучения TensorFlow . Strawberry Fields также является библиотекой для выполнения программ на квантовом фотонном оборудовании Xanadu. [42] [43]
Среда квантового программирования и оптимизирующий компилятор, разработанные Cambridge Quantum Computing , предназначенные для симуляторов и нескольких квантовых аппаратных бэкэндов, выпущенные в декабре 2018 года. [44]
Существует две основные группы квантовых языков программирования: императивные квантовые языки программирования и функциональные квантовые языки программирования.
Наиболее яркими представителями императивных языков являются QCL, [45] LanQ [46] и Q|SI>. [47]
Ket [48] — это встроенный язык с открытым исходным кодом, разработанный для облегчения квантового программирования, использующий знакомый синтаксис и простоту Python. Он служит неотъемлемым компонентом платформы квантового программирования Ket, [49] легко интегрируясь с библиотекой времени выполнения Rust и квантовым симулятором. Поддерживаемый Quantuloop, проект делает акцент на доступности и универсальности для исследователей и разработчиков. Следующий пример демонстрирует реализацию состояния Белла с использованием Ket:
из кет импорт *a , b = quant ( 2 ) # Выделяем два квантовых битаH ( a ) # Поместить кубит `a` в суперпозициюcnot ( a , b ) # Запутать два кубита в состоянии Беллаm_a = measure ( a ) # Измеряем кубит `a`, также разрушая кубит `b`m_b = measure ( b ) # Измерение кубита `b`# Утверждаем, что измерение обоих кубитов всегда будет одинаковымутверждать m_a.value == m_b.value
Логика квантовых программ (LQP) — это динамическая квантовая логика, способная выражать важные особенности квантовых измерений и унитарных эволюций многочастичных состояний, а также дает логические характеристики различных форм запутанности. Логика использовалась для спецификации и проверки корректности различных протоколов в квантовых вычислениях. [50] [51]
Q Language — второй реализованный императивный квантовый язык программирования. [52] Q Language был реализован как расширение языка программирования C++. Он предоставляет классы для базовых квантовых операций, таких как QHadamard, QFourier, QNot и QSwap, которые являются производными от базового класса Qop. Новые операторы могут быть определены с использованием механизма классов C++.
Квантовая память представлена классом Qreg.
Qreg x1 ; // 1-кубитный квантовый регистр с начальным значением 0 Qreg x2 ( 2 , 0 ); // 2-кубитный квантовый регистр с начальным значением 0
Процесс вычисления выполняется с использованием предоставленного симулятора. Шумные среды могут быть смоделированы с использованием параметров симулятора.
Язык, разработанный корпорацией Microsoft для использования с Quantum Development Kit. [53]
Quantum Computation Language (QCL) — один из первых реализованных квантовых языков программирования . [54] Наиболее важной особенностью QCL является поддержка определяемых пользователем операторов и функций. Его синтаксис напоминает синтаксис языка программирования C , а его классические типы данных аналогичны примитивным типам данных в C. Можно объединить классический код и квантовый код в одной программе.
Квантовый защищенный командный язык (qGCL) был определен П. Зулиани в его докторской диссертации. Он основан на защищенном командном языке, созданном Эдсгером Дейкстрой .
Его можно охарактеризовать как язык спецификации квантовых программ.
Квантовый макроассемблер (QMASM) — это низкоуровневый язык, специфичный для квантовых отжигателей, таких как D-Wave. [55]
Язык квантового моделирования (Qmod) — это язык высокого уровня, который абстрагируется от работы кубита на уровне вентилей, предоставляя функциональный подход к реализации квантовых алгоритмов на квантовых регистрах. Язык является частью платформы Classiq и может использоваться напрямую с его собственным синтаксисом, через Python SDK или с визуальным редактором, все методы могут использовать преимущества более обширной библиотеки алгоритмов и эффективной оптимизации схем.
Q|SI> — это платформа, встроенная в язык .Net, поддерживающая квантовое программирование в квантовом расширении языка while. [47] [56] Эта платформа включает в себя компилятор квантового языка while [57] и цепочку инструментов для моделирования квантовых вычислений, оптимизации квантовых схем, анализа завершения квантовых программ [58] и проверки квантовых программ. [59] [60]
Квантовый псевдокод, предложенный Э. Книллом, является первым формализованным языком описания квантовых алгоритмов . Он был введен и, более того, тесно связан с моделью квантовой машины, называемой квантовой машиной с произвольным доступом (QRAM).
Scaffold — это язык типа C, который компилируется в QASM и OpenQASM. Он построен на основе инфраструктуры компилятора LLVM для выполнения оптимизаций кода Scaffold перед генерацией указанного набора инструкций. [61] [62]
Silq — это высокоуровневый язык программирования для квантовых вычислений со строгой статической системой типов, разработанный в ETH Zürich . [63] [64]
В настоящее время ведутся работы по разработке функциональных языков программирования для квантовых вычислений . Функциональные языки программирования хорошо подходят для рассуждений о программах. Примерами служат QPL Селингера [65] и язык QML, подобный Haskell , Альтенкирха и Граттэджа. [66] [67] Квантовые языки программирования более высокого порядка, основанные на лямбда-исчислении , были предложены ван Тондером [68], Селингером и Валироном [69] , а также Арриги и Доуэком [70] .
LIQUi|> (произносится как «ликвид ») — расширение квантового моделирования на языке программирования F# . [71] В настоящее время оно разрабатывается группой квантовых архитектур и вычислений (QuArC) [72] в рамках проекта StationQ в Microsoft Research. LIQUi|> стремится позволить теоретикам экспериментировать с разработкой квантовых алгоритмов до того, как физические квантовые компьютеры станут доступны для использования. [73]
Он включает в себя язык программирования, алгоритмы оптимизации и планирования, а также квантовые симуляторы. LIQUi|> может использоваться для перевода квантового алгоритма, написанного в форме высокоуровневой программы, в низкоуровневые машинные инструкции для квантового устройства. [74]
QFC и QPL — два тесно связанных квантовых языка программирования, определенных Питером Селинджером. Они отличаются только синтаксисом: QFC использует синтаксис блок-схем, тогда как QPL использует текстовый синтаксис. Эти языки имеют классический поток управления, но могут работать с квантовыми или классическими данными. Селинджер дает денотационную семантику для этих языков в категории супероператоров .
QML — это квантовый язык программирования, подобный Haskell, разработанный Альтенкирхом и Граттажем. [75] [66] В отличие от QPL Селинджера, этот язык рассматривает дублирование, а не отбрасывание квантовой информации как примитивную операцию. Дублирование в этом контексте понимается как операция, которая отображается на , и ее не следует путать с невозможной операцией клонирования ; авторы утверждают, что это похоже на то, как моделируется совместное использование в классических языках. QML также вводит как классические, так и квантовые операторы управления, тогда как большинство других языков полагаются на классическое управление.
Операционная семантика для QML дана в терминах квантовых схем , в то время как денотационная семантика представлена в терминах супероператоров , и показано, что они согласуются. Как операционная, так и денотационная семантика были реализованы (классически) в Haskell. [76]
Квантовые лямбда-исчисления являются расширениями классического лямбда-исчисления, введенного Алонзо Чёрчем и Стивеном Коулом Клини в 1930-х годах. Целью квантовых лямбда-исчислений является расширение квантовых языков программирования с помощью теории функций высшего порядка .
Первая попытка определить квантовое лямбда-исчисление была предпринята Филиппом Меймином в 1996 году. [77] Его лямбда-q-исчисление достаточно мощное, чтобы выразить любое квантовое вычисление. Однако этот язык может эффективно решать NP-полные задачи и, следовательно, кажется строго сильнее стандартных квантовых вычислительных моделей (таких как квантовая машина Тьюринга или модель квантовой цепи ). Поэтому лямбда-q-исчисление Меймина, вероятно, нереализуемо на физическом устройстве [ требуется ссылка ] .
В 2003 году Андре ван Тондер определил расширение лямбда-исчисления, пригодное для доказательства корректности квантовых программ. Он также предоставил реализацию на языке программирования Scheme . [78]
В 2004 году Селинджер и Валирон определили строго типизированное лямбда-исчисление для квантовых вычислений с системой типов, основанной на линейной логике . [79]
Quipper был опубликован в 2013 году. [80] [81] Он реализован как встроенный язык, использующий Haskell в качестве основного языка. [82] По этой причине квантовые программы, написанные на Quipper, пишутся на Haskell с использованием предоставленных библиотек. Например, следующий код реализует подготовку суперпозиции
импортировать Quipper spos :: Bool -> Circ Qubit spos b = do q <- qinit b r <- hadamard q return r