Квантовые котики Шрёдингера: как я выращивал их на процессорах IBM
Кот Шрёдингера: и жив, и мёртв, пока коробка закрыта
Кот Шрёдингера: о нём слышали все
О коте Шрёдингера, пожалуй, слышал каждый. Для тех, кто всё же не в курсе, расскажу вкратце.
Берём кота и помещаем его в закрытый ящик. Ящик полностью изолирован от внешнего мира и подчиняется законам квантовой механики. Вместе с котом внутрь отправляются один радиоактивный атом, счётчик и склянка с ядом. Если атом распадётся, сработает счётчик, молоточек разобьёт склянку, и кот погибнет. Если распада не произойдёт, кот останется жив. Вероятность распада атома за час составляет ровно 50%.
Дальше начинаются квантовые странности. Пока ящик закрыт, атом пребывает сразу в двух состояниях: и распавшемся, и нераспавшемся. Следовательно, кот одновременно и жив, и мёртв, а его судьба определится лишь в тот миг, когда мы заглянем внутрь.
Кстати, сам Шрёдингер придумал этого кота, чтобы поиронизировать. Дескать, посмотрите, какой абсурд получается, если переносить квантовую механику на крупные объекты. Вышло же всё наоборот: кот превратился в самый известный мысленный эксперимент в истории физики.
Но как это доказать?
Меня в этой истории всегда смущал один момент. Допустим, кот «и жив, и мёртв» одновременно. Но как это проверить? Чем подтвердить?
Мы открываем ящик и видим либо живого кота, либо мёртвого. Точно так же было бы и с обычным котом: результат уже существовал, мы просто его не видели. Как тогда отличить «кот находился в суперпозиции» от «кот давно погиб, а мы об этом не знали»? Одного взгляда в ящик для доказательства явно недостаточно.
И тут меня посетила идея.
Кот, кошка и 72 дня
А если посадить в ящик двух животных? Кота и кошку.
Помещаем их в одну коробку с одним атомом, но склянки устанавливаем хитрым образом:
-
если атом распался, погибает кот;
-
если атом не распался, погибает кошка.
В обычном мире кто-то из них непременно умрёт. Атом либо распался, либо нет, третьего не дано.
Однако в квантовом мире атом и распался, и не распался одновременно. Выходит, что и кот «и жив, и мёртв», и кошка «и жива, и мертва». А раз каждый из них жив с вероятностью 50%, то, быть может, в 25% случаев они смогут встретиться?
Поэтому ящик мы откроем не через час, а через 72 дня. (Корма и воды, разумеется, оставим с запасом на весь срок: обижать зверей мы не собираемся.)

Вот котята и станут доказательством. Беременность у кошек длится около девяти недель, так что за 72 дня всё успеет произойти. Если в ящике обнаружатся котята, значит, кот и кошка были живы одновременно, в рамках собственной суперпозиции. В обычном мире такое невозможно. В квантовом же каждый из родителей жив с вероятностью 50%, а значит, оба должны оказаться живыми в 25% случаев. Иными словами, примерно в каждой четвёртой коробке нас будут ждать котята. Есть котята — есть доказательство квантовой странности.
Ящик у меня есть, механизм соберу в гараже… но где взять квантовых котов? (Живых я обижать не стану: я люблю кошек.)
И тут меня осенило: ведь существуют квантовые компьютеры.

Вот он, наш ящик для квантовых котов. Так выглядит квантовый компьютер IBM со снятым кожухом: золотистая «люстра» — это холодильная установка, а сам процессор с кубитами скрыт в самом низу. Фото: OJB Quantum, Wikimedia Commons, CC BY 4.0.
Кот по имени Кубит
Квантовый компьютер построен на кубитах. Это почти те же обычные биты, но кубит способен принимать значения 0 и 1 одновременно, причём с определённой вероятностью. Такое состояние называется суперпозицией. Для нашего опыта кубиты — идеальные коты: «1» означает «жив», «0» — «мёртв».
Нам потребуются четыре кубита: атом, который мы настраиваем ровно на «наполовину распавшееся» состояние, кот и кошка (вначале оба живы) и котёнок, которого поначалу нет.
Затем квантовый компьютер выполняет три правила вида «если… то»:
-
Если атом распался, кот погибает.
-
Если атом не распался, погибает кошка.
-
Если и кот, и кошка живы, появляется котёнок.

