Kuantum bilişim (quantum computing) alanı son yıllarda hızlı bir ilerleme kaydetmektedir. 2016 yılında, IBM kuantum bilgisayarını bulut servisi (cloud service) üzerinden sunmaya başladığında kuantum bilişim teknolojilerini sadece araştırma laboratuvarlarda yer almaktan kurtarıp kuantum meraklısı olan herkesin erişimine açmıştır. IBM Quantum Experience tarafından oluşturulmuş bu bulut servisi herkes için kullanılabilir, programlanabilir bir ortam sunmaktadır. Bu gelişme ile kuantum bilişim ve kuantum programlama kavramları popülarite kazanıp, kuantum programlama yönünde bir iş gücüne ihtiyaç duyulmasına sebebiyet vermiştir. IBM bu servisiyle, diğer büyük şirketlerin de ilgisini bu yöne çekerek, çeşitli kuantum programlama ortamları artmasına neden olmuştur. Örneğin; Microsoft’un Azure Quantum platformunu sunması.

Hal böyle olunca bu yeni sayılabilecek disipline ilginin ve sektör talebinin büyümemesi işten bile değil.

Kuantum Bilgisayarları Anlamak

Kuantum programlama üzerine konuşmadan önce, ilk başta kuantum bilgisayarların gerçekten ne olduklarını ve diğer bilgisayarlardan nasıl farklı olduklarını kısaca gözden geçirelim.

Kuantum bilgisayar, kuantum hesaplamaları yapmak için kuantum mekaniğinin özelliklerinden faydalanan bir teknolojidir.

Peki kuantum bilgisayarlar, evlerimizde bulunan klasik bilgisayarlara göre nasıl bir farklılık gösterir? Bir bilgisayar, en temel haliyle, hesaplamalar yapan bir makinedir. Birçok farklı tipte bilgisayar mimarisi bulunur. Günümüzde bilgisayarlarımız dijital elektronik materyallerden güç alarak bitler ve mantık kapıları kullanarak çalışmaktadır. Bir kuantum bilgisayarı, hesaplama yapmak için kuantum mekaniğinin ilkelerini simüle eder. Bitler ve mantık kapıları yerine, kuantum bilgisayarlar kübit (qubit) ve kuantum kapılarını (quantum gates) kullanır.

Kuantum Programlama Nedir?

Kuantum programlama nedir‘ bunun üzerine konuşmadan önce, geçmiş programlama deneyiminizi bir köşede bırakıp temiz bir sayfa bir açmalısınız; çünkü kuantum programlama sadece mevcut programlarımızı daha hızlı çalıştırmanın bir yolu değildir. Kuantum programlama mantığı ve yaklaşımı modern programlamadan farklıdır ve farklı paradigmalar üzerine kuruludur.

Kuantum programlama, bir kuantum bilgisayar üzerinde çalışabilen kuantum programları olarak adlandırılan komut dizilerini programlama işlemidir. Kuantum programlama dilleri ise, yüksek seviyeli yapılardan faydalanarak kuantum algoritmalarının ifade edilmesini sağlamaktadır.

Kuantum Programlamanın Gelişimi

Kuantum programlama üzerine ilk çalışmalar 2000’li yılların başında yapılmıştır. Ancak bu araştırmalar genellikle teorik çalışmalar ve basit programlama dilleri ile sınırlı olmuştur. Bu sınırlamaların nedeni daha kuantum bilişime yeterli ilginin olmamasıdır . Bizi kuantum bilgisayarlardan ayıran deneysel engeller o kadar fazlaydı ki, bu tür varsayımsal makinelerin programlanmasıyla ilgili sorular ilgisiz görünüyordu. Son yıllardaki büyük deneysel ilerlemelerle, son zamanlarda tasarlanan evrensel kuantum bilgisayarlar bu eğilimi tersine çevirmiştir.

Bu gelişmeler, bir ‘kuantum bilgisayar nasıl programlarız?’ sorusunu beraberinde getirmiştir. Bu soruyu doğru bir şekilde cevaplamak için, doğal ve iyi yapılandırılmış programlama dillerini tanımlamak için kuantum algoritmalarının oluşturulduğu temel işlemleri tanımlamamız gerekir. İdeal olarak, bir kuantum programlama dili sadece mevcut kuantum algoritmalarını uygulamamıza izin vermekle kalmayacak, aynı zamanda yenilerinin keşfedilmesini de kolaylaştırmalıdır. Diğer yandan derlenebilir olması için bir kuantum algoritması bir programlama dilinde uygulandığında, donanım üzerinde fiziksel olarak gerçekleştirilebilen bir dizi işleme dönüştürülmelidir. Bu derleme, bir kuantum bilgisayarı kullanarak elde etmeyi umduğumuz hesaplama avantajını sürdürecek şekilde yürütülmelidir. Kuantum avantajının oluşturulması için kuantum derleyiciler önem taşımaktadır.

