前報では、量子もつれの不思議さを感じられるMermin-Peres Magic Gameについて述べた。今回は、量子特有の別の性質、量子重ね合わせ(superposition)を巧みに利用した「偽コイン発見」Counterfeit Coin Puzzleについて簡単に書いてみたい。
🔴偽コイン(Counterfeit Coin)発見パズル
n個のコインのうちに、k個の偽物が混じっているとする。偽物は、いずれも正常なものよりも一定量だけ軽い。どれが偽物かを特定したい。ここでは(左右の皿に同数のコインを入れて均衡を測るため)天秤を使う。では、何回、天秤で測定すれば偽物を特定できるか。それを解くための計算量に関する研究はすでに発表されている。
具体例で検討する。今、8個のコインのうち1個が偽物(n = 8、k = 1)について考える。この場合、2回だけ天秤で測れば偽物を特定できることが分かっている。
だが、量子計算では、「量子天秤」Quantum Beam Balanceを使うと、偽物が1個である場合、コインの総数nに拘らず、
1回だけの測定で偽物を特定できる!
🔴量子天秤では1回の測定で偽物を特定できるという事実
量子計算ではなぜそれができるのかについては、IBM Qiskitの解説[1]や書籍[2]などに詳しく掲載されている。本稿では、whyではなく、howについてだけ示す。つまり、「こうすればできる」というメモとして叙述する。
(1)「量子天秤」Quantum Beam Balanceを作る
例えば、11111001のような、1が偶数個のバイナリストリングを考える。これは、コインq7q6q5q4q3q2q1q0に対応するが、q1とq2を除く6個のコインを皿に載せた状態を意味する。左右どちらの皿に載せるかは問題ではない。下図は、そのようなすべてのバイナリストリングの重ね合わせ状態(superposition)を作る仕掛けである。その作成が成功した場合は、最下段の量子ビットq8が0となり、失敗の場合は1となる。その成功の確率は0.5なので、成功するまで繰り返せば良い。
このsuperpositionの作成が成功した場合(q8の測定結果が0の場合)、図の右端に置かれたCNOT(制御付きNOT)が働いて、偽コインのインデックス(この場合は3)が設定される。念のためだが、これによって予め答えを教えている訳ではなく、偽物のコインを一つ入れたに過ぎない。この時点で、必要な量子天秤を構成したということになる。
(2)量子天秤で偽コインを特定する
引き続き、下図の量子回路を適用すると、偽コインを特定できる。回路の説明は略すが、注目すべきは、この回路を1回通すだけで、すなわち、量子天秤で1回だけ測定するだけで結果が出ることである!
実際、測定結果は、以下のいずれかになる。どちらの場合も、q3だけが他のビットと異なっている。すなわち、偽コインはq3であることを示している!
🔴IBM Quantum実機でも確かめたいが
この量子回路を、IBM Quantum実機(ibm_sherbrooke)で実行してみたが、失敗であった。"Instruction bfunc is not supported"というエラーが発生。bfucとは、Boolean Functionのこと。すなわち、古典レジスタの値に応じて、動的に量子回路を構成するc_if ()コマンドは、この実機ではサポートされないとのことらしい。シミュレータでは、上記のように正常に実行できたが...
一方、驚くべきことに、ChatGPTに問い合わせたところ、納得できる回答が得られた。すでに多くの人が、IBM Quantum実機を利用していてSNSなどでエラー情報の交換が行われているからであろう。
なお、現時点ではIBM Quantum実機上で量子状態をそのまま保存して再利用することはできないようである。シミュレータでは、State vectorを保存、取り出しはできるが。実機では、測定結果(古典ビットに保存できる)を利用して、新たに次の量子回路を設定することになる。
参考資料
[1] Quantum Counterfeit Coin Problem,
https://github.com/qiskit-community/qiskit-community-tutorials/blob/master/games/quantum_counterfeit_coin_problem.ipynb
[2] Vladimir Silva, Quantum Computing by Practice (Chapter 8), APress, 2024.
---------------------------------
private memo:
Anaconda -
/IBM_Qiskit_Local_Sim_OK/Completed_qiskit1x/Counterfeit_coin_IBM_2.ipynb
---------------------------------