После этого ящик «открываем»: измеряем состояние кота, кошки и котёнка. Опыт повторяем тысячу раз, чтобы увидеть, какие исходы выпадают и как часто.
Всё это мы реализовали на Python с помощью Qiskit — бесплатной библиотеки IBM для работы с квантовыми компьютерами. В итоге получились две программы. Первая, компактная консольная, сажает котов в ящик, тысячу раз запускает опыт и строит гистограмму выживаемости. Вторая — блокнот Jupyter: в нём можно заглянуть внутрь ящика, шаг за шагом проследить судьбу каждого кота и поэкспериментировать с «шумными» симуляторами. Обе программы работают как на симуляторе на домашнем компьютере, так и на настоящих квантовых процессорах IBM.
Весь код и инструкции по запуску собраны в репозитории, ссылка на него приведена в приложении в конце статьи. Сам же ящик в Qiskit укладывается в десяток строк:
import math
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
cat, she, kit, atom = (QuantumRegister(1, n) for n in ("кот", "кошка", "котёнок", "атом"))
qc = QuantumCircuit(cat, she, kit, atom, ClassicalRegister(3, "c"))
qc.x(cat) # кот жив
qc.x(she) # кошка жива
qc.ry(math.pi / 2, atom) # атом: 50 на 50, распался или нет
qc.cx(atom, cat) # распался -> кот умирает
qc.cx(atom, she, ctrl_state=0) # не распался -> кошка умирает
qc.ccx(cat, she, kit) # оба живы -> котёнок рождается
qc.measure([cat[0], she[0], kit[0]], [0, 1, 2]) # открываем коробку
Здесь используются всего четыре типа квантовых операций:
-
x: переворачивает кубит, превращая 0 в 1. Так мы в самом начале «оживляем» котов. -
ry(π/2): поворачивает кубит ровно на полпути от 0 к 1. В результате получается атом, который распадается с вероятностью 50%. -
cx(CNOT): «если управляющий кубит равен 1, переверни целевой». С параметромctrl_state=0операция срабатывает наоборот — когда управляющий кубит равен 0. Это и есть два наших яда. -
ccx(вентиль Тоффоли): то же самое, но с двумя условиями. Котёнок переключается из 0 в 1 лишь тогда, когда оба родителя равны 1.
Вот как эта схема выглядит в Qiskit (время течёт слева направо):

Открываем ящик
Начнём с симулятора — то есть с идеального квантового компьютера, который вычисляется прямо на домашнем ПК. Ни шума, ни ошибок: чистая квантовая механика.
Запускаем. Тысяча ящиков.

Примерно в половине ящиков жив кот, в другой половине — кошка. А котят…
Ноль.
Ни в одном из тысячи ящиков.
А мы так на них рассчитывали.
Почему котят нет
Пришлось разбираться. Выяснилось, что мы ошибались в самом понимании слова «одновременно».
Нам казалось, что каждый кот сам по себе жив наполовину. На деле же в ящике одновременно разворачиваются две цельные истории:
-
история первая: атом распался, кот мёртв, кошка жива;
-
история вторая: атом не распался, кот жив, кошка мертва.
Ящик существует в обеих историях сразу, но ни в одной из них кот и кошка не бывают живы вместе. Поэтому котёнку просто неоткуда взяться: кота из одной истории с кошкой из другой не соединить.
Если рассматривать каждого кота по отдельности, у него честные 50 на 50. Но вместе их судьба едина, как две стороны одной медали: жив один — значит, мёртв другой. Физики называют такую общую участь запутанностью.
Проверка: каждому по своему атому
Чтобы убедиться, что котята в принципе могут появляться, изменим условия: у кота будет свой атом, у кошки — свой, независимый.
Теперь всё как с двумя монетками: в четверти случаев выживают оба. И симулятор послушно выдал котят примерно в 25% ящиков.

