Содержание
Что такое Quirk
Quirk – браузерный симулятор квантовых схем, "toy quantum circuits simulator".
Quirk разработал Крейг Гидни (Craig Gidney), инженер, работающий в Google над квантовыми вычислениями. Исходный код открыт, а сам симулятор доступен по адресу algassert.com/quirk
Главная особенность Quirk – симуляция в реальном времени без необходимости запуска вычислений вручную. Схема пересчитывается на каждом кадре с задержкой 0,1 секунды. Автор указывает, что это в 100 раз быстрее реализации на чистом JavaScript.
Кому подойдет
Quirk не претендует на звание серьезного инструмента для исследователей и не заменяет полноценные среды программирования вроде Qiskit и Q#. Это инструмент для начального знакомства с квантовыми вычислениями. Он подойдет:
Школьникам и студентам, которые хотят понять, как работают базовые гейты и схемы, но не готовы сразу погружаться в код;
Преподавателям, которым нужна наглядная демонстрация на занятиях;
Тем, кому нужно быстро проверить гипотезу или разобраться в устройстве конкретной небольшой схемы.
По словам автора, Quirk делался для того, чтобы «настроить собственную интуицию в квантовых схемах».
Преимущества и недостатки
Преимущества:
Нет требований к регистрации;
Мгновенный отклик;
Наглядная визуализация;
Возможность видеть состояние в любой точке схемы, а не только на выходе;
Открытый исходный код (лицензия Apache 2.0).
Недостатки:
Не подходит для серьезных расчетов (потолок 16 кубитов);
Нет возможности создавать пользовательские гейты через интерфейс;
Неудобно работать на мобильных устройствах;
Отсутствие накопления статистики для детекторов;
Некоторые полезные гейты скрыты и доступны только через редактирование URL.
Навигация по Quirk
При заходе на сайт нас встречает главное меню (main menu), в котором можно найти ссылки на документацию Quirk, видео-туториал, код и примеры схем (example circuits, о них позже).

Переходим в пустое рабочее пространство («Edit circuit»).
Верхняя панель выделена под основные гейты, элементы управления, а также дисплеи для визуализации.

Нижняя панель – расширенные и арифметические гейты.

Центральная область – рабочее поле, сюда перетаскиваются гейты. Слева от каждого кубита есть индикатор начального состояния (по умолчанию – |0⟩, единичным нажатием можно изменить на |1⟩, |+⟩, |-⟩, |i⟩, |-i⟩). Чтобы удалить гейт со схемы, нужно перенести его за пределы кубитов.

Немного про цветовую маркировку: белые кнопки – статичные гейты и зонды, таких большинство; желтые – анимированные, показывают вращение или изменение состояния в реальном времени; серые дублируют белые, но работают с несколькими кубитами сразу; зеленые (дисплеи) при переносе на схему приобретают числовые значения. Дисплей Amps голубой, потому что, в отличие от стальных, показывает комплексные числа.

При наведении курсором на любой элемент, о нем всплывет информация: название, назначение, отображение в виде матрицы и оси вращения (если есть).

Адресная строка: после любого изменения в ней меняется строка с закодированной схемой. Можно скопировать URL, чтобы вернуться к этой схеме позже.
Важно: на сайте нет автосохранения схемы, то есть при перезагрузке страницы происходит сброс настроек.
Теперь подробнее про кнопочки.
-
Probes (Зонды) – группа элементов, которые не изменяют квантовое состояние, а только снимают информацию или накладывают условия.

Probes Наблюдение разрушает квантовое состояние, однако в симуляторах измерения можно использовать для отладки и обучения.
-
Displays (Дисплеи) – группа визуальных элементов, которые показывают состояние кубитов в конкретном месте схемы. Сами дисплеи не влияют на вычисления.

Displays 
так дисплеи выглядят на схеме Half turns (Половинные обороты) – группа, в которую входят базовые однокубитные повороты на 180° (по осям X, Y, Z), а также гейт Адамара (H) и обмен (Swap).

-
Quarter и Eighth Turns – группы гейтов, которые поворачивают состояние кубита на 90° (π/2) и 45° (π/4) соответственно.

Quarter и Eighth Turns В основе те же оси X, Y, Z, что и в Half Turns, но с дробными степенями:
Quarter Turns (1/4 поворота):
S (√Z) поворот на 90° вокруг Z. S^-1 – обратный (поворот на -90°).
Аналогично есть √X, √Y и их обратные версии.Eighth Turns (1/8 поворота):
T (√S) – поворот на 45° вокруг Z. T^-1 – обратный.
Также есть X^1/4, Y^1/4 и их обратные. -
Spinning (вращающийся) – группа гейтов, которые вращаются непрерывно. Угол поворота регулируется перетаскиванием (чем дальше тянешь, тем больше угол). В подсказке отображается текущее значение.

-
Formulaic – группа гейтов, где угол или сама операция задаётся формулой. После переноса на схему можно вписать выражение:
Число (например, 0.25), чтобы задать угол в оборотах;
Формулу с переменными (t, x, y) для более сложной параметризации.

-
Parametrized – группа параметризованных гейтов, в которых угол поворота задаётся переменной A, которая может быть константой (задаваемой через Input), результатом вычислений или параметром, который меняется при моделировании.

Parametrized Обычно используются, когда нужно многократно применять один и тот же гейт с разными углами или когда угол зависит от других кубитов.
-
Sampling (Семплирование) – группа для вероятностных измерений и сбора статистики. В отличие от обычных измерений, Sampling не разветвляет симуляцию на все исходы. Вместо этого при каждом клике (или перетаскивании) симулятор выбрасывает случайный исход в соответствии с вероятностями, и схема пересчитывается заново.

