Q# 프로그램은 어떻게 구성되나요?

완료됨

양자 프로그램 작성을 시작하기 전에 Q# 프로그램의 구조와 구성 요소를 이해하는 것이 중요합니다.

이 단원에서는 Q# 프로그램의 주요 구성 요소를 검토합니다.

네임스페이스

모든 Q# 파일은 일반적으로 네임스페이스로 시작합니다. 예를 들면 다음과 같습니다.

namespace HelloQuantum {
    // Your code goes here.
}

namespace 키워드는 네임스페이스를 정의하는 데 사용됩니다. 네임스페이스는 Q# 코드를 논리적 단위로 구성하는 데 사용됩니다. 프로그램에서 Q# 라이브러리를 사용하고 사용자 고유의 라이브러리를 작성하는 경우에는 그 사용이 중요해집니다.

큐빗 할당

Q#에서 큐비트를 얻으려면 use 키워드를 사용합니다. use 키워드를 사용하여 할당하는 모든 큐비트는 $\ket{0}$ 상태에서 시작됩니다.

한 번에 하나 또는 여러 개의 큐빗을 할당할 수 있습니다. 다음은 1개와 5개의 큐비트를 할당하는 예제입니다.

use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits

양자 연산

작업은 Q# 프로그램의 기본 구성 요소입니다. Q# 작업은 양자 서브루틴입니다. 즉, 큐빗 레지스터의 상태를 수정하는 양자 작업을 포함하는 호출 가능 루틴입니다.

Q# 작업을 정의하려면 해당 입력 및 해당 출력과 함께 작업 이름을 지정합니다. 기본 예제는 다음과 같습니다.

operation SayHelloQ() : Unit {
    Message("Hello quantum world!");
}

여기에서 SayHelloQ가 작업의 이름입니다. 이 작업은 입력으로 0개의 인수를 사용하고 Unit 형식을 반환합니다. 즉, 정보를 반환하지 않습니다.

또한 Q# 라이브러리는 큐비트를 중첩 상태로 만드는 Hadamard, H, 작업과 같은 프로그램에서 사용할 수 있는 작업을 제공합니다.

유형

Q#에서는 Int, Double, Bool, String을 포함하여 이미 익숙할 수 있는 다양한 기본 제공 형식을 제공합니다.

이 예제에서 Unit 형식은 작업이 정보를 반환하지 않음을 나타내는 데 사용됩니다.

operation SayHelloQ() : Unit {
    Message("Hello quantum world!");
}

다음 단원에서는 양자 컴퓨팅과 관련된 형식인 Result 형식을 사용합니다. Result 형식은 큐비트를 측정한 결과이며 One 또는 Zero일 수 있습니다.

양자 라이브러리

Q# 라이브러리에는 양자 프로그램에서 사용할 수 있는 함수와 연산이 포함되어 있습니다. 라이브러리에서 함수 또는 연산을 호출할 때 open 지시문을 사용하여 라이브러리의 네임스페이스를 지정합니다. 예를 들어 Microsoft.Quantum.Intrinsic 라이브러리를 사용하려면 다음을 수행합니다.

    open Microsoft.Quantum.Intrinsic;

진입점

EntryPoint은(는) Q# 컴파일러에 프로그램 실행을 시작할 위치를 알려줍니다. 모든 Q# 프로그램에는 하나의 진입점과 연산이 있어야 합니다. 예를 들어 다음 코드는 콘솔에 "Hello quantum world!"를 출력하는 진입점 작업(HelloQ)을 정의합니다.

namespace HelloQuantum {

    open Microsoft.Quantum.Intrinsic;

    @EntryPoint()
    operation HelloQ() : Unit {
        Message("Hello quantum world!");
    }
}

참고 항목

위의 Q# 프로그램은 콘솔에 메시지를 쓰는 Message 작업을 사용하기 위해 Microsoft.Quantum.Intrinsic 라이브러리를 엽니다.

큐비트 측정

Q#에서 Measure 작업은 지정된 Pauli 기준에서 하나 이상의 큐비트의 공동 측정을 수행하는데, 이러한 기준은 PauliX, PauliY 또는 PauliZ일 수 있습니다. Measure 연산은 One 또는 ZeroResult 형식을 반환합니다.

계산 기준 $\lbrace\ket{0},\ket{1}\rbrace$에서 측정값을 구현하려면 Pauli Z 기준으로 측정을 수행하는 M 작업을 사용할 수도 있습니다. 따라서 M 작업은 Measure([PauliZ], [qubit])을(를) 적용하는 것과 같습니다.

큐비트 다시 설정

Q#에서 큐비트는 릴리스될 때까지 $\ket{0}$ 상태여야 합니다. 큐비트 사용을 마쳤으면 Reset 작업을 사용하여 큐비트를 $\ket{0}$(으)로 다시 설정합니다.

    // Reset the qubit so it can be safely released.
    Reset(qubit);