Значит, наша схема работоспособна. Просто при общем атоме природа котят не допускает.
Неужели на этом всё и эксперимент провалился? Ну уж нет. Я хочу квантового котёнка.
Настоящий квантовый компьютер и котята
Симулятор — это хорошо, но хочется живого «железа». IBM предоставляет бесплатный доступ к своим квантовым процессорам: регистрируемся, получаем ключ, пишем программу, запускаем (все ссылки и инструкции — в приложении в конце статьи), ставим задачу в очередь и ждём… Получилось! (Мы ведь оптимисты.)

Открываем результаты, и…
Ура, котята! Мы верили! Они появились примерно в 5% ящиков. Пересчитаем наш выводок:

Ах вы мои хорошие… Кому квантового котёнка? Пишите в личные сообщения: первым двумстам отдам, одного оставлю себе. Только не забудьте покормить: у некоторых из них нет мам…
Кстати, если приглядеться к выводку, с нашими котятами происходит что-то необычное.
-
Кошка мертва, а котёнок есть: 89 раз. Кто же его родил? А 32 из них и вовсе круглые сироты: оба родителя мертвы.
-
Кот мёртв, а котёнок есть: 63 раза. Приговор у нас приводится в исполнение мгновенно, так что отговорка «успел до того» не сработает.
-
Оба живы и котёнок есть: 49 раз. Это самые «честные» котята: яд не подействовал, им повезло. Но в нашем ящике кто-то обязан погибнуть, так что и тут никакого квантового чуда нет — склянку просто криво закрепили.
И это ещё не всё. В 19 ящиках оба родителя живы, а котят нет («не сложилось»), а в 120 мертвы оба, хотя кто-то обязан был выжить. Правильных исходов (жив ровно один из двух, котят нет) набралось 91,5%. Всё остальное — истории, невозможные ни в обычном мире, ни в квантовом: прибор порой просто ошибается. Выходит, у нас родились котята-призраки.
Откуда взялись котята-призраки
Котята-призраки — это шум, причём у каждого процессора он свой. Мы запускали котов на двух чипах IBM: на ibm_kingston котята появились в 5% ящиков, а на ibm_marrakesh — в 3,7%. Возможно, на каком-нибудь другом чипе их окажется ещё больше?
Ошибок в квантовых компьютерах пока много, а шум в квантовых вычислениях — известная проблема. У наших призраков обнаружились три источника.
Шум. Кубит — чрезвычайно хрупкая штука. Он работает при температуре на сотые доли градуса выше абсолютного нуля, а это одно из самых холодных мест во Вселенной, более чем в сто раз холоднее открытого космоса. И всё же он немного «общается» с окружающим миром. Каждое такое прикосновение понемногу размывает квантовую историю, и этого хватает, чтобы котёнок родился там, где не должен.
Ошибки считывания. Когда ящик открывают, прибор порой путает «жив» и «мёртв». Причём живого он чаще читает как мёртвого: возбуждённое состояние кубита склонно самопроизвольно «скатываться» вниз. Отсюда и лишние ящики с исходом «оба мертвы».
Рассадка. А вот этого мы совсем не ожидали. На чипе кубиты соединены не каждый с каждым, а лишь с ближайшими соседями, как в сотах. Для появления котёнка же нужно, чтобы кот, кошка и котёнок встретились втроём. Компьютеру приходится переносить состояния кубитов с места на место, и при каждой такой пересадке возможна ошибка. В итоге наша небольшая схема на реальном чипе увеличилась примерно вдвое.
После компиляции под реальный процессор схема заметно разрослась. На бумаге у нас три операции: два CNOT и один Тоффоли. Но чип IBM напрямую умеет выполнять лишь одну двухкубитную операцию, CZ, и компилятор Qiskit раскладывает всё на неё. Будь кубиты соединены все со всеми, хватило бы 8 штук. А на настоящем чипе с его сотовой структурой их выходит 14–17, и глубина схемы (число последовательных шагов) достигает 54. Вот как наш ящик выглядит после компиляции под ibm_kingston:

