量子コンピュータで行う論理演算(2)
前回に引き続き、論理演算を量子回路に実装する方法を解説します。
前回基本的な古典論理演算を量子回路に実装する方法の一つで、AND(論理積)演算をCCXゲートで実装する方法を紹介しました。 これは2つの入力の場合の演算ですが、一般に複数の入力に対してAND演算する方法をご紹介します。
対象とする読者
- 量子プログラミングに興味を持ち始めたばかりのエンジニア
- 量子計算に興味を持ち始めたばかりの高校生・大学生 など
前提とする知識
- 論理演算(AND, OR, NOT)が分かること
- 基本的な量子ゲート(X, CNOT, CCNOTなど)が分かること
バージョン情報
- Python 3.7.3
- Qiskit 0.23.1
複数の入力についての古典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')
Multi Controlled Toffoliゲートはqc.mct(qr_input, qr_output)
で定義できますが、
この第一引数に設定されるビット数によって入力端子(制御ビット)の数を自動的に決めてくれます。
この入力端子の条件をすべて満たしたときに(上の図だとすべて状態の場合に)標的ビット(output)にXゲートを掛けます。
そのようになっていることを前回同様inputの状態に対するoutputの状態を測定することで確認しましょう。
入力がの場合
右側で測定されている状態は0001
で、outputのビット(標的ビット)は一番左のビットで表現されているので、0
のままですね。
入力がの場合
こちらもoutput(一番左)は0
のままです。
入力がの場合
こちらもoutput(一番左)は0
のままです。
入力がの場合
ここでやっとoutput(一番左)が1
に変化しました!