Гейты 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> (фаза).
- Все гейты унитарны и обратимы.