Если присмотреться к правому нижнему углу, видно, что кота в итоге измеряют на кубите 36, а в начале на этом месте находился атом. По дороге компилятор поменял их местами — это и есть та самая пересадка.
Теперь можно прикинуть суммарное количество ошибок. Одна операция CZ на таком чипе ошибается примерно в 0,3% случаев, считывание одного кубита — примерно в 1–2%. 17 операций плюс три считывания дают порядка 8% испорченных ящиков. У нас «неправильных» набралось 8,5%, так что оценка почти совпала с реальностью.
Проверить это можно и дома: у симулятора есть режим «с шумом», в котором ошибки задаются вручную. Чем их больше, тем больше котят-призраков. Сильнее всего на них влияют именно операции, где взаимодействуют два кубита. С настройками, близкими к реальному чипу, симулятор выдал почти ту же картину, что и kingston.
Так доказали мы или нет?
Доказали. Только не то, что собирались.
Котят, которых мы ждали, природа не допускает, и идеальный симулятор честно это показал: ноль из тысячи. А те котята, что появились на настоящем процессоре, — всего лишь следы несовершенства «железа».
Зато мы на собственном опыте (ладно, на опыте виртуальных котов) разобрались, как устроена суперпозиция: в ней сосуществуют целые истории, и котов из разных историй друг с другом не смешать. А ещё выяснили, что настоящий квантовый компьютер можно потрогать бесплатно. В 90% случаев он ведёт себя как в учебнике, а с остальными 10% сейчас бьются все, кто такие компьютеры создаёт.
Эпилог
Один ящик до сих пор стоит у меня в гараже закрытым.
Пока я его не открываю, котята там и есть, и нет.
Открыть или не открыть — вот в чём вопрос.
Приложение: как повторить опыт
Весь код выложен в репозитории github.com/EstariolGH/schrodinger-kittens: консольная программа cats.py и ноутбук Jupyter с иллюстрациями и шумными симуляторами. Там же есть пошаговая инструкция с нуля: как установить Python, зарегистрироваться в IBM Quantum и запустить котов на реальном квантовом процессоре.
python cats.py # общий атом — котят нет
python cats.py --mode independent # у каждого свой атом — котята есть
python cats.py --backend ibm # настоящий квантовый компьютер
Объявляю конкурс в двух номинациях:
-
«Самый шумный»: у кого родится больше всего квантовых котят;
-
«Самый аккуратный»: у кого их окажется меньше всех.
Пишите в комментариях, на каком чипе и сколько котят у вас получилось. Мой рекорд: 201 котёнок на 4000 ящиков.
P.S. Для самых внимательных
Да, мы в курсе. Мы и сами всё заметили и прекрасно понимаем, что вы уже полстатьи посмеиваетесь над нами.
Дыра первая: симметрия. Условие «котята будут, если оба живы» на самом деле несимметрично. Коту достаточно дожить до знакомства, а кошке нужно дожить до родов
Краткий справочник по великой науке кибернетике
Мир под тёмным светилом: разбираем хоррор. Часть 1
Запуск миссии JAXA за образцами с Фобоса — а заодно и с Марса
Вероятностное мышление: почему одних частот недостаточно — интервью с Брендет Фителсон
7 удивительных параллелей между устройством Вселенной и человеческим организмом
Прозрачное куриное филе благодаря Doritos: как работает оптический трюк
Асимметрия как фундаментальное свойство жизни и способ решить проблему «навешивания колокольчика на кошку» для искусственного суперинтеллекта
Проанализировал 50 тысяч матчей по настольному теннису: какие математические закономерности удалось найти