Простой пример того, как играть с квантовым компьютером

Мы собираемся сделать простую квантовую программу. Начнем с классического примера простой программы на обычном компьютере: Hello, World!

print("Hello, World!")

Компьютер принимает ввод Hello, World! и отображает его на экране. Он делает это так же, как и все: манипулируя множеством 0 и 1. Поэтому в какой-то момент программы Hello, World! будет преобразовано в следующую двоичную строку.

01001000 01100101 01101100 01101100 01101111 0101100 0100000 01010111 01101111 01110010 01101100 01100100 0100001

Это двоичное представление текста в кодировке ASCII. Для простого сообщения требуется много битов. Фактически, более 100!

Теперь предположим, что мы хотим выполнить Hello, World! на квантовом компьютере, используя кубиты. Они могут действовать как биты, но также имеют дополнительные квантовые приемы.

Поскольку квантовый компьютер может делать все, что может обычный, мы могли бы просто запустить ту же программу. 104 требуемых бита будут закодированы с использованием 104 кубитов.

К сожалению, квантовых компьютеров с таким количеством кубитов в настоящее время не существует. Запуск такой нормальной, скучной программы также не потребовал бы никаких квантовых фантазий.

так что нам делать? Ну, во-первых, мы могли бы сократить наше сообщение. Для использования всего двух символов потребуется всего 16 бит. Поскольку у IBM есть устройство с 16 кубитами, с кодированием проблем не возникнет. Пойдем с 0011101100101001, который вы, вероятно, знаете как ;)

А теперь добавим квантовости. Вместо того, чтобы иметь один смайлик, мы могли бы создать квантовую суперпозицию двух. Это было бы проще всего, если бы их двоичные строки не слишком сильно различались, и поэтому мы выберем смайлик, о котором часто забывают: 8)

;) = 00111011 00101001
8) = 00111000 00101001

Они оба согласны с тем, что биты 1, 2, 6, 9, 10, 12, 14 и 15 должны быть 0, а также соглашаются, что биты 3, 4, 5, 11, 13 и 16 должны быть 1. Это означает, что эти кубиты будут просто установлены на эти нормальные, скучные значения.

На кубитах 7 и 8 происходит волшебство. Для суперпозиции ;) и 8) эти кубиты должны быть одновременно равны 0 и 1. Это то, что мы называем запутанным состоянием. Фактически, это запутанное состояние, которое можно использовать для доказательства того, что Эйнштейн считал невозможным: нелокальности квантовой механики.



Чтобы запрограммировать это, я использовал QISKit, SDK для квантовых вычислений. Это позволило мне через облако взаимодействовать с прототипом 16-кубитного квантового компьютера IBM.

Я закодировал суперпозицию ;) и 8), а затем прочитал ее. Если вам нужны подробности, посмотрите исходный код здесь. Или вы также можете увидеть квантовую схему, используя квантовый опыт IBM здесь.

Каждый раз, когда запускается программа, это все равно что открывать коробку с котом Шредингера.

Перед считыванием устройство удерживало одновременно ;) и 8). Как только мы посмотрим, он должен случайным образом выбрать один или другой. Итак, мы повторяем много раз и смотрим, как часто возникает каждый результат.

Современные квантовые устройства являются прототипами и поэтому немного шумят. Это означает, что есть вероятность, что с нашими кубитами произошли ошибки, и мы прочитаем что-то совершенно другое, например :(

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

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