演習 パート 1 - 量子乱数ビット ジェネレーターを作成する
前のユニットでは、Q# プログラムの基本的な構成要素について学習しました。 これで、最初の量子プログラム (真の乱数を生成する量子プログラム) を記述する準備ができました。
量子乱数ジェネレーターは 2 つのフェーズで構築します。 このユニットでは、単一の乱数ビットを生成する最初のフェーズを構築します。
Q# プログラムを作成する
- Visual Studio Code を開き、[ファイル] > [新しいテキスト ファイル] を選んで新しいファイルを作成します。
- このファイルを
Main.qs
として保存します。 このファイルには、プログラムの Q# コードが含まれます。
Main
演算を定義する
Main
演算は、プログラムのエントリ ポイントです。
operation Main(): Result{
// Your code goes here
}
量子ビットを割り当てる
まず、use
キーワードを使用して 1 つの量子ビットを割り当てることから始めます。 Q# では、割り当てるすべての量子ビットは、既定で $\ket{0}$ 状態で開始されます。
operation Main(): Result{
// Allocate a qubit
use q = Qubit();
}
量子ビットを重ね合わせる
量子ビットは $\ket{0}$ 状態で、乱数の生成にはあまり役に立ちません。 量子ビットを重ね合わせる必要があります。 これを行うには、Hadamard 演算、H
、を量子ビットに適用します。 Hadamard 演算は量子ビットの状態を変更し、$\ket{0}$ と $\ket{1}$ の等しい重ね合わせに配置します。
$$ H \ket{0} = \frac{1}{\sqrt{2}} (\ket{0} + \ket{1}) $$
量子ビットは等しい重ね合わせであるため、測定すると、0 になる確率が 50%、1 になる確率が 50% になります。
operation Main(): Result{
use q = Qubit();
H(q);
}
量子ビットを測定する
この時点で、量子ビット q
は |0〉 状態で測定される可能性が 50% で、|1〉 状態で測定される確率は 50% です。 したがって、量子ビットを測定すると、50% の確率で 0 か 1 の乱数ビットが得られます。 このビットの値は本当にランダムであり、測定の結果を事前に知る方法はありません。
量子ビット値を測定するには、M
演算を使用し、result
変数に測定値を格納します。
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
}
量子ビットをリセットする
Q# では、すべての量子ビットは解放される時点までに $\ket{0}$ 状態になっている必要があります。 Reset(q)
を使って量子ビットをゼロ状態にリセットします。
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
}
測定結果を返す
最後に、return
キーワードを使用して測定結果を返します。 この結果は、確率が等しいランダム ビット (0 または 1) です。
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
return result;
}
最終プログラム
Main.qs
ファイルは次のようになります。 このプログラムは量子ビットを割り当て、重ね合わせに配置し、量子ビットを測定し、量子ビットをリセットして、測定結果を返します。
Note
//
記号は、プログラムの各ステップを説明するための省略可能なコメントを表します。
operation Main() : Result {
// Allocate a qubit.
use q = Qubit();
// Set the qubit into superposition of 0 and 1 using the Hadamard
H(q);
// Measure the qubit and store the result.
let result = M(q);
// Reset qubit to the |0〉 state.
Reset(q);
// Return the result of the measurement.
return result;
}
プログラムを実行する
組み込みのシミュレーターでプログラムを実行するには、Main
演算の上の [実行] をクリックするか、Ctrl + F5 キーを押します。 出力がターミナルのデバッグ コンソールに表示されます。
結果は、One
または Zero
のいずれかになります。これは、真にランダムなビットを表します。 プログラムを再度実行すると、異なる結果が表示されます。
次のユニットでは、量子乱数ジェネレーターの第 2 フェーズを実装します。つまり、複数の乱数ビットを組み合わせて、より大きな数を形成します。