2025-11-10T02:59:56.765376

GUPPY: Pythonic Quantum-Classical Programming

Koch, Lawrence, Singhal et al.
We present ongoing work on Guppy, a domain-specific language embedded in Python that allows users to write high-level hybrid quantum programs with complex control flow in Pythonic syntax, aiming to run them on actual quantum hardware.
academic

GUPPY: Pythonic Quantum-Classical Programming

Основная информация

  • ID статьи: 2510.12582
  • Название: GUPPY: Pythonic Quantum-Classical Programming
  • Авторы: Mark Koch, Alan Lawrence, Kartik Singhal, Seyon Sivarajah, Ross Duncan (Quantinuum, United Kingdom)
  • Классификация: cs.PL (Языки программирования), cs.SE (Инженерия программного обеспечения), quant-ph (Квантовая физика)
  • Дата публикации: 14 октября 2025 г. (препринт arXiv)
  • Ссылка на статью: https://arxiv.org/abs/2510.12582v1

Аннотация

В данной статье представлен Guppy — предметно-ориентированный язык (DSL), встроенный в Python, позволяющий пользователям писать высокоуровневые гибридные квантовые программы со сложным управлением потоком выполнения, используя синтаксис Python, с целью запуска этих программ на реальном квантовом оборудовании.

Исследовательский контекст и мотивация

Определение проблемы

  1. Доминирование Python в квантовых вычислениях: Согласно последним исследованиям, более 90% исследователей и практиков в области квантовых вычислений используют Python, однако существующие фреймворки ограничены абстракцией уровня схем и имеют ограниченную поддержку высокоуровневого управления потоком выполнения.
  2. Требования к реальным квантово-классическим вычислениям: Алгоритмы, такие как протоколы повторения до успеха (repeat-until-success), требуют обработки классических данных в реальном времени на основе результатов квантовых измерений. Эта потребность будет расти с развитием квантовых устройств следующего поколения.
  3. Ограничения существующих подходов:
    • Большинство Python-фреймворков строят представление квантовых программ путём отслеживания интерпретатора Python, что не позволяет захватить синтаксис управления потоком выполнения Python
    • Условные операторы и циклы должны выражаться через высокоуровневые комбинаторы или другие синтаксические конструкции
    • Отсутствует система линейных типов для предотвращения ошибок квантового программирования

Исследовательская мотивация

Разработать язык программирования, который сохраняет преимущества дружественного синтаксиса Python и экосистемы, при этом поддерживая сложные квантово-классические гибридные вычисления.

Основные вклады

  1. Предложен DSL Guppy: Предметно-ориентированный язык, встроенный в Python, поддерживающий написание квантово-классических гибридных программ с использованием синтаксиса Python
  2. Реализована система линейных типов: Система линейных типов Qubit, которая захватывает ошибки квантового программирования на этапе компиляции (например, нарушение теоремы о запрете клонирования)
  3. Поддержка сложного управления потоком выполнения: Встроенная поддержка условных операторов, циклов и других структур управления потоком выполнения на основе результатов измерений
  4. Статическая компиляция в Hugr IR: Компиляция в новое промежуточное представление квантовых программ Hugr, поддерживающее выражение и оптимизацию квантово-классических программ
  5. Взаимодействие с Python: Интеграция с экосистемой Python через выражения py(...)

Подробное описание методологии

Определение задачи

Разработать язык программирования, способный:

  • Использовать знакомый синтаксис Python
  • Поддерживать квантово-классические гибридные вычисления
  • Обеспечивать гарантии безопасности на этапе компиляции
  • Генерировать программы, пригодные для запуска на квантовом оборудовании

Архитектура проектирования языка

1. Основные синтаксические особенности

  • Управление потоком выполнения в стиле Python: Поддержка операторов if, for, while, break, continue, return
  • Строгая система типов: Требует аннотаций типов, переменные должны быть присвоены и иметь уникальный статический тип во всех путях управления потоком выполнения
  • Базовые типы: Поддержка bool, int, float, None и соответствующих операций

2. Проектирование квантовых операций

@guppy
def rx(q: Qubit, a: float) -> Qubit:
    # Линейный тип: Qubit не может быть скопирован или неявно отброшен
    return h(rz(h(q), a))