Pratik kuantum hesaplamadaki son gelişmeler sadece kuantum programlamayla ilgili eski soruları canlandırmakla kalmayıp, aynı zamanda kuantum programlamanın cevaplamaya yardımcı olabileceği yeni soruları da gündeme getirmektedir. Gerçekten de, ufukta beliren birinci nesil kuantum bilgisayarlarla ne yapılacağını anlamak çok önemli olmuştur. Bu tür cihazlarla çözülebilecek hesaplama problemlerini tanımlamak için, kuantum algoritmalarının asimptotik bir anlayışından ziyade daha somut bir çözüme geçilmelidir. Ölçeklenebilir kuantum programlama dilleri ve verimli kuantum derleyicileri, kuantum algoritmalarının somut maliyetini anlama ve en aza indirme konusunda yardımcı olabilir.

Kuantum Programlama Nasıl Yapılır?

Kuantum programlama; IBM Quantum Experience, Microsoft Azure Quantum, DWave Leap Cloud üzerinden veya kuantum geliştirme kitleri (quantum development kit) aracılığıyla yapılabilir.

İşte kuantum programlama yapabileceğiniz birkaç seçenek:

  • Microsoft’un geliştirdiği Q# programlama dili (alternatif olarak Python ile de programlanabilir) ile programlanabilir Microsoft Kuantum Geliştirme Kiti (Quantum Development Kit) kullanımı,
  • Python programlama dili ile IBM’in açık kaynaklı Qiskit kütüphanesinin kullanımı,
  • D-Wave System’in kuantum bilgisayarlardaki zor problemleri çözmek için oluşturduğu araç seti olan açık kaynaklı Ocean kütüphanesinin Python ile kullanımı.

Kuantum Programlamanın Temelleri

Kübitleri Anlamak

Bir kübitin ne olduğu ile başlayalım:

Kübit veya kuantum bit, birim uzunluğu olan iki karmaşık sayının bir vektörü olarak tanımlanır. Bir kuantum-bilgi birimidir. İki duruma sahiptir: dikey polarizasyon ve yatay polarizasyon.

Kübitlerin neden bu şekilde olduğunu ve gerçekten ne anlama geldiğini inceleyelim. Kübitler, klasik bitlerden oldukça farklıdır. Yeni başlayanlar için, bir bit ya 0 ya da 1’dir. Burada hiçbir olasılık yoktur, ya 0 olarak bilinir ya da 1 olarak bilinir. Tersine, doğal olarak olasılıksaldır, yani iki özdeş kübit farklı değerlere sahip olabilir. Bu, kuantum hesaplamanın doğasında olasılıklı olduğu anlamına gelir.

Klasik bitlerle, bitin durumunu etkilemeden biti istediğimiz kadar okuyabiliriz. Ancak, kübitler bir kez ölçüldüğünde, çözülür (kuantum özelliklerini kaybeder) ve ölçülebilir iki durumdan birine (dolayısıyla “kübit” içindeki “bit”) daraltır. Dolayısıyla bir kübiti ‘ölçemeyiz’; ölçüldüğünde, kuantum doğası yok edilir ve geri kazanılamaz.

Bir kübitin iki sayı kullanarak ölçülme olasılığını nicelendirisek: | 𝛼 |², kübitin 0 olarak ölçülme olasılığı ve | 𝛽 |², kübitin 1 olarak ölçülme olasılığı olarak ifade edilir. Her ne kadar | 𝛼 |² ve | 𝛽 |², kübitin ölçülme olasılığını yansıtsa da, bir kübitin iç durumunu iki ‘olasılık genliği’, 𝛼 ve 𝛽 olarak düşünürüz. Bunlar, 0 ile 1 arasında bir üst üste binme (üst üste binme doğrusal bir birleşimdir) ile tanımlanan ve ölçülemeyen karmaşık sayılardır.

