Aracılığıyla paylaş


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, 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

Q# dosyası oluşturun

  1. Visual Studio Code'u açın.
  2. Dosya>Yeni Metin Dosyası'nı seçin.
  3. Dosyayı Main.qs olarak 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 Microsoft.Quantum.Diagnostics kitaplığını açın. Bu, DumpMachine() dahil olmak üzere daha sonra dolanık durumu görüntülemek için kullandığınız 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 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 uygulayarak bir kubiti süperpozisyona koyarsınız.

        // 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, q1 durumu $\ket{1}$ olduğunda CNOT ile q2 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. DumpMachine işlemini, Microsoft.Quantum.Diagnostics kütüphanesinin bir parçası olarak kullanarak Q# programınızın geçerli durumunu çıktısını alabilirsiniz.

        // 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 programının sonunda, yayımlanmadan önce, kubitlerin durumunda olması gerekir. Bu işlemi 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.

Visual Studio Code'da 'H' işleminin üzerine geldiğinizde görüntülenen ayrıntıların ekran görüntüsü.

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 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'ıMainveya Ctrl+F5 tuşlarına basın

Q# Visual Studio Code'da 'Çalıştır' komutunun nerede bulunacağı gösteren dosyanın ekran görüntüsü.

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.