<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>IBM on kenji.blog</title><link>http://kenji.blog/tags/ibm/</link><description>Recent content in IBM on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ja</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 20:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/tags/ibm/index.xml" rel="self" type="application/rss+xml"/><item><title>Qiskitを使った量子プログラミング超入門</title><link>http://kenji.blog/p/qiskit-quantum-programming-intro/</link><pubDate>Fri, 11 Sep 2026 20:00:00 +0900</pubDate><guid>http://kenji.blog/p/qiskit-quantum-programming-intro/</guid><description>&lt;img src="http://kenji.blog/p/qiskit-quantum-programming-intro/img/eyecatch.jpg" alt="Featured image of post Qiskitを使った量子プログラミング超入門" />&lt;h2 id="1-はじめに">1. はじめに
&lt;/h2>&lt;p>現代のコンピュータ（古典コンピュータ）は、私たちの生活を劇的に変化させ、高度な計算能力によって社会のあらゆる側面を支えています。しかし、一部の特定の問題（例えば、巨大な数の素因数分解、複雑な分子構造のシミュレーション、最適化問題など）においては、現在の最先端のスーパーコンピュータであっても、宇宙の年齢より長い時間が必要になることが知られています。&lt;/p>
&lt;p>こうした「古典コンピュータの限界」を打ち破る可能性を秘めているのが**量子コンピュータ（Quantum Computer）**です。量子力学の不思議な性質（重ね合わせや量子もつれ）を計算資源として活用することで、特定の問題を劇的に高速化できると考えられています。&lt;/p>
&lt;p>本記事では、IBMがオープンソースで提供している量子コンピューティングのフレームワークである**Qiskit（キスキット）**を用いて、量子プログラミングの世界へ第一歩を踏み出します。物理や数学の基礎から丁寧に解説し、実際にPythonでコードを書き、シミュレータ上で量子回路を動かすまでのプロセスを網羅した、非常に詳細な入門ガイドです。&lt;/p>
&lt;hr>
&lt;h2 id="2-量子計算を支える物理と数学の基礎">2. 量子計算を支える物理と数学の基礎
&lt;/h2>&lt;p>量子プログラミングを理解するためには、まず量子力学の基本的な概念を理解する必要があります。ここでは、量子ビット、重ね合わせ、量子もつれという3つの重要な柱について解説します。&lt;/p>
&lt;h3 id="21-古典ビットと量子ビットqubit">2.1 古典ビットと量子ビット（Qubit）
&lt;/h3>&lt;p>古典コンピュータの情報単位は「ビット（Bit）」です。ビットは常に &lt;code>0&lt;/code> か &lt;code>1&lt;/code> のどちらか一つの状態をとります。&lt;/p>
&lt;p>一方、量子コンピュータの情報の最小単位は**量子ビット（Qubit: Quantum bit）**と呼ばれます。量子ビットは、&lt;code>0&lt;/code> と &lt;code>1&lt;/code> の状態をとることができるだけでなく、&lt;strong>その両方の状態を同時に保持する&lt;/strong>ことが可能です。&lt;/p>
&lt;p>数学的には、量子ビットの状態 $|\psi\rangle$ は、基底状態 $|0\rangle$ と $|1\rangle$ の線形結合（重ね合わせ）として表現されます。&lt;/p>
$$
|\psi\rangle = \alpha|0\rangle + \beta|1\rangle
$$
&lt;p>ここで、$\alpha$ と $\beta$ は複素数であり、それぞれ状態 $|0\rangle$ と $|1\rangle$ を観測する確率振幅を表します。量子力学の基本原理に基づき、確率の合計は1にならなければならないため、以下の規格化条件を満たします。&lt;/p>
$$
|\alpha|^2 + |\beta|^2 = 1
$$
&lt;p>つまり、この量子ビットを「測定（観測）」したとき、$|0\rangle$ が得られる確率は $|\alpha|^2$、$|1\rangle$ が得られる確率は $|\beta|^2$ となります。測定前は確率的にしか状態が決まっていないという点が、古典ビットとの決定的な違いです。&lt;/p>
&lt;div class="mermaid">graph LR
A["古典ビット (Classical Bit)"] --> B["確定した状態: 0 または 1"]
C["量子ビット (Qubit)"] --> D["重ね合わせ: 0 と 1 の両方"]
D --> E["測定によって確率的に状態が確定"]&lt;/div>
&lt;h3 id="22-重ね合わせsuperposition">2.2 重ね合わせ（Superposition）
&lt;/h3>&lt;p>先ほど述べたように、$|0\rangle$ と $|1\rangle$ の状態が混ざり合っている状態を**重ね合わせ（Superposition）**と呼びます。&lt;/p>
&lt;p>例えば、1つの量子ビットが完全に均等な重ね合わせ状態にある場合、$\alpha = \frac{1}{\sqrt{2}}$、$\beta = \frac{1}{\sqrt{2}}$ となります。&lt;/p>
$$
|\psi\rangle = \frac{1}{\sqrt{2}}|0\rangle + \frac{1}{\sqrt{2}}|1\rangle
$$
&lt;p>この状態を測定すると、$|0\rangle$ と $|1\rangle$ がそれぞれ50%の確率で観測されます。
もし2つの量子ビットがあれば、$|00\rangle, |01\rangle, |10\rangle, |11\rangle$ の4つの状態の重ね合わせを作ることができます。$n$個の量子ビットがあれば、$2^n$ 個の状態を同時に表現できることになり、これが量子コンピュータの並列処理能力の源泉の一つとなっています。&lt;/p>
&lt;h3 id="23-量子もつれentanglement">2.3 量子もつれ（Entanglement）
&lt;/h3>&lt;p>量子計算において最も強力かつ不思議な性質が**量子もつれ（Entanglement）**です。アインシュタインが「不気味な遠隔作用」と呼んだこの現象は、2つ以上の量子ビットが互いに強く結びつき、一方の量子ビットの状態が決定されると、物理的にどれだけ離れていても、もう一方の量子ビットの状態が瞬時に決定されるという性質です。&lt;/p>
&lt;p>最も有名な量子もつれ状態である「ベル状態（Bell State）」の一つ、$\Phi^+$ 状態は次のように表されます。&lt;/p>
$$
|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}
$$
&lt;p>この状態では、$|01\rangle$ や $|10\rangle$ という状態は存在しません。したがって、1つ目の量子ビットを測定して $|0\rangle$ だった場合、2つ目の量子ビットを測定するまでもなく、確実に $|0\rangle$ であることが確定します。逆に、1つ目が $|1\rangle$ なら、2つ目も必ず $|1\rangle$ となります。&lt;/p>
&lt;hr>
&lt;h2 id="3-量子論理ゲートquantum-logic-gates">3. 量子論理ゲート（Quantum Logic Gates）
&lt;/h2>&lt;p>古典コンピュータがAND、OR、NOTなどの論理ゲートを用いて計算を行うように、量子コンピュータも&lt;strong>量子ゲート&lt;/strong>を用いて量子ビットの状態を操作します。量子状態はベクトルであるため、量子ゲートはそのベクトルに作用する「ユニタリ行列」として表現されます。&lt;/p>
&lt;h3 id="31-パウリゲートpauli-x-y-z">3.1 パウリゲート（Pauli-X, Y, Z）
&lt;/h3>&lt;p>パウリゲートは、1量子ビットに対する基本的な操作です。&lt;/p>
&lt;p>&lt;strong>・Pauli-X ゲート (NOTゲート)&lt;/strong>
古典のNOTゲートに相当します。$|0\rangle$ を $|1\rangle$ に、$|1\rangle$ を $|0\rangle$ に反転させます。（ブロッホ球においてX軸周りの180度回転）&lt;/p>
$$
X = \begin{pmatrix} 0 &amp; 1 \\ 1 &amp; 0 \end{pmatrix}
$$
&lt;p>&lt;strong>・Pauli-Y ゲート&lt;/strong>
Y軸周りの180度回転を行います。位相とビットの両方を反転させる効果があります。&lt;/p>
$$
Y = \begin{pmatrix} 0 &amp; -i \\ i &amp; 0 \end{pmatrix}
$$
&lt;p>&lt;strong>・Pauli-Z ゲート (位相反転ゲート)&lt;/strong>
$|0\rangle$ の状態はそのままに、$|1\rangle$ の状態の位相を反転（$-1$ を掛ける）させます。（Z軸周りの180度回転）&lt;/p>
$$
Z = \begin{pmatrix} 1 &amp; 0 \\ 0 &amp; -1 \end{pmatrix}
$$
&lt;h3 id="32-アダマールゲートhadamard-gate">3.2 アダマールゲート（Hadamard Gate）
&lt;/h3>&lt;p>アダマールゲート（Hゲート）は、確定した状態（$|0\rangle$ や $|1\rangle$）を重ね合わせ状態に変換する、非常に重要なゲートです。&lt;/p>
$$
H = \frac{1}{\sqrt{2}}
\begin{pmatrix}
1 &amp; 1 \\
1 &amp; -1
\end{pmatrix}
$$
&lt;p>$|0\rangle$ にHゲートを適用すると、均等な重ね合わせ状態である $|+\rangle$ になります。&lt;/p>
$$
H|0\rangle = \frac{1}{\sqrt{2}}|0\rangle + \frac{1}{\sqrt{2}}|1\rangle = |+\rangle
$$
&lt;h3 id="33-位相ゲートphase-gates">3.3 位相ゲート（Phase Gates）
&lt;/h3>&lt;p>位相ゲートは、Zゲートを一般化したもので、$|1\rangle$ 状態の位相を指定した角度 $\theta$ だけ回転させます。&lt;/p>
$$
P(\theta) = \begin{pmatrix} 1 &amp; 0 \\ 0 &amp; e^{i\theta} \end{pmatrix}
$$
&lt;p>代表的なものとして、Sゲート（$\theta = \pi/2$）や Tゲート（$\theta = \pi/4$）があります。&lt;/p>
&lt;h3 id="34-cnotゲートcontrolled-not-gate">3.4 CNOTゲート（Controlled-NOT Gate）
&lt;/h3>&lt;p>CNOTゲート（CXゲート）は、2つの量子ビット間で操作を行うゲートで、量子もつれを生成するために不可欠です。「制御（Control）ビット」と「標的（Target）ビット」から構成されます。&lt;/p>
&lt;p>制御ビットが $|1\rangle$ の場合のみ、標的ビットにXゲート（NOT操作）を適用し、制御ビットが $|0\rangle$ の場合は何もしません。&lt;/p>
$$
CNOT = \begin{pmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; 1 &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1 \\
0 &amp; 0 &amp; 1 &amp; 0
\end{pmatrix}
$$
&lt;hr>
&lt;h2 id="4-qiskitの基本と環境構築">4. Qiskitの基本と環境構築
&lt;/h2>&lt;p>ここからは、実際にPythonとQiskitを使用して量子プログラムを書いていきます。&lt;/p>
&lt;h3 id="41-qiskitとは">4.1 Qiskitとは？
&lt;/h3>&lt;p>&lt;strong>Qiskit&lt;/strong>は、IBM Quantumが開発したオープンソースの量子コンピューティング向けソフトウェア開発キット（SDK）です。Pythonを用いて直感的に量子回路を構築し、ローカルのシミュレータや、クラウド経由で実際のIBMの量子コンピュータ実機で実行することができます。&lt;/p>
&lt;h3 id="42-インストール方法">4.2 インストール方法
&lt;/h3>&lt;p>Qiskitを利用するためには、Python環境が必要です。以下のコマンドでQiskitと関連パッケージ（シミュレータや描画用ライブラリ）をインストールします。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install qiskit qiskit-aer qiskit-ibm-runtime matplotlib pylatexenc
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="43-プログラミングの基本フロー">4.3 プログラミングの基本フロー
&lt;/h3>&lt;p>Qiskitを使った量子プログラミングは、主に以下のステップで進行します。&lt;/p>
&lt;div class="mermaid">graph TD
A["1. 回路の構築 (Build)"] --> B["2. コンパイル/トランスパイル (Compile)"]
B --> C["3. 実行 (Execute)"]
C --> D["4. 結果の解析と可視化 (Analyze)"]&lt;/div>
&lt;ol>
&lt;li>&lt;strong>回路の構築&lt;/strong>: &lt;code>QuantumCircuit&lt;/code> オブジェクトを作成し、ゲートを追加していく。&lt;/li>
&lt;li>&lt;strong>コンパイル&lt;/strong>: 実行するバックエンド（実機やシミュレータ）に合わせて回路を最適化。&lt;/li>
&lt;li>&lt;strong>実行&lt;/strong>: バックエンドにジョブを送信し、結果を取得。&lt;/li>
&lt;li>&lt;strong>解析&lt;/strong>: 測定結果のヒストグラムなどをプロット。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="5-実践ベル状態量子もつれを作る回路の構築">5. 実践：ベル状態（量子もつれ）を作る回路の構築
&lt;/h2>&lt;p>理論で学んだ「量子もつれ（ベル状態）」を、実際にQiskitで作成してみましょう。目標とする状態は $|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}$ です。&lt;/p>
&lt;h3 id="51-回路の設計">5.1 回路の設計
&lt;/h3>&lt;p>ベル状態を作るには、以下の手順を踏みます。&lt;/p>
&lt;ol>
&lt;li>2つの量子ビットを用意する（初期状態はどちらも $|0\rangle$）。&lt;/li>
&lt;li>1つ目の量子ビットにアダマールゲート（H）を適用し、重ね合わせ状態にする。&lt;/li>
&lt;li>1つ目の量子ビットを「制御ビット」、2つ目の量子ビットを「標的ビット」として、CNOTゲートを適用する。&lt;/li>
&lt;li>結果を読み取るために測定（Measure）を行う。&lt;/li>
&lt;/ol>
&lt;h3 id="52-pythonqiskit-コード実装">5.2 Python/Qiskit コード実装
&lt;/h3>&lt;p>それでは、実際のコードを見てみましょう。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">QuantumCircuit&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">transpile&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit_aer&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Aer&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit.visualization&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">plot_histogram&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">matplotlib.pyplot&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">plt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. 回路の初期化&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2つの量子ビットと、2つの古典ビットを持つ量子回路を作成&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">qc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">QuantumCircuit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. Hゲートの適用&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 量子ビット 0 (q0) にアダマールゲートを適用&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">h&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. CNOTゲートの適用&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># q0 を制御ビット、q1 を標的ビットとして CNOT を適用&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cx&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 4. 測定&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 量子ビット 0 と 1 を測定し、古典ビット 0 と 1 にそれぞれ書き込む&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">measure&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 回路図を描画 (matplotlibを使用)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># qc.draw(&amp;#39;mpl&amp;#39;)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">draw&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>このコードを実行すると、コンソール上にアスキーアートで以下のような量子回路図が表示されます。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ┌───┐ ┌─┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">q_0: ┤ H ├──■──┤M├───
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └───┘┌─┴─┐└╥┘┌─┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">q_1: ─────┤ X ├─╫─┤M├
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └───┘ ║ └╥┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">c: 2/═══════════╩══╩═
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 0 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;code>H&lt;/code> がアダマールゲート、&lt;code>■&lt;/code> と &lt;code>X&lt;/code> の組み合わせがCNOTゲート、&lt;code>M&lt;/code> が測定を表しています。&lt;/p>
&lt;h3 id="53-シミュレータでの実行と結果の解釈">5.3 シミュレータでの実行と結果の解釈
&lt;/h3>&lt;p>次に、この回路をIBMの高性能シミュレータ &lt;code>Aer&lt;/code> で実行し、結果を確認します。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Aerシミュレータのバックエンドを取得&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">simulator&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Aer&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_backend&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;qasm_simulator&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># シミュレータ向けに回路をトランスパイル（最適化）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">compiled_circuit&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">transpile&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">qc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">simulator&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 回路を実行（ここでは1000回ショットを実行）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">job&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">simulator&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">run&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">compiled_circuit&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">shots&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1000&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 結果を取得&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">job&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 状態の観測回数（カウント）を取得&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">counts&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_counts&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">compiled_circuit&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">測定結果:&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">counts&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ヒストグラムのプロット&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># plot_histogram(counts)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># plt.show()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>結果の解釈&lt;/strong>&lt;/p>
&lt;p>コンソールの出力は以下のようになるはずです。
&lt;code>測定結果: {'00': 495, '11': 505}&lt;/code>
（※確率はランダムなため、実行ごとに数値はわずかに変動します）&lt;/p>
&lt;p>理想的なシミュレーション環境では、測定結果は &lt;code>00&lt;/code> と &lt;code>11&lt;/code> がおよそ50%ずつ観測され、&lt;code>01&lt;/code> や &lt;code>10&lt;/code> は一切観測されません。
これはまさに、私たちが作成したベル状態 $|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}$ の理論的予測と完全に一致しています。1つ目の量子ビットが0であれば2つ目も必ず0、1であれば必ず1になるという「量子もつれ」が正確にシミュレートされています。&lt;/p>
&lt;p>なお、実機の量子コンピュータ（IBM Quantum Hardware）で実行した場合、ノイズ（量子デコヒーレンスやゲートエラー）の影響により、わずかに &lt;code>01&lt;/code> や &lt;code>10&lt;/code> が観測されることがあります。このノイズをいかに減らすか（量子誤り訂正）が、現在の量子コンピュータ開発における最大の課題の一つです。&lt;/p>
&lt;hr>
&lt;h2 id="6-より高度なアルゴリズムへのスケールアップ">6. より高度なアルゴリズムへのスケールアップ
&lt;/h2>&lt;p>ベル状態の作成は量子プログラミングの「Hello World」とも言えます。ここからさらに発展させることで、古典コンピュータを凌駕する強力なアルゴリズムを構築できます。&lt;/p>
&lt;h3 id="61-ドイチェジョサのアルゴリズムdeutsch-jozsa-algorithm">6.1 ドイチェ・ジョサのアルゴリズム（Deutsch-Jozsa Algorithm）
&lt;/h3>&lt;p>与えられた関数 $f(x)$ が「定数関数（入力に関わらず常に0または常に1を出力する）」か「均衡関数（半分の入力に対して0、残りの半分に対して1を出力する）」のどちらであるかを判定する問題です。
古典コンピュータでは最悪の場合 $2^{n-1} + 1$ 回の関数の評価が必要ですが、ドイチェ・ジョサのアルゴリズムを使えば、量子の並列性を利用して&lt;strong>たった1回の評価&lt;/strong>で判定することができます。これは、重ね合わせ状態を入力し、干渉（Interference）を利用して不要な状態を打ち消し、欲しい答えを増幅させるという量子アルゴリズムの基本パターンを示しています。&lt;/p>
&lt;h3 id="62-グローバーのアルゴリズムgrovers-algorithm">6.2 グローバーのアルゴリズム（Grover&amp;rsquo;s Algorithm）
&lt;/h3>&lt;p>ソートされていない $N$ 個のデータベースから特定のデータを探し出す検索問題において、古典アルゴリズムが平均 $N/2$ 回の計算を要するのに対し、グローバーのアルゴリズムは $\sqrt{N}$ 回で目的のデータを見つけ出すことができます。
このアルゴリズムは、「オラクル（Oracle）」と呼ばれるブラックボックスを用いて目的の解の位相を反転させ、さらに「振幅増幅（Amplitude Amplification）」を行うことで、目的の解が観測される確率を劇的に高めます。&lt;/p>
&lt;div class="mermaid">graph TD
A["初期化 (すべての状態の重ね合わせ)"] --> B["オラクル (正解の位相を反転)"]
B --> C["拡散演算子 (平均値周りの反転による振幅増幅)"]
C --> D{"十分な確率に達したか？"}
D -- "No" --> B
D -- "Yes" --> E["測定"]&lt;/div>
&lt;hr>
&lt;h2 id="7-まとめとこれからの学習">7. まとめとこれからの学習
&lt;/h2>&lt;p>この記事では、量子コンピューティングの根本的な概念である重ね合わせや量子もつれから始まり、Qiskitを用いた量子論理ゲートの操作、そして実際にベル状態を構築・シミュレーションして結果を解釈するまでを詳細に解説しました。&lt;/p>
&lt;p>QiskitはPythonという親しみやすい言語で記述できるため、数学的・物理的な壁を越えて、アルゴリズムの構築に集中させてくれる強力なツールです。量子コンピュータは現在、ノイズを伴う中規模量子デバイス（NISQ: Noisy Intermediate-Scale Quantum）の時代にありますが、機械学習（Quantum Machine Learning）、化学シミュレーション（Quantum Chemistry）、暗号解読など、数多くの分野での応用研究が世界中で急速に進められています。&lt;/p>
&lt;p>ぜひ、この機会にQiskitを使って様々な量子回路を自作し、実機のIBM Quantumプロセッサで動かしてみてください。未来のコンピューティング・パラダイムをその手で体験できるはずです。&lt;/p>
&lt;h3 id="参考資料">参考資料
&lt;/h3>&lt;ul>
&lt;li>&lt;a class="link" href="https://qiskit.org/documentation/" target="_blank" rel="noopener"
>Qiskit公式ドキュメント&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://qiskit.org/textbook/ja/preface.html" target="_blank" rel="noopener"
>Qiskit Textbook&lt;/a> - より深く数学的背景やアルゴリズムを学びたい方におすすめの公式テキスト&lt;/li>
&lt;li>IBM Quantum Learning&lt;/li>
&lt;/ul>
&lt;p>量子の世界へようこそ！&lt;/p></description></item><item><title>量子超越性とは何か？GoogleとIBMの最新動向</title><link>http://kenji.blog/p/what-is-quantum-supremacy-google-ibm/</link><pubDate>Fri, 11 Sep 2026 18:00:00 +0900</pubDate><guid>http://kenji.blog/p/what-is-quantum-supremacy-google-ibm/</guid><description>&lt;img src="http://kenji.blog/p/what-is-quantum-supremacy-google-ibm/img/eyecatch.jpg" alt="Featured image of post 量子超越性とは何か？GoogleとIBMの最新動向" />&lt;h2 id="1-はじめに量子コンピューティングの夜明けと量子超越性">1. はじめに：量子コンピューティングの夜明けと「量子超越性」
&lt;/h2>&lt;p>量子コンピューティングは、物理学の根本原理である量子力学を情報処理に応用することで、古典コンピュータ（現在私たちが日常的に使用しているPCやスーパーコンピュータ）では現実的な時間内で解くことができない複雑な問題を解決する可能性を秘めています。この分野は長らく理論的な研究が主でしたが、近年、ハードウェアの急速な進歩により、実用化に向けた競争が激化しています。&lt;/p>
&lt;p>その中で最も注目を集めたキーワードの一つが「量子超越性（Quantum Supremacy）」です。これは、特定の計算タスクにおいて、量子コンピュータが古典コンピュータを圧倒する計算能力を示す瞬間を指します。本記事では、量子超越性の厳密な定義から始まり、2019年に世界で初めてこのマイルストーンに到達したと発表したGoogleの「Sycamore」プロセッサの実験詳細、それに対するIBMの反論と独自のアプローチ、そして真の実用化に向けた最大の障壁である「量子誤り訂正（Quantum Error Correction: QEC）」と「誤り耐性量子計算（Fault-Tolerant Quantum Computing: FTQC）」への最新のロードマップについて、技術的かつ数学的な深掘りを行いつつ解説します。&lt;/p>
&lt;hr>
&lt;h2 id="2-理論的背景量子計算の基礎と複雑性クラス">2. 理論的背景：量子計算の基礎と複雑性クラス
&lt;/h2>&lt;p>量子超越性を理解するためには、まず量子計算の数学的基礎と、計算複雑性理論における位置づけを理解する必要があります。&lt;/p>
&lt;h3 id="量子ビットと重ね合わせ">量子ビットと重ね合わせ
&lt;/h3>&lt;p>古典コンピュータにおける情報の最小単位はビット（0または1）ですが、量子コンピュータでは量子ビット（Qubit）を使用します。1つの量子ビットの状態 $|\psi\rangle$ は、基底状態 $|0\rangle$ と $|1\rangle$ の複素線形結合で表されます。&lt;/p>
$$
|\psi\rangle = \alpha|0\rangle + \beta|1\rangle
$$
&lt;p>ここで、$\alpha, \beta \in \mathbb{C}$ であり、規格化条件 $|\alpha|^2 + |\beta|^2 = 1$ を満たします。この性質を「重ね合わせ（Superposition）」と呼びます。&lt;/p>
&lt;h3 id="もつれentanglementとテンソル積">もつれ（Entanglement）とテンソル積
&lt;/h3>&lt;p>複数の量子ビットが存在する場合、システム全体の状態は個々の量子ビットの状態空間のテンソル積で表されます。$n$ 量子ビットのシステムは、$2^n$ 次元のヒルベルト空間 $\mathcal{H}^{\otimes n}$ 上のベクトルとなります。&lt;/p>
$$
|\Psi\rangle = \sum_{x \in \{0, 1\}^n} c_x |x\rangle
$$
&lt;p>ここで、$\sum |c_x|^2 = 1$ です。量子ビット同士が独立しておらず、一方の状態が他方に依存する状態を「量子もつれ（Quantum Entanglement）」と呼びます。これにより、量子コンピュータは指数関数的に広大な状態空間を同時に処理するポテンシャルを持ちます。&lt;/p>
&lt;h3 id="量子超越性の計算複雑性理論的定義">量子超越性の計算複雑性理論的定義
&lt;/h3>&lt;p>計算複雑性理論において、古典コンピュータが効率的に（多項式時間で）解ける問題のクラスを &lt;strong>BPP&lt;/strong> (Bounded-error Probabilistic Polynomial time) と呼びます。一方、量子コンピュータが効率的に解ける問題のクラスは &lt;strong>BQP&lt;/strong> (Bounded-error Quantum Polynomial time) です。&lt;/p>
&lt;p>量子超越性の実証とは、「BQPには含まれるが、BPPには含まれない（あるいはその可能性が極めて高い）特定のタスクを、実際の量子ハードウェアで実行し、古典スーパーコンピュータによるシミュレーションを時間的・リソース的に凌駕すること」を意味します。拡張チャーチ・チューリングのテーゼ（「すべての物理的に実現可能な計算モデルは、確率的チューリングマシンによって多項式時間でシミュレートできる」）を物理的な実験によって反証する歴史的な試みと言えます。&lt;/p>
&lt;hr>
&lt;h2 id="3-2019年googleによる量子超越性の実証">3. 2019年：Googleによる量子超越性の実証
&lt;/h2>&lt;p>2019年10月、Google Quantum AIチームは科学誌『Nature』にて、53量子ビットの超伝導プロセッサ「Sycamore（シカモア）」を用いて量子超越性を達成したと発表しました。&lt;/p>
&lt;h3 id="sycamoreプロセッサのアーキテクチャ">Sycamoreプロセッサのアーキテクチャ
&lt;/h3>&lt;p>Sycamoreプロセッサは、2次元格子状に配置された54個のトランズモン（Transmon）型超伝導量子ビットから構成されています（実験では1個が動作不良だったため53個を使用）。隣接する量子ビット間には可変結合器（Tunable Coupler）が配置され、高速かつ高精度な2量子ビットゲート（iSWAPゲートと制御Zゲートのハイブリッド）を実現しました。&lt;/p>
&lt;div class="mermaid">graph TD
A["Quantum Algorithm Input"] --> B["Sycamore Processor (53 Qubits)"]
B --> C["Apply Random Quantum Gates"]
C --> D["Measure Quantum States (Bitstrings)"]
D --> E["Cross-Entropy Benchmarking (XEB)"]
E --> F["Verify Quantum Supremacy"]&lt;/div>
&lt;h3 id="ランダム量子回路サンプリングrandom-circuit-sampling-rcs">ランダム量子回路サンプリング（Random Circuit Sampling: RCS）
&lt;/h3>&lt;p>Googleが選んだタスクは「ランダム量子回路サンプリング」です。これは、ランダムに選ばれた単一量子ビットゲートと2量子ビットゲートを複数サイクル（深さ $m$）にわたって適用し、最終的な状態を測定して得られるビット列の確率分布からサンプリングを行うというものです。&lt;/p>
&lt;p>理想的な（ノイズのない）ランダム量子回路から出力されるビット列 $x$ の確率は、均一分布ではなく、ポーター・トーマス分布（Porter-Thomas distribution）と呼ばれる干渉縞のようなパターンを示します。古典コンピュータでこの分布からサンプリングするためには、状態ベクトル全体のシミュレーションが必要となり、計算量は量子ビット数 $n$ と回路の深さ $m$ に対して指数関数的に増加します。&lt;/p>
&lt;h3 id="忠実度fidelityの評価線形交差エントロピーベンチマークxeb">忠実度（Fidelity）の評価：線形交差エントロピーベンチマーク（XEB）
&lt;/h3>&lt;p>実験結果が単なるノイズではなく、実際に量子計算が行われた結果であることを証明するために、Googleは線形交差エントロピーベンチマーク（Linear Cross-Entropy Benchmarking: XEB）を使用しました。実験で得られたビット列 $x_i$ に対する回路の理想的な確率 $P(x_i)$ を古典計算機で計算し、以下の式で忠実度 $\mathcal{F}_{\text{XEB}}$ を求めます。&lt;/p>
$$
\mathcal{F}_{\text{XEB}} = 2^n \langle P(x_i) \rangle_{i} - 1
$$
&lt;p>$\mathcal{F}_{\text{XEB}}$ が0であれば完全なノイズ、1であればノイズのない理想的な量子プロセッサを意味します。Sycamoreプロセッサは、深さ20の回路において $\mathcal{F}_{\text{XEB}} \approx 0.002$ (0.2%) を達成しました。一見低く見えますが、統計的に有意なゼロ以上の値であり、$2^{53} \approx 9 \times 10^{15}$ の状態空間を制御した驚異的な成果でした。&lt;/p>
&lt;p>全体のエラー率は、個々のゲートエラー、測定エラーなどの積として近似的にモデル化されました。&lt;/p>
$$
\mathcal{F} \approx (1 - e_1)^{N_1}(1 - e_2)^{N_2} \cdots \approx \prod_{g \in 1Q} (1 - e_g) \prod_{g \in 2Q} (1 - e_g) \prod_{q} (1 - e_{RO})
$$
&lt;p>（※ $e_g$ はゲートエラー、$e_{RO}$ は測定エラー）&lt;/p>
&lt;p>Googleは、この回路を古典スーパーコンピュータ（Summit）でシミュレートするには約1万年かかると主張しました。対して、Sycamoreはわずか200秒でサンプリングを完了しました。&lt;/p>
&lt;hr>
&lt;h2 id="4-ibmの反論超越性から有用性utilityへ">4. IBMの反論：「超越性」から「有用性（Utility）」へ
&lt;/h2>&lt;p>Googleの発表は世界中に衝撃を与えましたが、世界最大のスーパーコンピュータ「Summit」を開発し、自らも量子コンピュータ開発を牽引するIBMは、直ちにこの主張に反論する論文を公開しました。&lt;/p>
&lt;h3 id="テンソルネットワーク収縮による古典シミュレーションの改善">テンソルネットワーク収縮による古典シミュレーションの改善
&lt;/h3>&lt;p>IBMの反論の核心は、「古典コンピュータ側のアルゴリズムとリソースの最適化が不十分である」という点にありました。Googleはシュレディンガー方程式の時間発展をそのまま計算する状態ベクトルシミュレータを前提として1万年という見積もりを出しましたが、IBMは「テンソルネットワーク（Tensor Network）」と呼ばれる手法を用いることで、シミュレーション時間を劇的に短縮できると指摘しました。&lt;/p>
&lt;p>テンソルネットワークでは、量子回路のゲート操作を多次元配列（テンソル）の演算として表現し、ネットワークの「収縮（Contraction）」の順序を最適化します。さらに、Summitの持つ250 PBという巨大なストレージ（ディスクとメモリの階層化）をフル活用すれば、状態ベクトル全体を保持しつつ、わずか「2日半」でより高精度なシミュレーションが可能であると主張しました。&lt;/p>
&lt;h3 id="quantum-advantage-と-quantum-utility">Quantum Advantage と Quantum Utility
&lt;/h3>&lt;p>この議論を契機として、業界全体のトレンドは、単に「古典では不可能な人工的タスクを実行する（Supremacy）」ことへの固執から、「実社会の有用な問題において、古典的アプローチよりも実質的な優位性を示すこと（Quantum Advantage）」、さらには「量子コンピュータが科学的発見の新しいツールとして機能する（Quantum Utility）」というフェーズへと移行していきました。&lt;/p>
&lt;p>IBM自身は「超越性」という言葉を避け、量子プロセッサの総合的な性能指標として「量子ボリューム（Quantum Volume）」や「CLOPS (Circuit Layer Operations Per Second)」を提唱し、ハードウェアの規模と品質のバランスを重視した開発を進めています。&lt;/p>
&lt;div class="mermaid">timeline
title "The Evolution of Quantum Milestones"
2019 : "Google Sycamore (53Q)" : "Quantum Supremacy announcement"
2019 : "IBM Rebuttal" : "Summit supercomputer simulation in 2.5 days"
2021 : "IBM Eagle (127Q)" : "Breaking the 100-qubit barrier"
2022 : "IBM Osprey (433Q)" : "Advancing processor scale"
2023 : "Google Surface Code" : "Scaling error correction (d=3 to d=5)"
2023 : "IBM Quantum Utility" : "Complex spin model simulation on 127Q"
2024 : "Beyond" : "Logical Qubits and Error Mitigation era"&lt;/div>
&lt;hr>
&lt;h2 id="5-次なるフロンティアエラー緩和error-mitigationと量子誤り訂正qec">5. 次なるフロンティア：エラー緩和（Error Mitigation）と量子誤り訂正（QEC）
&lt;/h2>&lt;p>現在の量子コンピュータは「NISQ（Noisy Intermediate-Scale Quantum）」と呼ばれ、ノイズ（外部環境との相互作用や制御の不完全さによるエラー）の影響を受けやすく、長い計算を行うと結果がノイズに埋もれてしまいます。この問題を克服するためのアプローチには、大きく分けて「エラー緩和（Error Mitigation）」と「量子誤り訂正（Quantum Error Correction）」の2つがあります。&lt;/p>
&lt;h3 id="エラー緩和error-mitigation">エラー緩和（Error Mitigation）
&lt;/h3>&lt;p>エラー緩和は、量子ハードウェアを変更することなく、古典的な後処理によって計算結果の期待値からノイズの影響を取り除く手法です。IBMは2023年、127量子ビットの「Eagle」プロセッサと「ゼロノイズ外挿（Zero-Noise Extrapolation: ZNE）」などのエラー緩和技術を組み合わせることで、複雑なイジングモデルの時間発展シミュレーションにおいて、最先端の近似テンソルネットワーク法を超える精度を達成し、「Quantum Utility（量子有用性）」を実証しました。&lt;/p>
&lt;h3 id="量子誤り訂正qecと論理量子ビット">量子誤り訂正（QEC）と論理量子ビット
&lt;/h3>&lt;p>しかし、最終的に任意の複雑なアルゴリズム（例えばShorの因数分解アルゴリズムや複雑な量子化学計算）を実行するためには、エラー緩和だけでは不十分であり、エラーを動的に検出し訂正する「量子誤り訂正（QEC）」が不可欠です。&lt;/p>
&lt;p>QECの主流なアプローチが「表面符号（Surface Code）」です。これは、複数の物理量子ビット（データ量子ビット）を2次元格子状に配置し、その間に測定用量子ビット（アンシラ量子ビット）を配置して「スタビライザー（Stabilizer）」と呼ばれるパリティチェックを連続的に行う手法です。&lt;/p>
&lt;div class="mermaid">graph LR
Q1["Data Qubit (Data)"] --- M1["Measure X Stabilizer (Ancilla)"]
Q2["Data Qubit (Data)"] --- M1
Q3["Data Qubit (Data)"] --- M2["Measure Z Stabilizer (Ancilla)"]
Q4["Data Qubit (Data)"] --- M2
M1 --> EC["Error Syndrome Decoding (Classical)"]
M2 --> EC
EC --> LQ["Logical Qubit State Update"]&lt;/div>
&lt;h4 id="しきい値定理threshold-theoremと距離-d">しきい値定理（Threshold Theorem）と距離 $d$
&lt;/h4>&lt;p>量子誤り訂正には「しきい値定理」が存在します。物理量子ビットのエラー率 $p$ が特定のしきい値 $p_{th}$ （表面符号の場合はおよそ 1% 前後）を下回っている場合、符号距離（Distance）$d$ を大きくする（より多くの物理量子ビットを1つの論理量子ビットに割り当てる）ことで、論理エラー率 $p_L$ を指数関数的に下げることができます。&lt;/p>
&lt;p>論理エラー率の近似式は次のように表されます。&lt;/p>
$$
p_L \approx \Lambda \left( \frac{p}{p_{th}} \right)^{\frac{d+1}{2}}
$$
&lt;p>ここで、$\Lambda$ は定数です。$p &lt; p_{th}$ であれば、$d$ を大きくするほど $p_L$ は小さくなります。しかし、$p > p_{th}$ の場合、物理量子ビットを増やすほど逆にノイズが蓄積し、論理エラー率が悪化してしまいます。&lt;/p>
&lt;h4 id="googleの2023年マイルストーン距離の拡張によるエラー低減の実証">Googleの2023年マイルストーン：距離の拡張によるエラー低減の実証
&lt;/h4>&lt;p>2023年2月、Googleは『Nature』に記念碑的な論文を発表しました。彼らは第3世代のSycamoreプロセッサを用いて、表面符号の距離を $d=3$（17物理量子ビット使用）から $d=5$（49物理量子ビット使用）に拡張した際、論理エラー率が 3.028% から 2.914% へとわずかに低下することを世界で初めて実証したのです。&lt;/p>
&lt;p>これは、$p &lt; p_{th}$ の領域に足を踏み入れたことを意味し、物理量子ビットを増やせば増やすほど性能が向上するという、FTQCに向けた最も重要な原理検証（Proof of Concept）が完了したことを示しています。&lt;/p>
&lt;hr>
&lt;h2 id="6-ftqc誤り耐性量子計算に向けたロードマップと展望">6. FTQC（誤り耐性量子計算）に向けたロードマップと展望
&lt;/h2>&lt;p>GoogleとIBMは、それぞれ異なるアーキテクチャとアプローチを採用しながらも、最終的な目標であるFTQC（Fault-Tolerant Quantum Computing）に向けて激しい開発競争を繰り広げています。&lt;/p>
&lt;h3 id="ibmのアプローチモジュラー化とヘビーヘックス格子">IBMのアプローチ：モジュラー化とヘビーヘックス格子
&lt;/h3>&lt;p>IBMは、エラー率を徹底的に下げることと並行して、プロセッサのスケールアップに注力しています。「Eagle(127Q)」「Osprey(433Q)」「Condor(1121Q)」と単一チップの限界に挑む一方で、「Quantum System Two」というモジュラー型アーキテクチャを発表しました。また、量子ビットの結合トポロジーには、不要なクロストークを減らし、安定性を高める「ヘビーヘックス（Heavy-Hex）格子」を採用しています。IBMの戦略は、短期的には高度なエラー緩和で有用性を追求しつつ、段階的にQECを導入していくハイブリッドなアプローチです。&lt;/p>
&lt;h3 id="googleのアプローチ論理量子ビットの品質向上">Googleのアプローチ：論理量子ビットの品質向上
&lt;/h3>&lt;p>Googleの戦略は、物理量子ビットの数を急激に増やすよりも、1つの論理量子ビットのエラー率を極限まで下げる（例えば $10^{-6}$ まで下げる）ことに重きを置いています。その上で、モジュール間で量子状態を転送する技術（Quantum Interconnects）を確立し、数千〜数万の物理量子ビットを並列に動作させる大規模システムを目指しています。&lt;/p>
&lt;p>マジック状態蒸留（Magic State Distillation）などの非クリフォードゲートを誤り耐性を持って実行するためのプロトコル実装も、今後の大きな技術的ハードルとなります。実用的なShorのアルゴリズムを実行して2048ビットのRSA暗号を解読するには、エラー率 $10^{-8}$ 以下の論理量子ビットが数千個、物理量子ビット換算で数百万〜数千万個必要と言われており、道のりはまだ長いです。&lt;/p>
&lt;hr>
&lt;h2 id="7-おわりに">7. おわりに
&lt;/h2>&lt;p>「量子超越性」は、量子コンピュータの歴史において、計算機の理論的ポテンシャルを物理的に証明した重要なマイルストーンでした。Googleによる2019年の実証とIBMによる建設的な反論は、業界全体を単なる理論的証明から、実際の有用性（Utility）の追求、そして最終的な誤り耐性量子計算（FTQC）に向けた本格的なエンジニアリングの時代へと押し上げました。&lt;/p>
&lt;p>現在私たちは、ノイズまみれのNISQデバイスから、エラー訂正を備えた論理量子ビットデバイスへの過渡期に立ち会っています。今後数年から十年の間に、新しい材料科学の発見、創薬プロセスの革命、そして最適化問題のブレイクスルーが、この量子ハードウェアの進化と共に現実のものとなるでしょう。&lt;/p>
&lt;p>未来の計算機科学を形作るGoogleとIBM、そして世界中の研究者たちの動向から、今後も目が離せません。&lt;/p></description></item></channel></rss>