Mở đầu: một nhánh riêng, không nối tiếp 11 bài trước

11 bài trước xây dựng dần MỘT cỗ máy cổ điển hoàn chỉnh — từ cổng logic (Bài 1) tới đóng gói chiplet hiện đại (Bài 11). Bài này là một NHÁNH RIÊNG, một "chân trời" mở rộng — máy tính lượng tử KHÔNG xây trên nền tảng bit nhị phân của 11 bài trước, mà dùng một mô hình toán học HOÀN TOÀN khác: cơ học lượng tử. Đây không phải bài capstone tổng hợp kiến thức cũ, mà là lời giới thiệu tới một hướng đi khác của kiến trúc máy tính.


📚 Bối cảnh — nhánh riêng, không phải phần tiếp theo
Nên đọc Bài 11 trước (không bắt buộc về mặt kỹ thuật, nhưng đúng mạch tự sự: khi silicon cổ điển chạm giới hạn vật lý, máy tính lượng tử là MỘT hướng đi khác — không phải hướng "thay thế" mà là hướng "bổ sung" cho các bài toán CỤ THỂ mà máy cổ điển không giải nổi trong thời gian hợp lý).

1. Bit cổ điển vs Qubit lượng tử

Bit cổ điển (xuyên suốt Bài 1-11) LUÔN ở đúng MỘT trong hai trạng thái: 0 hoặc 1. Qubit lượng tử có thể ở trạng thái chồng chập (superposition) — đồng thời "một phần" 0 VÀ "một phần" 1, biểu diễn bằng vector trạng thái:

$$|\psi\rangle = \alpha|0\rangle + \beta|1\rangle \qquad\qquad |\alpha|^2 + |\beta|^2 = 1$$

$\alpha$, $\beta$ là biên độ (amplitude) — SỐ PHỨC, không phải xác suất trực tiếp. Xác suất đo được trạng thái $|0\rangle$ là $|\alpha|^2$, đo được $|1\rangle$ là $|\beta|^2$ (định đề Born) — ràng buộc $|\alpha|^2+|\beta|^2=1$ đảm bảo tổng xác suất luôn bằng 1, y hệt mọi phân bố xác suất hợp lệ.

state_vector.js (trích engine quantum-sim.js — module RIÊNG BIỆT)
function cx(re, im = 0) { return { re, im }; } // so phuc toi gian
function makeZeroState(numQubits) {
  const size = Math.pow(2, numQubits);
  const state = new Array(size).fill(null).map(() => cx(0, 0));
  state[0] = cx(1, 0); // khoi tao luon o |00...0>, bien do 1
  return state;
}
function cAbs2(a) { return a.re * a.re + a.im * a.im; } // |alpha|^2 = xac suat
// Verified: makeZeroState(1) -> P(0)=1, P(1)=0 (chua ap dung cong nao)
⚠️ Cạm bẫy: máy tính lượng tử KHÔNG tăng tốc trình duyệt/game của bạn
Chồng chập cho phép biểu diễn $2^N$ trạng thái ĐỒNG THỜI với $N$ qubit — nhưng KHÔNG có nghĩa máy tính lượng tử chạy NHANH HƠN cho MỌI loại tính toán. Lợi thế lượng tử CHỈ xuất hiện với một số bài toán CÓ CẤU TRÚC TOÁN HỌC đặc biệt (phân tích thừa số nguyên tố, tìm kiếm không có cấu trúc, mô phỏng hệ lượng tử khác) cho phép khai thác giao thoa (interference) giữa các trạng thái chồng chập. Trình duyệt, game, hay ứng dụng văn phòng thông thường KHÔNG có cấu trúc toán học này — chạy trên máy tính lượng tử KHÔNG nhanh hơn, thậm chí có thể chậm hơn nhiều so với CPU cổ điển cho các tác vụ này.

2. Hiện tượng vướng víu lượng tử & Cổng logic lượng tử

Vướng víu lượng tử (entanglement): 2 qubit có thể liên kết với nhau sao cho đo MỘT qubit LẬP TỨC quyết định luôn kết quả đo của qubit KIA — dù chúng ở đâu — mà KHÔNG mô tả được bằng cách coi mỗi qubit là độc lập. Cổng lượng tử biến đổi trạng thái theo phép toán tuyến tính (ma trận unita): Hadamard (H) tạo chồng chập đều từ trạng thái cơ bản; CNOT (2-qubit) lật qubit đích NẾU qubit điều khiển là $|1\rangle$ — kết hợp H + CNOT chính là công thức kinh điển tạo vướng víu (mạch Bell); Pauli X/Y/Z tương ứng 3 phép quay 180° quanh 3 trục của quả cầu Bloch (biểu diễn hình học trạng thái 1 qubit).

gate_matrices.txt (ma trận unita 2×2 của từng cổng chuẩn)
H (Hadamard):        X (Pauli, "NOT"):    Z (Pauli, dao pha):
  1/sqrt2 * [1  1]      [0  1]                [1   0]
            [1 -1]      [1  0]                [0  -1]

CNOT (2-qubit, dieu khien=q0, dich=q1):
  |00> -> |00>   |01> -> |01>   |10> -> |11>   |11> -> |10>
  (CHI lat q1 KHI q0 = 1 - day la nguon goc tao vuong viu khi ket hop voi H)
bell_circuit.js (trích engine quantum-sim.js — module RIÊNG BIỆT)
// Mach Bell kinh dien: H tren qubit 0, roi CNOT(dieu khien=0, dich=1)
let state = makeZeroState(2); // |00>
state = applySingleQubitGate(state, GATE_H, 0, 2); // (|00> + |10>)/sqrt2
state = applyCNOT(state, 0, 1, 2);                  // (|00> + |11>)/sqrt2 - VUONG VIU!

const probs = measureProbabilities(state);
// Verified: probs = [0.5, 0, 0, 0.5] tuong ung [P(00), P(01), P(10), P(11)]
// Chi 2/4 trang thai co the do duoc - 2 qubit gio LIEN KET voi nhau
⚠️ Cạm bẫy: Decoherence — nhiễu môi trường phá huỷ trạng thái lượng tử
Trạng thái chồng chập/vướng víu CỰC KỲ mong manh — bất kỳ tương tác nào với môi trường xung quanh (rung động nhiệt, từ trường lạc, thậm chí ánh sáng) đều có thể làm qubit "rò rỉ" thông tin ra ngoài và MẤT trạng thái lượng tử (decoherence), sụp đổ về trạng thái cổ điển NGOÀI Ý MUỐN — trước cả khi phép đo chủ động được thực hiện. Đây là lý do máy tính lượng tử thật phải hoạt động ở nhiệt độ gần độ không tuyệt đối (millikelvin) và cách ly cực kỳ nghiêm ngặt khỏi môi trường.

3. Thuật toán lượng tử & Ứng dụng

Thuật toán Shor phân tích thừa số nguyên tố một số lớn nhanh hơn HÀM MŨ so với thuật toán cổ điển tốt nhất đã biết — đe doạ trực tiếp mật mã RSA (dựa trên độ khó phân tích thừa số). Thuật toán Grover tìm kiếm trong danh sách không có cấu trúc nhanh hơn BÌNH PHƯƠNG (quadratic speedup) so với dò tuần tự — hữu ích cho tối ưu hoá và một số bài toán tìm kiếm tổng quát.

⚠️ Kỷ nguyên NISQ: chưa thể chạy Shor/Grover ở quy mô thực tế
Máy tính lượng tử hiện tại đang ở kỷ nguyên NISQ (Noisy Intermediate-Scale Quantum) — số qubit còn ít (hàng chục tới vài trăm) VÀ tỷ lệ lỗi trên mỗi cổng còn cao do decoherence (Mục 2). Phá khoá RSA thực tế bằng Shor cần hàng NGHÌN qubit "sạch" lỗi (logical qubit, sau khi sửa lỗi) — vượt xa khả năng phần cứng hiện tại. Đừng nhầm lẫn giữa "thuật toán đã được chứng minh về mặt toán học" với "có thể chạy ở quy mô thương mại thực tế NGAY HÔM NAY".

4. Bài toán tính toán xác suất đầu ra mạch lượng tử

Verified thật bằng engine (module quantum-sim.js riêng biệt, KHÔNG dùng chung cpu-core.js vì mô hình toán học hoàn toàn khác): cổng Hadamard trên $|0\rangle$ cho đúng $P(0)=P(1)=50\%$ (chồng chập đều). Mạch Bell (H trên qubit 0, rồi CNOT điều khiển=0/đích=1) trên $|00\rangle$ tạo VƯỚNG VÍU THẬT SỰ:

$$P(00) = 0,5 \qquad P(01) = 0 \qquad P(10) = 0 \qquad P(11) = 0,5$$

