Kuantum Fourier Dönüşümü (QFT)
Cirq, kuantum devrelerini “zaman dilimleri” (moments) olarak düzenler. QFT’nin meşhur H + kontrollü faz merdivenini burada kurarken, faz hizalamasının her adımını donanıma yakın bir mantıkla görebiliriz.
Cirq perspektifinde QFT
Cirq’te devreler, kapıların “hangi sırada” eklendiğinden çok, onların hangi zaman diliminde (moment) yer aldığı fikriyle okunur. QFT merdivenini kurarken bu yaklaşım, kontrollü fazların paralel yerleşimini görmeyi kolaylaştırır.
Teknik gereklilikler
QFT, bir register’daki sayısal bilgiyi “frekans spektrumuna” (fazlara) kodlar. Cirq uygulamasında iki bileşen özellikle kritiktir: süperpozisyon için Hadamard ve hassas kontrollü faz döndürmeleri.
-
cirq.H
Her basamak Hadamard ile başlar: kübiti süperpozisyona alır, faz “hizalaması” için zemini kurar.
-
cirq.CZPowGate
Kontrollü faz rotasyonlarını esnek biçimde verir. exponent parametresi, fazı π · exponent olarak ayarlar; QFT’deki π/2^k açıları bu sayede doğrudan üretilebilir.
Girdi ve çıktı uzayı
QFT, bir |x⟩ durumunu alıp |FT(x)⟩ durumuna dönüştürür. Klasik dünyada bu dönüşüm devasa karmaşık matrislerle yazılır; kuantumda ise işlem, kübitlerin birbirlerine göre olan faz açılarını “hizalamaktan” ibarettir.
Cirq’ün şeffaf devre modeli, bu faz hizalamasının her bir momentte nasıl evrildiğini gözlemlemeyi kolaylaştırır: hangi kapılar aynı anda uygulanabiliyor, hangileri bağımlı?
Cirq kod örneği
Aşağıdaki kod, 3 kübitlik QFT devresini Cirq ile kurar. Kontrollü fazlar için CZPowGate(exponent=...) kullanıyoruz; devrenin sonunda ise bit sırasını düzeltmek için SWAP katmanı var.
import cirq
import numpy as np
def build_qft_cirq(qubits):
circuit = cirq.Circuit()
n = len(qubits)
for i in range(n):
# 1. Adım: Hadamard kapısı
circuit.append(cirq.H(qubits[i]))
# 2. Adım: Takip eden her kübit için kontrollü faz döndürme
for j in range(i + 1, n):
# Dönüş açısı eksponenti: 1 / 2^(j-i)
exponent = 1.0 / (2**(j - i))
circuit.append(cirq.CZPowGate(exponent=exponent)(qubits[j], qubits[i]))
# 3. Adım: Bit sırasını düzeltmek için SWAP kapıları
for i in range(n // 2):
circuit.append(cirq.SWAP(qubits[i], qubits[n - i - 1]))
return circuit
# 3 kübitlik bir register hazırlayalım
qubits = cirq.LineQubit.range(3)
qft_circuit = build_qft_cirq(qubits)
print("Cirq QFT Devre Şeması:")
print(qft_circuit)
Kod analizi
Fonksiyon imzası · neden “qubits listesi”?
build_qft_cirq(qubits) bir qubit listesi alır çünkü Cirq’te kübit “yerleşimi” (LineQubit / GridQubit) devreden bağımsız seçilebilir. Aynı QFT mantığını farklı topolojilere taşımak istediğinizde, fonksiyonun qubit listesiyle çalışması en esnek yaklaşımdır.
Dış döngü (for i) · “merdiven” basamakları
Kodun ana omurgası şu satırlardır: for i in range(n). Her i adımında hedef kübit qubits[i] seçilir ve önce Hadamard uygulanır, sonra bu kübiti “ince ayarlayan” kontrollü fazlar eklenir. Bu, QFT’nin klasik merdiven yapısıdır.
Hadamard · faz dünyasına giriş kapısı
circuit.append(cirq.H(qubits[i])) satırı, ilgili kübiti süperpozisyona alır. QFT’de “bilgi” çoğunlukla genlikten çok fazlarda taşınır; Hadamard katmanı, bu faz işlemlerinin çalışacağı zemini kurar.
CZPowGate · QFT’nin kalbi
cirq.CZPowGate(exponent=e), kontrollü‑Z kapısının “kuvvetli” bir genellemesidir. Cirq’te faz açısı, kavramsal olarak π · exponent ile ayarlanır. QFT’de gereken açılar π/2, π/4, π/8, ... olduğundan, exponent = 1/2, 1/4, 1/8, ... seçimi doğrudan hedefe gider.
İç döngü (for j) · fazların “ağırlığı”
for j in range(i + 1, n) ile, daha “sonraki” kübitleri kontrol olarak kullanıyoruz. QFT’de kontrol‑hedef arasındaki mesafe arttıkça açı küçülür: j - i büyüdükçe, fazın etkisi daha ince bir basamağı temsil eder.
Exponent hesabı · π/2^k nasıl çıkar?
Kod: exponent = 1 / 2**(j - i). Bu seçim, fazı π · exponent olarak ayarladığımız için doğrudan π / 2^{j-i} verir. Yani QFT’nin gereken açıları “formülden” devreye taşınmış olur.
| k = (j−i) | exponent | faz (yaklaşık) |
|---|---|---|
| 1 | 1/2 | π/2 |
| 2 | 1/4 | π/4 |
| 3 | 1/8 | π/8 |
Pratik not: Bu sayfadaki amaç, QFT merdiven mantığını görünür kılmak. Donanımda ise çok küçük açıları (π/16, π/32…) yaklaşıklamak veya kırpmak (approximate QFT) bazı iş akışlarında kabul edilebilir.
Moment yapısı · paralellik nerede?
Cirq, aynı momente yerleştirilebilen kapıları “yan yana” dizer. QFT’de bazı kontrollü fazlar bağımsızdır (farklı kübit çiftleri), bazıları ise aynı kübiti paylaştığı için ardışık kalır. Bu yüzden devre çıktısında dikey bloklar halinde moment’leri görürsünüz.
Neden bazı kapılar aynı momente düşmez?
Aynı kübite dokunan iki kapı, aynı zaman diliminde uygulanamaz. Örneğin qubits[i] hedefi üzerinde birden fazla kontrollü faz ardışık gelir; Cirq bunları farklı moment’lere yerleştirir. Buna karşılık farklı hedef kübitlere giden bağımsız fazlar, uygun olduğunda paralel moment’lerde görülebilir.
SWAP katmanı · kodda n//2 neden?
Son döngü: for i in range(n // 2), register’ı baştan ve sondan eşleştirip swap’lar. n//2 ifadesi, her çifti yalnızca bir kez swap’lamak içindir. Bu katman, QFT’nin bit reversal etkisini “klasik okuma” sırasına geri taşır.
Neden SWAP gereklidir?
QFT doğası gereği bit sırasını ters üretir: en anlamlı bit (MSB), en anlamsız bit (LSB) tarafına kayar. Devrenin sonundaki SWAP katmanı, bu “ayna görüntüsü” etkisini klasik okuma standartlarına geri döndürür.
Bu adımı atlamak, Shor gibi QFT sonrası başka işlemlere geçen algoritmalarda bitlerin yanlış yerde yorumlanmasına neden olabilir. Eğitim amaçlı örneklerde bazen SWAP atlanır; ama gerçek akışta genellikle açıkça ele alınır.
Devre ve doğrulama
Şema, 3 kübitlik QFT merdivenini Cirq kapılarıyla okur: Hadamard ve kontrollü fazlar, en sonda bit reversal için SWAP. Burada kontrollü faz için Cirq karşılığı olarak CZPowGate kullanıyoruz.
Şemayı adım adım oku
-
Her basamak H ile başlar; ardından daha küçük açılı kontrollü fazlar gelir.
-
Cirq’te kontrollü fazı, CZPowGate(exponent=t) ile ifade ederiz. Burada t=1/2, 1/4, ... seçimi π/2, π/4, ... fazlarına karşılık gelir.
-
Devrenin sonunda SWAP katmanı, bit reversal etkisini düzeltir.
-
Cirq çıktısında moment’leri izleyerek, hangi kapıların paralel yerleştiğini görebilirsiniz: “zaman dilimi” okuması burada devreyi daha anlaşılır kılar.
Hedef: şemanın “H + kontrollü faz + SWAP” merdiveni olarak okunabilmesi ve CZPowGate parametresinin anlamının net olması.
- kapılar: H + CZPow + SWAP
- exponent: 1/2, 1/4, ...
- not: moment okuması