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).

Bit cổ điển Qubit 1 — chỉ có thể ở đây 0 — hoặc ở đây đúng 2 khả năng |1⟩ |0⟩ trạng thái chồng chập bất kỳ điểm nào trên mặt cầu — vô hạn khả năng đo được thì SỤP về một trong hai cực
Quả cầu Bloch. Bit cổ điển chỉ tồn tại ở hai cực; qubit ở bất kỳ điểm nào trên mặt cầu. Nhưng khoảnh khắc bạn ĐO, nó sụp về đúng một cực — nên "vô hạn khả năng" không có nghĩa là đọc ra được vô hạn thông tin.
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. Sửa lỗi lượng tử: vì sao "hàng nghìn qubit logic" là hàng TRIỆU qubit thật

Pitfall NISQ ở trên có nhắc tới "qubit logic, sau khi sửa lỗi" rồi đi tiếp. Nhưng đó chính là chỗ quyết định máy tính lượng tử còn cách thực tế bao xa, nên đáng dừng lại.

Trước hết, vì sao lỗi lại chí mạng đến thế. Một mạch chạy đúng chỉ khi mọi cổng trong nó đều đúng. Với tỷ lệ lỗi $p$ mỗi cổng, xác suất cả mạch cho kết quả tin được là $(1-p)^{\text{số cổng}}$ — tụt theo hàm mũ, không tuyến tính:

nisq_limit.js (verified bằng engine — cùng phần cứng, khác số cổng)
// 0.1% error per gate - a good figure for today's hardware
circuitSuccessProbability(0.001,   100); // 90.48%   fine
circuitSuccessProbability(0.001,  1000); // 36.77%   marginal
circuitSuccessProbability(0.001, 10000); //  0.0045% pure noise

// 100x more gates costs more than 20,000x in success probability.
// To keep 90% at 10,000 gates the error rate must fall to 0.001%
circuitSuccessProbability(0.00001, 10000); // 90.48%  - 100x better hardware
🔍 Không thể sao lưu một qubit — nên sửa lỗi lượng tử phải làm cách khác hẳn
Máy cổ điển chống lỗi bằng cách đơn giản nhất có thể: nhân bản. Lưu 1 bit thành 3 bản, đọc cả 3, lấy theo đa số. Cách đó không dùng được cho qubit, vì định lý không nhân bản (no-cloning theorem) chứng minh rằng không có phép toán nào sao chép được một trạng thái lượng tử chưa biết. Tệ hơn nữa: chỉ cần đọc qubit để kiểm tra là đã làm sụp đổ chồng chập cần bảo vệ.

Lối thoát rất tinh vi: trải thông tin của một qubit ra nhiều qubit vật lý vướng víu với nhau, rồi chỉ đo quan hệ giữa chúng chứ không đo giá trị. Phép đo đó cho biết "có lỗi xảy ra ở đâu đó" mà không tiết lộ dữ liệu, nên không làm sụp trạng thái. Cụm qubit vật lý đó hợp thành một qubit logic — thứ mà thuật toán thật sự chạy trên.

Cái giá của phép trải đó là toàn bộ vấn đề. Mã bề mặt (surface code) — phương án được theo đuổi nhiều nhất — dùng một lưới khoảng cách $d$, cần $d^2$ qubit vật lý cho mỗi qubit logic. Lấy $d = 25$, một giá trị thường được nêu cho các ước lượng phá RSA:

error_correction_overhead.js (verified bằng engine — cái giá của qubit sạch)
surfaceCodeOverhead(25);              // 625 physical qubits per logical qubit
physicalQubitsNeeded(4000, 25);       // 2,500,000 physical qubits

// Breaking RSA-2048 needs roughly 4,000 logical qubits.
// Today's best hardware is on the order of 1,000 physical qubits.
// The gap is more than 3 orders of magnitude - and that is the honest answer
// to "how far away is this?", far more than any headline qubit count.
⚠️ Cạm bẫy: đọc con số qubit trên tiêu đề báo như thể chúng so sánh được
"Máy 1.000 qubit" nghe như đã đi được một phần tư quãng đường tới 4.000 qubit cần cho Shor. Verified thì không: 4.000 qubit logic ứng với 2.500.000 qubit vật lý, tức còn thiếu hơn ba bậc độ lớn, chứ không phải ba phần tư. Qubit vật lý và qubit logic là hai đơn vị khác nhau, và gần như mọi con số công bố đều là loại thứ nhất.

Còn một điều kiện nữa dễ bị bỏ qua: sửa lỗi chỉ hoạt động khi tỷ lệ lỗi vật lý đã nằm dưới một ngưỡng (cỡ 1%). Trên ngưỡng đó, thêm qubit vào mã sửa lỗi làm mọi thứ tệ hơn chứ không tốt lên — vì bản thân các qubit thêm vào cũng sinh lỗi nhanh hơn tốc độ chúng sửa được. Nên đây không phải bài toán "chờ đủ lâu là nhiều qubit", mà là bài toán phải đạt chất lượng trước rồi mới nhân số lượng.
⚠️ Nhưng đừng kết luận "vậy thì chưa cần lo về RSA"
Mục 3 nói Shor đe doạ RSA, Mục này nói phần cứng còn xa. Ghép hai điều đó lại rất dễ ra kết luận sai là chưa cần làm gì. Thực tế ngược lại, vì một lý do đơn giản: dữ liệu mã hoá bị thu thập hôm nay có thể được giải mã sau này — chiến thuật quen gọi là harvest now, decrypt later. Mọi thứ cần giữ bí mật quá mười năm thì rủi ro là rủi ro của hôm nay, không phải của tương lai.

Đó là lý do NIST đã chuẩn hoá mật mã hậu lượng tử (post-quantum cryptography) năm 2024 — ML-KEM cho trao đổi khoá, ML-DSA cho chữ ký — dựa trên các bài toán lưới (lattice) mà chưa thuật toán lượng tử nào biết cách phá. Điểm đáng chú ý: đây là phần mềm chạy trên máy cổ điển bình thường. Câu trả lời cho mối đe doạ lượng tử không phải là mua máy lượng tử, mà là đổi thuật toán trên chính những cỗ máy 11 bài trước đã xây.

6. 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.
  • ✅ Verified: cùng phần cứng lỗi 0,1%/cổng — mạch 100 cổng thành công 90,48%, 1.000 cổng còn 36,77%, 10.000 cổng chỉ 0,0045%. Hỏng theo HÀM MŨ theo số cổng, nên vấn đề của NISQ là chất lượng cổng chứ không phải số qubit.
  • ✅ Không thể sao lưu qubit (định lý không nhân bản), nên sửa lỗi lượng tử phải trải thông tin ra nhiều qubit vướng víu và chỉ đo QUAN HỆ giữa chúng — cụm đó hợp thành 1 qubit logic.
  • ✅ Verified: surface code $d=25$ tốn 625 qubit vật lý cho MỘT qubit logic, nên ~4.000 qubit logic để phá RSA-2048 là 2.500.000 qubit VẬT LÝ — cách phần cứng hôm nay (~1.000) hơn ba bậc độ lớn.
  • ✅ Nhưng rủi ro là của hôm nay: dữ liệu thu thập bây giờ có thể giải mã sau (harvest now, decrypt later). Câu trả lời là mật mã hậu lượng tử (NIST 2024: ML-KEM, ML-DSA) — phần mềm chạy trên máy CỔ ĐIỂN, không phải mua máy lượng tử.

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, giới hạn NISQ theo số cổng và chi phí sửa lỗi surface code, 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

Bình luận