Q# 프로그램의 주요 구성 요소는 무엇일까요?

완료됨

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

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

Main 연산

모든 Q# 프로그램은 일반적으로 Main 연산인 작업을 하나 이상 포함해야 합니다. Main 연산은 프로그램의 진입점입니다. 기본적으로 Q# 컴파일러는 Main() 연산에서 프로그램 실행을 시작합니다. 필요에 따라 @EntryPoint() 특성을 사용하여 프로그램의 모든 연산을 실행 지점으로 지정할 수 있습니다.

예를 들어 다음 코드는 MeasureOneQubit 진입점 연산을 정의합니다.

@EntryPoint()
operation MeasureOneQubit() : Result {
    ...
}

그러나 MeasureOneQubit() 연산의 이름을 Main()(으)로 지정하여 @EntryPoint() 특성 없이 해당 코드를 작성할 수도 있습니다.

// The Q# compiler automatically detects the Main() operation as the entry point. 
operation Main() : Result {
    ...
}

유형

Q#에서는 Int, Double, Bool, String을 포함하여 이미 익숙할 수 있는 다양한 기본 제공 형식을 제공합니다. Q#은 QubitResult과(와) 같은 양자 컴퓨팅과 관련된 형식도 제공합니다.

이 예제에서 MeasureOneQubit 연산은 Result 형식을 반환합니다. Result 형식은 큐비트를 측정한 결과이며 One 또는 Zero일 수 있습니다.

operation MeasureOneQubit() : Result {
    ...
}

양자 라이브러리

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

// imports all functions and operations from Microsoft.Quantum.Intrinsic 
import Microsoft.Quantum.Intrinsic.*;
    Message("Hello quantum world!");


// imports just the `Message` function from Microsoft.Quantum.Intrinsic
import Microsoft.Quantum.Intrinsic.Message;
    Message("Hello quantum world!");

표준 라이브러리의 네임스페이스는 Microsoft.Quantum 대신 Std을(를) 사용하여 가져올 수 있습니다. 예시:

// imports all functions and operations from Microsoft.Quantum.Intrinsic == Std.Intrinsic
import Std.Intrinsic.*;
    Message("Hello quantum world!");

큐빗 할당

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

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

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

큐비트 측정

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