Однокубитные цепи: цепочка гейтов = произведение матриц
Несколько гейтов подряд — это одна матрица, их произведение (в обратном порядке).
Квантовая цепь на одном кубите — последовательность гейтов; её суммарное действие равно произведению их матриц.
Порядок имеет значение
Если сначала применить гейт A, затем B, то итоговое состояние равно B·(A·state) = (B·A)·state. Обратите внимание: матрицы перемножаются в обратном порядке относительно того, как гейты идут во времени — справа стоит тот, что применяется первым. И ещё: матрицы в общем случае не коммутируют, A·B не равно B·A, поэтому порядок гейтов в цепи менять нельзя.
Соберём минимальный движок: умножение матриц 2x2 и прогон цепи.
import math
def matmul(A, B): # 2x2 * 2x2
return [[A[0][0]*B[0][0] + A[0][1]*B[1][0], A[0][0]*B[0][1] + A[0][1]*B[1][1]],
[A[1][0]*B[0][0] + A[1][1]*B[1][0], A[1][0]*B[0][1] + A[1][1]*B[1][1]]]
def apply(g, s):
a, b = s
return [g[0][0]*a + g[0][1]*b, g[1][0]*a + g[1][1]*b]
r = 1/math.sqrt(2)
H = [[r, r], [r, -r]]
X = [[0, 1], [1, 0]]
# Цепь: сначала H, потом X. Итоговая матрица = X . H
U = matmul(X, H)
out = apply(U, [1+0j, 0+0j]) # на |0>
print('состояние:', [round(c.real, 4) for c in out])
print('p0 =', round(abs(out[0])**2, 4), 'p1 =', round(abs(out[1])**2, 4))Вывод:
состояние: [0.7071, 0.7071] p0 = 0.5 p1 = 0.5
ASCII-схема цепи
Квантовые цепи рисуют как горизонтальную линию (провод кубита во времени) с боксами-гейтами. Время течёт слева направо, а матрицы перемножаются справа налево — частый источник путаницы.
|0> --[ H ]--[ X ]--[ Z ]--( измерение )
t=1 t=2 t=3
матрица цепи = Z . X . H (обратный порядок!)
Как работает под капотом
Поскольку произведение унитарных матриц снова унитарно, любая однокубитная цепь — это один-единственный поворот на сфере Блоха. Сколь угодно длинную цепочку из H, X, Z, S, T можно свернуть в одну матрицу 2x2 и применить за одно умножение. Это и причина, по которой один кубит сам по себе не даёт мощи: его состояние всегда умещается на сфере, и классически симулируется тривиально. Настоящая сложность начинается с многих кубитов — об этом следующий раздел.
Частые ошибки
- Перемножать матрицы в прямом порядке. Помните: первый по времени гейт — крайний справа в произведении.
- Считать, что гейты коммутируют. X·H не равно H·X.
- Накапливать ошибку нормировки в длинных цепях из-за округления — периодически перенормируйте.
Итог
- Цепь гейтов = произведение их матриц в обратном порядке применения.
- Гейты не коммутируют; порядок критичен.
- Любая однокубитная цепь сворачивается в один поворот — поэтому один кубит «слаб».