Hızlı Başlangıç: İlk Q# programınızı oluşturma
Kuantum bilişiminin önemli bir kavramı olan dolanıklığı gösteren temel Q# bir program yazmayı öğrenin.
İki veya daha fazla kubit dolanık olduğunda kuantum bilgilerini paylaşırlar; bu da bir kubite ne olursa olsun diğerinin de olduğu anlamına gelir. Bu hızlı başlangıçta Bell çifti olarak adlandırılan iki kubitli dolanık bir durum oluşturacaksınız. Bell çiftinde, durumdaki bir kubiti $\ket{0}$ ölçerseniz, diğer kubitin de $\ket{0}$ ölçüm yapmadan durumunda olduğunu bilirsiniz. Daha fazla bilgi için bkz . Kuantum dolanıklığı.
Bu hızlı başlangıçta:
- Bir Q# dosyası oluşturun.
- Bir kubit çifti ayırın.
- Kubitleri dolandırın.
Önkoşullar
- Visual Studio Code'un en son sürümü.
- Azure Quantum Geliştirme Seti (QDK) uzantısı. Yükleme ayrıntıları için bkz . Quantum Development Kit'i ayarlama.
Dosya oluşturma Q#
- Visual Studio Code'u açın.
- Dosya>Yeni Metin Dosyası'na tıklayın.
- Dosyayı
Main.qs
olarak kaydedin. .qs uzantısı bir Q# programı belirtir.
Kodunuzu Q# yazma
Dosyanızda Main.qs
, bir kubit çiftini dolanık yapmak ve ölçmek için bu adımları izleyin.
Kuantum kitaplığını içeri aktarma
QDK, kuantum programlarınız için önceden tanımlanmış işlevler ve işlemler içeren standart kitaplığı içerir Q# . Bunları kullanmak için önce ilgili kitaplığı içeri aktarmanız gerekir.
Programınızda, kitaplığı açmak Microsoft.Quantum.Diagnostics
için bir import
deyimi kullanın. Bu, daha sonra dolanık durumu görüntülemek için kullandığınız dahil olmak üzere DumpMachine()
tüm işlevlerine ve işlemlerine erişmenizi sağlar.
import Microsoft.Quantum.Diagnostics.*;
İşlem tanımlama
İlgili kitaplıkları içeri aktardıktan sonra kuantum işleminizi ve onun giriş ve çıkış değerlerini tanımlayın. Bu hızlı başlangıç için işleminiz şeklindedir Main
. İki kubit ayırmak, işlemek ve ölçmek için kalan Q# kodu burada yazacaksınız.
Main
parametre almaz ve kubit ölçümlerinin Zero
sonuçlarını temsil eden veya One
iki değer döndürürResult
:
operation Main() : (Result, Result) {
// Your entanglement code goes here.
}
İki kubit ayırma
İşlem Main
şu anda boş olduğundan, sonraki adım ve q2
olmak üzere iki kubit q1
ayırmaktır. içinde Q#, kubitleri anahtar sözcüğünü use
kullanarak ayırırsınız:
// Allocate two qubits, q1 and q2, in the 0 state.
use (q1, q2) = (Qubit(), Qubit());
Not
içinde Q#kubitler her zaman durumunda $\ket{0}$ ayrılır.
Bir kubiti süper pozisyona yerleştirme
kubitler q1
ve q2
durumundadır $\ket{0}$ . Kubitleri dolanıklığa hazırlamak için, bunlardan birini veya olarak $\ket{0}$ $\ket{1}$ölçülme olasılığının %50 olduğu eşit bir süper pozisyona yerleştirmeniz gerekir.
Hadamard, H
, işlemini uygulayarak bir kubiti süper pozisyona koyarsınız:
// Put q1 into an even superposition.
H(q1);
Sonuç durumu q1
(\ket{{0}+\ket{1})$'dır{1}{\sqrt{2}}$\frac{ ve 'nin $\ket{0}$ $\ket{{1}$eşit bir süper konumudur.
Kubitleri dolandırın
Artık controlled-NOT, CNOT
, işlemini kullanarak kubitleri dolandırabilirsiniz. CNOT
biri denetim, diğeri de hedef olarak davranan iki kubit alan bir denetim işlemidir.
Bu hızlı başlangıçta, denetim kubiti olarak ve q2
hedef kubit olarak ayarlanırq1
. Bu, durumunun q2
ne zaman q1
olduğunu $\ket{1}$çevirir anlamına gelirCNOT
.
// Entangle q1 and q2, making q2 depend on q1.
CNOT(q1, q2);
Her iki kubitin de sonuç durumu Bell çiftidir $\frac{{1}{\sqrt{2}}(\ket{00}+\ket{{11})$.
İpucu
Hadamard ve CNOT işlemlerinin kubitlerin durumunu nasıl dönüştürdüğünü öğrenmek istiyorsanız bkz . Kuantum işlemleriyle dolanıklık oluşturma.
Dolanık durumu görüntüleme
Kubitleri ölçmeden önce, önceki kodunuzun bunları başarıyla dolandırdığını doğrulamanız önemlidir. Kitaplığın DumpMachine
parçası Microsoft.Quantum.Diagnostics
olan işlemi kullanarak programınızın Q# geçerli durumunun çıkışını alabilirsiniz:
// Show the entangled state of the qubits.
DumpMachine();
Kubitleri ölçme
Kubitlerin dolanık olduğunu doğruladığınıza göre, işlemi kullanarak bunları ölçebilirsiniz M
. Kuantum durumlarını Zero
ölçüp q2
q1
daraltarak veya One
olasılıkla daraltır.
içinde Q#, yeni bir değişken bildirmek için anahtar sözcüğünü let
kullanırsınız. ve q2
ölçüm sonuçlarını q1
depolamak için sırasıyla ve m2
değişkenlerini m1
bildirin:
// Measure q1 and q2 and store the results in m1 and m2.
let (m1, m2) = (M(q1), M(q2));
Kubitleri sıfırlama
Her Q# programın sonunda yayımlanmadan önce kubitlerin durumunda olması $\ket{0}$ gerekir. Bunu işlemi kullanarak Reset
yaparsınız:
// Reset q1 and q2 to the 0 state.
Reset(q1);
Reset(q2);
Ölçüm sonuçlarını döndürme
Son olarak, işlemi tamamlamak Main
ve dolanık durumu gözlemlemek için ve m2
ölçüm sonuçlarını m1
döndürebilirsiniz:
// Return the measurement results.
return (m1, m2);
İpucu
bir Q# işlev veya işlem hakkında daha fazla bilgi edinmek istiyorsanız üzerine gelin.
Kodunuzu Q# çalıştırma
Tebrikler! İki kubiti dolandıran ve bir Çan çifti oluşturan bir program yazdınız Q# .
Son Q# programınız şu şekilde görünmelidir:
import Microsoft.Quantum.Diagnostics.*;
operation Main() : (Result, Result) {
// Allocate two qubits, q1 and q2, in the 0 state.
use (q1, q2) = (Qubit(), Qubit());
// Put q1 into an even superposition.
// It now has a 50% chance of being measured as 0 or 1.
H(q1);
// Entangle q1 and q2, making q2 depend on q1.
CNOT(q1, q2);
// Show the entangled state of the qubits.
DumpMachine();
// Measure q1 and q2 and store the results in m1 and m2.
let (m1, m2) = (M(q1), M(q2));
// Reset q1 and q2 to the 0 state.
Reset(q1);
Reset(q2);
// Return the measurement results.
return (m1, m2);
}
Programınızı çalıştırmak ve her iki kubitin sonucunu görüntülemek için işlemin üzerinde Çalıştır'ı Main
seçin veya Ctrl+F5 tuşlarına basın
Programı birkaç kez çalıştırabilirsiniz ve her birinin hata ayıklama konsolunda farklı bir sonucu vardır. Bu, kuantum ölçümlerinin olasılıksal doğasını ve kubitlerin dolanıklığını gösterir.
Örneğin, sonuç ise Zero
hata ayıklama konsolunuz şu şekilde görünmelidir:
DumpMachine:
Basis | Amplitude | Probability | Phase
-----------------------------------------------
|00⟩ | 0.7071+0.0000𝑖 | 50.0000% | 0.0000
|11⟩ | 0.7071+0.0000𝑖 | 50.0000% | 0.0000
Result: "(Zero, Zero)"
Sonraki adım
ile Q#kuantum dolanıklığı hakkında daha fazla bilgi edinmek için bkz . Öğretici: ile Q#kuantum dolanıklığı keşfetme. Bu öğretici, bu hızlı başlangıçta ele alınan kavramları genişletir ve daha gelişmiş bir dolanıklık programı yazmanıza yardımcı olur.