프로그램 실행

다음 예제에서는 프로그램이 구현되는 방법을 Q# 처음으로 엿볼 수 있습니다.

/// # Sample
/// Bell States
///
/// # Description
/// Bell states or EPR pairs are specific quantum states of two qubits
/// that represent the simplest (and maximal) examples of quantum entanglement.
///
/// This Q# program implements the four different Bell states.

namespace Sample {
    open Microsoft.Quantum.Diagnostics;
    open Microsoft.Quantum.Measurement;

    @EntryPoint()
    operation BellStates() : (Result, Result)[] {
        // Allocate the two qubits that will be used to create a Bell state.
        use register = Qubit[2];

        // This array contains a label and a preparation operation for each one
        // of the four Bell states.
        let bellStateTuples = [
            ("|Φ+〉", PreparePhiPlus),
            ("|Φ-〉", PreparePhiMinus),
            ("|Ψ+〉", PreparePsiPlus),
            ("|Ψ-〉", PreparePsiMinus)
        ];

        // Prepare all Bell states, show them using the `DumpMachine` operation
        // and measure the Bell state qubits.
        mutable measurements = [];
        for (label, prepare) in bellStateTuples {
            prepare(register);
            Message($"Bell state {label}:");
            DumpMachine();
            set measurements += [(MResetZ(register[0]), MResetZ(register[1]))];
        }
        return measurements;
    }

    operation PreparePhiPlus(register : Qubit[]) : Unit {
        ResetAll(register);             // |00〉
        H(register[0]);                 // |+0〉
        CNOT(register[0], register[1]); // 1/sqrt(2)(|00〉 + |11〉)
    }

    operation PreparePhiMinus(register : Qubit[]) : Unit {
        ResetAll(register);             // |00〉
        H(register[0]);                 // |+0〉
        Z(register[0]);                 // |-0〉
        CNOT(register[0], register[1]); // 1/sqrt(2)(|00〉 - |11〉)
    }

    operation PreparePsiPlus(register : Qubit[]) : Unit {
        ResetAll(register);             // |00〉
        H(register[0]);                 // |+0〉
        X(register[1]);                 // |+1〉
        CNOT(register[0], register[1]); // 1/sqrt(2)(|01〉 + |10〉)
    }

    operation PreparePsiMinus(register : Qubit[]) : Unit {
        ResetAll(register);             // |00〉
        H(register[0]);                 // |+0〉
        Z(register[0]);                 // |-0〉
        X(register[1]);                 // |-1〉
        CNOT(register[0], register[1]); // 1/sqrt(2)(|01〉 - |10〉)
    }
}

이 프로그램은 4가지 기본 벨 상태의 양자 얽힘을 구현하며 Azure Quantum Visual Code 확장이 포함된 샘플 프로그램 중 하나입니다.

VS Code QDK 확장의 기본 제공 시뮬레이터에서 프로그램을 실행하고 표준 출력을 가져올 수 있습니다.

Message: Bell state |Φ+〉:

DumpMachine:

 Basis | Amplitude      | Probability | Phase
 -----------------------------------------------
  |00⟩ |  0.7071+0.0000𝑖 |    50.0000% |   0.0000
  |11⟩ |  0.7071+0.0000𝑖 |    50.0000% |   0.0000

Message: Bell state |Φ-〉:

DumpMachine:

 Basis | Amplitude      | Probability | Phase
 -----------------------------------------------
  |00⟩ |  0.7071+0.0000𝑖 |    50.0000% |   0.0000
  |11⟩ | −0.7071+0.0000𝑖 |    50.0000% |  -3.1416

Message: Bell state |Ψ+〉:

DumpMachine:

 Basis | Amplitude      | Probability | Phase
 -----------------------------------------------
  |01⟩ |  0.7071+0.0000𝑖 |    50.0000% |   0.0000
  |10⟩ |  0.7071+0.0000𝑖 |    50.0000% |   0.0000

Message: Bell state |Ψ-〉:

DumpMachine:

 Basis | Amplitude      | Probability | Phase
 -----------------------------------------------
  |01⟩ |  0.7071+0.0000𝑖 |    50.0000% |   0.0000
  |10⟩ | −0.7071+0.0000𝑖 |    50.0000% |  -3.1416

Result: "[(One, One), (Zero, Zero), (One, Zero), (Zero, One)]"
Finished shot 1 of 1

Q# simulation completed.

또는 히스토그램 출력을 사용하여 시뮬레이터를 실행합니다.

히스토그램으로 된 양자 프로그램의 출력입니다.

양자 하드웨어에서 프로그램을 실행하려면 먼저 프로그램을 컴파일하고 Azure Quantum에 제출해야 하며, 이 모든 작업은 VS Code 내부에서 수행할 수 있습니다. 전체 엔드 투 엔드 프로세스는 프로그램 시작 Q# 및 Visual Studio Code 참조하세요.