科学しよう

量子計算のプログラミングの解説をメインに、データサイエンス・機械学習について勉強したことをご紹介します

MENU

量子コンピュータで行う論理演算(2)

前回に引き続き、論理演算を量子回路に実装する方法を解説します。

前回基本的な古典論理演算を量子回路に実装する方法の一つで、AND(論理積)演算をCCXゲートで実装する方法を紹介しました。 これは2つの入力の場合の演算ですが、一般に複数の入力に対してAND演算する方法をご紹介します。

対象とする読者

  • 量子プログラミングに興味を持ち始めたばかりのエンジニア
  • 量子計算に興味を持ち始めたばかりの高校生・大学生 など

前提とする知識

  • 論理演算(AND, OR, NOT)が分かること
  • 基本的な量子ゲート(X, CNOT, CCNOTなど)が分かること

バージョン情報

複数の入力についての古典ANDゲートとMulti Controlled Toffoli(トフォリ)ゲート

複数の入力についてANDゲート(論理積)を取るとは下記のような場合です

if A and B and C and D ....: 
    処理

通常プログラミングしていたらこのような場合に遭遇することがよくありますが、 このような条件の判定は、量子ゲートではMulti Controlled Toffoliゲート(MCTゲート)でできます。 ちょうどControlled-Xゲートの入力が複数に増えたものです。 (CCXゲートもMCTゲートの一つです。)

qr_input = QuantumRegister(3, 'input') <<  inputの数は好きに増やせる
qr_output = QuantumRegister(1, 'output')
cr = ClassicalRegister(4)
qc = QuantumCircuit(qr_input, qr_output, cr)

qc.mct(qr_input, qr_output)
qc.measure(qr_input, cr[:3])
qc.measure(qr_output, cr[3])
qc.reverse_bits()
qc.draw(output='mpl')

f:id:sakumadaisuke32:20210124204946p:plain
Multi Controlled Toffoliゲートの実装例(左:制御ビット×3, 右:制御ビット×10)

Multi Controlled Toffoliゲートはqc.mct(qr_input, qr_output)で定義できますが、 この第一引数に設定されるビット数によって入力端子(制御ビット)の数を自動的に決めてくれます。

この入力端子の条件をすべて満たしたときに(上の図だとすべて |1>状態の場合に)標的ビット(output)にXゲートを掛けます。

そのようになっていることを前回同様inputの状態に対するoutputの状態を測定することで確認しましょう。

入力が |000>の場合

f:id:sakumadaisuke32:20210124211513p:plain
左:入力が000の場合の量子回路, 右:この時の測定結果

右側で測定されている状態は0001で、outputのビット(標的ビット)は一番左のビットで表現されているので、0のままですね。

入力が |100>の場合

f:id:sakumadaisuke32:20210124211736p:plain
左:入力が100の場合の量子回路, 右:この時の測定結果

こちらもoutput(一番左)は0のままです。

入力が |110>の場合

f:id:sakumadaisuke32:20210124211913p:plain
左:入力が110の場合の量子回路, 右:この時の測定結果

こちらもoutput(一番左)は0のままです。

入力が |111>の場合

f:id:sakumadaisuke32:20210124214038p:plain
左:入力が111の場合の量子回路, 右:この時の測定結果

ここでやっとoutput(一番左)が1に変化しました!

まとめ

  • 複数条件のAND演算はMulti Controlled Toffoli(MCT)ゲートで書ける
  • MCTは制御ビットがすべて条件を満たしている場合に、標的ビットにXゲートを掛ける