Theo câu hỏi được liên kết, giải pháp đơn giản nhất là để bộ xử lý cổ điển thực hiện các hoạt động đó nếu có thể . Tất nhiên, điều đó có thể là không thể, vì vậy chúng tôi muốn tạo một bộ cộng .
Có hai loại bộ cộng bit đơn - bộ cộng nửa và bộ cộng đầy đủ . Thời gian bán bộ cộng mất đầu vào Một và B và kết quả đầu ra 'tổng hợp' (XOR hoạt động) S= A ⊕ B và 'carry' (AND hoạt động) C= A ⋅ B . Một bộ cộng đầy đủ cũng có 'carry trong' Ctôi n đầu vào và 'thực hiện' đầu ra Co u t , thay thế C . Đây nhuận S= Một ⊕ B ⊕ Ctôi nvà .Co u t= Ctôi n⋅ ( Một + B ) + Một ⋅ B
Phiên bản lượng tử của nửa cộng
Nhìn vào cổng CNOT trên thanh ghi qubit thanh ghi điều khiển B : CNOT A → B | 0 ⟩ Một | 0 ⟩ BMộtB mà ngay lập tức cung cấp cho các đầu ra củaBđăng ký nhưmột⊕B=S. Tuy nhiên, chúng tôi vẫn chưa tính toán số mang và trạng thái củathanh ghiBđã thay đổi nên chúng tôi cũng cần thực hiện thao tác AND. Điều này có thể được thực hiện bằng cách sử dụng cổng Toffoli (kiểm soát-CNOT / CCNOT) 3 qubit. Điều này có thể được thực hiện bằng cách sử dụng các thanh ghiAvàBlàm các thanh ghi điều khiển và khởi tạo thanh ghi thứ ba(C)ở trạng thái| 0⟩
CNOTA → B| 0 ⟩Một| 0 ⟩BCNOTA → B| 0 ⟩Một| 1 ⟩BCNOTA → B| 1 ⟩Một| 0 ⟩BCNOTA → B| 1 ⟩Một| 1 ⟩B= | 0 ⟩Một| 0 ⟩B= | 0 ⟩Một| 1 ⟩B= | 1 ⟩Một| 1 ⟩B= | 1 ⟩Một| 0 ⟩B,
BA ⊕ B = SBMộtB( C)| 0 ⟩, Cho đầu ra của thanh ghi thứ ba như
. Thực hiện Toffoli trên các thanh ghi
A và
B thanh ghi điều khiển
C theo sau là CNOT với
A điều khiển
B đưa ra đầu ra của thanh ghi
B là tổng và đầu ra của thanh ghi
C là mang. Một sơ đồ mạch lượng tử của nửa cộng được thể hiện trong hình 1.
A ⋅ B = CMộtBCMộtBBC
Hình 1: Sơ đồ mạch của một nửa cộng, bao gồm Toffoli theo sau là CNOT. Bit đầu vào là và B , cho tổng S với carry ra C .MộtBSC
Phiên bản lượng tử của bộ cộng đầy đủ
Thể hiện trong hình 2, một cách đơn giản để thực hiện điều này cho các bit đơn là sử dụng thanh ghi qubit, ở đây có nhãn A , B , C i n và 1 , trong đó 1 bắt đầu ở trạng thái | 04MộtBCtôi n11 , vì vậy tình trạng ban đầu là | Một ⟩ | B ⟩ | C i n ⟩ | 0 ⟩ :| 0 ⟩| Một ⟩ | B ⟩ | Ctôi n⟩ | 0 ⟩
- Áp dụng Toffoli bằng và B để kiểm soát 1 : | Một ⟩ | B ⟩ | C i n ⟩ | Một ⋅ B ⟩MộtB1| Một ⟩ | B ⟩ | Ctôi n⟩ | Một ⋅ B ⟩
- CNOT với kiểm soát B : | Một ⟩ | Một ⊕ B ⟩ | C i n ⟩ | Một ⋅ B ⟩MộtB| Một ⟩ | Một ⊕ B ⟩ | Ctôi n⟩ | Một ⋅ B ⟩
- Toffoli với và C i n kiểm soát 1 : | Một ⟩ | Một ⊕ B ⟩ | C i n ⟩ |BCtôi n1| Một ⟩ | Một ⊕ B ⟩ | Ctôi n⟩ | Một ⋅ B ⊕ ( A ⊕ B ) ⋅ Ctôi n= Co u t⟩
- CNOT với kiểm soát C i n : | Một ⟩ | Một ⊕ B ⟩ | Một ⊕ B ⊕ C i n = S ⟩ | C o u t ⟩BCtôi n| Một ⟩ | Một ⊕ B ⟩ | Một ⊕ B ⊕ Ctôi n= S⟩ | Co u t⟩
Bước cuối cùng để lấy lại đầu vào và B là áp dụng CNOT với thanh ghi A thanh ghi điều khiển B , đưa ra trạng thái đầu ra cuối cùng là | ψ o u t ⟩MộtBMộtB
| ψo u t⟩ = | Một ⟩ | B ⟩ | S⟩ | Co u t⟩
Điều này cho đầu ra của thanh ghi là tổng và đầu ra của thanh ghi 2 là thực hiện.Ctôi n2
Hình 2: Sơ đồ mạch của một bộ cộng đầy đủ. Các bit đầu vào là Một và cùng với carry trong C i n , cho tổng S với thực hiện C o u t .BCtôi nSCo u t
Phiên bản lượng tử của bộ cộng mang gợn
Một phần mở rộng đơn giản của bộ cộng đầy đủ là một bộ cộng mang gợn, được đặt tên là 'gợn' mang theo để trở thành vật mang theo của bộ cộng tiếp theo trong một loạt các bộ cộng, cho phép tính tổng tùy ý (nếu chậm). Một phiên bản lượng tử của một bộ cộng như vậy có thể được tìm thấy, ví dụ ở đây
Thực hiện thực tế của một nửa cộng
Đối với nhiều hệ thống, việc thực hiện một cổng Toffoli không đơn giản bằng việc thực hiện một cổng qubit (hoặc thậm chí hai qubit). Câu trả lời này đưa ra cách phân tách Toffoli thành nhiều cổng nhỏ hơn. Tuy nhiên, trong các hệ thống thực, chẳng hạn như IBMQX , cũng có thể có các vấn đề về việc các qubit có thể được sử dụng làm mục tiêu. Như vậy, một triển khai thực tế trên IBMQX2 trông như thế này:
Hình 3: Triển khai bộ cộng một nửa trên IBMQX2. Ngoài việc phân tách cổng Toffoli thành nhiều cổng nhỏ hơn, các cổng bổ sung được yêu cầu vì không phải tất cả các thanh ghi qubit đều có thể được sử dụng làm mục tiêu. Các thanh ghi q [0] và q [1] được thêm vào để lấy tổng bằng q [1] và thực hiện trong q [2]. Trong trường hợp này, kết quả q [2] q [1] sẽ là 10. Chạy nó trên bộ xử lý đã cho kết quả chính xác với xác suất 42,8% (mặc dù đó vẫn là kết quả có khả năng nhất).