다음을 통해 공유


빠른 시작: 첫 번째 Q# 프로그램 만들기

양자 컴퓨팅의 핵심 개념인 얽힘을 보여 주는 기본 Q# 프로그램을 작성하는 방법을 알아봅니다.

둘 이상의 큐비트가 얽히면 양자 정보를 공유합니다. 즉, 한 큐비트에 어떤 일이 일어나든 다른 큐비트에도 발생합니다. 이 빠른 시작에서는 벨 쌍이라는 특정 2큐비트 얽힌 상태를 만듭니다. Bell 쌍에서 상태에서 하나의 큐비트를 측정하면 다른 큐비 $\ket{0}$ 트도 $\ket{0}$ 측정하지 않고 상태에 있다는 것을 알 수 있습니다. 자세한 내용은 Quantum 얽힘을 참조 하세요.

이 빠른 시작에서 관련 정보는 다음과 같습니다.

  • Q# 파일을 만듭니다.
  • 큐비트 쌍을 할당합니다.
  • 큐비트를 얽습니다.

필수 조건

Q# 파일을 만듭니다

  1. Visual Studio Code를 엽니다.
  2. 새 텍스트 파일 파일을> 선택합니다.
  3. 파일을 Main.qs로 저장합니다. .qs 확장은 프로그램을 표시합니다 Q# .

Q# 코드 작성

Main.qs 파일에서 다음 단계에 따라 큐비트 쌍을 얽고 측정합니다.

양자 라이브러리 가져오기

QDK에는 양자 프로그램에 대한 미리 정의된 함수 및 연산이 포함된 표준 라이브러리가 포함되어 Q# 있습니다. 이를 사용하려면 먼저 관련 라이브러리를 가져와야 합니다.

프로그램에서 문을 사용하여 import 라이브러리를 Microsoft.Quantum.Diagnostics 엽니다. 이렇게 하면 나중에 얽힌 상태를 표시하는 데 사용하는 기능을 비롯한 DumpMachine()모든 함수 및 작업에 액세스할 수 있습니다.

    import Microsoft.Quantum.Diagnostics.*;

작업 정의

관련 라이브러리를 가져온 후 양자 작업과 해당 입력 및 출력 값을 정의합니다. 이 빠른 시작의 경우 작업은 다음과 같습니다 Main. 여기서는 두 개의 큐비트를 할당, 조작 및 측정하기 위해 나머지 Q# 코드를 작성합니다.

Main 는 매개 변수를 사용하지 않고 큐비트 측정 결과를 나타내는 두 Result 값 중 하나 Zero 또는 One두 값을 반환합니다.

    operation Main() : (Result, Result) {
        // Your entanglement code goes here.
}

두 개의 큐비트 할당

작업이 Main 현재 비어 있으므로 다음 단계는 두 개의 큐비트를 할당하는 q1 것입니다 q2. 에서 Q#키워드를 사용하여 큐비트를 할당합니다 use .

        // Allocate two qubits, q1 and q2, in the 0 state.
        use (q1, q2) = (Qubit(), Qubit());

참고 항목

에서 Q#큐비트는 항상 상태에서 할당됩니다 $\ket{0}$ .

하나의 큐비트를 중첩에 넣습니다.

큐비트 q1 이며 q2 상태에 있습니다 $\ket{0}$ . 얽힘을 위해 큐비트를 준비하려면 그 중 하나를 짝수 중첩에 넣어야 합니다. 여기서 50%의 확률로 $\ket{0}$ 측정되거나 $\ket{1}$측정될 가능성이 있습니다.

Hadamard, H연산을 적용하여 큐비트를 중첩에 넣습니다.

        // Put q1 into an even superposition.
        H(q1);

결과 상태는 q1{1}{\sqrt{2}}$\frac{짝수 중첩 $\ket{0}$ 인 ({0}\ket{+\ket{1})$입니다.$\ket{{1}$

큐비트 얽힘

이제 제어된 NOT, CNOT작업을 사용하여 큐비트를 얽을 준비가 되었습니다. CNOT 는 두 개의 큐비트를 사용하는 컨트롤 연산으로, 하나는 컨트롤 역할을 하고 다른 하나는 대상으로 사용합니다.

이 빠른 시작에서는 컨트롤 큐비트와 대상 큐비 q2 트로 설정합니다q1. 즉 CNOT , 상태가 .인 경우의 q2 q1 상태를 대칭 이동합니다 $\ket{1}$.

        // Entangle q1 and q2, making q2 depend on q1.
        CNOT(q1, q2);

두 큐비트의 결과 상태는 벨 쌍 $\frac{{1}{\sqrt{2}}(\ket{00}+\ket{{11})$입니다.

Hadamard 및 CNOT 연산이 큐비트의 상태를 변환하는 방법을 알아보려면 양자 연산을 사용하여 얽힘 만들기를 참조 하세요.

얽힌 상태 표시

큐비트를 측정하기 전에 이전 코드가 큐비트를 성공적으로 얽는지 확인하는 것이 중요합니다. 라이브러리의 DumpMachine Microsoft.Quantum.Diagnostics 일부인 작업을 사용하여 프로그램의 현재 상태를 출력할 수 있습니다 Q# .

        // Show the entangled state of the qubits.
        DumpMachine();

큐비트 측정

큐비트가 얽혀 있는지 확인했으므로 작업을 사용하여 M 측정할 수 있습니다. 양자 상태를 측정하고 q1 q2 짝수 확률로 Zero One 축소합니다.

에서 Q#키워드를 let 사용하여 새 변수를 선언합니다. 측정 결과를 q1 q2저장하고 변수를 각각 선언하려면 다음을 수행합니다m2m1.

        // Measure q1 and q2 and store the results in m1 and m2.
        let (m1, m2) = (M(q1), M(q2));

큐비트 다시 설정

각 Q# 프로그램의 끝에 릴리스되기 전에 큐비트가 상태에 있어야 $\ket{0}$ 합니다. 작업을 사용하여 이 작업을 수행합니다.Reset

        // Reset q1 and q2 to the 0 state.
        Reset(q1);
        Reset(q2);

측정 결과 반환

마지막으로 작업을 완료 Main 하고 얽힌 상태를 관찰하려면 다음의 m1 측정 결과를 반환합니다 m2.

        // Return the measurement results.
        return (m1, m2);

함수 또는 작업에 대해 자세히 알아보려면 마우스로 Q# 가리킵니다.

Visual Studio Code에서 'H' 작업을 마우스로 가리킬 때 나타나는 세부 정보의 스크린샷

Q# 코드 실행

축하합니다! 두 개의 큐비트를 묶고 벨 쌍을 만드는 프로그램을 작성 Q# 했습니다.

최종 Q# 프로그램은 다음과 같습니다.

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);
}

프로그램을 실행하고 두 큐비트의 결과를 보려면 작업 위에서 Main 실행을 선택하거나 Ctrl+F5를 누릅니다.

Q#'실행' 명령을 찾을 위치를 보여 주는 Visual Studio Code 파일의 스크린샷.

디버그 콘솔에서 각각 다른 결과를 가진 프로그램을 여러 번 실행할 수 있습니다. 이는 양자 측정의 확률적 특성과 큐비트의 얽힘을 보여줍니다.

예를 들어 결과가 있는 경우 디버그 콘솔은 Zero다음과 같이 표시됩니다.

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)"

다음 단계

을 사용하여 양자 얽힘Q#에 대해 자세히 알아보려면 자습서: 을 사용하여 양자 얽힘 Q#탐색을 참조하세요. 이 자습서에서는 이 빠른 시작에서 다루는 개념을 확장하고 고급 얽힘 프로그램을 작성하는 데 도움이 됩니다.