この記事は、架空の大学「圏峰(けんぽう)工科大学」の研究室を舞台にした、ひとつの対話篇です。
登場するのは、量子コンピュータと圏論に興味を持ちはじめた学部生と、論理学・圏論論理学を専門とする若手専任講師のふたり。
ここに登場するキャラクターと大学はフィクションですが、扱う中身(理論と応用例)は、すべて実在する数学と物理学と技術です。
出典は記事末にまとめました。
想定読者は、高校の数学はだいぶ忘れたけれど、毎日Pythonのコードを読んだり、書いたりしているエンジニアやデータサイエンティスト、機械学習エンジニア、AIリサーチ・サイエンティストの皆様です。
難解な学術用語や技術用語は、初出の段階で、分かりやすくかみ砕いて解説します。
数式が出てきても、読み飛ばして頂いても記事の内容を追えるように執筆しました。
はじめに ── 「量子の論理」って、なんの役に立つの?
「量子コンピュータ」という言葉は、もうニュースでおなじみです。
けれど、その裏側で、圏論(けんろん)という、数学のなかでもとびきり抽象的な分野が、こっそり主役級の働きをしている
── そう聞くと、意外に思われるかもしれません。
この記事は、「量子の世界の論理」を扱う3つの考え方が、いま私たちが使っているコンピュータや通信技術と、どこでつながっているのかを、対話でたどっていくものです。
登場するのは、次の3つです。
-
量子論理(quantum logic)
── 量子の世界では、ふつうの論理のルールが一部成り立たない。それを論理の側から取り出したもの。
-
トポス的量子力学(topos quantum mechanics) ── 量子力学を、「トポス」という圏論の“器”のなかで語り直す試み。
-
圏論的量子力学(categorical quantum mechanics, CQM) ── 量子の“処理の流れ”を「矢印の図」として描いて計算する枠組み。
名前はいかめしく、難解そうですが、一つずつ、視覚的にイメージを捉えられる絵(画)と、プログラミング言語のコードで、学術用語を解きほぐして、皆様と一緒に、読み解いていきます。
第1幕 ── そもそも、なぜ「論理」を作り直すのか
学部生:
先生、前から不思議だったんです。
ミクロの世界を調べるために、私たちはもう量子力学や場の量子論を持っていますよね。
なのに、量子の世界の論理を「圏論」みたいな枠組みでわざわざ取り出して、新しい論理を作る
── その動機って、なんなんでしょう。
物理の理論は、もうあるのに。
講師:
いい問いだ。まず、ひとつ整理させてほしい。
量子力学や、場の量子論は、「自然がどう振る舞うか」を予測する理論だよね。
電子がどこに何パーセントの確率でいるか、とか。
だけどね、いま話題にしている「論理」という主題が光を当てるのは、その物理を記述するときに私たちが裏でこっそり使っている“論理のルール”そのものなんだ。
だから、物理学の量子力学や「場の量子論」と、「論理」は、住んでいる世界が違う。
これからの会話の中では、この世界を、建物の階(フロア)と表現することにしようか。
学部生:
階が違う……
物理は「2階で現象を予測する」、
論理は「その物理を書くのに使った道具を、1階から眺める」
みたいな?
講師:
まさにその比喩がいい。
プログラマの言葉でいうなら、こうだ。
物理理論は「アプリケーション」で、論理は「そのアプリが動いているOS や言語仕様」。
アプリの動きを見ているだけだと、その下でどんな型システムや評価規則が走っているかは見えない。
それを明示的に取り出すのが、論理の仕事なんだ。
学部生:
なるほど。
じゃあ、その「量子のOS」を調べてみたら、何か変だった、ということですか。
講師:
そうなんだ。
これがバーコフとフォン・ノイマンという2人が1936年に気づいたことでね。
量子系の「観測できる主張(命題)」── 「電子のスピンは上だ」とか「位置はこの範囲だ」とか ── を全部集めて、その間の AND・OR・NOT の関係を調べると、ふつうの論理(古典論理)のルールが一部、成り立たないんだ。
学部生:
ルールが成り立たない、というのは、どのくらい変なんですか。
講師:
いちばん有名なのが「分配律(ぶんぱいりつ)」が破れること。
分配律というのは、
A かつ(B または C) = (A かつ B)または(A かつ C)
という、当たり前すぎて気にも留めないルールだ。
算数の a × (b + c) = a×b + a×c の、論理版だね。
Python で and と or を組み合わせても、当然これは成り立つ。
ところが、量子の命題の世界では、これが等しくならないことがある。
学部生:
えっ。それ、コードで見られますか。
講師:
見られるよ。
量子の命題は「空間のなかの“方向(部分空間)”」として表せるんだ。
「かつ」は、方向どうしの重なり(共通部分)、
「または」は、2つの方向を両方含むいちばん小さい空間になる。
平面のなかの3本の直線で試すと、こうだ。
import numpy as np
def line(theta):
"""原点を通る直線(量子の命題ひとつ)を、その向きで表す"""
return np.array([np.cos(theta), np.sin(theta)])
def dim_span(vectors):
"""それらが張る空間の“大きさ”(次元)"""
return np.linalg.matrix_rank(np.column_stack(vectors), tol=1e-9)
P = line(0.0) # x軸
Q = line(np.pi/2) # y軸
R = line(np.pi/4) # 斜め45度の直線
# 「または」= 2本を両方ふくむ最小の空間。Q または R は平面全体(次元2)
# 「かつ」 = 重なり。向きの違う2直線の重なりは原点だけ(次元0)
left = 1 # P かつ(Q または R)= P かつ 平面全体 = P(次元1)
right = 0 # (P かつ Q)または(P かつ R)= 原点 または 原点 = 原点(次元0)
print("左辺 P∧(Q∨R) の次元:", left) # 1
print("右辺 (P∧Q)∨(P∧R) の次元:", right) # 0
print("分配律は成り立つ?:", left == right) # False
左辺は次元 1、右辺は次元 0。等しくない。
ふつうの論理なら絶対に成り立つはずの分配律が、量子の世界では破れている
── これは思想や好みじゃなくて、空間の幾何から自動的に出てくる事実なんだ。
学部生:
へえ……! ルールを変えたくて変えたんじゃなくて、量子をちゃんと記述しようとしたら、勝手にはみ出しちゃった、と。
講師:
そのとおり。
「論理を作り直す」というより、「量子という現実を正直に書いたら、論理のほうがはみ出した」が正しい。
右側の図形(∧∨を領域で表した絵)は、厳密な集合演算の図というより「雰囲気を伝える模式図」です。
読者が「左右で形が違う=結果が違うんだな」と感じ取っていただけましたら幸いです。厳密な証明は、このあと「3本の直線」を使った図とコードでご覧いただけます。
だから動機は、おおきく3つに整理できる。
① 記述の動機。
量子をちゃんと書くには、古典論理からはみ出した構造(さっきの分配律の破れ)を、正面から扱うしかない ── これが量子論理。
② 統一の動機。
命題だけじゃなく、状態・観測・合成・時間発展もまとめて「矢印の図」で扱いたい
── これが、圏論的量子力学。
③ 意味論の動機。
「どんな“器”を選ぶと、どんな論理が出てくるか」を調べたい
── これが、トポス的量子力学。
第2幕 ── 「量子の奇妙な世界と整合する推論」が目的なの?
学部生:
つまり目的は、こういうことですか。
排中律が成り立たない、観測するまで状態がひとつに決まらず複数が確率的に併存している、トンネル効果が起きる ── そういう、日常感覚からかけ離れた世界に合う「論理推論」を行うこと、なんでしょうか。
講師:
半分はYes、半分はNo、だね。
まずは、Yesの面から。
たしかに、ふつうのルールが通じない世界で、それでも矛盾なく推論を進めるための「ルールブック」を与える、という側面はある。
「観測前は複数の状態が併存している」「けれど、測定すると、物理的な状態は、ただひとつの状態に収縮する」といった現象を、命題と演算の言葉で扱えるようにする。
本の上に散らばる ∧ ∨ ¬ の記号列は、意味のある式ではなく「論理記号の装飾」です。
「ルールブックには論理の記号がびっしり書かれている」という雰囲気を出すための演出だとお考えください。
学部生:
Noの面は?
講師:
ここが大事でね。
量子論理や圏論的量子力学は、トンネル効果のような物理現象そのものを“予測・計算”する道具ではないんだ。
トンネルの確率を出すのはシュレーディンガー方程式であって、論理じゃない。
論理が答えるのは、「この物理を書いている命題たちは、どんな構造をしているか」「その構造の上では、どんな推論が正しいか」という、一段メタな問いなんだ。
プログラマ風にいえば、論理は、「アプリの出力を計算する」んじゃなくて、「型チェッカ」に近い。
プログラムが正しく組み上がっているか、筋が通っているかを保証する側なんだ。
学部生:
予測エンジンじゃなくて、型チェッカ。腑に落ちました。
講師:
ひとつ補足すると、ここは専門家のあいだでも論争があるんだ。
哲学者のヒラリー・パトナムは、かつて「論理は経験的か?」という論文で、「量子力学は論理観を変える経験的な証拠だ、量子論理こそ“真の論理”だ」と論じた。
でも、いまその見方を「古典論理の置き換え」とみなす哲学者はほとんどいないし、パトナム自身も晩年にはその主張を保っていなかったようだ。
学部生:
じゃあ「これが量子世界の正しい唯一の論理だ」と言い切るのは……
講師:
危ない。
「量子力学の構造を映す論理の、有力な候補のひとつ」と捉えるのが、いまの誠実な立ち位置だね。
さて。
ここまでは、「考え方」 の話。
次は、いよいよ、『ここまで論じてきた抽象的な世界の認識論が、僕らの現実の日常生活を支える科学技術の「どの場面」に潜んでいるのか?』という問いだ。
第3幕【ハイライト】 ── あなたの未来のスマホやクラウドを支える「量子の図」
学部生:
ここまでの議論は、純粋な知の冒険として、深く、大きな価値があると思うんです。
でも、科学技術への応用例があると、ここまでの抽象的な世界の物語は、さらに臨場感を増してくると思うんです。
ここまで論じてきた圏論的量子力学には、工学的な応用事例や、科学技術での実用的な利用場面は、何かありますか?
講師:
あるよ。
しかも、「哲学的な冒険」どころか、いまや量子コンピュータ産業の現場ツールになっている。
その中心にいるのが ZX計算(ZX-calculus) という、圏論的量子力学から生まれた“お絵描き言語”だ。
学部生:
お絵描き言語、ですか。
講師:
そう。
量子計算を、ノードと線でできた配線図として描く。
そして、その図を決まった書き換えルールでパタパタ変形していくだけで計算が進む。
ふつうの量子回路が「行列のかけ算」だとすると、ZX計算は「図のあみだくじを整理する」感覚に近い。
しかも、図はぐにゃっと変形しても意味が変わらない。
線を引き伸ばしても、ノードを動かしても、表している計算は同じなんだ。
学部生:
書き換えルールって、たとえばどんなルールなんですか?
講師:
代表的なものを、3つだけ紹介しよう。どれも拍子抜けするくらい単純だよ。
その前に、ひとつ言葉を。
ZX計算では、図のノード(点)を、正式には「スパイダー(spider)」と呼ぶ。
世界中の論文やライブラリで使われる正式名称だから、頭の片隅に置いておくといい。
ただ本記事では、その姿をもっと優美なものにたとえよう
── ネックレスのチャーム(飾り玉) だ。
ひとつのチャームから、何本もの細いチェーン(鎖)が伸びている。
その「玉+伸びる鎖」の形が、ZX計算のノードそのものなんだ。
緑のチャームと赤のチャームの2種類があって、それぞれ別の役割を持っている、とだけ思っておけば十分だよ。
そのうえで、
ひとつ目のルール ── 融合(ゆうごう)ルール。
「同じ色のチャームどうしがチェーンでつながっていたら、ひとつに合体できる」。
合体するとき、それぞれが持っていた角度(位相)は足し算され、外につながっていたチェーンは全部そのまま残る。
プログラマの感覚でいえば、連続した同じ種類の処理を1つにまとめる ── リファクタリングで x += 1; x += 2 を x += 3 にまとめる、あの気分に近い。
学部生:
同じ色のチャームが隣にいたら、足してまとめる。それは分かりやすいです。
講師:
二つ目は、恒等(こうとう)ルール。
「チェーンが2本だけで、角度がゼロのチャームは、ただのチェーン1本に消してよい」。
何もしていないチャームは、鎖1本と同じだから、消してすっきりさせられる。
コードでいう「何もしない中間変数を削る」みたいなものだね。
三つ目は、色変えルール。
「アダマールという操作を通すと、チャームの色が入れ替わる($緑 ⇔ 赤$)」。
これは、ものを見る“基底”(見る角度のようなもの)を切り替える操作に対応している。
学部生:
なんだか、どれも「整理整頓のルール」みたいですね。
講師:
まさにそう。
しかも面白いのが、ZX計算のルールには色対称性という性質があってね。
あるルールの緑と赤をぜんぶ入れ替えると、それだけで「別の正しいルール」がもう一つ手に入るんだ。
たとえば「緑のチャームどうしは合体できる」というルールがあれば、色を入れ替えた「赤のチャームどうしも合体できる」も、自動的に正しいルールとして成り立つ。
だから、ルールは2つで1組。片方を覚えれば、対になるもう片方はおまけでついてくる。覚える量は、見た目の半分で済むんだ。
こうした単純なルールを積み重ねるだけで、複雑な量子回路がどんどん簡約されていく。
「賢い変形」じゃなく「単純なルールの反復」で計算が進むから、機械にも任せやすい
── これが、あとで出てくる自動最適化につながるんだ。
学部生:
それが、なんの役に立つんですか。
講師:
いちばん効くのが、量子回路の最適化だ。
ここはエンジニアのみんなが興味をもってくれそうな応用領域かもしれない。
いまの量子コンピュータは、とにかくノイズに弱い。
ゲート(演算)をひとつ実行するたびに、少しずつ誤差がたまる。
だから、「同じ計算を、より少ないゲート数でやる」ことが死活的に重要なんだ。
ZX計算は、回路を図にして、書き換えルールでムダなゲートを消したり、まとめたりして、より短い等価な回路に圧縮する。
特に「$T$ゲート」という、誤り訂正で特別にコストの高いゲートの個数($T$カウント)を減らす最適化で、最先端の成果を出している。
講師:
PyZX という Python ライブラリがあってね。pip install して、量子回路を放り込むと、ZX計算で自動的に図に変換して、最適化して、回路に戻してくれる。
君がいつも書いている Python から、この抽象理論にそのまま手が届くんだ。
# PyZX のイメージ(実際のAPIに近い擬似コード)
import pyzx as zx
circuit = zx.Circuit.load("my_circuit.qasm") # 量子回路を読み込む
g = circuit.to_graph() # ZX図(グラフ)に変換
zx.simplify.full_reduce(g) # 書き換えルールで自動的に簡約
optimized = zx.extract_circuit(g) # 図から、短くなった回路を取り出す
print(optimized.gates) # ゲート数が減っている
「圏論」と聞くと雲の上の話に思えるけど、実体は import して呼べるライブラリなんだ。
学部生:
うわ、急に身近になりました。
産業でも本当に使われているんですか?
講師:
分かりやすい証拠が、Quantinuum 社の量子ソフト開発キット TKET だ。
世界中で90万回以上ダウンロードされていて、その機能の中心に ZX が据えられている。
ZX計算は、ある商用量子コンパイラの「中間表現(intermediate representation)」として働いているんだ。
学部生:
中間表現! ふつうのプログラミングでいう、ソースコードを機械語に落とす途中の、あの LLVM IR みたいな……?
講師:
まさにその発想だ。
君が書いた Python が、バイトコードや中間表現を経て CPU の命令に翻訳されるよね。
それと同じで、人間が書いた量子アルゴリズムを、実機のハードウェアが実行できる操作に翻訳していく途中の共通言語として、ZX図が使われている。
コンパイラ技術そのものなんだ。
第4幕【ハイライト】 ── 「壊れない量子計算」と、量子インターネット
学部生:
さっき「誤り訂正で効く」とおっしゃいましたが、そこをもう少し聞きたいです。
講師:
量子計算を実用化する最大の壁が、誤り訂正だ。
量子ビットはすぐ壊れる(ノイズで状態が乱れる)から、たくさんの物理量子ビットを束ねて、1個の頑丈な「論理量子ビット」を作る。
その代表的な方式が 表面符号(surface code) だ。
産業界では、本命視されている。
学部生:
その表面符号と、ZX計算がつながるんですか。
講師:
これがきれいな話でね。
表面符号では、論理量子ビットどうしを計算させるのに「格子手術(lattice surgery)」という操作を使う。
名前は難解そうだけど、やっていることは単純で、符号の面(量子ビットを守る格子のかたまり)を、となりとくっつけたり(マージ)、ひとつを2つに割ったり(スプリット)するんだ。
面と面をくっつけて情報をやりとりし、また切り離す ── そういう「面の手術」で計算を進める。
学部生:
ふつうの量子回路の図とは、何が違うんですか。
講師:
ここが面白いところでね。
ふつうの量子回路は、「ゲート」という操作を線の上に並べて書く。
そして量子回路のゲートには、ひとつ約束ごとがある
── 入り口と出口の本数が必ず同じで、操作は必ず“巻き戻せる(元に戻せる)”、という性質だ。
専門的には「ユニタリ」と呼ぶ。
ところが、さっきのマージ(2つの面が1つに合わさる)やスプリット(1つが2つに分かれる)は、入り口と出口の本数が変わってしまう。
2つが1つになるんだから、巻き戻して元の2つにきれいに戻せるとは限らない。
つまり「ユニタリ」の約束から外れている。
だから、ふつうの量子回路のゲートの並びでは、素直に書けないんだ。
学部生:
本数が変わる操作は、回路図の枠に収まらない、と。
講師:
そこで ZX計算だ。
実は、ZX計算のチャーム(スパイダー)は、もともと、「脚の本数を自由に変えてよい」部品なんだ。
さっきのふつうのゲート(入口と出口が同じ本数)とは違って、2本の脚を1つに束ねたり、1つから3本に分けたり、自在にできる。
ここで思い出してほしい。
格子手術のマージは「2つの面が1つに合わさる」、スプリットは「1つが2つに分かれる」
── どちらも本数が変わる操作だったよね。
つまり、「本数を変える操作(マージ・スプリット)」を書くのに、「本数を自由に変えられる部品(チャーム)」がぴたりとはまる。
2つを1つに束ねる融合が、そのままマージに対応し、1つから2つに分ける形が、そのままスプリットに対応する。
だから、ZX計算は、格子手術とぴたりと一致するんだ。
表面符号の上で耐故障な量子計算を設計し、検証し、最適化するための、いわば「ネイティブ言語」になっている。
学部生:
誤り訂正という、いちばん泥臭くて実用的な部分の言語が、抽象理論から出てきている……。
講師:
そう。
「抽象的すぎて役に立たない」どころか、いちばん実装に近いところで言語になっている。
雲のなかに散らばる論理記号は、意味のある式ではなく「抽象理論の雰囲気」を出すための装飾です。「雲の上には、こうした抽象的な記号が漂っている」というイメージとしてお受け取りください。
さらに、この話は通信にも伸びる。
学部生:
量子通信、ですか。量子インターネットとか、量子暗号(QKD)の。
講師:
そう。
量子テレポーテーションや量子鍵配送(QKD)といったプロトコルは、「もつれ(エンタングルメント)」という資源を使う。
ところが、もつれが絡んだプロトコルは、従来のディラック記法だと正しさの検証がとても難しい。
ここで、もともと圏論的量子力学(とZX計算)が生まれた動機が効いてくる。
アブラムスキーとクーケ(2004)は、まさに「量子プロトコルを、検証しやすい図で書きたい」という思いから、この分野を立ち上げたんだ。
実際、ZX計算では、GHZ状態を使った超高密度符号化や、W状態を使った量子鍵配送が、図の変形として記述・検証されている。
BB84のような有名なQKDプロトコルも射程に入っている。
学部生:
つまり、未来の量子インターネットの「通信プロトコルの正しさ」を、この図で証明する、と。
講師:
ネットワークのプロトコル検証を、配線図でやる
── イメージとしては、通信仕様を形式手法できっちり検証するのに近い。
君がいつか量子ネットワークのソフトを書くとき、その下でこの図が、プロトコルの健全性を支えているかもしれない。
第5幕 ── AI・自然言語処理との交差点
学部生:
AI との接続はありますか?
Qiita だと、やっぱりそこが気になる人が多くて。
講師:
ある。
量子自然言語処理(QNLP, Quantum Natural Language Processing) という分野でね。
これはちょっと感動的な話だ。
クーケたちは、「文の文法構造」と「量子の合成構造」が、圏論の目で見ると同じ形をしていることに気づいた。
文法でいう「主語と動詞と目的語が、線でつながって意味を作る」構造と、量子でいう「いくつかの量子ビットが、もつれて1つの状態を作る」構造が、どちらも同じ「モノイダル圏」という器の上の図として書けるんだ。
学部生:
モノイダル圏って、なんですか。急に難しい言葉が出てきました。
講師:
身がまえなくていい。
「部品を、横に並べたり、縦につないだりして、図で組み立てられる世界」 のこと、と思えばいい。
プログラマの感覚だと、こうだ。
関数を縦につなぐのが合成(f のあとに g)、
データを横に並べるのがタプル((a, b))。
この「縦につなぐ・横に並べる」の2つがそろった世界を、数学では「モノイダル圏」と呼ぶ。
それだけのことなんだ。
学部生:
縦と横でものを組み立てる世界。意外と素朴ですね。
講師:
そう。
そして決定的なのは、文法の世界も、量子の世界も、どちらもこの「縦と横で組み立てる世界」になっていることだ。
文法のほうを見てみよう。
「猫が魚を食べる」という文は、主語・動詞・目的語 という部品が、線でつながって1つの意味になる。
動詞「食べる」は、左から主語を、右から目的語を受け取って、文全体の意味を返す
── これは、2つの入力を受け取って1つの出力を返す関数と、まったく同じ形だ。
学部生:
あ、動詞って、引数を2つ取る関数みたいなものなんですね。eat(猫, 魚) みたいな。
講師:
まさにそれだ。
君のその直感が、圏論的にはほぼ正確なんだ。
そして量子のほうも、同じ形をしている。
いくつかの量子ビットが、もつれて1つの状態を作る
── その「部品どうしを線でつないで合成する」やり方が、文法とぴたり重なる。
だから、クーケたちはこう考えた。
文法の図を、そのまま量子の図だと読み替えれば、「文の意味」を量子状態として計算できるんじゃないか、と。
実際、このモデル(DisCoCatと呼ばれる)では、文法構造が「単語の意味ベクトルを組み合わせる手順書」として働く。
文の意味が、線形代数の計算で、文法の形にそって組み上がっていくんだ。
学部生:
文法が、そのまま「計算の設計図」になる……。
講師:
クーケはこれを、半ば冗談めかして「文法的な場の量子論」と呼んだ。
物理で時空のうえに場を乗せるのと同じ構造で、文法のうえに意味を乗せている、というわけだ。
違う分野が、同じ数学の骨格を共有している ── これこそ、圏論がいちばん得意とする「橋渡し」なんだ。
学部生:
文法と量子が、同じ数学の形……?
講師:
そう。
だから、「文の意味」をそのまま「量子回路」として表して、量子コンピュータの上で計算しようという試みが成り立つ。
lambeq という、これも Python ライブラリが公開されていて、文を構文解析して量子回路に変換できる。
学部生:
自然言語処理といえば、いまは Transformer や大規模言語モデル全盛ですよね。それとは別物ですか?
講師:
別系統だね。
いまの主流のLLMは、巨大な行列のかけ算とニューラルネットで「統計的に」言語を扱う。
QNLP は「文法構造を量子の合成構造に対応させる」という、もっと構造主義的なアプローチだ。
実用規模ではまだ研究段階で、いまのLLMと性能を競うものではない。
ただ、「意味の合成のしかた」を、圏論という共通言語で物理・計算・言語にまたがって扱える、という点に、長い目で見た面白さがある。
学部生:
へえ……圏論が、量子と言語の“通訳”になっているんですね!
講師:
うまいことを言うね。
実は、圏論のいちばんの効能が、それなんだ。
「違って見える分野が、同じ構造を共有している」と見抜いて、橋を架けること。
量子・言語・論理を、ひとつの絵の文法でつなぐ ── それがこの分野の醍醐味だよ。
第6幕 ── 量子論理とトポス的量子力学は、なにに使われている?
学部生:
いま伺ったのは、おもに圏論的量子力学(とZX計算)の話でした。
でも、量子のルールを「論理として取り出す」直系のアプローチは、量子論理(quantum logic)とトポス的量子力学のほうですよね?
これらの応用事例は?
講師:
鋭い区別だ。
ZX計算は「論理を取り出す」より「過程を図で計算する」道具寄りだからね。
で、量子論理には、量子コンピュータとは別の、意外な応用がある。
検索エンジンとデータベースだ。
学部生:
検索!? 量子と、どうつながるんですか。
講師:
こう考えてみて。
ふつうのデータベースの検索(SQL の WHERE)は、「条件に合うか・合わないか」の二択だよね。
age > 30 AND city = 'Tokyo'、合致するかしないか。
ところが、Google で検索したり、レコメンドを出したりするときに本当にほしいのは、「どのくらいマッチしているか」という程度のほうだ。
二択じゃなくて、関連度のスコア。
学部生:
たしかに。「完全一致」だけじゃ、検索は使い物にならないですね。
講師:
そこで、情報検索の理論家ファン・レイスベルゲンが「データベースの二択論理と、検索の程度論理を、ひとつの理論で統一できないか」と考えた。
その統一理論に、彼は量子論理を使ったんだ。
シュミットは、これを CQQL という問い合わせ言語として具体化した。
なぜ量子論理が向くか
── 理由はまさに、第1幕でやった「分配律が成り立たない」だ。
$AND・OR・NOT$ を、二値じゃなく連続値(程度)で、文脈に応じて柔軟に組み合わせられる。
気分としては、こんなコードになる。
# 量子論理ふうの「程度つき」論理演算(真理値は 0.0〜1.0)
def q_and(a, b): return a * b # かつ:両方が高いほど高い
def q_or(a, b): return a + b - a * b # または
def q_not(a): return 1 - a # でない
# ある写真が「赤い」度合い 0.9、「丸い」度合い 0.6
red, round_ = 0.9, 0.6
print("赤くて丸い (AND):", round(q_and(red, round_), 3)) # 0.54
print("赤いか丸い (OR):", round(q_or(red, round_), 3)) # 0.96
print("赤くない (NOT):", round(q_not(red), 3)) # 0.1
二値の True/False ではなく、0.54 のような「スコア」で検索結果をランキングできる。
これは実際に、画像検索のタスクや、さらにはマーケティングのコンジョイント分析(消費者がどの組み合わせを好むか予測する手法)にも応用されて、従来手法と互角の結果を出している。
学部生:
量子コンピュータがなくても、ふつうのパソコンの上で、量子“論理”は役に立っている、と。
講師:
そこが面白いところだ。
量子論理は、量子ハードウェアと切り離しても、「程度つき・文脈依存の論理演算」の数学として、検索やレコメンドに効く。
君がレコメンドエンジンを書くとき、知らないうちにこの考え方を使っているかもしれない。
学部生:
では、トポス的量子力学のほうは?
講師:
こちらは正直に言うと、産業応用というより物理学の基礎・解釈問題が主戦場だ。
アイシャムとデーリングが始めたこのプログラムの動機は、「量子力学を、観測者に依存しない、実在論的な言葉で語り直せないか」というものでね。
量子論理が分配律を捨てたのに対して、トポス的アプローチは別の手を使う。
「文脈(同時に測れる観測量の組)ごとに、古典的な“スナップショット”を作って、それらをトポスという器のなかで貼り合わせる」。
すると、量子系に対しても、トポスの内部論理である直観主義論理で推論できるようになる。
学部生:
あ、それは、「トポスを選ぶと論理が決まる」という話 に、まっすぐつながりますね。
講師:
そう。君が直観主義論理を勉強したなら、ここで効いてくる。
ただし、トポス的量子力学の「応用」は、いまのところ次のような性格だ。
ひとつは、量子重力・量子宇宙論への基礎づけ
── 宇宙全体を記述したいとき、「外側の観測者」を置けないから、コペンハーゲン解釈が困る。
その難所への対処。
もうひとつは、コッヘン-シュペッカーの定理(量子には観測者と無関係な“隠れた値”を一斉には割り当てられない、という有名な定理)の、トポスを使った再定式化。
いずれも「実機で何かを高速化する」種類じゃなくて、「基礎をより整合的に記述する」方向の貢献だ。
この点で、量子コンパイラで実用化した ZX計算とは、はっきり対照的だね。
まとめ ── 「3つの器」の応用地図
学部生:
整理させてください。
-
圏論的量子力学(CQM / ZX計算) は、量子回路の最適化・誤り訂正(表面符号)・量子コンパイラ(TKET)・量子通信プロトコルの検証・量子自然言語処理として、いま動いている量子技術の現場で使われている。
Python なら PyZX や lambeq で触れる。
-
量子論理(quantum logic) は、量子コンピュータがなくても、検索エンジン・データベース・レコメンド・コンジョイント分析で「程度つき・文脈依存の論理演算」として使われている。
-
トポス的量子力学(topos quantum mechanics) は、産業応用というより、量子重力・量子基礎論で「実在論的な記述」を与える方向に効いている。
講師:
よくまとまっている。
出発点はどれも「量子の命題は、どんな構造をしているか」という、君が最初に言ったメタな問いだった。
それが、量子コンパイラ、検索エンジン、物理基礎論へと枝分かれしている。
学部生:
……正直に言うと、今日いちばん驚いたのは、こういうことなんです。
**「圏論」とか「量子論理」**って、いちばん浮世離れした、役に立たなさそうな学問だと思っていた。
でも、未来のスマホやクラウドが頼る量子コンピュータのコンパイラや、それを壊れにくくする誤り訂正や、通信の安全性の証明の、いちばん底のところで、それが言語として動いている……。
講師:
そうなんだ。
私たちが日常で何気なく使う技術の、ずっと裏の裏の、土台の地層に、こういう抽象理論が潜んでいる。
「これは何の役に立つのか」と「これは知るに値するか」は、別々に立つ問いだ。
そして時々、後者を真剣に追いかけた先で、前者が後からついてくる。
量子の論理は、その見事な実例だよ。
学部生:
知りたいから知る、を続けていたら、いつのまにか世界の役に立っていた、と。
……その順番、かっこいいですね。
講師:
だろう。
さあ、続きはホワイトボードでやろうか。
あの「チャーム(スパイダー)」の描き方から教えるよ。
参考文献
- Birkhoff, G., von Neumann, J. (1936). “The Logic of Quantum Mechanics.” Annals of Mathematics, 37(4), 823–843.
- Abramsky, S., Coecke, B. (2004). “A categorical semantics of quantum protocols.” LICS 2004.
- Coecke, B., Kissinger, A. (2017). Picturing Quantum Processes. Cambridge University Press.(ZX計算・圏論的量子力学の標準的教科書)
- de Beaudrap, N., Horsman, D. (2020). “The ZX calculus is a language for surface code lattice surgery.” Quantum, 4, 218.
- Kissinger, A., van de Wetering, J. (2020). “PyZX: Large scale automated diagrammatic reasoning.” EPTCS.(Python ライブラリ PyZX)
- Quantinuum, TKET(ZX を中核に持つ量子ソフト開発キット)に関する技術資料。
- Hillebrand, A. (2012). “Superdense Coding with GHZ and Quantum Key Distribution with W in the ZX-calculus.” EPTCS.
- 量子自然言語処理(QNLP)および Python ライブラリ
lambeq(Quantinuum)に関する一連の研究。 - van Rijsbergen, C. J. (2004). The Geometry of Information Retrieval. Cambridge University Press.
- Schmitt, I. (2008). “QQL: A DB&IR Query Language.”(commuting quantum query language, CQQL)The VLDB Journal, 17(1), 39–56.
- Isham, C. J., Butterfield, J. (1998–2002). “A topos perspective on the Kochen–Specker theorem (I–IV).” International Journal of Theoretical Physics.
- Döring, A., Isham, C. J. (2008). “A Topos Foundation for Theories of Physics (I–IV).” Journal of Mathematical Physics.
- Putnam, H. (1968). “Is Logic Empirical?”(後に “The Logic of Quantum Mechanics” として再録). Boston Studies in the Philosophy of Science, vol. 5.
※ 本記事は対話形式の解説です。
登場人物・大学は架空ですが、理論および応用例は上記の実在の研究にもとづいています。
コード例($PyZX$ 部分)は概念を伝えるためのイメージを含みます。
専門家の方々からのご指摘・ご指導を頂けますと幸いです。



































