Quantum Computation Language

QCL (Quantum Computation Language) Nedir?

QCL (Kuantum Hesaplama Dili),  kuantum bilgisayarlar için mimariden bağımsız yüksek seviyeli bir programlama dilidir. Kuantum algoritmalarının eksiksiz uygulanmasını ve simülasyonunu sağlar[1].

 

 

 Şekil 1. QCL’nin Hibrit Mimarisi [2].

QCL dili C++ ile yazılmış yorumlayıcı program üzerinden kullanılabilmektedir. Kuantum arkaplanını taklit etmek için sayısal simülasyon kütüphanesini (libqc) kullanmaktadır. Bu program açık kaynak olarak geliştirilmiştir ve http://tph.tuwien.ac.at/~oemer/qcl.html adresinden temin edinilebilir. En son sürümü 0.6.4 versiyon numarasıyla 2014 yılında yayınlanmıştır.


Yorumlayıcının Çalıştırılması (Windows İçin):

Dil Linux’a uyumlu çıkarıldığı için Windows’da çalışması bazı özel ayarların yapılması gerekmektedir. Bunun için öncelikle Cygwin aracının indirilmesi (https://cygwin.com) ve kurulum sırasında da aşağıda belirtilen paketlerin seçilip indirilmesi gerekmektedir[3].

Yükleme esnasında seçilip indirilmesi istenen paketler:

Devel altındaki..

  • bison
  • flex
  • gcc-g++
  • libreadline-devel
  • make

Graphics altındaki..

  • libplotter-devel

Libs altındaki..

  • libncurses-devel
  • libX11-devel
  • libXt-devel

 

Web altındaki..

  • wget

İndirme ve yükleme işlemi tamamlandıktan sonra Cygwin programı yönetici modda açılıp, aşağıda belirtilen komutlar çalıştırılır. (Bu komutlar o andaki mevcut QCL sürümlerine göre değişiklik gösterebilir.) Aşağıdaki komutlar,  QCL kaynak kodları bilgisayara indirir ve sıkıştırılmış halde olan dosyayı indirildiği dizine çıkarır.

$ wget http://tph.tuwien.ac.at/~oemer/tgz/qcl-0.6.4.tgz
$ tar xvzf qcl-0.6.4.tgz

 

Daha sonra  indirilen QCL kaynak kodu aşağıdaki komutlar kullanılarak derlenir.

$ cd qcl-0.6.4
$ make

 

QCL yorumlayıcısını/simülatörünü çalıştırmak içinde aşağıdaki komut kullanılır.

$ ./qcl

 

QCL çalıştığında komut satırında aşağıdakine benzer bir çıktının elde edileceği görülecektir.

QCL Quantum Computation Language (64 qubits, seed 1494298832)
[0/64] 1 |0>
qcl>

 

QCL ‘deki Bazı Önemli Noktalar

  • Veri Tipleri ve Değişkenler

Tablo 1: Klasik veri tipleri

Örnek: Bir değişkenin tanımlanması.

qcl> int a; //degiskenin tanimlanmasi
qcl> a=17; //degiskene deger atanmasi
qcl> print a; //degiskenin ekrana basilmasi

 

  • Operatörler

Tablo 2: QCL operatörler

  • Fonksiyonlar

Tablo 3: QCL Aritmatik fonksiyonlar

Örnek: Bir sayının logaritmasının hesaplanması ( log2 32 = 5 )

qcl> print log(32,2);
: 5

 

  • Diğer Fonksiyonlar

Tablo 4: QCL diğer fonksiyonlar

  • Girdi (Input)

Konsoldan girdi değerleri “input” komutuyla alınır.

Örnek:

qcl> int sayi;
qcl> input "Bir sayi giriniz : ",sayi;
? Bir sayi giriniz : 35

 

  • Çıktı (Output)

Çıktılar ekrana “print” komutuyla basılır. Virgülle ayrılmış ifade veya değişkenlerin listesini konsol ekranına yazdırır.

Örnek:

qcl> int i=3; real x=pi; complex z=(0,1); boolean b;
qcl> print i,x,z,b;
: 3 3.14159 (0,1) false

 

  • Koşullu İfadeler (If - else)

Koşullu ifadeler klasik programlama dillerinde olduğu gibi “if - else” komutlarıyla gerçekleştirilir.

Örnek:

qcl> int a=1; int b=2;
if (a==b) {print "a esittir b ye.";} else {print "a esit degildir b ye.";}
: a esit degildir b ye.

 

  • Döngüler

Döngüler “for” komutuyla oluşturulur. For içerisinde integer bir sayaç tanımlanır ve bu sayaç süresince ilgili bloğun tekrar tekrar çalıştırılması sağlanır.

Örnek:

qcl> int i;
qcl> for i=10 to 0 step -2 {print "sayi : ",i;}
: sayi : 10
: sayi : 8
: sayi : 6
: sayi : 4
: sayi : 2
: sayi : 0

 

  • Koşullu Döngüler

Döngüler koşul sağlandığı müddetçe devam ettirilir. Bu durum “until” veya “while” komutuyla sağlanır. “until” de önce ilgili blok çalıştırılır sonra koşul kontrol ettirilir, “while” da ise önce koşul kontrol edilir sonra blok çalıştırılır.

Örnek:

qcl> {print "i degeri : ",i," oldu."; i=i-1;}until i==0;
: i degeri : 5 oldu.
: i degeri : 4 oldu.
: i degeri : 3 oldu.
: i degeri : 2 oldu.
: i degeri : 1 oldu.

veya

while i>0 {print "i degeri : ",i," oldu."; i=i-1;};
: i degeri : 5 oldu.
: i degeri : 4 oldu.
: i degeri : 3 oldu.
: i degeri : 2 oldu.
: i degeri : 1 oldu.

 


 

Kuantum Depolama ve Kayıtçılar (Registers)

Kuantum bilgisayarlarda olduğu gibi QCL’de de en küçük depolama birimi qubit’tir. QCL’de qubit formatında değişken tanımlanması klasik programlamadaki pointer’lar gibi bellekten alan tahsisiyle gerçekleştirilmektedir. Simülasyon ortamı olarak 32 veya 64 qubitlik alan tahsisi etmemize imkan sağlamaktadır. Bu değişken tanımı ve alan tahsisi işlemi için “qureg” komutu kullanılmaktadır. “dump” komutu ise değişkenimizin bra-ket notasyonunda ekrana basılmasını sağlar.

Şekil 2. Bloch küresi üzerinde bir qubit'in durumu

Örnek:

qcl> qureg x[1]; // 1 qubitlik x isminde alan ayir
qcl> dump; // x degiskenini braket notasyonunda ekrana bas.
: STATE: 1 / 64 qubits allocated, 63 / 64 qubits free
1 |0>

 

 


 

Kapılar

Kuantum bilgisayarlar kapılar tersinebilir (reversible) özelliklidir. Yani bir girdi için aldığımız sonuca, aynı işlemi uyguladığımızda başlangıçtaki girdi değerini elde edebilir. Örneğin, ket 0 ifadesine bir Not kapısı uyguladık diyelim; Not (|0>) = |1> elde ederiz. Daha sonra elde ettiğimiz sonuç olan ket 1’e tekra Not kapısı uygularsak Not(|1>) = |0> ket 0’ı yani başlangıçtaki durumu elde etmiş oluruz.

Bazı önemli kapılar

  • Pauli Kapıları:

X, Y ve Z Pauli kapıları, Bloch küresinde(Şekil 2) sırasıyla x,y ve z eksenleri etrafında döndürmelere karşılık gelmektedir. Matrissel gösterim şekilleri aşağıdaki gibidir.

Şekil 3. Pauli Kapılarının matrissel gösterimi

Örnek:

qcl> qureg a[1];
qcl> dump;
: STATE: 1 / 64 qubits allocated, 63 / 64 qubits free
1 |0>
qcl> Not(a);
[1/64] 1 |1>

Tersinebilir (reversible) özelliği

qcl> Not(a);
[1/64] 1 |0>

 

  • Hadamard Kapısı:

Bu kapı qubitleri süperpozisyon durumuna getirmektedir. Aşağıda gösterildiği gibi H matrisi ile ifade edilmektedir.

Şekil 4. Hadamard kapısının matrissel ifadesi

Şekil 5. Hadamard kapısının Ket 0 ve Ket 1'e etkisi

Örnek:

qcl> qureg a[1]; // 1 qubitlik degisken tanimla
qcl> dump; // bra-ket notasyonunda goster
: STATE: 1 / 64 qubits allocated, 63 / 64 qubits free
1 |0>
qcl> H(a); // a degiskenine Hadamard uygula
[1/64] 0.70711 |0> + 0.70711 |1>

 


 

Mevcut Kütüphane ve Algoritmaların Çalıştırılması

QCL ile birlikte birkaç tane kütüphane ve hazır yazılmış algoritmalar gelmektedir. Bu kütüphaneler QCL'nin bulunduğu dizinde lib klasörü altında bulunmaktadır (Benim bilgisayarımda bulunduğu yer C:qcllib). Buradaki kütüphaneleri kodumuza dahil edip kullanabilmek için aşağıdaki komutları uygulamamız gerekmektedir.

Örnek: Mevcut Grover arama algoritmasının çalıştırılması.

omer@OMR ~
$ cd qcl-0.6.4 //qcl nin bulundugu dizine git

omer@OMR ~/qcl-0.6.4
$ ./qcl //qcl yi calistir
QCL Quantum Computation Language (64 qubits, seed 1494971969)
[0/64] 1 |0>
qcl> include "grover.qcl"; //grover isimli kutuphaneyi dahil et
qcl> grover(50); //grover kutuphanesinde bulunan grover() fonk. calistir
: 6 qubits, using 4 iterations
: measured 50

 


 

Kaynakça:

  • [1] Bernhard Omer. Mar 27 2014. http://tph.tuwien.ac.at/~oemer/qcl.html
  • [2] Bernhard Omer. Jan 20 2000. Quantum Programming in QCL
  • [3] Brian Pursley. Dec 20 2015. https://blog.cinlogic.com/2015/12/20/running-qcl-quantum-computationlanguage-on-windows/

You might also enjou