手を上げるキュビットくんゆるふわ量子コンピュータ
計算中のキュビットくん

量子位相推定(QPE)をQiskitで実装する|固有値を"読み取る"アルゴリズム

2026-08-19実践

#Qiskit#量子位相推定#QPE#逆QFT#Python#実践

ショアのアルゴリズムやHHL(連立方程式の量子解法)の心臓部が 量子位相推定(QPE) です。あるユニタリ演算の「固有値に隠れた位相」を読み取ります。この記事ではQiskitで、Tゲートの位相 1/8 をQPEで当てるところまで実装します。QFTの応用編です。

しくみ

推定用の量子ビット(カウントレジスタ)を重ね合わせ、対象ユニタリを制御付きで繰り返しかけて位相を蓄積 → 逆QFTで位相を2進数として読み出します。

QPEの3ステップ

🌀

重ね合わせ

カウント用ビット

🔁

制御ユニタリ

位相を蓄積

📖

逆QFT

位相を読み出す

準備

pip install qiskit qiskit-aer

① 逆QFTを用意

読み出しに使う逆QFTを組みます。

from qiskit import QuantumCircuit
from math import pi

def qft_dagger(qc, n):
    # 逆QFT:スワップ→制御位相(逆回転)→アダマール
    for q in range(n // 2):
        qc.swap(q, n - q - 1)
    for j in range(n):
        for m in range(j):
            qc.cp(-pi / 2 ** (j - m), m, j)
        qc.h(j)

② QPEでTゲートの位相を当てる

Tゲートは固有状態|1⟩に対して位相 2π×(1/8) を与えます。つまり位相は 1/8。これを3ビットで当てます。

from qiskit_aer import AerSimulator

n = 3                       # カウント用ビット数(精度)
qc = QuantumCircuit(n + 1, n)

qc.x(n)                     # 固有状態 |1⟩ を用意
qc.h(range(n))             # カウント用を重ね合わせ

# 制御Tを 2^k 回かける(位相を蓄積)
for k in range(n):
    for _ in range(2 ** k):
        qc.cp(pi / 4, k, n)   # 制御T = 制御位相 π/4

qft_dagger(qc, n)           # 逆QFTで位相を読み出す
qc.measure(range(n), range(n))

counts = AerSimulator().run(qc, shots=1000).result().get_counts()
print(counts)

結果は {'001': 1000} のように出ます。読み方は 2進数001=十進1 → 1/2ⁿ = 1/8。狙いどおり、Tゲートの位相 1/8 を正確に読み取れました。

🌱

ビット数=精度

カウント用ビットを増やすほど、位相を細かく読めます。3ビットなら1/8刻み、5ビットなら1/32刻み。ショアではこの精度が素因数分解の成否を分けます。

⚠️

割り切れない位相

1/8のようにピッタリ表せる位相は1つの答えに集中しますが、半端な位相は複数の候補に散らばります。その場合は最頻値を採用し、ビット数を増やして精度を上げます。実機ではノイズもこれに乗ります。

まとめ

  • QPEはユニタリの固有値に隠れた位相を読み取る
  • 制御ユニタリを2ᵏ回かけて位相を蓄積し、逆QFTで2進数として取り出す
  • Tゲートの位相1/8は3ビットで001=1/8として当てられる
  • ショア・HHLなど多くのアルゴリズムの土台

もう少し詳しく(背景と理論)

量子位相推定(QPE)は Kitaev (1995) に遡り1、ユニタリ U の固有ベクトル |ψ⟩ に対する固有値 exp(2πiφ) の位相 φ を、カウント用 t 量子ビットで t ビット精度に読み取ります。読み出し確率は逆QFTの干渉で決まり、φ が 1/2ᵗ の格子にちょうど乗るときは確定的、そうでないときは最頻値のまわりに分布します2。QPE はショアの素因数分解やHHL(連立一次方程式の量子解法)3の中核ですが、対象ユニタリを制御付きで 2ᵏ 回かける必要があり、実機では回路が深くなりノイズに弱いのが課題です。近年は、深い回路を避ける反復的位相推定やベイズ推定型の手法も研究されています4

次の一歩 🌸

前提の量子フーリエ変換、応用の量子アルゴリズム入門、実機のノイズはノイズとトランスパイルへどうぞ。

Footnotes

  1. Kitaev, A. Y. (1995). "Quantum measurements and the Abelian Stabilizer Problem." arXiv:quant-ph/9511026. 位相推定の原型を与えた。

  2. t ビットで測ると位相の分解能は 1/2ᵗ。φ が格子点に乗らない場合でも、確率 4/π²(≈0.81)以上で最良近似が得られることが示せる。ビット数を増やすほど成功確率と精度が上がる。

  3. Harrow, Hassidim, Lloyd (2009). "Quantum algorithm for linear systems of equations." Phys. Rev. Lett., 103, 150502. QPE を部品として連立一次方程式を扱う。

  4. 反復的量子位相推定(IQPE)は補助ビット1個で1ビットずつ位相を読み、回路の深さを抑える。NISQ 実機での位相推定に向く。

🔥 この分野の最新トレンドをチェック →

あわせて読みたい