Характеристики системы линейных типов:

  • Значения Qubit обрабатываются линейно, не могут быть скопированы или неявно отброшены
  • Сигнатуры квантовых операций, например: h: Qubit -> Qubit
  • Обнаружение ошибок программирования на этапе компиляции:
    q = Qubit()
    return cx(q, q)  # Ошибка: многократное использование одного qubit
    
    q = Qubit()
    h(q)  # Ошибка: возвращаемое значение не используется
    

3. Типы коллекций

  • Линейные списки и кортежи: Для представления регистров кубитов
  • Специальные операции:
    • Функция get: Возвращает кубит с указанным индексом и новый список без этого кубита
    • Метод apply: Применяет функцию к указанному индексу, например qs.apply(cx, (i, j))
  • Списковые выражения: Поддержка синтаксиса [h(q) for q in qs]

4. Поддержка функций высшего порядка

  • Функции являются значениями первого класса, используется конструктор типа Callable
  • Поддержка вложенных определений функций и захвата переменных
  • Поддержка рекурсии и взаимной рекурсии

5. Взаимодействие с Python

import networkx as nx
g = nx.erdos_renyi_graph(20, 0.25)

@guppy
def apply_graph(qs: list[Qubit]) -> list[Qubit]:
    for i, j in py(g.edges()):  # Выражение py() вызывает код Python
        qs = qs.apply(zz, (i, j))
    return qs

Архитектура компиляции

Целевое представление: Hugr IR

  • Иерархическое унифицированное графовое представление (Hierarchical Unified Graph Representation)
  • Граф потока данных: Узлы представляют вызовы чистых функций, рёбра представляют зависимости данных
  • Структурированное управление потоком выполнения: Ветвления и итерации представляются через узлы Conditional и TailLoop
  • Поддержка линейных типов: Ограничения гарантируют, что выходы узлов имеют только одно исходящее ребро потока данных

Процесс компиляции

  1. Разбор исходного кода Guppy
  2. Проверка типов и статический анализ
  3. Генерация графового представления Hugr
  4. Оптимизация и генерация целевого кода

Экспериментальная установка

Верификация примеров программ

1. Протокол квантовой телепортации

@guppy
def teleport(src: Qubit, tgt: Qubit) -> Qubit:
    tmp, tgt = cx(h(Qubit()), tgt)
    src, tmp = cx(src, tmp)
    
    if measure(h(src)):
        tgt = z(tgt)
    if measure(tmp):
        tgt = x(tgt)
    return tgt

2. Протокол повторения до успеха

@guppy
def rus(q: Qubit, tries: int) -> Qubit:
    for _ in range(tries):
        a, b = h(Qubit()), h(Qubit())
        b, a = cx(b, tdg(a))
        
        if not measure(t(a)):
            discard(b)
            continue
            
        q, b = cx(z(t(q)), b)
        if measure(t(b)):
            break
        q = x(q)
    return q

Верификация компиляции

  • Все примеры программ успешно скомпилированы в Hugr IR
  • Проверка типов корректно захватывает нарушения линейных типов
  • Управление потоком выполнения корректно преобразуется в структурированное представление

Результаты экспериментов

Верификация особенностей языка

  1. Безопасность типов: Система линейных типов успешно обнаруживает ошибки квантового программирования
  2. Выразительность: Успешная реализация сложных квантовых алгоритмов (телепортация, протокол RUS)
  3. Совместимость с Python: Интеграция с экосистемой Python через выражения py()
  4. Корректность компиляции: Генерируемое представление Hugr IR корректно отражает семантику программы

Анализ примеров

  • Квантовая телепортация: Демонстрирует условное управление потоком выполнения на основе результатов измерений
  • Протокол RUS: Иллюстрирует сложную логику циклов и переходов
  • Применение сетевых графов: Показывает практическую ценность взаимодействия с Python

Связанные работы

Сравнение языков квантового программирования

1. Независимые языки

  • Q#: Поддерживает гибридные квантовые алгоритмы, но не имеет гарантий безопасности (использует непрозрачные указатели вместо линейных типов)
  • Silq: Императивный язык с линейными типами, но менее доступный синтаксис

2. Встроенные в Python фреймворки

  • Существующие фреймворки: Catalyst, Qrisp, Cirq, ProjectQ, Pytket, PyQuil, Qiskit
  • Ограничения: Зависят от отслеживания интерпретатора Python, не могут захватить встроенный синтаксис управления потоком выполнения
  • AutoQASM/blqs: Используют AutoGraph для улучшения, но всё ещё имеют ограничения

3. Функциональные языки квантового программирования

  • Proto-Quipper, QWire, Qimaera: Основаны на функциональной парадигме программирования
  • Барьер входа: Менее удобны для программистов, предпочитающих императивный стиль

Технические инновации

  1. Первый язык, поддерживающий одновременно: Синтаксис Python + линейные типы + сложное управление потоком выполнения
  2. Метод статической компиляции: Избегает ограничений отслеживания интерпретатора
  3. Баланс практичности: Находит компромисс между безопасностью типов и удобством использования

Выводы и обсуждение

Основные выводы

  1. Guppy успешно объединяет удобство использования Python с требованиями безопасности квантового программирования
  2. Система линейных типов эффективно предотвращает распространённые ошибки квантового программирования
  3. Статическая компиляция в Hugr IR поддерживает эффективную оптимизацию и развёртывание на несколько целевых платформ
  4. Взаимодействие с Python сохраняет преимущества экосистемы

Ограничения

  1. Сложность системы типов: Линейные типы могут представлять кривую обучения для начинающих
  2. Полнота функциональности: В настоящее время поддерживаются только базовые квантовые вентили, отсутствуют продвинутые функции
  3. Поддержка функций Python: Ещё не поддерживаются строки, множества, словари и другие типы
  4. Механизм линейных ссылок: Небезопасность метода apply требует лучшего решения на уровне языка

Направления будущих исследований

  1. Расширение системы типов: Поддержка дополнительных встроенных типов Python и определяемых пользователем типов
  2. Продвинутые квантовые функции: Автоматическое генерирование управляемых и сопряжённых версий, автоматическое раскомпьютеризирование
  3. Линейные ссылки: Разработка более безопасного механизма локального линейного приостановления
  4. Совершенствование инструментария: Улучшение сообщений об ошибках, поддержка отладки, оптимизация производительности

Глубокая оценка

Преимущества

  1. Высокая инновационность: Первый успешный синтез синтаксиса Python и линейных типов в квантовом программировании
  2. Высокая практическая ценность: Решает реальные проблемы квантового программирования
  3. Разумное проектирование: Достигает хорошего баланса между безопасностью и удобством использования
  4. Передовые технологии: Основан на современных технологиях компиляторов и промежуточных представлениях

Недостатки

  1. Ограниченная экспериментальная верификация: Верификация в основном через примеры, отсутствуют тесты на крупномасштабных программах
  2. Отсутствие оценки производительности: Не предоставлены данные о времени компиляции, производительности выполнения и т.д.
  3. Недостаточные пользовательские исследования: Отсутствует оценка опыта реальных пользователей
  4. Зависимость от экосистемы: Зависит от зрелости Hugr IR и компилятора TKET

Влияние

  1. Академический вклад: Предоставляет новые идеи для проектирования языков квантового программирования
  2. Промышленная ценность: Имеет потенциал стать практическим инструментом квантового программирования
  3. Продвижение стандартизации: Может повлиять на будущие стандарты языков квантового программирования
  4. Образовательное значение: Снижает барьер входа для обучения квантовому программированию

Сценарии применения

  1. Исследование квантовых алгоритмов: Подходит для разработки и тестирования новых квантовых алгоритмов
  2. Гибридные вычислительные приложения: Особенно подходит для приложений, требующих сложного управления потоком выполнения
  3. Образование и обучение: Может использоваться для обучения квантовому программированию
  4. Разработка прототипов: Подходит для быстрого прототипирования и проверки концепций

Библиография

В данной статье цитируется 27 связанных источников, охватывающих:

  • Языки квантового программирования (Q#, Silq, Proto-Quipper и др.)
  • Python-фреймворки для квантовых вычислений (Qiskit, Cirq, PyQuil и др.)
  • Технологии компиляторов (MLIR, LLVM, AutoGraph)
  • Теория квантовых вычислений (линейные типы, оптимизация квантовых схем)

Резюме: Это высококачественная системная статья, предлагающая инновационное проектирование языка квантового программирования. Хотя работа находится на ранней стадии, она демонстрирует хороший технический потенциал и практические перспективы. Рекомендуется, чтобы последующие работы сосредоточились на крупномасштабной верификации, оптимизации производительности и улучшении пользовательского опыта.