Başka bir deyişle, bir kübiti birim uzunluktaki iki karmaşık sayının bir vektörü olarak düşünürüz (vektörün uzunluğu 1’e eşittir). Bunu aşağıdaki resimde gösterildiği gibi matematik olarak kısaca ifade edebiliriz (𝛼 ve 𝛽 içeren vektör kübittir; 𝛼 ve 𝛽 üzerindeki çubuk karmaşık konjugatı gösterir):

Özetlemek gerekirse, kübitin 0 olarak ölçülme olasılığı 𝛼, | 𝛼 |² ‘nin büyüklüğüne eşittir. Kübitin 1 olarak ölçülme olasılığı 𝛽, | 𝛽 |² ‘nin kare büyüklüğüne eşittir. Bir kübitin durumu, 𝛼 ve 𝛽 ölçülemez. Sadece bir kübitin içine çöktüğü değer ölçülebilir.

Kübit Notasyonu (Tanımlaması)

Bra-ket notasyonu olarak da bilinen Dirac notasyonunu kullanarak kübitler belirtilebilir. Bu gösterim vektör yazmak için uygun bir yoldur.

⟨ : Sıra vektörlerin temsil eder ve ⟨∣ ile gösterilir; ket sütun vektörlerini temsil eder ve ∣⟩ ile gösterilir.

Örneğin, bir kübitin ‘0’ ve ‘1’ durumlarını Bra-ket notasyonuna aşağıdaki gibi yazabiliriz:

Kubitler ya saf halde ya da karışık halde olabilir. Bir kübitin durumu doğrusal (lineer) bir ∣0⟩ ve ∣1 doğrusal (lineer) kombinasyonu kullanılarak tam olarak tanımlanabilirse, bunun saf bir durumda olduğunu söyleriz. Saf hal kübitlerini genellikle aşağıdaki gösterimi kullanarak gösteririz:

Bu notasyondan yola çıkarak aşağıdaki gibi saf hal kübitler tanımlanabilir:

Peki ya tek bir kübit durumlarımızı arttırıp, tanımlarsak ne elde ederiz? Çoklu kübitlerin birleşik durumu olan çoklu halde kübitleri tensörler ile tanımlayabiliriz.

⊗ işleminin sembolüdür.

Kuantum Mantık Kapıları

Kuantum hesaplamada ve özellikle kuantum devre hesaplama modelinde, bir kuantum mantık kapısı (veya basitçe kuantum kapısı) az sayıda kubit üzerinde çalışan temel bir kuantum devresidir. Klasik mantık kapıları geleneksel dijital devreler için olduğu gibi kuantum devrelerinin yapı taşlarıdır.

Birçok klasik mantık kapısının aksine, kuantum mantık kapıları tersine çevrilebilir. Bununla birlikte, sadece tersinir kapılar kullanarak klasik bilgi işlem yapmak mümkündür. Örneğin, tersinir Toffoli kapısı, çoğu zaman ancilla bitleri kullanmak zorunda kalacak şekilde tüm Boolean fonksiyonlarını uygulayabilir. Toffoli kapısı doğrudan kuantum eşdeğerine sahiptir ve kuantum devrelerinin klasik devreler tarafından gerçekleştirilen tüm işlemleri gerçekleştirebileceğini gösterir.

Tanımlamalardan kısa bir özet çıkartacak olursak: kuantum programlamayı kuran temel bileşenler kübitler, kuantum mantık kapıları ve kuantum devreler olarak söylenebilir.

Kaynakça

  1. Peter Selinger. Towards a Quantum Programming Language. Mathematical Structures in Computer Science, 14(4):527–586, August 2004. 10.1017/​S0960129504004256.
    https:/​/​doi.org/​10.1017/​S0960129504004256
  2. Dave Wecker and Krysta Svore. LIQUi|⟩: A Software Design Architecture and Domain-Specific Language for Quantum Computing. 2014. arXiv:1402.4467.
    arXiv:1402.4467
Bu içeriği paylaş
QTurkey
QTurkey, Türkiye’deki kuantum teknolojileriyle ilgili faaliyetler için bir iletişim ve işbirliği ağıdır. “Kuantum Programlamaya Giriş” çalıştayları düzenliyor, ilgili konulardaki ilgili öğrenciler için çalışma grupları ve toplantılar organize ediyoruz ve ülke düzeyinde kuantum meraklıları için bir buluşma alanı oluşturabilme amacıyla hareket ediyoruz.

Bunları da beğenebilirsiniz

Yorum Yap

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir