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

Dosya oluşturma Q#

  1. Visual Studio Code'u açın.
  2. Dosya>Yeni Metin Dosyası'na tıklayın.
  3. 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.

Mainparametre almaz ve kubit ölçümlerinin Zero sonuçlarını temsil eden veya Oneiki 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 q2olmak ü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 m2değ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.

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! İ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

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

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.