Q# プログラムの主要なコンポーネントは何か

完了

量子プログラムの作成を開始する前に、Q# プログラムの構造とコンポーネントについて理解することが重要です。

このユニットでは、Q# プログラムの主要なコンポーネントを確認します。

Main 操作

すべての Q# プログラムには、少なくとも 1 つの操作が含まれている必要があり、これは通常、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# には、IntDoubleBoolString などのなじみのある多くの組み込み型が用意されています。 Q# には、QubitResult などの量子コンピューティングに特有の型も用意されています。

この例では、MeasureOneQubit 操作は Result 型を返します。 Result 型は量子ビットの計測の結果であり、One または Zero のどちらかになります。

operation MeasureOneQubit() : Result {
    ...
}

量子ライブラリ

Q# ライブラリには、量子プログラム内で使用できる関数と操作が含まれています。 ライブラリの関数または演算を呼び出すときは、import ディレクティブを使い、ライブラリの名前空間を指定します。 たとえば、Standard 量子ライブラリの 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!");

Standard ライブラリの名前空間は、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 つまたは複数の量子ビットを割り当てることができます。 1 つと 5 つの量子ビットを割り当てる例を次に示します。

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

量子ビットの測定

Q# では、Measure 演算は、指定されたパウリ基底の 1 つ以上の量子ビットの結合測定を実行します (PauliXPauliY、または PauliZ)。 Measure 演算は、One または Zero である Result 型を返します。

計算基底 $\lbrace\ket{0},\ket{1}\rbrace$ で測定を実装するには、パウリ Z 基底で測定を実行する M 演算を使うこともできます。 したがって、M 演算は Measure([PauliZ], [qubit]) を適用することと同じです。

量子ビットのリセット

Q# では、量子ビットは解放される時点までに $\ket{0}$ 状態になっている必要があります。 量子ビットの使用が完了したら、Reset 演算を使って、量子ビットを $\ket{0}$ にリセットします。

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