Cirq ile Tanışma
Kuantum programlamanın kuramını öğrendiysen sıra, devrelerini gerçekten yazıp çalıştırmaya geldi. Bu derste Google’ın açık kaynak Python kütüphanesi Cirq ile tanışacak, kübit–işlem–moment–devre dörtlüsünü öğrenecek ve bir Bell durumu devresini hem durum vektörü hem örneklem düzeyinde çalıştıracaksın. Serinin tamamına Kuantum Hesaplama dersleri sayfasından ulaşabilirsin; önceki ünitedeki Klasik Kontrol ve Kuantum Teleportasyon derslerindeki fikirler burada Cirq sözdizimiyle karşılık bulacak.
Cirq Nedir, Ne İşe Yarar?
Cirq, kuantum devrelerini yazmayı, incelemeyi ve simüle etmeyi sağlayan, Python ile yazılmış açık kaynak bir kütüphanedir. Google Quantum AI tarafından geliştirilir ve özellikle NISQ (gürültülü, orta ölçekli kuantum) cihazların kısıtlarına göre tasarlanmıştır: hangi kübitin hangi anda ne yaptığını kapı düzeyinde kontrol etmek ister. Güncel bir Python 3 üstünde kurulum tek komuttur:
pip install cirq
Kurulduktan sonra import cirq ile çağırır, print(cirq.__version__) ile sürümü görürsün. Cirq’nin bakış açısını tek cümleyle özetlemek gerekirse: devre bir işlem listesi değil, bir zaman çizelgesidir; bu bakış, hangi kapıların paralel çalışabileceğini tasarım aşamasında görmeni sağlar. Peki neden Cirq? Amaç seçim yapmak değil, seçenekleri tanımak: IBM’in Qiskit’ini Qiskit ile Tanışma dersinde, Cirq’yi ise burada işliyoruz. İkisi de aynı matematiksel modelin üstüne kuruludur; zihniyet farkı şudur:
- Ortak yön: ikisi de Python’da devre kurar, yerel simülatörle çalıştırır, ölçüm örneklemesi üretir.
- Cirq’nin vurgusu: moment tabanlı zamanlama modeli, ızgara yerleşimli kübit sınıfları ve kapı düzeyinde ayrıntılı kontrol.
- Qiskit’in vurgusu: geniş ekosistem — transpilasyon, gürültü modelleme ve IBM donanımına erişim.
Temel Yapı Taşları: Kübit, İşlem, Moment, Devre
Cirq’de her şey dört kavram üstüne kurulur. Kübit bilgiyi taşıyan birimdir ve Cirq’de bir nesnedir. İşlem, bir kapının belirli kübitlere uygulanmasıdır: cirq.H(q0), “Hadamard’ı q0’a uygula” demektir. Moment, kübitleri çakışmayan, dolayısıyla aynı anda çalıştırılabilecek işlemlerin kümesidir. Devre (cirq.Circuit) momentlerin sıralı dizisidir; Cirq eklediğin işlemleri otomatik olarak momentlere yerleştirir. Kübit sınıfları şunlardır:
- cirq.NamedQubit('a') — isimle anılan, mimariden bağımsız soyut kübit; algoritma prototipleri için uygundur.
- cirq.LineQubit(3) — bir çizgi üstünde indekslenen kübit; cirq.LineQubit.range(5) ile beşini tek satırda yaratırsın.
- cirq.GridQubit(1, 2) — iki boyutlu ızgarada satır ve sütunla adreslenen kübit; kare kafes yerleşimli cihazlar içindir.
Kapı ekleme sırası ve ölçümün yeri gibi kuralları Kuantum Devresi Yazımı dersinde işleyeceğiz; burada iki kübitlik en küçük örneğe geçiyoruz.
İlk Devre: Bell Durumu Adım Adım
Hedefimiz, tanıdığın dolanık Bell durumu (|00⟩ + |11⟩)/√2. Matematiksel akış şöyle ilerler: |00⟩ = |0⟩ ⊗ |0⟩ olduğundan ve H|0⟩ = (|0⟩ + |1⟩)/√2 gereğince ilk kübite Hadamard uygulamak durumu (|00⟩ + |10⟩)/√2 yapar; CNOT ilk kübit 1 olduğunda ikincisini çevirdiği için |10⟩ terimi |11⟩’e döner ve sonuç (|00⟩ + |11⟩)/√2 çıkar. Normalizasyon da sağlamdır: her terimin olasılığı |1/√2|² = 1/2, toplam 1. Cirq kodu:
import cirq
q0, q1 = cirq.LineQubit.range(2)
devre = cirq.Circuit(
cirq.H(q0),
cirq.CNOT(q0, q1),
)
print(devre)
print(devre) çıktısında kapıları sütunlar hâlinde görürsün: H yalnız q0’a dokunurken CNOT hem q0’ı hem q1’i kullanır; bu iki işlem aynı momente konamaz, Cirq devreyi otomatik iki momente böler. Devreye ölçüm ekleyip on kez çalıştırmak için:
devre += cirq.measure(q0, q1, key='sonuc')
simulator = cirq.Simulator()
orneklem = simulator.run(devre, repetitions=10)
print(orneklem.histogram(key='sonuc'))
Çıktıda yalnız 00 ve 11’i, kabaca yarı yarıya görürsün; 01 ve 10 hiç çıkmaz. Dolanıklığın en temiz izi budur: iki ölçüm ayrı ayrı rastgeledir ama her zaman birbirinin aynısıdır. Devreyi ölçmeden incelemek istersen ölçümü çıkarıp durum vektörü isteyebilirsin; çıktı yaklaşık 0.71|00⟩ + 0.71|11⟩ biçimindedir (0.71 ≈ 1/√2):
devre_olcumsuz = cirq.Circuit(cirq.H(q0), cirq.CNOT(q0, q1))
print(cirq.Simulator().simulate(devre_olcumsuz).dirac_notation())
Bu iki tarz, simülasyonun iki okuluna denk düşer: durum vektörünü birebir izlemek Statevector Simülasyonu dersinin, çok kez örnekleyerek keşfetmek ise Shot Tabanlı Simülasyon ve Ölçüm Histogramları derslerinin konusudur. Alıştırma: önceki ünitedeki üç kübitlik teleportasyon devresini Cirq’ye taşı; ölçümlerin hangi momentlere düştüğünü print çıktısında gör.
Sık Yapılan Hatalar ve Akılda Kalanlar
Yeni başlayanların en çok takıldığı noktalar:
- Devrenin içine if ya da for yazmayı beklemek. Her kapı bir üniteryen matristir; koşullu akış devrenin dışında, ölçüm sonucunu okuyan klasik kodda yönetilir — önceki ünitedeki Klasik Kontrol dersindeki ayrım burada da geçerlidir. Ölçüm arasında dallanma her cihazda desteklenmez.
- Çakışan işlemleri tek Moment’e sıkıştırmak. Aynı kübite iki işlem aynı anda uygulanamaz; cirq.Moment’i elle kurarken kübitleri çakıştırırsan Cirq hata verir. Devre düzeyindeyse işlemler otomatik bölünür — beklediğin sıralama kayabilir, print çıktısını denetle.
- Kübit türlerini karıştırmak. LineQubit(0) ile NamedQubit('0') farklı nesnelerdir ve aynı devrede farklı kübit sayılır; tek sınıf seçip tutarlı kal.
- Simülatörden ücretsiz hız beklemek. Simülasyon klasiktir: n kübitin durumu 2ⁿ karmaşık sayı taşır; 30 kübitte genlik sayısı bir milyarı aşar, bellek ihtiyacı on gigabaytlara çıkar. Simülatör kuantum hızlanması vermez, devreyi doğrular.
Özetle: Cirq, kübit–işlem–moment–devre dörtlüsü üstüne kurulu, zamanlamayı ön planda tutan bir kütüphanedir; Aynı devreyi hem durum vektörüyle hem örneklemeyle inceleyebilirsin. Yerel simülatörden sonraki doğal soru, devrenin gerçek cihazda nasıl koştuğudur; cevabı Gerçek Kuantum Donanımında Çalıştırma dersinde.
Sık Sorulan Sorular
Cirq nedir ve ne işe yarar?
Cirq, Google Quantum AI’ın geliştirdiği, kuantum devrelerini Python ile yazmayı, incelemeyi ve simüle etmeyi sağlayan açık kaynak bir kütüphanedir. NISQ denen gürültülü, orta ölçekli cihazların kısıtlarına göre tasarlanmıştır; kübitleri, kapıları ve zamanlamayı ayrıntısıyla kontrol etmeni sağlar.
Cirq ile Qiskit arasındaki fark nedir?
İkisi de aynı matematiksel modelin (kübitler, üniteryen kapılar, ölçüm) üstünde çalışan Python kütüphaneleridir. Cirq moment tabanlı zamanlama modeli ve ızgara yerleşimli kübit sınıflarıyla donanıma yakın, ayrıntılı kontrolü vurgular; Qiskit ise transpilasyon ve geniş uygulama kütüphaneleriyle daha kapsamlı bir ekosistem sunar. Birini öğrenince diğerine geçmek büyük ölçüde sözdizimi meselesidir.
Cirq’de moment nedir, ne işe yarar?
Moment, kübitleri çakışmayan, dolayısıyla aynı anda çalıştırılabilecek işlemlerin kümesidir. Cirq’de devre, momentlerin dizisidir; bu model hangi kapıların paralel çalışabileceğini tasarım aşamasında gösterir ve donanımda devre süresini kısaltma çabasının temelini oluşturur.
Cirq ile gerçek bir kuantum bilgisayarda çalışabilir miyim?
Cirq ile devrelerinin tamamını yerel simülatörlerde çalıştırabilirsin. Gerçek donanımda çalıştırmak için devrenin önce cihazın desteklediği kapı kümesine ve bağlantı haritasına dönüştürülmesi gerekir; gürültü yüzünden simülatör sonuçlarından farklı, istatistiksel sonuçlar alırsın.
Kaynaklar ve İleri Okuma
Cirq resmi dokümantasyonu — resmi belgelendirme ve API referansı.
Cirq öğreticileri — resmi eğitim notları; ilk devreden başlayarak ilerler.
Cirq GitHub deposu — kaynak kod ve sürüm notları.
Cirq — Wikipedia — geçmişi, tasarım hedefleri ve alternatifleri üzerine özet madde.