Кубіти та квантові вентилі
Кубіт — це фундаментальна одиниця квантової інформації: дворівнева квантова система, стан якої живе на сфері Блоха. Однокубітні вентилі обертають цю сферу; багатокубітні вентилі створюють заплутаність. Ми будуємо повний симулятор квантової схеми на JavaScript — без зовнішніх залежностей — і покроково реалізуємо пошук Гровера та квантову телепортацію.
1. Вектори стану кубіта
Класичний біт — це або 0, або 1. Кубіт — це вектор у 2D-комплексному гільбертовому просторі:
Комплексні амплітуди α і β не мають прямого фізичного сенсу — спостережуваними є лише ймовірності |α|² (вимірювання 0) та |β|² (вимірювання 1). Відносна фаза між α і β керує інтерференційними ефектами.
2. Сфера Блоха
Будь-який нормований стан кубіта (з точністю до глобальної фази) відображається в точку на одиничній сфері — сфері Блоха:
Кожен однокубітний вентиль — це поворот сфери Блоха. Ця геометрична картина надзвичайно потужна: 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. Вимірювання та правило Борна
Вимірювання кубіта в обчислювальному базисі необоротно колапсує його:
Ця необоротність — фундаментальна асиметрія між квантовою еволюцією (унітарною, оборотною) та квантовим вимірюванням (стохастичним, необоротним). Базис вимірювання не обов'язково обчислювальний — вимірювання в X-базисі {|+⟩, |−⟩} використовує вентиль Адамара перед вимірюванням.
Теорема про неможливість клонування: неможливо створити ідентичну копію невідомого квантового стану — вирішальна відмінність від класичних бітів. Це лежить в основі квантової криптографії (протокол BB84).
5. Двокубітні стани та CNOT
Простір станів двох кубітів — це тензорний добуток окремих просторів — 4D-комплексний вектор:
Вентиль CNOT (контрольований NOT) перекидає цільовий кубіт тоді й лише тоді, коли керуючий кубіт дорівнює |1⟩:
CNOT — це взірцевий двокубітний заплутувальний вентиль. Разом з однокубітними вентилями він утворює універсальний набір вентилів — будь-яке квантове обчислення можна розкласти на однокубітні вентилі та CNOT.
6. Заплутаність та стани Белла
Стан є заплутаним, якщо його не можна записати як тензорний добуток окремих станів кубітів. Чотири максимально заплутані стани Белла:
Заплутані кубіти демонструють нелокальні кореляції: вимірювання одного кубіта миттєво визначає ймовірність результату для іншого, незалежно від відстані. Це не передача інформації й не порушує теорію відносності — але порушує нерівності Белла, виключаючи теорії локальних прихованих змінних (експеримент Аспе 1982, Нобелівська премія 2022).
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. Квантові алгоритми та апаратне забезпечення
- Пошук Гровера: шукає в невідсортованій базі з N елементів за O(√N) запитів — квадратичне прискорення порівняно з класичним O(N).
- Алгоритм Шора: розкладає цілі числа на множники за поліноміальний час за допомогою квантового перетворення Фур'є — загрожує шифруванню RSA.
- Квантова корекція помилок: поверхневі коди потребують ~1000 фізичних кубітів на один логічний кубіт — головний інженерний виклик.
- Квантова симуляція: симуляція квантової хімії (відкриття ліків, матеріали) — найближча «вбивча програма» — класично експоненційно складна.
- Сучасне апаратне забезпечення: IBM, Google (надпровідні 127→1000 кубітів), IonQ (захоплені іони), Photonic (фотонні), нейтральні атоми (Pasqal) — усі наразі обмежені декогеренцією.