Стаття
Квантова фізика · ⏱ ≈ 16 хв читання

Кубіти та квантові вентилі

Кубіт — це фундаментальна одиниця квантової інформації: дворівнева квантова система, стан якої живе на сфері Блоха. Однокубітні вентилі обертають цю сферу; багатокубітні вентилі створюють заплутаність. Ми будуємо повний симулятор квантової схеми на JavaScript — без зовнішніх залежностей — і покроково реалізуємо пошук Гровера та квантову телепортацію.

1. Вектори стану кубіта

Класичний біт — це або 0, або 1. Кубіт — це вектор у 2D-комплексному гільбертовому просторі:

|ψ⟩ = α|0⟩ + β|1⟩ де α, β ∈ ℂ і |α|² + |β|² = 1 |0⟩ = [1, 0]ᵀ (обчислювальний базисний стан «нуль») |1⟩ = [0, 1]ᵀ (обчислювальний базисний стан «один»)

Комплексні амплітуди α і β не мають прямого фізичного сенсу — спостережуваними є лише ймовірності |α|² (вимірювання 0) та |β|² (вимірювання 1). Відносна фаза між α і β керує інтерференційними ефектами.

Фізичні реалізації: кубітом може бути спін електрона (↑/↓), поляризація фотона (H/V), два енергетичні рівні захопленого іона або основний/збуджений стан надпровідної схеми (трансмон).

2. Сфера Блоха

Будь-який нормований стан кубіта (з точністю до глобальної фази) відображається в точку на одиничній сфері — сфері Блоха:

|ψ⟩ = cos(θ/2)|0⟩ + e^(iφ) sin(θ/2)|1⟩ θ ∈ [0, π] — полярний кут (широта) φ ∈ [0, 2π) — азимутальний кут (довгота) Північний полюс (θ=0): |0⟩ Південний полюс (θ=π): |1⟩ Екватор: |+⟩, |−⟩, |i⟩, |−i⟩ (стани суперпозиції)

Кожен однокубітний вентиль — це поворот сфери Блоха. Ця геометрична картина надзвичайно потужна: X — це поворот на 180° навколо осі x, Z — навколо осі z, а загальний вентиль SU(2) Rₙ(θ) = e^(−iθn̂·σ/2) обертає на θ навколо осі n̂.

3. Однокубітні вентилі

Квантові вентилі — це унітарні матриці (U†U = I), застосовані до кубітів:

Паулі X (NOT)

X = [ 0  1 ]
    [ 1  0 ]

Перекидає |0⟩↔|1⟩. Поворот на 180° навколо осі x. Квантовий вентиль NOT.

Паулі Y

Y = [ 0  −i ]
    [ i   0 ]

Поворот на 180° навколо осі y. Перекидає з фазою: Y|0⟩ = i|1⟩.

Паулі Z

Z = [ 1   0 ]
    [ 0  −1 ]

Фазовий переворот: Z|1⟩ = −|1⟩. Поворот на 180° навколо осі z.

Адамар H

H = 1/√2 [ 1  1 ]
          [ 1 −1 ]

Створює суперпозицію: H|0⟩ = |+⟩ = (|0⟩+|1⟩)/√2. «Квантове підкидання монети».

Фазовий S

S = [ 1  0 ]
    [ 0  i ]

Додає фазу π/2 до |1⟩. S² = Z. Також називається √Z.

Вентиль T

T = [ 1      0    ]
    [ 0  e^(iπ/4) ]

Фаза π/4 до |1⟩. T⁴ = Z. Фундаментальний для відмовостійких схем.

4. Вимірювання та правило Борна

Вимірювання кубіта в обчислювальному базисі необоротно колапсує його:

|ψ⟩ = α|0⟩ + β|1⟩ P(0) = |α|² → стан після вимірювання: |0⟩ P(1) = |β|² → стан після вимірювання: |1⟩ Після вимірювання суперпозиція руйнується — результати випадкові.

Ця необоротність — фундаментальна асиметрія між квантовою еволюцією (унітарною, оборотною) та квантовим вимірюванням (стохастичним, необоротним). Базис вимірювання не обов'язково обчислювальний — вимірювання в X-базисі {|+⟩, |−⟩} використовує вентиль Адамара перед вимірюванням.

Теорема про неможливість клонування: неможливо створити ідентичну копію невідомого квантового стану — вирішальна відмінність від класичних бітів. Це лежить в основі квантової криптографії (протокол BB84).

5. Двокубітні стани та CNOT

Простір станів двох кубітів — це тензорний добуток окремих просторів — 4D-комплексний вектор:

|ψ⟩ = α₀₀|00⟩ + α₀₁|01⟩ + α₁₀|10⟩ + α₁₁|11⟩ де Σ|αᵢⱼ|² = 1 Тензорний добуток: |A⟩ ⊗ |B⟩ має компоненти aᵢ · bⱼ

Вентиль CNOT (контрольований NOT) перекидає цільовий кубіт тоді й лише тоді, коли керуючий кубіт дорівнює |1⟩:

CNOT = [ 1 0 0 0 ] [ 0 1 0 0 ] [ 0 0 0 1 ] [ 0 0 1 0 ] |00⟩ → |00⟩ |10⟩ → |11⟩ |01⟩ → |01⟩ |11⟩ → |10⟩

CNOT — це взірцевий двокубітний заплутувальний вентиль. Разом з однокубітними вентилями він утворює універсальний набір вентилів — будь-яке квантове обчислення можна розкласти на однокубітні вентилі та CNOT.

6. Заплутаність та стани Белла

Стан є заплутаним, якщо його не можна записати як тензорний добуток окремих станів кубітів. Чотири максимально заплутані стани Белла:

|Φ⁺⟩ = (|00⟩ + |11⟩)/√2 |Φ⁻⟩ = (|00⟩ − |11⟩)/√2 |Ψ⁺⟩ = (|01⟩ + |10⟩)/√2 |Ψ⁻⟩ = (|01⟩ − |10⟩)/√2 Схема для |Φ⁺⟩: H на кубіті 0 → CNOT(0,1) Починаючи з |00⟩

Заплутані кубіти демонструють нелокальні кореляції: вимірювання одного кубіта миттєво визначає ймовірність результату для іншого, незалежно від відстані. Це не передача інформації й не порушує теорію відносності — але порушує нерівності Белла, виключаючи теорії локальних прихованих змінних (експеримент Аспе 1982, Нобелівська премія 2022).

Квантова телепортація використовує пару Белла, щоб передати стан одного кубіта від Аліси до Боба за допомогою 2 класичних бітів, споживаючи заплутаність у процесі. Вона потребує класичного каналу — жодного надсвітлового зв'язку.

7. JavaScript — симулятор квантової схеми

Симулятор на основі вектора стану, що підтримує довільні однокубітні вентилі та CNOT на до ~20 кубітів (2²⁰ = 1M амплітуд).

// Симулятор квантової схеми на основі вектора стану
// Стан: масив Complex128 довжини 2^n

class QuantumCircuit {
  constructor(n) {
    this.n = n;
    const dim = 1 << n;
    this.re = new Float64Array(dim);
    this.im = new Float64Array(dim);
    this.re[0] = 1; // починаємо в |000…0⟩
  }

  // Застосувати унітарну матрицю 2×2 [[a,b],[c,d]] до кубіта q
  gate1(q, a_re, a_im, b_re, b_im, c_re, c_im, d_re, d_im) {
    const dim = 1 << this.n;
    const bit = 1 << q;
    for (let i = 0; i < dim; i++) {
      if (i & bit) continue; // обробляємо кожну пару лише раз
      const j = i | bit;
      const r0 = this.re[i], i0 = this.im[i];
      const r1 = this.re[j], i1 = this.im[j];
      this.re[i] = a_re*r0 - a_im*i0 + b_re*r1 - b_im*i1;
      this.im[i] = a_re*i0 + a_im*r0 + b_re*i1 + b_im*r1;
      this.re[j] = c_re*r0 - c_im*i0 + d_re*r1 - d_im*i1;
      this.im[j] = c_re*i0 + c_im*r0 + d_re*i1 + d_im*r1;
    }
  }

  X(q) { this.gate1(q, 0,0, 1,0, 1,0, 0,0); }
  Z(q) { this.gate1(q, 1,0, 0,0, 0,0, -1,0); }
  H(q) {
    const s = 1 / Math.sqrt(2);
    this.gate1(q, s,0, s,0, s,0, -s,0);
  }
  S(q) { this.gate1(q, 1,0, 0,0, 0,0, 0,1); } // фаза i
  T(q) {
    const s = Math.SQRT2 / 2;
    this.gate1(q, 1,0, 0,0, 0,0, s,s); // e^(iπ/4)
  }

  // CNOT: керуючий=ctrl, цільовий=tgt
  CNOT(ctrl, tgt) {
    const dim = 1 << this.n;
    const cb = 1 << ctrl, tb = 1 << tgt;
    for (let i = 0; i < dim; i++) {
      if (!(i & cb)) continue; // керуючий має бути |1⟩
      if (i & tb) continue;    // обробляємо кожну пару лише раз
      const j = i | tb;
      [this.re[i], this.re[j]] = [this.re[j], this.re[i]];
      [this.im[i], this.im[j]] = [this.im[j], this.im[i]];
    }
  }

  // Семплувати один результат вимірювання, повернути рядок бітів
  measure() {
    let r = Math.random(), cumul = 0;
    for (let i = 0; i < this.re.length; i++) {
      cumul += this.re[i] ** 2 + this.im[i] ** 2;
      if (r < cumul) return i.toString(2).padStart(this.n, '0');
    }
  }

  // Повернути таблицю ймовірностей { рядок_бітів: ймовірність }
  probabilities() {
    const out = {};
    for (let i = 0; i < this.re.length; i++) {
      const p = this.re[i] ** 2 + this.im[i] ** 2;
      if (p > 1e-12) out[i.toString(2).padStart(this.n, '0')] = p;
    }
    return out;
  }
}

// Стан Белла |Φ⁺⟩ = (|00⟩ + |11⟩)/√2
const qc = new QuantumCircuit(2);
qc.H(0);
qc.CNOT(0, 1);
console.log('Bell state probabilities:', qc.probabilities());
// → { '00': 0.5, '11': 0.5 }

// Стан GHZ (|000⟩ + |111⟩)/√2 — заплутаність 3 кубітів
const ghz = new QuantumCircuit(3);
ghz.H(0);
ghz.CNOT(0, 1);
ghz.CNOT(0, 2);
console.log('GHZ probabilities:', ghz.probabilities());
// (ймовірності GHZ)
// → { '000': 0.5, '111': 0.5 }

8. Квантові алгоритми та апаратне забезпечення

Квантова перевага: Sycamore від Google (2019) виконав задачу семплування за 200 секунд, на яку класичним суперкомп'ютерам потрібно було б, за оцінками, 10 000 років. Практична корисність цієї конкретної задачі залишається дискусійною.
🔬 Відкрити рівняння Шредінгера →