Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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, bir kubiti $\ket{0}$ durumunda ölçerseniz, diğer kubitin de $\ket{0}$ durumunda olduğunu, ölçüm yapmadan bilirsiniz. Daha fazla bilgi için bkz . Kuantum dolanıklığı.
Bu hızlı başlangıçta yapacağınız:
- Bir Q# dosyası oluşturun.
- Bir kubit çifti ayırın.
- Kubitleri dolaştırın.
Önkoşullar
- Visual Studio Code'un en son sürümü.
- Microsoft Quantum Geliştirme Seti (QDK) uzantısı. Yükleme ayrıntıları için bkz. Microsoft Quantum Geliştirme Seti'ni ayarlama.
Q# dosyası oluşturun
- Visual Studio Code'u açın.
- Dosya>Yeni Metin Dosyası'nı seçin.
- Dosyayı
Main.qsolarak kaydedin. .qs uzantısı bir Q# programı belirtir.
Kodunuzu Q# yazın.
Dosyanızda Main.qs ikili kuantum biti dolanık hale getirmek 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, import kullanarak Std.Diagnostics kitaplığını açın. Bu, kitaplığın tüm işlevlerine ve operasyonlarına, dolanık durumu görüntülemek için daha sonra kullanacağınız DumpMachine dahil olmak üzere, erişmenizi sağlar.
import Std.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 hiçbir parametre almaz ve Result ya da Zero değerlerini döndüren One, qubit ölçümlerinin sonuçlarını temsil eder.
operation Main() : (Result, Result) {
// Your entanglement code goes here.
}
İki kubit ayır
İşlem Main şu anda boş olduğuna göre, sonraki adım iki kubit q1 ve q2 ayırmaktır.
Q# içinde, kubitleri use anahtar sözcüğünü kullanarak atarsınız.
// Allocate two qubits, q1 and q2, in the 0 state.
use (q1, q2) = (Qubit(), Qubit());
Not
Q# içinde, kubitler her zaman $\ket{0}$ durumunda ayrılır.
Bir kubiti süper pozisyona yerleştirme
Kubitler q1 ve q2, $\ket{0}$ durumundadır. Kubitleri dolanıklığa hazırlamak için, bunlardan birini $\ket{0}$ veya $\ket{1}$ olarak ölçülme olasılığının %50 olduğu eşit bir süperpozisyona yerleştirmeniz gerekir.
Hadamard işlemini
// Put q1 into an even superposition.
H(q1);
Sonuç durumu q1, $\frac{{1}{\sqrt{2}}(\ket{{0}+\ket{1})$'dır, bu da $\ket{0}$ ve $\ket{{1}$'nin eşit bir süperpozisyonudur.
Kubitleri dolandırın
Artık controlled-NOT, CNOT, işlemini kullanarak kubitleri dolandırabilirsiniz.
CNOT iki kubit alan ve bunlardan birinin denetim, diğerinin ise hedef olarak görev yaptığı bir kontrol işlemidir.
Bu hızlı başlangıçta, q1 denetim kubiti olarak ve q2 hedef kubit olarak ayarlarsınız. Bu durum, CNOT durumu q2 olduğunda q1 ile $\ket{1}$ durumunu tersine çevirir.
// 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. Kütüphanenin parçası olan DumpMachine işlemini kullanarak Std.Diagnostics programınızın geçerli durumunu çıkarın:
// Show the entangled state of the qubits.
DumpMachine();
Kubitleri ölçme
Kubitlerin dolanık olduğunu doğruladığınıza göre, M işlemini kullanarak bunları ölçebilirsiniz.
q1 ve q2 ölçümü, kuantum durumlarını eş olasılıkla Zero veya One haline daraltır.
Q# içinde, yeni bir değişken bildirmek için let anahtar sözcüğünü kullanırsınız.
q1 ve q2 ölçüm sonuçlarını depolamak için sırasıyla m1 ve m2 değişkenlerini 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 Reset kullanarak 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, Main işlemini tamamlamak ve dolanık durumu gözlemlemek için, m1 ve m2 ölçüm sonuçlarını döndürün.
// 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! Q# İki kubiti dolanık hale getiren ve bir Bell çifti oluşturan program yazdınız.
Son Q# programınız şu şekilde görünmelidir:
import Std.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'ıveya Ctrl+F5 tuşlarına basın Main
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 Zerohata 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
Kuantum dolanıklığı hakkında daha fazla bilgi edinmek için Q# ile Q# ile kuantum dolanıklığını keşfetme öğreticisine bakın. Bu eğitim, bu hızlı başlangıçta ele alınan kavramları genişletir ve daha karmaşık bir dolanıklık programı yazmanıza yardımcı olur.