CNOT и многокубитные гейты

Главный двухкубитный гейт — CNOT: переворачивает цель, если управляющий равен 1.

CNOT (controlled-NOT) — двухкубитный гейт: если управляющий кубит равен 1, он применяет X к целевому; если 0 — не делает ничего.

Зачем нужны двухкубитные гейты

Однокубитные гейты крутят каждый кубит по отдельности и сами по себе никогда не создают запутанность. Чтобы кубиты «почувствовали» друг друга, нужен гейт, действующий на пару. Базовый и достаточный для универсальности — CNOT. Вместе с однокубитными гейтами CNOT образует универсальный набор: любой квантовый алгоритм можно собрать из них.

CNOT как таблица и как матрица

На базисных состояниях CNOT (управляющий — первый кубит) действует так:

ВходВыход
|00>|00>
|01>|01>
|10>|11>
|11>|10>

Управляющий равен 1 (состояния |10> и |11>) — целевой переворачивается. Реализуем CNOT матрицей 4x4 и проверим на |10>.

CNOT = [
    [1, 0, 0, 0],
    [0, 1, 0, 0],
    [0, 0, 0, 1],
    [0, 0, 1, 0],
]
# порядок базиса: 00, 01, 10, 11

def apply4(M, s):
    return [sum(M[i][j]*s[j] for j in range(4)) for i in range(4)]

state = [0, 0, 1+0j, 0]        # |10>
out = apply4(CNOT, state)
labels = ['00', '01', '10', '11']
for lab, amp in zip(labels, out):
    if abs(amp) > 1e-9:
        print('амплитуда при', lab, '=', amp)

Вывод:

амплитуда при 11 = (1+0j)

|10> превратилось в |11> — целевой кубит перевернулся, потому что управляющий был 1.

ASCII-схема CNOT

  управляющий q0 ---*---
                    |
  целевой     q1 ---X---

  '*' - точка управления,  'X' - переворот цели

Как работает под капотом

Магия CNOT раскрывается, когда управляющий кубит сам в суперпозиции. Тогда CNOT «связывает» исходы: если управляющий равен (|0>+|1>)/корень из 2, то после CNOT состояние становится (|00>+|11>)/корень из 2 — запутанным. Это значит, что результаты измерения двух кубитов теперь скоррелированы: либо оба 0, либо оба 1, и никогда «вразнобой». Так из суперпозиции + CNOT рождается запутанность — основной строительный приём квантовых алгоритмов.

Существуют и другие управляемые гейты: CZ (управляемый Z), Тоффоли (CCNOT — с двумя управляющими, переворот цели только если оба равны 1; он, кстати, делает классические вычисления обратимыми). Но CNOT — фундамент.

Частые ошибки

  • Перепутать управляющий и целевой кубит — матрица станет другой.
  • Считать, что CNOT всегда переворачивает цель. Только когда управляющий равен 1.
  • Думать, что CNOT нарушает причинность через корреляции. Нет — корреляция не позволяет передавать сигнал быстрее света.

Итог

  • CNOT переворачивает целевой кубит, если управляющий равен 1.
  • Однокубитные гейты + CNOT — универсальный набор.
  • Суперпозиция на управляющем + CNOT создаёт запутанность.
Проверьте себя
1. Что делает CNOT с состоянием |10> (управляющий первый)?
AОставляет |10>
BПереводит в |11>
CПереводит в |00>
DЗапутывает с третьим кубитом
2. Что нужно, чтобы CNOT создал запутанность?
AОба кубита в |0>
BУправляющий кубит в суперпозиции
CТретий кубит
DДвойной CNOT
3. Почему важны двухкубитные гейты вроде CNOT?
AОни быстрее
BТолько они создают запутанность; однокубитные — нет
CОни не нужны
DОни заменяют измерение