Квантовые котики Шрёдингера: как я выращивал их на процессорах IBM

Прокомментировать Просмотры: 6

Кот Шрёдингера: и жив, и мёртв, пока коробка закрыта

Кот Шрёдингера: о нём слышали все

О коте Шрёдингера, пожалуй, слышал каждый. Для тех, кто всё же не в курсе, расскажу вкратце.

Берём кота и помещаем его в закрытый ящик. Ящик полностью изолирован от внешнего мира и подчиняется законам квантовой механики. Вместе с котом внутрь отправляются один радиоактивный атом, счётчик и склянка с ядом. Если атом распадётся, сработает счётчик, молоточек разобьёт склянку, и кот погибнет. Если распада не произойдёт, кот останется жив. Вероятность распада атома за час составляет ровно 50%.

Дальше начинаются квантовые странности. Пока ящик закрыт, атом пребывает сразу в двух состояниях: и распавшемся, и нераспавшемся. Следовательно, кот одновременно и жив, и мёртв, а его судьба определится лишь в тот миг, когда мы заглянем внутрь.

Кстати, сам Шрёдингер придумал этого кота, чтобы поиронизировать. Дескать, посмотрите, какой абсурд получается, если переносить квантовую механику на крупные объекты. Вышло же всё наоборот: кот превратился в самый известный мысленный эксперимент в истории физики.

Но как это доказать?

Меня в этой истории всегда смущал один момент. Допустим, кот «и жив, и мёртв» одновременно. Но как это проверить? Чем подтвердить?

Мы открываем ящик и видим либо живого кота, либо мёртвого. Точно так же было бы и с обычным котом: результат уже существовал, мы просто его не видели. Как тогда отличить «кот находился в суперпозиции» от «кот давно погиб, а мы об этом не знали»? Одного взгляда в ящик для доказательства явно недостаточно.

И тут меня посетила идея.

Кот, кошка и 72 дня

А если посадить в ящик двух животных? Кота и кошку.

Помещаем их в одну коробку с одним атомом, но склянки устанавливаем хитрым образом:

  • если атом распался, погибает кот;

  • если атом не распался, погибает кошка.

В обычном мире кто-то из них непременно умрёт. Атом либо распался, либо нет, третьего не дано.

Однако в квантовом мире атом и распался, и не распался одновременно. Выходит, что и кот «и жив, и мёртв», и кошка «и жива, и мертва». А раз каждый из них жив с вероятностью 50%, то, быть может, в 25% случаев они смогут встретиться?

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

Кот и кошка в одной коробке: один атом, два яда, 72 дня
Кот и кошка в одной коробке: один атом, два яда, 72 дня

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

Ящик у меня есть, механизм соберу в гараже… но где взять квантовых котов? (Живых я обижать не стану: я люблю кошек.)

И тут меня осенило: ведь существуют квантовые компьютеры.

Квантовый компьютер IBM Quantum System One без кожуха
Квантовый компьютер IBM Quantum System One без кожуха

Вот он, наш ящик для квантовых котов. Так выглядит квантовый компьютер IBM со снятым кожухом: золотистая «люстра» — это холодильная установка, а сам процессор с кубитами скрыт в самом низу. Фото: OJB Quantum, Wikimedia Commons, CC BY 4.0.

Кот по имени Кубит

Квантовый компьютер построен на кубитах. Это почти те же обычные биты, но кубит способен принимать значения 0 и 1 одновременно, причём с определённой вероятностью. Такое состояние называется суперпозицией. Для нашего опыта кубиты — идеальные коты: «1» означает «жив», «0» — «мёртв».

Нам потребуются четыре кубита: атом, который мы настраиваем ровно на «наполовину распавшееся» состояние, кот и кошка (вначале оба живы) и котёнок, которого поначалу нет.

Затем квантовый компьютер выполняет три правила вида «если… то»:

  1. Если атом распался, кот погибает.

  2. Если атом не распался, погибает кошка.

  3. Если и кот, и кошка живы, появляется котёнок.

Схема коробки: атом, кот, кошка и котёнок, потом 72 дня и открываем коробку
Схема коробки: атом, кот, кошка и котёнок, потом 72 дня и открываем коробку

После этого ящик «открываем»: измеряем состояние кота, кошки и котёнка. Опыт повторяем тысячу раз, чтобы увидеть, какие исходы выпадают и как часто.

Всё это мы реализовали на 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 (время течёт слева направо):

Квантовая схема коробки в Qiskit: X, RY, два CNOT, Тоффоли и измерения
Квантовая схема коробки в Qiskit: X, RY, два CNOT, Тоффоли и измерения

Открываем ящик

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

Запускаем. Тысяча ящиков.

Идеальный симулятор: котят 0 из 1000 коробок
Идеальный симулятор: котят 0 из 1000 коробок

Примерно в половине ящиков жив кот, в другой половине — кошка. А котят…

Ноль.

Ни в одном из тысячи ящиков.

А мы так на них рассчитывали.

Почему котят нет

Пришлось разбираться. Выяснилось, что мы ошибались в самом понимании слова «одновременно».

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

  • история первая: атом распался, кот мёртв, кошка жива;

  • история вторая: атом не распался, кот жив, кошка мертва.

Ящик существует в обеих историях сразу, но ни в одной из них кот и кошка не бывают живы вместе. Поэтому котёнку просто неоткуда взяться: кота из одной истории с кошкой из другой не соединить.

Если рассматривать каждого кота по отдельности, у него честные 50 на 50. Но вместе их судьба едина, как две стороны одной медали: жив один — значит, мёртв другой. Физики называют такую общую участь запутанностью.

Проверка: каждому по своему атому

Чтобы убедиться, что котята в принципе могут появляться, изменим условия: у кота будет свой атом, у кошки — свой, независимый.

Теперь всё как с двумя монетками: в четверти случаев выживают оба. И симулятор послушно выдал котят примерно в 25% ящиков.

У каждого свой атом: котята в каждой четвёртой коробке
У каждого свой атом: котята в каждой четвёртой коробке

Значит, наша схема работоспособна. Просто при общем атоме природа котят не допускает.

Неужели на этом всё и эксперимент провалился? Ну уж нет. Я хочу квантового котёнка.

Настоящий квантовый компьютер и котята

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

Настоящий процессор IBM: 201 котёнок-призрак на 4000 коробок
Настоящий процессор IBM: 201 котёнок-призрак на 4000 коробок

Открываем результаты, и…

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

Собираем наших котят: 49, 57, 63 и 32 — всего 201
Собираем наших котят: 49, 57, 63 и 32 — всего 201

Ах вы мои хорошие… Кому квантового котёнка? Пишите в личные сообщения: первым двумстам отдам, одного оставлю себе. Только не забудьте покормить: у некоторых из них нет мам…

Кстати, если приглядеться к выводку, с нашими котятами происходит что-то необычное.

  • Кошка мертва, а котёнок есть: 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:

Та же схема после компиляции под чип ibm_kingston: десятки операций вместо пяти
Та же схема после компиляции под чип 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. Для самых внимательных

Да, мы в курсе. Мы и сами всё заметили и прекрасно понимаем, что вы уже полстатьи посмеиваетесь над нами.

Дыра первая: симметрия. Условие «котята будут, если оба живы» на самом деле несимметрично. Коту достаточно дожить до знакомства, а кошке нужно дожить до родов

 

Источник

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов