Kuantum Fourier Dönüşümü (QFT)
Cirq’te bir devre yalnızca “kapı listesi” değildir; iç yapısı moments diye adlandırılan zaman dilimlerine bölünür: her dilimde, çakışmayan işlemler birlikte — ideal modelde aynı anda — uygulanır. QFT’nin H + kontrollü faz merdivenini burada kurarken, önemli olan hem matematiksel sıra hem de hangi işlemlerin bu dilimlerde üst üste bindiği (veya yan yana çizildiği) düzenidir; böylece faz hizalamasını ve olası paralelliği donanım zamanlamasına yakın düşünmek kolaylaşır.
Cirq Perspektifinde QFT
Cirq’te devre okuması çoğu zaman şu soruya döner: kapılar listeye hangi sırada eklendi — yoksa hangi zaman diliminde (bir Moment) yürütülüyor? Python’da append sırası tek başına “tam zaman çizelgesi” değildir; Cirq, aynı kübit üzerinde çakışmayan işlemleri ayırır, çakışanları ardışık momentlere yayar. QFT merdiveninde kontrollü fazlar doğası gereği çoğu kurulumda birbirini izler; yine de diyagramda hangi blokların aynı “sütunda” kaldığını görmek, paralel olabilecek kısımları (örneğin farklı hatlarda ve çakışmayan kapılar) ayırt etmeyi kolaylaştırır.
Pratik teyit: küçük bir devreyi oluşturup print(circuit) veya bir zaman çizelgesi görünümü kullanın — operasyonların hangi satırda (momentte) toplandığı, QFT’nin “üçgen” yapısında hangi derinlikte işlem biriktiğini gösterir. Bu, Qiskit tarafında sırayla çizilen kapılarla aynı matematiksel üniteyi paylaşsa bile, Cirq’te okuma alışkanlığını değiştirir: önce zaman dilimi, sonra kübit hatları.
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)
Aynı Devre (İki Temsil)
Yukarıdaki editörde LineQubit.range(3) ile kurulan build_qft_cirq çıktısı solda Cirq’ün metin şeması olarak; sağda aynı akışın şematik özeti yer alır. @^t gösterimi kontrollü faz üslerini; × ise SWAP çaprazını işaret eder.
print(qft_circuit) · Cirq · n=3
┌───────┐
0: ───H───@────────@──────────────────────×───
│ │ │
1: ───────@^0.5────┼─────H────@───────────┼───
│ │ │
2: ────────────────@^0.25─────@^0.5───H───×───
└───────┘
H · merdiven CZPow · faz SWAP · bit reversal
Premium devre çizimi
mor · H turuncu · CZPow pembe · CZPow yeşil · SWAP
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
Bu şema 5 · Aynı Devre (İki Temsil) bölümündeki akışı korur; 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ı