Мы продолжаем цикл квантовых статей. Сегодня углубимся в формулы и поймем, как можно манипулировать кубитами — элементарными вычислительными единицами. Кроме того, рассмотрим принципы цепей и алгоритмов. Подробнее под катом!
![](https://habrastorage.org/r/w780q1/webt/jn/ow/jp/jnowjp7s-wyr3klutjjigihvwc0.jpeg)
Задача этой статьи — помочь вам быстро познакомиться с основными принципами работы квантовых вентилей и понять, как эти вентили объединяются в цепи, наглядно представляющие квантовые алгоритмы (некоторые из них мы обсудим в последующих публикациях).
Для вашего удобства я опубликую сводную информацию обо всех важнейших вентилях, элементах схем и т. п. из статей этой серии в виде шпаргалки (чтобы вам не пришлось долго искать нужные сведения). В моих будущих статьях она будет называться «Квантовые вычисления: краткая справка».
Начнем с основ — с обозначений некоторых распространенных квантовых состояний, которыми мы будем впоследствии манипулировать:
![](https://habrastorage.org/r/w1560/webt/bj/na/wp/bjnawpkowemxli69wn8jtohgrom.png)
Все они являются чистыми однокубитными состояниями, поэтому их можно представить в виде точек на сфере Блоха:
![](https://habrastorage.org/r/w1560/webt/b4/qe/db/b4qedb03nszainmmroiovg9zoik.png)
Теперь — четыре состояния Белла (их еще называют парами ЭПР, в честь Эйнштейна, Подольского и Розена — именно они являются авторами идей, которые впоследствии развил Белл). Это простейшие примеры квантовой запутанности двух кубитов:
![](https://habrastorage.org/r/w1560/webt/6-/q_/h0/6-q_h0ej_plsvbrl1yyrc7gkbvm.png)
И наконец, мы будем использовать так называемые состояния ГХЦ (Гринберга — Хорна — Цайлингера). Вот их общая форма (для n кубитов) и простейшая форма (для трех кубитов):
![](https://habrastorage.org/r/w1560/webt/p5/mv/lf/p5mvlfd0jkdduafsy8hso7xog5i.png)
Состояния Белла и состояния ГХЦ очень важны, потому что их поведение кардинально отличается от предсказаний классической теории из-за уровня запутанности в таких системах (этот принцип «максимальной запутанности» будет рассмотрен в одной из последующих публикаций).
Углы поворота в теории квантовых вычислений измеряются в радианах. Полная окружность (360°) соответствует 2π радиан. Углы измеряются против часовой стрелки. Ниже показаны величины важнейших углов в градусах и в радианах.
![](https://habrastorage.org/r/w1560/webt/s_/wr/i5/s_wri5cq0jq6wr2wtcoxvd91eso.png)
Перед тем как углубляться в изучение квантовых вентилей, следует изучить основы построения диаграмм квантовых цепей (это не займет много времени):
Вот обозначения важнейших элементов:
![](https://habrastorage.org/r/w1560/webt/kw/ao/bg/kwaobghorz55zqmys7iwom_maiy.png)
Более подробная информация приводится в документации здесь и в книге М. Нильсена и И. Чанг «Квантовая информация и квантовые вычисления».
Однокубитные вентили закономерно являются самыми простыми, поэтому мы начнем с них. Операцию, выполняемую любым однокубитным вентилем, можно представить как поворот вектора, характеризующего состояние кубита, в другую точку сферы Блоха (см. ниже).
Самые элементарные однокубитные вентили — это вентили Паули X, Y и Z:
Вентиль X очень похож на классический вентиль NOT: он преобразует |0〉 в |1〉, а |1〉 в |0〉. Эта операция эквивалентна повороту вектора на сфере Блоха вокруг оси x на π радиан (или 180°).
Вентиль Y ожидаемо соответствует повороту вектора вокруг оси y на π радиан. В результате такой операции вектор |0〉 превращается в i|1〉, а |1〉 — в -i|0〉.
Вентиль Z представляет собой особый случай вентиля фазового сдвига
(см. ниже) при фи = π = 180°. Он соответствует повороту вектора вокруг оси z на π радиан. Вектор |0〉 он оставляет без изменений, а |1〉 преобразует в -|1〉.
Ниже работа этих преобразований проиллюстрирована с помощью сферы Блоха (ось вращения в каждом случае выделена красным; на картинку можно нажать, чтобы увеличить ее):
![](https://habrastorage.org/r/w1560/webt/c3/pt/gk/c3ptgkxemdl2cwepphrn7xloqay.png)
Важно отметить, что после двукратного применения одного и того же вентиля Паули к кубиту он перейдет в исходное состояние (потому что после поворота вектора на 2π радиан или 360° вокруг любой оси он перейдет в начальное положение). Как следствие,
![](https://habrastorage.org/r/w1560/webt/i3/u_/iw/i3u_iwbwa5wotqtzzgl2lcwqsys.png)
Поскольку
и т. д.,
![](https://habrastorage.org/r/w1560/webt/sx/tq/2u/sxtq2uvx1tuufhfhreuplb5flw8.png)
Здесь II — обозначение единичной матрицы:
. Единичной называется матрица, результат умножения которой на произвольную матрицу M (II) равен матрице M: MII = IIM = M. Единичная матрица соответствует квантовой операции, которая не меняет квантовое состояние. На сфере Блоха это выглядит так:
![](https://habrastorage.org/r/w1560/webt/zq/e7/oz/zqe7ozkmitxtxdo2qprjyr5tsra.png)
Ввиду этого отношения говорят, что матрица Паули в квадрате равна единичной матрице.
Ниже приводится описание еще нескольких важных однокубитных вентилей.
Вентиль Адамара особенно важен, потому что с его помощью можно создать суперпозицию состояний |0〉 и |1〉. Эту операцию проще всего визуализировать с помощью сферы Блоха как поворот вокруг оси x на π радиан (180°) с последующим поворотом вокруг оси y (по часовой стрелке) на π/2 радиан (90°):
![](https://habrastorage.org/r/w1560/webt/6u/qe/mn/6uqemnhn7xkq8-wk39b7k2vcqeo.png)
Вентиль фазового перехода представляет достаточно общую операцию, у которой есть множество полезных применений. Самые распространенные его вариации — вентили сдвига фазы на π/4, π/8 и Паули-вентиль Z, для которых параметр фи равен π/2, π/4 и π соответственно. Пример фазового сдвига
на сфере Блоха:
![](https://habrastorage.org/r/w1560/webt/rd/3c/1n/rd3c1n7hktudyxnew9l3s09iueq.png)
Многокубитные вентили выполняют операции над двумя или более кубитами. Один из простейших примеров — вентиль SWAP:
Вентиль SWAP меняет местами два входных кубита. Например, SWAP|0〉|1〉 = |1〉|0〉, а SWAP|0〉|0〉 = |0〉|0〉 (полная таблица истинности приводится в шпаргалке по цепям).
Еще один класс многокубитных вентилей — так называемые управляемые вентили. На вход любого управляемого вентиля подается по меньшей мере один управляющий и один управляемый кубит, причем вентиль выполнит операцию над управляемым кубитом только в том случае, если управляющий кубит находится в определенном состоянии.
Вентили, которые выполняют операцию при управляющем кубите |1〉, обозначаются заполненным кругом на проводе управляющего кубита. Вентили, которые выполняют операцию при управляющем кубите, равном |0〉, обозначаются пустой окружностью, как показано ниже.
![](https://habrastorage.org/r/w1560/webt/fg/88/-r/fg88-rxb-wjyzjeeihiixpe0qyi.png)
Для того чтобы составить матрицу любого управляющего вентиля, нужно дописать единичную матрицу в левом верхнем углу матрицы нужного вентиля, а все остальные ячейки заполнить нулями. Вот пример:
![](https://habrastorage.org/r/w1560/webt/ls/tx/ya/lstxya6jkji7-qt-qeotju6aj-m.png)
Обычные вентили в Q# можно преобразовать в управляющие с помощью ключевого слова Controlled, как описано здесь (в разделе «Controlled» в самом низу страницы). Например, вентиль CNOT (напомним, что вентиль NOT эквивалентен X-вентилю Паули) можно получить командой
где [control] — массив входных управляющих кубитов.
Ниже описаны другие распространенные управляемые вентили (мы выделили единичную матрицу красным, а матрицу исходного вентиля — синим, как выше):
Как мы уже упоминали в предыдущей публикации, вне зависимости от того, с помощью какой физической системы мы имитируем квантовый компьютер, должна иметься возможность реализовать «универсальный набор» вентилей. Это значит, что любая допустимая вычислительная операция в нашей системе должна быть преобразуема к конечной последовательности известных вентилей. Вот пример такого универсального набора: вентиль Адамара, вентиль фазового сдвига, вентиль CNOT и вентиль π⁄8.
Свойство универсальности гораздо интереснее, чем может показаться на первый взгляд. Если в квантовом компьютере существует универсальный набор вентилей, то любое преобразование, которое допускают законы квантовой физики, можно реализовать с его помощью. Это значит, что с помощью универсального набора можно не просто выполнить любую квантовую программу, а имитировать любое физическое явление. Поэтому свойство универсальности позволяет использовать квантовые компьютеры для моделирования молекул, сверхпроводников и любых странных и прекрасных квантовых систем. Эта особенность квантовых компьютеров позволяет имитировать физические явления, что в перспективе позволит квантовым системам превзойти потенциал самых мощных суперкомпьютеров. Уже не скучно, правда?
С помощью этих (и некоторых других) важнейших вентилей уже можно создавать полнофункциональные квантовые цепи! В следующей публикации я расскажу, как с помощью этих новоприобретенных знаний можно реализовать квантовое преобразование Фурье — очень важную операцию, у которой есть огромное множество практических применений.
![](https://habrastorage.org/webt/jn/ow/jp/jnowjp7s-wyr3klutjjigihvwc0.jpeg)
Статьи из цикла:
Введение
Задача этой статьи — помочь вам быстро познакомиться с основными принципами работы квантовых вентилей и понять, как эти вентили объединяются в цепи, наглядно представляющие квантовые алгоритмы (некоторые из них мы обсудим в последующих публикациях).
Для вашего удобства я опубликую сводную информацию обо всех важнейших вентилях, элементах схем и т. п. из статей этой серии в виде шпаргалки (чтобы вам не пришлось долго искать нужные сведения). В моих будущих статьях она будет называться «Квантовые вычисления: краткая справка».
Основы: квантовые состояния
Начнем с основ — с обозначений некоторых распространенных квантовых состояний, которыми мы будем впоследствии манипулировать:
![](https://habrastorage.org/webt/bj/na/wp/bjnawpkowemxli69wn8jtohgrom.png)
Все они являются чистыми однокубитными состояниями, поэтому их можно представить в виде точек на сфере Блоха:
![](https://habrastorage.org/webt/b4/qe/db/b4qedb03nszainmmroiovg9zoik.png)
Теперь — четыре состояния Белла (их еще называют парами ЭПР, в честь Эйнштейна, Подольского и Розена — именно они являются авторами идей, которые впоследствии развил Белл). Это простейшие примеры квантовой запутанности двух кубитов:
![](https://habrastorage.org/webt/6-/q_/h0/6-q_h0ej_plsvbrl1yyrc7gkbvm.png)
И наконец, мы будем использовать так называемые состояния ГХЦ (Гринберга — Хорна — Цайлингера). Вот их общая форма (для n кубитов) и простейшая форма (для трех кубитов):
![](https://habrastorage.org/webt/p5/mv/lf/p5mvlfd0jkdduafsy8hso7xog5i.png)
Состояния Белла и состояния ГХЦ очень важны, потому что их поведение кардинально отличается от предсказаний классической теории из-за уровня запутанности в таких системах (этот принцип «максимальной запутанности» будет рассмотрен в одной из последующих публикаций).
Основы: радианы
Углы поворота в теории квантовых вычислений измеряются в радианах. Полная окружность (360°) соответствует 2π радиан. Углы измеряются против часовой стрелки. Ниже показаны величины важнейших углов в градусах и в радианах.
![](https://habrastorage.org/webt/s_/wr/i5/s_wri5cq0jq6wr2wtcoxvd91eso.png)
Основы: диаграммы квантовых цепей
Перед тем как углубляться в изучение квантовых вентилей, следует изучить основы построения диаграмм квантовых цепей (это не займет много времени):
- Время на квантовой диаграмме движется слева направо.
- Каждому кубиту соответствует одиночная горизонтальная линия.
- Вентили обычно обозначаются квадратами. Тип вентиля обозначается буквами или другими символами в этом квадрате (бывают и исключения из этого правила. Обычно это кубитные вентили, у которых есть классические аналоги (пример — вентиль NOT)).
- Некоторым вентилям может соответствовать несколько элементов диаграммы (пример — вентиль NOT).
- В результате измерения кубита все суперпозиции коллапсируют, квантовые свойства кубита исчезают, и он превращается в обычный бит. Поэтому можно считать, что измерительный элемент (показанный ниже) принимает на вход кубит и выдает классический бит. Этой операции в языке Q# соответствует команда Measure(bases: Pauli[], qubits: Qubit[]) или M(qubit: Qubit) по основанию Z.
Вот обозначения важнейших элементов:
![](https://habrastorage.org/webt/kw/ao/bg/kwaobghorz55zqmys7iwom_maiy.png)
Более подробная информация приводится в документации здесь и в книге М. Нильсена и И. Чанг «Квантовая информация и квантовые вычисления».
Однокубитные вентили
Однокубитные вентили закономерно являются самыми простыми, поэтому мы начнем с них. Операцию, выполняемую любым однокубитным вентилем, можно представить как поворот вектора, характеризующего состояние кубита, в другую точку сферы Блоха (см. ниже).
Самые элементарные однокубитные вентили — это вентили Паули X, Y и Z:
Названия | Матричное представление | Обозначения | Представление в Q# |
---|---|---|---|
Вентиль Паули X, X, NOT, переключение бита, ![]() |
![]() |
![]() ![]() |
X(qubit: Qubit) |
Вентиль Паули Y, Y, ![]() |
![]() |
![]() |
Y(qubit: Qubit) |
Вентиль Паули Z, Z, переключение фазы, ![]() |
![]() |
![]() |
Z(qubit: Qubit) |
Вентиль Y ожидаемо соответствует повороту вектора вокруг оси y на π радиан. В результате такой операции вектор |0〉 превращается в i|1〉, а |1〉 — в -i|0〉.
Вентиль Z представляет собой особый случай вентиля фазового сдвига
![](https://habrastorage.org/webt/e7/pe/hi/e7pehi7rmidcokf-w3mgccoqnne.png)
Ниже работа этих преобразований проиллюстрирована с помощью сферы Блоха (ось вращения в каждом случае выделена красным; на картинку можно нажать, чтобы увеличить ее):
![](https://habrastorage.org/webt/c3/pt/gk/c3ptgkxemdl2cwepphrn7xloqay.png)
Важно отметить, что после двукратного применения одного и того же вентиля Паули к кубиту он перейдет в исходное состояние (потому что после поворота вектора на 2π радиан или 360° вокруг любой оси он перейдет в начальное положение). Как следствие,
![](https://habrastorage.org/webt/i3/u_/iw/i3u_iwbwa5wotqtzzgl2lcwqsys.png)
Поскольку
![](https://habrastorage.org/webt/0j/4o/cx/0j4ocxunxb7nqa0chdcungpqzdc.png)
![](https://habrastorage.org/webt/sx/tq/2u/sxtq2uvx1tuufhfhreuplb5flw8.png)
Здесь II — обозначение единичной матрицы:
![](https://habrastorage.org/webt/d8/ho/f5/d8hof5di9mb2qiysiegtjrzprx8.png)
![](https://habrastorage.org/webt/zq/e7/oz/zqe7ozkmitxtxdo2qprjyr5tsra.png)
Ввиду этого отношения говорят, что матрица Паули в квадрате равна единичной матрице.
Ниже приводится описание еще нескольких важных однокубитных вентилей.
Названия | Матричное представление | Обозначения | Представление в Q# |
---|---|---|---|
Вентиль Адамара, H | ![]() |
![]() |
H(qubit: Qubit) |
Фазовый сдвиг, ![]() |
![]() |
![]() |
R1(theta: Double, qubit: Qubit) В более общем случае R(pauli: Pauli, theta: Double, qubit: Qubit) |
Фазовый сдвиг,![]() |
![]() |
![]() |
S(qubit: Qubit) |
![]() |
![]() |
![]() |
T(qubit: Qubit) |
![](https://habrastorage.org/webt/6u/qe/mn/6uqemnhn7xkq8-wk39b7k2vcqeo.png)
Вентиль фазового перехода представляет достаточно общую операцию, у которой есть множество полезных применений. Самые распространенные его вариации — вентили сдвига фазы на π/4, π/8 и Паули-вентиль Z, для которых параметр фи равен π/2, π/4 и π соответственно. Пример фазового сдвига
![](https://habrastorage.org/webt/mm/gx/yd/mmgxydsrllyp6krh5lgia4xt1vi.png)
![](https://habrastorage.org/webt/rd/3c/1n/rd3c1n7hktudyxnew9l3s09iueq.png)
Многокубитные вентили
Многокубитные вентили выполняют операции над двумя или более кубитами. Один из простейших примеров — вентиль SWAP:
Названия | Матричное представление | Обозначения | Представление в Q# |
---|---|---|---|
SWAP | ![]() |
![]() |
SWAP(qubit1: Qubit, qubit2: Qubit) |
Еще один класс многокубитных вентилей — так называемые управляемые вентили. На вход любого управляемого вентиля подается по меньшей мере один управляющий и один управляемый кубит, причем вентиль выполнит операцию над управляемым кубитом только в том случае, если управляющий кубит находится в определенном состоянии.
Вентили, которые выполняют операцию при управляющем кубите |1〉, обозначаются заполненным кругом на проводе управляющего кубита. Вентили, которые выполняют операцию при управляющем кубите, равном |0〉, обозначаются пустой окружностью, как показано ниже.
![](https://habrastorage.org/webt/fg/88/-r/fg88-rxb-wjyzjeeihiixpe0qyi.png)
Для того чтобы составить матрицу любого управляющего вентиля, нужно дописать единичную матрицу в левом верхнем углу матрицы нужного вентиля, а все остальные ячейки заполнить нулями. Вот пример:
![](https://habrastorage.org/webt/ls/tx/ya/lstxya6jkji7-qt-qeotju6aj-m.png)
Обычные вентили в Q# можно преобразовать в управляющие с помощью ключевого слова Controlled, как описано здесь (в разделе «Controlled» в самом низу страницы). Например, вентиль CNOT (напомним, что вентиль NOT эквивалентен X-вентилю Паули) можно получить командой
(Controlled X)([control], (target))
где [control] — массив входных управляющих кубитов.
Ниже описаны другие распространенные управляемые вентили (мы выделили единичную матрицу красным, а матрицу исходного вентиля — синим, как выше):
Названия | Матричное представление | Обозначения | Представление в Q# |
---|---|---|---|
CNOT | ![]() |
![]() |
CNOT(control: Qubit, target: Qubit) или (Controlled X)([control], (target)); |
CCNOT, вентиль Тоффоли | ![]() |
![]() |
CCNOT(control1: Qubit, control2: Qubit, target: Qubit) или (Controlled X)([control1; control2], target); |
CSWAP, вентиль Фредкина | ![]() |
![]() |
(Controlled SWAP)([control], (target)); |
Универсальные наборы
Как мы уже упоминали в предыдущей публикации, вне зависимости от того, с помощью какой физической системы мы имитируем квантовый компьютер, должна иметься возможность реализовать «универсальный набор» вентилей. Это значит, что любая допустимая вычислительная операция в нашей системе должна быть преобразуема к конечной последовательности известных вентилей. Вот пример такого универсального набора: вентиль Адамара, вентиль фазового сдвига, вентиль CNOT и вентиль π⁄8.
Свойство универсальности гораздо интереснее, чем может показаться на первый взгляд. Если в квантовом компьютере существует универсальный набор вентилей, то любое преобразование, которое допускают законы квантовой физики, можно реализовать с его помощью. Это значит, что с помощью универсального набора можно не просто выполнить любую квантовую программу, а имитировать любое физическое явление. Поэтому свойство универсальности позволяет использовать квантовые компьютеры для моделирования молекул, сверхпроводников и любых странных и прекрасных квантовых систем. Эта особенность квантовых компьютеров позволяет имитировать физические явления, что в перспективе позволит квантовым системам превзойти потенциал самых мощных суперкомпьютеров. Уже не скучно, правда?
Нас ждет еще много интересного!
С помощью этих (и некоторых других) важнейших вентилей уже можно создавать полнофункциональные квантовые цепи! В следующей публикации я расскажу, как с помощью этих новоприобретенных знаний можно реализовать квантовое преобразование Фурье — очень важную операцию, у которой есть огромное множество практических применений.