Chỉ 2 trong 4 trạng thái có thể đo được — $|01\rangle$ và $|10\rangle$ có xác suất 0% TUYỆT ĐỐI, không phải "rất nhỏ". Đây chính là dấu hiệu toán học của vướng víu: đo qubit đầu tiên ra 0 thì qubit thứ hai CHẮC CHẮN cũng là 0 (và tương tự với 1) — 2 kết quả đo LUÔN khớp nhau, dù không có "tín hiệu" nào truyền giữa 2 qubit tại thời điểm đo.

measurement.js (Born rule, trích engine quantum-sim.js)
function measureProbabilities(state) {
  return state.map((amplitude) => amplitude.re ** 2 + amplitude.im ** 2); // |alpha|^2
}
// Verified: H|0> -> probs = [0.5, 0.5] (chong chap deu 1 qubit)
// Verified: mach Bell -> probs = [0.5, 0, 0, 0.5] (vuong viu 2 qubit)
// Tong luon = 1 (bao toan xac suat, dinh de Born)
⚠️ Cạm bẫy: hành động đo làm sụp đổ chồng chập vĩnh viễn
Trước khi đo, qubit "chứa" thông tin chồng chập của CẢ 2 trạng thái cùng lúc. Ngay khi đo (measurement), trạng thái SỤP ĐỔ (collapse) về ĐÚNG MỘT trong các trạng thái cơ sở — toàn bộ thông tin chồng chập trước đó biến mất VĨNH VIỄN, không thể khôi phục lại bằng cách đo thêm lần nữa (đo lại chỉ cho lại CHÍNH kết quả đã sụp đổ). Đây là lý do thuật toán lượng tử phải được thiết kế để "đọc" kết quả hữu ích CHỈ ở bước đo CUỐI CÙNG, sau khi đã khai thác xong lợi thế chồng chập/giao thoa trong suốt mạch tính toán.

5. Thực hành: Trình giả lập mạch lượng tử 2-qubit

Bấm các cổng để xây mạch lượng tử của riêng bạn trên 2 qubit — quan sát biên độ và xác suất đo được thay đổi trực tiếp. Thử nút "Mạch Bell" để xem vướng víu lượng tử THẬT xuất hiện ngay lập tức:

⚛️ Trình giả lập mạch lượng tử 2-qubit
Cổng 1-qubit
Cổng 2-qubit & tiện ích
(chưa áp dụng cổng nào)

Tóm lược

  • ✅ Qubit chồng chập $|\psi\rangle=\alpha|0\rangle+\beta|1\rangle$, $|\alpha|^2+|\beta|^2=1$ — nhưng chồng chập KHÔNG tự động tăng tốc mọi loại tính toán.
  • ✅ Verified: mạch Bell (H + CNOT) tạo vướng víu lượng tử thật — P(00)=P(11)=50%, P(01)=P(10)=0% tuyệt đối.
  • ✅ Pitfall: decoherence (nhiễu môi trường) phá huỷ trạng thái lượng tử NGOÀI Ý MUỐN, trước cả khi đo chủ động.
  • ✅ Shor/Grover chứng minh lợi thế toán học — nhưng NISQ hiện tại chưa đủ qubit sạch để chạy thực tế.
  • ✅ Pitfall: hành động đo làm sụp đổ chồng chập VĨNH VIỄN, không thể khôi phục bằng đo lại.

Trắc nghiệm ôn tập

Câu 1

Vì sao chạy trình duyệt web hay game thông thường trên máy tính lượng tử KHÔNG nhanh hơn CPU cổ điển?

Câu 2

Verified: mạch Bell cho P(00)=50%, P(11)=50%, P(01)=P(10)=0% TUYỆT ĐỐI. Điều gì chứng tỏ đây THẬT SỰ là vướng víu lượng tử (entanglement), không phải ngẫu nhiên độc lập?

Câu 3

Decoherence là gì, và vì sao nó là thách thức lớn cho máy tính lượng tử thật?

Câu 4

Tại sao "thuật toán Shor có thể phá RSA" không đồng nghĩa "RSA đã bị phá vào lúc này"?

Tải file code thực hành minh họa bài học

File JavaScript quantum-sim.js — module RIÊNG BIỆT (không dùng chung cpu-core.js) cho toàn bộ tính toán lượng tử: vector trạng thái phức, cổng Hadamard/CNOT/Pauli X-Y-Z, đo lường theo định đề Born, kèm self-test đối chiếu đúng mọi con số trong bài (chạy node quantum-sim.js, không cần cài thêm gì):

Tải về quantum-sim.js

📖 Tài liệu tham khảo

Bài viết liên quan trong series

Bài 11: Điểm Cuối Định Luật Moore & Đóng Gói Chiplet Quay lại Lộ trình Kiến Trúc Máy Tính