回路
コンピュータサイエンスにおいて、回路とは情報がワイヤを通じてゲートのネットワークに運ばれる計算モデルであり、ゲートはワイヤが運ぶ情報に対する演算を表します。 量子回路は、この一般的な概念に基づいた特定の計算モデルです。
「回路」という言葉は円形の経路を指すことが多いですが、最も一般的に研究されている回路の計算モデルでは、実際には円形の経路は許可されていません。 つまり、回路を計算モデルとして考えるときは、通常非巡回回路を対象とします。 量子回路もこのパターンに従っており、量子回路はフィードバックループを含むことのできない有限の演算シーケンスを表します。
ブール回路
以下は(古典的な)ブール回路の例で、ワイヤは2値を運び、ゲートはブール論理演算を表します:
ワイヤ上の情報の流れは左から右へ進みます:図の左側にある および というラベルのワイヤは入力ビットであり、それぞれ好きな2値に設定できます。右側のワイヤが出力です。 中間のワイヤは、左から右の順に評価されるゲートによって決まる値を取ります。
ゲートはANDゲート( とラベル)、ORゲート( とラベル)、NOTゲート( とラベル)です。 これらのゲートが計算する関数は多くの読者に馴染みがあるかと思いますが、以下に値の表で示します:
と の名前のすぐ右にあるワイヤ上の2つの小さな塗りつぶされた円はファンアウト演算を表し、ワイヤ上の値をそのままコピーして複数のゲートへの入力として使えるようにするものです。 ファンアウト演算は、古典的な文脈では常にゲートとして見なされるわけではなく、ある意味で「無料」として扱われることもあります。 しかし、ブール回路を等価な量子回路に変換する際には、ファンアウト演算を明示的にゲートとして分類し、正しく処理・計上する必要があります。
以下は同じ回路を電気工学でよく見られるスタイルで描いたものです。ANDゲート、ORゲート、NOTゲートに慣習的な記号を使用しています:
このスタイルや特定のゲート記号は以降では使用しませんが、量子回路ではゲートを表す異なる記号を使用します。これらは登場するたびに説明します。
この例の特定の回路は排他的論理和(略してXOR)を計算します。記号 で表されます:
次の図では入力の1つの選択、 と のみを考えます。 各ワイヤはそれが運ぶ値でラベル付けされているので、演算を追うことができます。 この場合の出力値は であり、XORの正しい値です:。
他の3つの可能な入力設定も同様の方法で確認できます。
その他の種類の回路
上述のように、コンピュータサイエンスにおける回路の概念は非常に一般的です。 例えば、 と 以外の値を運ぶワイヤを持つ回路や、異なる演算を表すゲートを持つ回路が分析されることがあります。
算術回路では、例えばワイヤが整数値を運び、ゲートが加算や乗算などの算術演算を表します。 次の図は、2つの可変入力値( と )と、値 に設定された第3の入力を受け取る算術回路を示しています。 ワイヤが運ぶ値は、 と の値の関数として図に示されています。
また、ゲートが確率的演算を表すような、ランダム性を組み込んだ回路を考えることもできます。
量子回路
量子回路モデルでは、ワイヤは量子ビット(qubit)を表し、ゲートはこれらの量子ビットに対する演算を表します。 ここでは、これまでに登場した演算、すなわちユニタリ演算と標準基底測定に焦点を当てます。 他の種類の量子演算や測定について学ぶにつれて、モデルをそれに応じて拡張できます。
以下は量子回路の簡単な例です:
この回路では、水平線で表される という名前の単一の量子ビットと、この量子ビットに対するユニタリ演算を表すゲートのシーケンスがあります。 上記の例と同様に、情報の流れは左から右に進みます。つまり、最初に行われる演算はアダマール演算、2番目は 演算、3番目は再びアダマール演算、そして最後の演算は 演算です。 回路全体を適用すると、これらの演算の合成 が量子ビット に適用されます。
回路の入力状態または出力状態を明示的に示したい場合があります。 例えば、状態 に演算 を適用すると、状態 が得られます。これは次のように示せます:
量子回路は通常、この例のようにすべての量子ビットが に初期化された状態で開始しますが、入力量子ビットが最初に異なる状態に設定される場合もあります。 以下は量子回路の別の例で、今度は2つの量子ビットを使います:
いつものように、 とラベルされたゲートはアダマール演算を指し、2番目のゲートは制御NOTゲートです:塗りつぶされた円は制御量子ビットを表し、 の記号に似た円はターゲット量子ビットを示します。
この回路を詳しく調べてその動作を説明する前に、量子回路における量子ビットの順序付けの規則を明確にすることが不可欠です。 これは、前のレッスンで簡単に触れた、Qiskitがシステムの命名と順序付けに使用する規則と関連しています。
Qiskitでは、回路図において最上部の量子ビットがインデックス を持ち、量子ビットのタプル(またはこのタプルに対応する文字列、直積、テンソル積)の最右端の位置に対応します。上から2番目の量子ビットはインデックス を持ち、タプルの右から2番目の位置に対応します。以降も同様です。最も高いインデックスを持つ最下部の量子ビットは、タプルの最左端の位置に対応します。特に、 量子ビット回路における Qiskit のデフォルトの量子ビット名は タプル で表され、 が量子回路図の最上部、 が最下部の量子ビットです。
これは回路における量子ビット順序付けのより一般的な規則とは逆転しており、混乱の原因になることがよくあります。 この順序付け規則の詳細については、Qiskitにおけるビット順序のドキュメントページを参照してください。
Qiskitが量子ビットに使用する特定のデフォルト名 から逸脱することもありますが、このコース全体を通じて回路図を解釈する際は、上記で説明した順序付け規則に常に従います。 したがって、上記の回路の解釈では、量子ビットの組 に対する演算を記述しているとなります。 例えば、回路への入力が量子状態 である場合、下側の量子ビット が状態 から始まり、上側の量子ビット が状態 から始まることを意味します。
回路が何をするかを理解するために、左から右にその演算を追っていきましょう。
-
最初の演算は に対するアダマール演算です:
このように単一の量子ビットにゲートを適用する場合、他の量子ビット(この場合は1つだけ)には何も起こりません。何も起こらないことは恒等演算が実行されることと同等です。したがって、上の図の点線の矩形はこの演算を表します:
テンソル積の左側に恒等行列があり、右側に があることに注意してください。これは Qiskit の順序付け規則と一致しています。
-
2番目の演算は制御NOTゲートであり、 が制御、 がターゲットです:
制御NOTゲートの標準基底状態に対する作用は次の通りです:
量子ビットを の順に並べ、 が回路の下側、 が上側であることを踏まえると、制御NOTゲートの行列表現は次のようになります:
回路全体が実装するユニタリ演算( と呼びます)は、各演算の合成です:
特に、ベル状態の表記を思い出すと、
次のことが分かります:
したがって、この回路は に初期化された2つの量子ビットで実行すると、状態 を生成する方法を提供します。 より一般的には、標準基底をベル基底に変換する方法を与えます。 (この例では重要ではありませんが、最後の状態の の位相因子、 は、回路に小さな追加を行うことで除去できます。 例えば、回路の最初に制御 ゲートを追加することができます。これは制御NOTゲートと似ていますが、制御が に設定されているときに、NOTではなく 演算がターゲット量子ビットに適用されます。 あるいは、最後にスワップゲートを追加することもできます。どちらの選択も、他の3つの標準基底状態に対する回路の動作に影響を与えることなくマイナス符号を除去します。)
一般に、量子回路は任意の数の量子ビットワイヤを含むことができます。また、二重線で示される古典ビットワイヤを含めることもできます。次の例のようになります:
ここでは、前の例と同様に、2つの量子ビット と 上のアダマールゲートと制御NOTゲートがあります。 また、2つの古典ビット と 、および2つの測定ゲートもあります。 測定ゲートは標準基底測定を表します:量子ビットは測定後の状態に変化し、矢印が指す古典ビットに測定結果が上書きされます。
測定を、量子ビットを入力として受け取り古典ビットを出力するゲートとして描くことが便利な場合がよくあります(測定後の状態の量子ビットを出力して結果を別の古典ビットに書き込む代わりに)。 これは、測定された量子ビットが破棄され、その後は安全に無視できることを意味します。その状態は測定結果に応じて または に変化しています。
例えば、次の回路図は前の図と同じプロセスを表していますが、測定後に と を無視します:
コースが進むにつれて、量子回路のより多くの例を見ることになります。これらは通常、上記の単純な例よりも複雑です。 以下は回路図によく登場するゲートを示す記号の例です:
-
単一量子ビットゲートは一般に、演算を示す文字が書かれた正方形として表示されます:
NOTゲート(または同等の ゲート)は、プラス記号を囲んだ円で表されることもあります:
-
スワップゲートは次のように表されます:
-
制御ゲート、つまり制御ユニタリ演算を記述するゲートは、制御される演算に縦線でつながれた塗りつぶされた円(制御を示す)で表されます。例えば、制御NOTゲート、制御制御NOTゲート(またはトフォリゲート)、制御スワップゲート(フレドキンゲート)は次のように表されます:
-
複数量子ビットに対する任意のユニタリ演算はゲートとして見なすことができます。それらはユニタリ演算の名前でラベル付けされた矩形で描かれます。例えば、以下は(未指定の)ユニタリ演算 をゲートとして描いたもの、およびこのゲートの制御版です: