Содержание
Что такое 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-ти статей
