Share via


量子固有のデータ型

このトピックでは、Qubit 型と、PauliResult という、量子ドメインに固有の他の 2 つの型について説明します。

量子ビット

Q# では、量子ビットは関数と演算の両方に渡せるが、対象の量子プロセッサにネイティブな命令に渡すことによってのみ操作可能な、不透明な項目として扱われます。 このような命令は、常に演算の形式で定義されます。これはその目的が量子状態を変更することであるためです。 量子ビットを入力引数として渡すことができるが、その関数は量子状態を変更できないという制限は、関数が他の関数のみを呼び出すことができ、操作を呼び出すことができないことを要求することで強制されます。

Q# ライブラリ は、標準の組み込み操作 (つまり、言語内での実装の定義がない操作) のセットに対してコンパイルされます。 ターゲット設定時に、実行ターゲットにネイティブな命令の観点からそれらを表す実装は、コンパイラによってリンクされます。 したがって、Q# プログラムは、ターゲット マシンによって定義されたこれらの演算を結合して、量子計算を表す新しいより高いレベルでの演算を作成します。 このように Q# を使用すると、対象マシンの構造およびその量子状態の実現に関して非常に汎用性を帯びると共に、量子の根底にある理論や量子/古典のハイブリッド アルゴリズムを非常に簡単に表現できます。

Q# 自体には、量子状態を表すQ# の型やコンストラクトはありません。 その代わりに、量子ビットは、量子コンピューター内の処理可能な最小の物理単位を表します。 そのため、量子ビットは寿命の長い項目であるため、Q# には線形型は必要ありません。 したがって、Q# 内部の状態を明示的に参照するのではなく、たとえば XH などの演算を適用してプログラムによって状態がどのように変換されるのかを記述することです。 グラフィックス シェーダー プログラムが各頂点の変換の記述を蓄積する方法と同様に、Q# の量子プログラムでは、ターゲット マシンの内部構造への完全に不透明な参照として表現される量子状態への変換が蓄積されます。

Q# プログラムには量子ビットの状態をイントロスペクションする能力がないため、量子状態が何であるかや量子状態の実現方法については完全に依存しません。 そうではなく、プログラムでは Measure などの演算を呼び出して、計算の量子状態に関する情報を学習できます。

パウリ

Pauli 型の値は単一量子ビットの Pauli 演算子を指定し、可能な値は PauliIPauliXPauliYPauliZ です。 Pauli 値は、主に量子測定の基礎を指定するために使用されます。

結果

Result 型は、量子測定の結果を指定します。 Q# は、単一量子ビットの Pauli 演算子の積で測定を提供することで、ほとんどの量子ハードウェアをミラー化します。ResultZero の場合は +1 の固有値が測定されたことを示し、ResultOne の場合は -1 の固有値が測定されたことを示します。 つまり Q# では、-1 を累乗する指数によって固有値を表します。 この規則は、古典的なビットに厳密にマッピングされるため、量子アルゴリズムのコミュニティではより多く見られます。