-
Parity (четность) – группа гейтов, работающих с четностью группы кубитов. Смысл: гейт срабатывает, только если среди контрольных кубитов нечетное количество находится в состоянии |1⟩.

Используется в кодах коррекции ошибок и некоторых квантовых алгоритмах, где нужно проверять четность, а не отдельные биты. Нишево.
-
X/Y Probes (Зонды в разных базисах) – те же самые зонды, но работающие не в стандартном базисе |0⟩/|1⟩ (Z), а в базисах X и Y.

X/Y Probes -
Order (порядок кубитов) – группа для управления тем, как интерпретируется порядок кубитов при арифметических операциях. +t / -t – сдвиг порядка (инверсия старшинства); Reverse (полное обращение порядка: младший кубит становится старшим и наоборот). Остальное – визуальное отображение перестановок.

Order
Frequency (частотные операции) – группа, связанная с квантовым преобразованием Фурье. QFT – прямое преобразование Фурье. QFT+ — обратное (сдвинутое). Grad<...> – градиентные операции, которые используются внутри QFT для точной настройки фаз.

-
Оставшиеся группы работают с числами в квантовых регистрах и позволяют выполнять на кубитах полноценные арифметические вычисления.

Примеры схем (Example circuits)
Напоминаю, что примеры схем можно найти в правой части главного меню. Далее их краткое описание:
-
Grover Search (Алгоритм Гровера)
Алгоритм квантового поиска нужного элемента в неструктурированной базе данных. На поиск уходит O(√N) шагов, тогда как классический поиск требует O(N) шагов.

Grover Search После каждой итерации растет шанс получить правильный ответ.
-
Shor Period Finding (Нахождение периода Шора)
Квантовая подпрограмма, лежащая в основе алгоритма Шора для факторизации целых чисел. Находит период r такой, что B^r ≡ 1 (mod R) .

Shor Period Finding, B = 26 На дисплеях можно наблюдать, как квантовое состояние после QFT даёт пики, соответствующие значениям, кратным 1/r.
-
Bell Inequality Test (Тест неравенства Белла)
Это экспериментальная проверка локального реализма в квантовой механике. Схема демонстрирует, что квантовая запутанность даёт корреляции, которые невозможно объяснить классическими скрытыми переменными.

Bell Inequality Test Схема показывает: вероятности совпадений измерений нарушают неравенство Белла, которое для классических систем имеет верхний предел. В Quirk это видно на дисплеях вероятностей, корреляции между измерениями превышают классически допустимые значения
-
Quantum Teleportation (Квантовая телепортация)
Протокол передачи квантового состояния с одного кубита на другой с помощью запутанности и классической связи. Само состояние не копируется, а именно перемещается.

Quantum Teleportation -
Superdense Coding (Сверхплотное кодирование)
Протокол, позволяющий передать два классических бита информации, используя всего один кубит и один запутанный с ним кубит (при условии, что получатель уже имеет второй кубит запутанной пары).

Superdense Coding при t начальном 
Superdense Coding при t конечном На дисплеях вероятностей видно, что после всех операций получатель с вероятностью 100% измеряет именно ту пару битов, которую отправитель закодировал.
-
Delayed Choice Eraser (Квантовый ластик с отложенным выбором)
Эксперимент, демонстрирующий, что решение о том, измерять или “стирать” информацию о пути частицы, можно принять после того, как частица уже попала на детектор, и это повлияет на наблюдаемую интерференционную картину.

Delayed Choice Eraser Дисплеи справа показывают, что если сгруппировать результаты измерений экрана по значению кубита выбора и кубита пути, то интерференционная картина появляется тогда и только тогда, когда кубит выбора находится в состоянии ON.
-
Symmetry Breaking (Нарушение симметрии)
Демонстрация явления, когда динамическая система, симметричная по своей структуре, может развиваться в состояния, которые этой симметрией не обладают. В квантовом контексте это часто связано с вырожденными основными состояниями и спонтанным выбором одного из них.

Symmetry Breaking На дисплеях вероятностей или амплитуд можно наблюдать, что итоговое распределение вероятностей не отражает исходную симметрию схемы. Система выбрала одно из возможных направлений.
-
Quantum Fourier Transform (Квантовое преобразование Фурье)
Квантовый аналог дискретного преобразования Фурье. Переводит информацию из амплитудной формы в частотную и обратно. Является ключевым компонентом многих квантовых алгоритмов.

Quantum Fourier Transform при t начальном 
Quantum Fourier Transform при t конечном Можно подать на вход состояние |j⟩ и наблюдать на дисплеях, как оно преобразуется в суперпозицию всех базисных состояний с определенной фазой. В Quirk есть анимированная демонстрация QFT.
-
Reversible Addition (Обратимое сложение)
Квантовая арифметическая операция (сложение двух регистров), реализованная с использованием обратимых вычислений. Квантовые операции должны быть обратимыми, поэтому классический сумматор переработан в квантовый вариант.

Reversible Addition -
Magic State Distillation (Дистилляция магических состояний)
Протокол, используемый в устойчивых к ошибкам квантовых вычислениях для создания “чистых” магических состояний (например, T-состояний) из нескольких зашумлённых экземпляров. Эти магические состояния необходимы для выполнения не-Clifford операций (таких как T-гейт), которые нельзя реализовать только квантовой коррекцией ошибок.

Magic State Distillation 
Magic State Distillation Если добавить единичные Z-ошибки, вероятность успешной пост-селекции упадёт, но при успешном проходе выходное состояние будет близко к идеальному T-состоянию.
Что почитать на хабре по теме
Квантовые вычисления и язык Q# для начинающих – цикл из 6-ти статей