Giới thiệu về Fourier Transform và ý nghĩa của nó trong cơ học lượng tử và điện toán lượng tử. Tìm hiểu về 3 thuật toán Deutsch-Jozsa, Bernstein–Vazirani và Quantum Fourier Transform.
Fourier Transform luôn là phép toán đẹp nhất và ấn tượng nhất đối với mình. Điều đầu tiên sau khi mình đọc vài chương sách về quantum computing là nghĩ ngay đến độ sexy của em toán này khi áp dụng trên máy tính lượng tử, và đó cũng là động lực để mình để viết bài viết này. Ứng dụng máy tính lượng tử trong việc thực hiện Fourier Transform sẽ khá thú vị và đẹp mắt, đây là một case study hoàn hảo cho quantum computing.
Bài viết này sẽ warm-up với thuật toán Deutsch-Jozsa, nhằm hiểu một số khái niệm cơ bản về quantum computing, Hadamard, Oracle và Phase Kickback. Sau đó mở rộng với thuật toán Bernstein–Vazirani, một bài toán tương tự nhưng phức tạp hơn. Tiếp đến là sơ lược về Fourier Transform và đôi điều về ý nghĩa của nó trong vật lý. Cuối cùng là Quantum Fourier Transform, một trong những thuật toán quan trọng nhất trong quantum computing, kèm theo một số khái niệm cần thiết.
Các lý thuyết cơ bản về quantum computing sẽ bị bỏ qua trong bài viết này, bù lại phần toán học sẽ được giải thích và chứng minh một cách chi tiết và chặt chẽ.
Thuật toán Deutsch-Jozsa
Giới thiệu về Deutsch-Jozsa
Đây là thuật toán được phát triển từ thuật toán Deutsch (1985) trong việc xác định xem một hàm là hàm hằng hay cân bằng với input là 1 bit duy nhất, và được giải quyết bằng 1 truy vấn trên máy tính lượng tử, thay vì 2 truy vấn như máy tính truyền thống. Thuật toán Deutsch-Jozsa mở rộng vấn đề này cho n input nhưng vẫn chỉ cần 1 truy vấn.
Cho hàm f:{0,1}n↦{0,1}, nhận đầu vào là một chuỗi bit có độ dài n và trả về 1 bit. Số tham số có thể nhận được là số cặp của tích descartes∣{0,1}n∣=2n. Mục tiêu của thuật toán Deutsch-Jozsa là xác định xem hàm f là hàm hằng (constant function) hay hàm cân bằng (balanced function).
Định nghĩa rằng một hàm hằng là một hàm mà giá trị trả về luôn giống nhau cho mọi input.
fcon:{0,1}n↦{0,1}=c,c∈{0,1}
Trong đó, một hàm cân bằng là một hàm mà giá trị trả về khác nhau cho một nửa input và giống nhau cho nửa còn lại.
fbal:{0,1}n↦{0,1},∣f−1(0)∣=∣f−1(1)∣=2n−1
Hàm cân bằng là một trong những "tiêu chí quan trọng nhất đối với các hàm Boolean trong cryptography". Nếu một hàm Boolean không cân bằng, nó sẽ có độ lệch (trong thống kê), khiến mã dễ bị phân tích và tấn công (cụ thể là correlation attack).1
Để kiểm tra một hàm là hàm hằng hay cân bằng, phương pháp cổ điển có độ phức tạp O(2n), cụ thể là phải truy vấn 2n−1+1 lần trong trường hợp xấu nhất, đây là trường hợp mà toàn bộ một nửa đầu vào 2n−1 trả về cùng một giá trị và phải xác định bằng cách kiểm tra thêm 1 lần nữa.
Trong khi đó, máy tính lượng tử chỉ cần 1 lần truy vấn duy nhất bằng thuật toán Deutsch-Jozsa, nhờ vào Oracle và Phase Kickback, hai tiền đề quan trọng cho việc xây dựng Quantum Fourier Transform.
Ý tưởng của Deutsch-Jozsa
Để có thể xác định hàm f chỉ bằng một truy vấn duy nhất, thuật toán thay vì kiểm tra từng đầu vào một cách tuần tự như trong phương pháp cổ điển, Deutsch-Jozsa tận dụng tính chất đặc biệt của hiện tượng chồng chập lượng tử (quantum superposition) để kiểm tra tất cả các đầu vào cùng một lúc bằng cách sử dụng cổng Hadamard.
Toàn bộ trạng thái chồng chập của hệ thống sẽ được đưa vào một Oracle (hay còn gọi là Black-box) để thực thi hàm f. Quá trình này sẽ điều chỉnh các pha của qubit, hiện tượng này gọi là Phase Kickback. Đây là một kĩ thuật cực kì quan trọng, Phrase Kickback sẽ tác động lên qubit đang ở trạng thái chồng chập dựa trên Oracle cho trước. Ở đây, nếu f là hàm cân bằng, Oracle sẽ đảo ngược pha của một nửa các qubit.
Sau cùng, nếu f là hàm hằng, tất cả các trạng thái sẽ cùng pha, khi giao thoa sẽ cộng hưởng và khiến cho biên độ (xác suất đo được) đạt đến 100%. Ngược lại, nếu f là hàm cân bằng, một nửa các trạng thái sẽ ngược pha, khi giao thoa sẽ triệt tiêu và khiến cho biên độ (xác suất đo được) trở thành 0%.
Cổng Hadamard và Oracle sẽ được làm rõ về mặt toán học ở phần dưới.
Xây dựng thuật toán Deutsch-Jozsa
Cho nqubit có trạng thái ban đầu ∣0⟩ và 1qubit∣−⟩ dùng làm ancilla. Trạng thái ban đầu của hệ thống là:
∣ψ0⟩=∣0⟩⊗n⊗∣−⟩
Cần lưu ý rằng ⊗ là tích tensor (tensor product), trong quantum computing nó đại diện cho việc kết hợp các qubit thành một hệ thống lớn hơn. Việc tích tensor sẽ không làm cho các qubit bị vướng víu (entangled), chúng chỉ có khả năng bị vướng víu khi chúng ta áp dụng các cổng kiểm soát (controlled gate).
Từ giờ chúng ta sẽ rút gọn tích tensor∣x⟩⊗∣y⟩ thành ∣x⟩∣y⟩, và tích vô hướng⟨x∣⋅∣y⟩ thành ⟨xy⟩.
Giai đoạn 1: Áp dụng cổng Hadamard lần 1
Cổng Hadamard có tác dụng có tác dụng chuyển đổi một qubit từ trạng thái cơ bản sang trạng thái chồng chập bằng cách thực hiện một phép quay π quanh (x^+z^)/2.
H⊗n∣0⟩⊗n=(H∣0⟩)⊗n=(21∣0⟩+21∣1⟩)⊗n=2n1(∣0⟩+∣1⟩)⊗n=2n1x∈{0,1}n∑∣x⟩xem lại (5)
Ở dấu bằng cuối cùng, người đọc có thể tự chứng minh bằng quy nạp.
Do đó, trạng thái ở giai đoạn này là:
∣ψ1⟩=H⊗n∣ψ0⟩=H⊗n∣0⟩⊗n∣−⟩=2n1x∈{0,1}n∑∣x⟩∣−⟩=2n1x∈{0,1}n∑∣x⟩∣−⟩xem lại (7)
Giai đoạn 2: Sử dụng Oracle
Oracle, hay còn gọi là Black-box (Hộp đen), được kí hiệu là Of, là một cổng giúp hàm f có thể khả nghịch (invertible) trong không gian trạng thái. Có hai lí do không thể sử dụng trực tiếp hàm f mà phải thông qua Oracle:
Vì hàm f:{0,1}n↦{0,1}m và đôi khi n=m (như trong bài toán này đầu vào là n và đầu ra là 1). Một ma trận n×m chắc chắn không khả nghịch, nếu một cổng lượng tử có số lượng input và output khác nhau sẽ vi phạm nguyên lý bảo toàn hạt lượng tử vì các hạt không thể bị mất đi hay nhân bản. Cụ thể hơn, các cổng lượng tử phải là unitary matrix, gồm các điều kiện sau: square (vuông), complex (phức) và orthonormal (trực chuẩn).
Ngay cả khi n=m, ma trận vẫn có thể không khả nghịch. Nếu tồn tại x=y sao cho f(x)=f(y), khi đó O∣x⟩=O∣y⟩ trong khi O†O∣x⟩=O†O∣y⟩. Điều này có nghĩa là không thể áp dụng phép chuyển vị liên hợp (conjugate transpose) lên O, hay nói cách khác, O†=O−1 không tồn tại.
Điều này có thể giải quyết bằng cách bổ sung vào một lượng m các ancilla qubit (hay còn gọi là register) để giữ kết quả của hàm f.
Of∣x⟩∣y⟩=∣x⟩∣y⊕f(x)⟩∀x∈{0,1}n,y∈{0,1}m
Trong bài toán này, vì số lượng output là 1, ta có thể sử dụng 1qubit có trạng thái ∣−⟩ làm ancilla.
Do đó, với đầu vào là 2 qubit∣x⟩ và ∣−⟩, cổng Of sẽ cho ra 2 qubit(−1)f(x)∣x⟩ và ∣−⟩. Chúng ta có thể bỏ qubit∣−⟩ đi vì không còn cần thiết.
Quay trở lại bài toán, sau khi áp dụng Oracle, trạng thái ở giai đoạn này là:
∣ψ2⟩=Of∣ψ1⟩=Of2n1x∈{0,1}n∑∣x⟩∣−⟩=2n1x∈{0,1}n∑Of∣x⟩∣−⟩=2n1x∈{0,1}n∑(−1)f(x)∣x⟩∣−⟩=2n1x∈{0,1}n∑(−1)f(x)∣x⟩xem lại (10)
Giai đoạn 3: Áp dụng cổng Hadamard lần 2
Đan xen cổng Hadamard là một kĩ thuật rất phổ biến trong quantum computing, sau khi chuyển đổi trạng thái cơ bản sang trạng thái chồng chập và tận dụng tính chất của nó để thực hiện các phép tính một cách song song, có thể áp dụng cổng một lần nữa để hoàn nguyên về trạng thái cơ bản, tránh hiện tượng chồng chập khi đo.
Ở dấu bằng cuối cùng, người đọc có thể tự chứng minh bằng quy nạp.
Trạng thái ở giai đoạn này là:
∣ψ3⟩=H⊗n∣ψ2⟩=H⊗n2n1x∈{0,1}n∑(−1)f(x)∣x⟩=2n1x∈{0,1}n∑(−1)f(x)H⊗n∣x⟩=2n1x∈{0,1}n∑(−1)f(x)(2n1y∈{0,1}n∑(−1)x⋅y∣y⟩)=2n1y∈{0,1}n∑x∈{0,1}n∑(−1)f(x)+x⋅y∣y⟩xem lại (12)
Giai đoạn 4: Đo trạng thái
Trước tiên chúng ta phân tích xác suất của trạng thái ∣0⟩⊗n. Giả sử ∣y⟩=∣0⟩⊗n.
Vì vậy, ta chỉ cần đo trạng thái ∣ψ3⟩ để xác định hàm f là hàm hằng hay hàm cân bằng. Nếu đo được ∣0⟩⊗n thì hàm f là hàm hằng, còn nếu đo được bất kì giá trị nào khác, hàm f là hàm cân bằng.
Mở rộng: Thuật toán Bernstein–Vazirani
Thuật toán Bernstein–Vazirani (1992) giải quyết vấn đề tương tự như thuật toán Deutsch-Jozsa, nhưng mở rộng hơn, cho hàm f:{0,1}n↦{0,1}. Để giải quyết độ phức tạp của hidden shift nổi tiếng, có ứng dụng quan trọng trong cryptography và error correction.
Trong bài toán hidden shift, một hàm f được xác định bởi phép XOR 2 chuỗi bit x và s với n độ dài. Mục tiêu là xác định chuỗi s trong hàm f như sau:
Tuy nhiên, với máy tính lượng tử, chỉ cần 1 truy vấn bằng thuật toán Bernstein–Vazirani.
Thuật toán Bernstein–Vazirani hoàn toàn tương tự thuật toán Deutsch-Jozsa, chỉ khác ở giai đoạn 3, sau khi áp dụng Oracle, hàm f sẽ được biến đổi theo cách khác.
Vì phép XOR khi áp dụng lên chính nó sẽ bằng 0, các giá trị của (−1)x⋅0 sẽ bằng 1, và tổng đến ∣{0,1}n∣=2n lần sẽ bằng 2n, triệt tiêu với hệ số phía trước.
2n1x∈{0,1}n∑(−1)x(s⊕s)=1
Do đó:
Pr(measure ∣s⟩)=2n1x∈{0,1}n∑(−1)f(x)2=1
Vì vậy, ta chỉ cần đo trạng thái của ∣ψ3⟩ và đó chính là chuỗi s cần tìm.
Sơ lược về Fourier Transform
Fourier Transform
Fourier Transform là một trong những phép toán quan trọng nhất trong toán học, giúp chuyển đổi một tín hiệu từ miền thời gian t sang miền tần số ω và có vai trò quan trọng trong hầu hết các lĩnh vực khoa học. Các thuật toán quantum computing cũng sử dụng Quantum Fourier Transform rất nhiều, đơn cử như thuật toán Shor nổi tiếng đã áp dụng Quantum Fourier Transform để tìm ra chu kỳ của hàm tuần hoàn f(x)=axmodN trong thời gian đa thức.
Việc hình dung được Fourier Transform có thể giúp giải thích được rất nhiều hiện tượng lượng tử nói riêng và các mối quan hệ nói chung.
Các lý thuyết về không-thời gian (space-time), như Special Relativity (Thuyết tương đối Hẹp) của Albert Einstein có nhiều mối liên hệ mật thiết đối với phép Fourier Transform. Lí do là vì chúng ta đang quan sát một không gian phụ thuộc vào thời gian, rất nhiều tính chất và đặc trưng đã bị loại bỏ, Fourier Transform có thể tìm thấy và lí giải được nhiều hiện tượng nhờ vào việc chuyển đổi sang một miền tương đối hơn 2.
Tuy nhiên chúng ta sẽ tập trung về mặt cơ học lượng tử, ở đây có một mối quan hệ tương tự là vị trí-động lượng (position-momentum) được nêu trong Uncertainty Principle (Nguyên lý Bất định) của Heisenberg. Uncertainty Principle ngụ ý rằng khi áp dụng Fourier Transform lên hàm vị trí ψ(x), ta thu được hàm động lượng ψ(p), điều này có thể được xem như sự phân bố của ψ(x) và ψ(p) có mối quan hệ nghịch đảo (đây là tính chất cơ bản của Fourier Transform).
Mối quan hệ nghịch đảo trong Fourier Transform có thể được hiểu rằng một nốt (âm thanh) sắc nét ở một tần số duy nhất sẽ kéo theo một hàm tuần hoàn sin vô hạn và không xác định. Ngược lại, nếu âm thanh quá ngắn, tần số sẽ không thể được xác định chính xác và kéo theo phổ trải rộng vô hạn. Vì vậy để xác định chính xác (các) tần số của một âm thanh, âm thanh đó phải đủ dài để (các) phổ có "thời gian" hội tụ về (các) tần số riêng biệt và rõ ràng.
Tương tự với Uncertainty Principle, mối quan hệ nghịch đảo này cho thấy nếu một hạt có vị trí càng chính xác thì động lượng của hạt sẽ không chắc chắn và ngược lại.
Nếu hàm vị tríψ(x) thu hẹp (tập trung quanh một điểm), thì hạt có vị trí rất xác định (hàm hẹp trong miền không gian). Nhưng chuyển đổi qua Fourier Transform, hàm động lượngψ(p) sẽ trở nên trải rộng. Tức là động lượng của hạt sẽ rất bất định (độ rộng lớn trong miền động lượng). Điều này tuân theo Uncertainty Principle: Biết vị trí càng chính xác, động lượng càng không chính xác.
Ngược lại, nếu hàm vị tríψ(x) trải rộng (không có sự hội tụ rõ ràng), thì hạt có vị trí rất bất định (hàm rộng trong miền không gian). Nhưng khi chuyển đổi qua Fourier Transform, hàm động lượngψ(p) sẽ trở nên tập trung. Tức là động lượng của hạt sẽ rất xác định (độ rộng nhỏ trong miền động lượng). Điều này cũng tuân theo Uncertainty Principle: Biết động lượng càng chính xác, vị trí càng bất định.
Ngoài không-thời gian và vị trí-động lượng. Fourier Transformf(x)↔f^(ξ) còn có thể áp dụng cho rất nhiều mối quan hệ khác miễn chúng là các đại lượng liên hợp (conjugate variables). Thậm chí còn có thể xác định hình dạng và cấu trúc của hạt nhân nguyên tử bằng mối quan hệ giữa phân bổ không gian - phân bổ động lượng (spatial distribution - momentum distribution)34.
f:R↦CFFf^:R↦C
Nói một cách khác Fourier Transform giúp chúng ta phân tích một sóng đã được giao thoa thành các thành phần cơ bản (tần số). Ngược lại Inverse Fourier Transform (IFF) giúp chúng ta tổ hợp các thành phần cơ bản để tạo ra một sóng giao thoa.
Fourier Transform và Inverse Fourier Transform trên miền liên tục được định nghĩa như sau:
Trong khi đó, Discrete Fourier Transform (DFT)x↦x^ là phiên bản rời rạc của Fourier Transform. Được áp dụng nhiều hơn trong thực tế để bỏ qua độ phức tạp lớn của Fourier Transform.
x:CNDFTx^:CN
Discrete Fourier Transform và Inverse Discrete Fourier Transform trên chuỗi số hữu hạn x0,x1,…,xN−1 được định nghĩa như sau:
Người đọc có thể tự chứng minh FN là unitary matrix bằng cách kiểm tra FN†FN=FNFN†=I.
Do đó, một thuật toán Discrete Fourier Transform thông thường có độ phức tạp O(N2).
Fast Fourier Transform
Fast Fourier Transform (FFT) có độ phức tạp O(NlogN), vượt trội hơn theo hàm mũ so với Discrete Fourier TransformO(N2). Discrete Fourier Transform có N phần tử và mỗi phần tử có N pha, Fast Fourier Transform tận dụng tính chất primitive root của ω để làm giảm số lần thao tác với pha từ N xuống còn logN cho mỗi phần tử.
Quantum Fourier Transform (QFT) có độ phức tạp là O(log2N), vượt trội hơn theo hàm mũ đối với Fast Fourier TransformO(NlogN). Trên máy tính truyền thống, một chuỗi nhị phân độ dài N=2n sẽ được biểu diễn bằng 2n bit 0 và 1. Máy tính lượng tử có thể biểu diễn chuỗi nhị phân này chỉ bằng nqubit. Đó là lí do tại sao thực tế Quantum Fourier Transform vẫn có độ phức tạp là O(n2) tuy nhiên n=logN.
Để hiểu tại sao máy tính lượng tử chỉ cần nqubit cho 2n phần tử, chúng ta có thể nhớ lại rằng để mô phỏng được nqubit chúng ta sẽ cần tới 2nbit vì đây là số lượng trạng thái có thể có. Vì mỗi trạng thái sẽ có một pha (và biên độ) tương ứng nên chúng ta sẽ lưu trữ được 2npha.
Một so sánh thú vị là một số nguyên không dấu (unsigned integer)256bit có thể biểu diễn được một con số (xấp xỉ) số luợng nguyên tử trong vũ trụ (2256−1) và máy tính lượng tử chỉ cần 8qubit để làm điều đó (28=256). Và tất nhiên nếu chúng ta có thể biến mỗi một nguyên tử thành một bit, thì toàn bộ vũ trụ cũng chỉ mô phỏng được 256qubit.
Ý tưởng của QFT
Pha là một thành phần tối quan trọng trong quantum computing. Một trạng thái qubit ngoài việc có thể chồng chập giữa ∣0⟩ và ∣1⟩ còn có thể xoay quanh z^ mà vẫn giữ trạng thái chồng chập với biên độ không đổi. Điều khó nhất đối với một thuật toán lượng tử là truy vết được kết quả mong muốn sau khi thực hiện các phép tính song song.
Ở bài toán Deutsch-Jozsa hay Bernstein–Vazirani, Phase Kickback thông qua (−1)f(x) đã cho ra hai pha ngược nhau là 0 và π. Quantum Fourier Transform không chỉ sử dụng hai pha như trên mà là tất cả pha có thể có, tương ứng với độ dài của chuỗi bit.
Hãy quay lại công thức Discrete Fourier Transform:
x^k=n=0∑N−1xne−2πi(Nkn)
Chúng ta có thể thấy rằng x^k là tích vô hướng giữa x và wk thể hiện độ mạnh của thành phần (tần số) trong chuỗi. Việc tích luỹ (tích vô hướng) các pha này sẽ được thực hiện qua cổng Controlled Phase Shift. Cụm từ "Controlled" ở mang ý nghĩa rằng sẽ có nhiều hơn 2qubit tương tác với nhau (gồm các controller và một target).
Xây dựng công thức QFT
Vì Quantum Fourier Transform được xây dựng dựa trên Discrete Fourier Transform, chúng ta có thể xây dựng lại toàn bộ công thức từ đây bằng một chút biến đổi.
Cho Quantum Fourier Transform∣k⟩↦∣j⟩, trước tiên ta xem xét biểu diễn nhị phân chuỗi bit của j và k:
Mở rộng thêm chút nữa, khi chia cho 2l (hoặc trong lập trình gọi là shift sang phải lbit), ta sẽ được một phần nguyên và một phần thập phân (của số nhị phân):
Ta có thể bỏ qua phần nguyênJ khi luỹ thừa cùng với e2πi bằng công thức Euler:
e2πi(2lj)=e2πiJ+2πi0.jl−1jl−2…j0=e2πiJ⋅e2πi0.jl−1jl−2…j0=(cos(2π)+isin(2π))J⋅e2πi0.jl−1jl−2…j0=(1+i0)J⋅e2πi0.jl−1jl−2…j0=1J⋅e2πi0.jl−1jl−2…j0=e2πi0.jl−1jl−2…j0xem lại (37)
Từ đây ta đã có đủ cơ sở để thực hiện biến đổi công thức Discrete Fourier Transform:
∣j⟩=2n1k=0∑2n−1e2πi(2nk)∣k⟩=2n1k0=0∑1k1=0∑1…kn−1=0∑1e2πij(2nkn−1kn−2…k0)∣kn−1kn−2…k0⟩=2n1k1=0∑1k2=0∑1…kn=0∑1e2πij(2n∑l=0n−1kl⋅2l)∣kn−1kn−2…k0⟩=2n1k1=0∑1k2=0∑1…kn=0∑1e2πij∑l=0n−1(2n−lkl)(∣kn−1⟩⊗∣kn−2⟩⊗…⊗∣k0⟩)=2n1k1=0∑1k2=0∑1…kn=0∑1(e2πij(21kn−1)∣kn−1⟩⊗e2πij(22kn−2)∣kn−2⟩⊗⋯⊗e2πij(2nk0)∣k0⟩)=2n1k1=0∑1k2=0∑1…kn=0∑1(l=n−1⨂0e2πij(2n−lkl)∣kl⟩)=2n1l=n−1⨂0(kl=0∑1e2πij(2n−lkl)∣kl⟩)=2n1l=n−1⨂0(∣0⟩+e2πi(2n−lj)∣1⟩)=2n1(∣0⟩+e2πi(21j)∣1⟩)⊗(∣0⟩+e2πi(22j)∣1⟩)⊗…⊗(∣0⟩+e2πi(2nj)∣1⟩)=2n1(∣0⟩+e2πi(0.j0)∣1⟩)(∣0⟩+e2πi(0.j1j0)∣1⟩)…(∣0⟩+e2πi(0.jn−1jn−2⋯j0)∣1⟩)=21(∣0⟩+e2πi(0.j0)∣1⟩)21(∣0⟩+e2πi(0.j1j0)∣1⟩)…21(∣0⟩+e2πi(0.jn−1jn−2⋯j0)∣1⟩)xem lại (36)xem lại (38)
Phần chứng minh khá dài và khó theo dõi nhưng sẽ rất hữu ích để có một trực giác tốt về Quantum Fourier Transform (và những phần như này sẽ không tìm được trên bất kì tài liệu nào khác). Cho những ai lười đọc đống kí tự trên, chúng ta có thể xem qua ví dụ sau:
Từ đây chúng ta có thể hình dung được rằng, Quantum Fourier Transform gồm n−1qubit∣+⟩, mỗi qubit có pha là 2πi(2ljk) tương ứng với bitjk của nhị phânj.
Xây dựng thuật toán QFT
Giai đoạn 1: Áp dụng cổng Hadamard
Trước tiên, chúng ta nhận thấy trạng thái ∣jl⟩ rất giống với trạng thái của qubit sau khi áp dụng cổng Hadamard.
H∣0⟩H∣1⟩=21(∣0⟩+∣1⟩)=21(∣0⟩−∣1⟩)
Tuy nhiên ta không thể biết trạng thái ∣jl⟩ là ∣0⟩ hay ∣1⟩ nên ta có thể biểu diễn dưới dạng Phase Kickback.
Tuy nhiên chúng ta vẫn còn thiếu biên độ e2πi(2ljk), hoá ra 2ljk chính là pha của trạng thái qubit∣jk⟩. Chúng ta cần một cổng nào đó có thể thay đổi pha đối với trạng thái cơ bản∣1⟩, và đây chính là công dụng của cổng Phase Shift (Dịch Pha).
Rk=[100e2πi(2k1)]
Ví dụ:
Rk∣0⟩Rk∣1⟩=∣0⟩=e2πi(2k1)∣1⟩
Cổng Phase Shift sẽ không thay đổi pha nếu trạng thái là ∣0⟩ và thay đổi một phaθ=2πi(2k1) quanh z^ nếu trạng thái là ∣1⟩. Những cổng logic như này sẽ được gọi là cổng có điều kiện (controlled gate) với một target và các controller.
Giải thích theo nghĩa hình học, eiθ=cosθ+isinθ là trị riêng (eigenvalue) và trạng thái ∣1⟩ là vector riêng (eigenvector) của ma trận Rk. Nhắc lại đại số tuyến tính, các vector riêng là các hướng thể hiện sự biến đổi không gian của ma trận so với không gian ban đầu, các trị riêng tương ứng thể hiện mức độ ảnh hưởng của từng vector riêng đó. Do đó, một ma trận xoay sẽ có phương trình đặc trưng (characteristic equation) vô nghiệm (tức là có nghiệm phức) vì các số phức biểu diễn góc xoay.
Do đó, trạng thái của qubit∣jl⟩ sau khi áp dụng cổng Phase Shift sẽ là:
Rk∣jl⟩=21(∣0⟩+e2πi(2kjl)∣1⟩)
Tuy nhiên như vậy vẫn chưa đủ, vì ta thấy rằng qubit∣jl⟩ phụ thuộc vào pha của toàn bộ các qubitjl−1jl−2…j0. Hay nói cách khác, pha của qubit∣jl⟩bị điều khiển (controlled) bởi các qubit trước nó. Chúng ta đến với cổng Controlled Phase Shift (Dịch Pha Có Điều kiện).
Cổng này sẽ thay đổi pha của qubit∣jtarget⟩ nếu qubit∣jcontroller⟩ là ∣1⟩, còn nếu qubit∣jcontroller⟩ là ∣0⟩ thì qubit∣jtarget⟩ sẽ không thay đổi. Cổng Controlled Phase ShiftURk có dạng:
Hoá ra ∣jn−l−1⟩ (kết quả sau khi áp dụng Quantum Fourier Transform) lại chính là trạng thái ∣ψ2(l)⟩ vừa tính được. Điều này rất dễ nhận ra nếu chúng ta nhìn lại công thức Quantum Fourier Transform mà chúng ta đã xây dựng ở trên.
Pha của qubit đầu tiên ∣jn−1⟩ phụ thuộc vào j0.
Pha của qubit thứ hai ∣jn−2⟩ phụ thuộc vào j0 và j1.
...
Pha của qubit cuối cùng ∣j0⟩ phụ thuộc vào tất cả các bit trước đó.
Vì vậy, chúng ta có thể thấy j0 vừa là controller của tất cả các qubit vừa là target của các qubit trước đó. Bằng cách thay đổi thứ tự, ta có được:
Pha của qubit đầu tiên ∣jn−1⟩ phụ thuộc vào tất cả các bit sau nó.
Pha của qubit thứ hai ∣jn−2⟩ phụ thuộc vào tất cả các bit sau nó.
...
Pha của qubit cuối cùng ∣j0⟩ không phụ thuộc vào bất kì bit nào.
Do đó, trạng thái của qubit∣jl⟩ ở giai đoạn 3 sẽ là: