Гейты X и Z: НЕ и смена фазы

Первые два гейта: X переворачивает кубит, Z меняет относительную фазу.

Гейт — унитарная матрица, умножение которой на вектор амплитуд даёт новое состояние кубита.

Умножение матрицы на вектор

Состояние кубита — столбец из двух амплитуд (a, b). Однокубитный гейт — матрица 2x2. Применить гейт значит умножить матрицу на вектор. Напишем это умножение на чистом Python (списки), оно нам пригодится во всём разделе.

def apply(gate, state):
    a, b = state
    na = gate[0][0]*a + gate[0][1]*b
    nb = gate[1][0]*a + gate[1][1]*b
    return [na, nb]

# Гейт X (квантовое НЕ): меняет местами амплитуды |0> и |1>
X = [[0, 1],
     [1, 0]]

state = [1+0j, 0+0j]          # |0>
print('X|0> =', apply(X, state))   # ждём |1> = [0, 1]
print('X|1> =', apply(X, [0+0j, 1+0j]))

Вывод:

X|0> = [0j, (1+0j)]
X|1> = [(1+0j), 0j]

Гейт X — квантовое НЕ

X переводит |0> в |1> и наоборот, а в общем случае меняет амплитуды местами. На сфере Блоха это поворот на 180 градусов вокруг оси X. Это самый прямой аналог классического NOT.

Гейт Z — смена фазы

Z оставляет |0> как есть, а у |1> меняет знак амплитуды: (a, b) превращается в (a, -b). На вероятности при стандартном измерении это не влияет (|-b|^2 = |b|^2!), поэтому Z кажется бесполезным. Но он меняет относительную фазу, а она проявится после Адамара. Z — поворот на 180 градусов вокруг оси Z.

def apply(gate, state):
    a, b = state
    return [gate[0][0]*a + gate[0][1]*b,
            gate[1][0]*a + gate[1][1]*b]

Z = [[1, 0],
     [0, -1]]

s = [0.6+0j, 0.8+0j]
out = apply(Z, s)
print('Z применён:', out)
print('p1 до =', round(abs(s[1])**2, 3), ' p1 после =', round(abs(out[1])**2, 3))

Вывод:

Z применён: [(0.6+0j), (-0.8+0j)]
p1 до = 0.64  p1 после = 0.64

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

X, Y, Z называют гейтами Паули. Все однокубитные гейты обязаны быть унитарными: они сохраняют длину вектора (а значит, нормировку и суммарную вероятность 1). Унитарность означает обратимость — у каждого гейта есть обратный. Для X и Z обратный гейт — это они сами: применить X дважды значит вернуться назад. Унитарность — причина, по которой квантовые вычисления обратимы, в отличие от классических, где, например, AND теряет информацию.

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

  • Считать, что Z «ничего не делает», раз вероятности не изменились. Он меняет фазу, и это важно для интерференции.
  • Перепутать порядок строк/столбцов матрицы — тогда X перестанет менять амплитуды местами.
  • Забыть, что гейты комплекснозначны: храните амплитуды как complex.

Итог

  • Применение гейта — умножение матрицы 2x2 на вектор амплитуд.
  • X — квантовое НЕ (меняет амплитуды местами), Z — смена знака у |1> (фаза).
  • Все гейты унитарны и обратимы.
Проверьте себя
1. Что делает гейт X с состоянием (a, b)?
AОбнуляет b
BМеняет амплитуды местами: (b, a)
CУмножает на 2
DМеняет знак a
2. Почему гейт Z не меняет вероятности при стандартном измерении?
AОн ничего не делает
BОн меняет знак b, но |-b|^2 = |b|^2
CОн удаляет |1>
DОн удваивает фазу
3. Каким свойством обязаны обладать все квантовые гейты?
AСимметричностью
BУнитарностью (сохранением длины и обратимостью)
CЦелочисленностью
DДиагональностью