団代数(cluster algebra)

  • こちらが資料
  • 団代数という代数がある
  • 応用が面白いという
  • ちょっと面倒くさいので、自分がわかりにくかった点を補強しながら、説明文を書いておく
  • 団代数は、面倒臭い規則によって定められる「変数(団変数)」の整数係数線形和のこと
    • この「変数(団変数)」というのは、ある変数のセット(これが団・クラスタの由来)の有理式で表される
      • 有理式で表されるものたちを扱いたいので、元となる変数のセットは、代数的に独立で可換であることを仮定すると都合がよく、そのようになっている
    • この基本となる変数のセットは、ある規則で、別の変数のセットに対応付けられる
    • 別の変数のセットへの対応付けは、1個以上ある
    • その対応付けは、変数のセットの構成要素の数だけある
    • 別の変数のセットへの対応付けは、ある一つの構成要素x構成要素の正方行列によって規定される
    • その正方行列は、反対称化可能行列によって定まる
    • つまり、「団代数」は、ある変数のセット x_0と、ある反対称化可能行列 B_0とを定めることで定義できるものである
    • 少し話を複雑にするのは、このB_0には、グラフが対応することである
    • そのグラフは、箙(クイバー)と呼ばれる有向グラフである
    • また、B_0は複数の団代数のセットを、別のセットにまとめて変化させる変化規則を定めているが、B_0自体も、その変化規則によって、別の行列に対応付けることができる
    • 対応付けは、変数セットの構成要素の数だけある
    • それぞれの対応付けは新たな正方行列を生成するが、それも箙になっている
  • さらに複雑になる話があるが、それは、上記を理解したうえで、考えるのがよい
    • B_0が定める規則として、同じく、変数セットの構成要素の数だけの変化規則を別に定めることができる
    • その変化規則によって、別の変数セットとその変化生成変数セットが集合をなす
    • この2つの変化規則には、対応関係があって、その結果生じる変数セットとその構成要素間に、特別な対応関係がある
    • その対応関係は、双対関係にあるらしい
  • 以下は、理解を確かめるためのRコードとその箙
    • 左上の箙を、ノード1,2,3の順に選んで、変化箙を左下、右上、右下に描図
    • 変化箙は
      • (1)選んだノードへの接続辺の向きを変える
      • (2) それ以外の接続関係は、選んだノードkが絡んでいなければ変化させない。選んだノードi,jが両方絡んでいれば、i->kの有向辺がP本(P>=0)、k -> j 有向辺がQ本(Q>=0)のとき、PQ本のi->j有向辺を加える。その上で、i-j間の行ったり来たりはキャンセルする
        • この計算は、選んだノードがk番目として、行列のk行とk列の操作。追加辺の数は、k行とk列の非負化ベクトルのouter()積が作る、Bと同サイズの行列として計算できる。i-j間の行ったり来たりは、元の行列に増分を加算することで計算できる

f:id:ryamada:20190811061459p:plain

> B
     [,1] [,2] [,3]
[1,]    0   -1    2
[2,]    1    0   -1
[3,]   -2    1    0
# 変化したB.
     [,1] [,2] [,3]
[1,]    0    1   -2
[2,]   -1    0    1
[3,]    2   -1    0
     [,1] [,2] [,3]
[1,]    0    1    1
[2,]   -1    0    1
[3,]   -1   -1    0
     [,1] [,2] [,3]
[1,]    0    1   -2
[2,]   -1    0    1
[3,]    2   -1    0
  • 三角形分割の箙表現についてはこちら
  • 団変数は有理式。その正方行列による変化についてはこちら
  • 同じ行列が定める2つの団変数が相互に双対関係にあることはこちらの記事で

PyQuboを使ってみる、openjijも使ってみる

  • QUBOは制約条件下での解探索をしてくれる
  • pyQuboは制約式を書いて、それをコスト関数QUBOにしてくれる
  • Mac
  • Cmakeが入っていなくて、brewも使えない状態だったので
  • まずbrew を使える様にする
  • Homebrewのコピペコマンドを使ってbrewを使える様にする
  • ついで
brew install cmake
  • そのあと
pip install pyqubo
pip install openjij

ぱらぱらめくる『高校数学からはじめる量子コンピュータ』

第1章 量子コンピュータへの誘い

  • 量子ビットは、nビットで2^n通りを表せる
  • nビットが一度にもてる値も2^n通り(量子力学による重ね合わせの原理が働いているから)
  • ただし、測定で得られる結果は確率的に出てきて、その値は1回に1個。1測定で状態は変わってしまう。何度も測定することもあり。求める解が出る確率を高める工夫をする必要が実用上は大事

第2章 1量子ビットの世界

  • 量子ビットは、複素数の組で、2つの複素数の絶対値の二乗の和が1
  • Q:=\{\begin{pmatrix} a\\b \end{pmatrix} \in \mathbf{C}^2 | |a|^2 + |b|^2 = 1\}
  • 古典ビットは0か1か。それを|0>, |1>と書くことにすると、\begin{pmatrix} a\\b \end{pmatrix} = a \times |0> + b \times |1>; a,b \in \mathbf{C}, |a|^2 + |b|^2 =1と表せる
  • 複素ベクトルの内積<\psi | \psi> = (a^* \\ b^*) \begin{pmatrix} a\\ b \end{pmatrix} = a^* a + b^* b = |a|^2 + |b|^2と書くことにすると
  • Q = \{ |\psi > \in \mathbf{C}^2 | <\psi | \psi > =1\}と書ける
  • 量子ビットを測定すると、|0>または|1>が得られる。それぞれが得られる確率が|a|^2,|b|^2である
  • 古典コンピュータでは、0,1の値を変化させる。コンピュータの内部的には、AND, OR, XORなどの基礎的演算ですべてのプログラムは動いている
  • 量子コンピュータでは、量子状態を発展させる。このとき、状態発展なので、測定して得られる確率が全部で1、を守るような発展をすることが必要で、そのような発展がユニタリ発展
  • 具体的にはユニタリ行列によって状態ベクトル(重ね合わせ)は発展する
  • ユニタリ行列は U^{\dagger} U= I
  • 古典コンピュータでは、0,1の値を取って、0,1の値を返す基礎演算を電子回路で作成した
  • 量子コンピュータでは、ユニタリ発展をハードウェアとして実装する
  • 量子状態の区別。量子状態は、確率を測定してみて、初めてわかるもの(らしい)。したがって、測定して確率情報を得ることで状態についての知識が得られる。確率情報が同じだが、異なる量子状態は区別できない。ある状態では確率が同じだが、ユニタリ発展させると確率が変わるような量子状態は、ユニタリ発展させてみることで区別が可能になる。他方、ユニタリ発展させても、区別できないような異なる量子状態というものも存在する。ある量子状態に絶対値1の複素数をかけてできる量子状態は、この「区別できない量子状態」である
  • RにQuantumOpsというパッケージがある。それを使って、上記のことをやってみる。資料はこちら
# install.packages("QuantumOps")
library(QuantumOps)
k1 <- ket(1,2)
k1 # |k1|^2 = 1に標準化される
k2 <- ket(1i, 2*1i)
k2 
# k1と同じになる。c(1i,2*1i) = 1i * (1,2) であり、絶対値1の複素数(この場合は1i)をかけてできる量子状態は区別できないことに対応する
    • Multi-qubit Kets
      • 2^n要素で作ることができる
ket(1,1,3,1)
k1 <- ket(0,1)
k2 <- ket(1,1)
k1k2 <- tensor(k1,k2)
k1k2
k1k2k2 <- tensor(k1k2,k2)
k1k2k2
# tensor()関数はqubitsを3個以上も取れる
tensor(k1,k2,k2)
      • Dirac 記法(\sqrt{2} |00> + \sqrt{2} |10>のような)も用意されている
dirac(k1)
dirac(k1k2)
dirac(k1k2k2)
> dirac(k1k2)
[1] "0.707|10> + 0.707|11>"
> dirac(k1)
[1] "1|1>"
> dirac(k1k2)
[1] "0.707|10> + 0.707|11>"
> dirac(k1k2k2)
[1] "0.5|100> + 0.5|101> + 0.5|110> + 0.5|111>"
      • input registerの情報に基づき、target registerの値を変える。RのQuantumOpsパッケージのUf()関数の仕様確認は→こちらの記事

第3章 1量子ビットの量子回路

  • 量子回路にはユニタリ発展に相当するユニタリ行列を配置する。入力と出力を持つ
  • 量子回路からの測定は、量子回路から、古典回路に値をコピーする、という形式で表す
    • RのQuantmuOpsパッケージでは、I(),X(),Y(),Z(),H(),R(),S(),T()という、1量子ビット用の演算関数が用意されている。その演算の行列表示は
X
    • のようにすると、関数の中身が見られる

第4章 2量子ビットの世界

第5章 2量子ビットの量子回路

  • 量子ビットのユニタリ発展は4x4行列が必要。規模が大きくなると行列が大きくなる
  • それを防ぐのに次のルールがある
    • (U \otimes V) (|\psi> \otimes |\phi>) = (U |\psi>) \otimes (V |\phi>)
  • このようなことができるのは、量子がもつれていないとき

第6章 量子プログラミング・入門編

  • QiskitをローカルPCで実行する環境を作る
    • こちらに従って、Anacondaインストール後に
    • Windows10のスタートアップメニューからAnaconda promptを立ち上げ、そこで
conda create -n myHoge python=3
activate myHoge
    • すると、プロンプトにmyHogeに入っている、と見える。そのうえで
pip install qiskit
    • 長くかかるが…。終わったら
pip install qiskit-terra[visualization]
    • これで準備ができたはず
    • そのまま、myHogeのプロンプトで、
jupyter notebook
    • とjupyter notebookを起動し、新しい、python3 ノートを開けば
import qiskit
    • がきちんと(ちょっとロードに時間がかかるが)回る
    • Macではターミナルから
conda create -n myHoge python=3
activate myHoge
pip install qiskit
pip install qiskit-terra[visualization]
jupyter notebook
    • とする
  • というわけで準備ができたので、本のサイト(こちら)のjupyter notebookをダウンロードして、この環境で開けばなぞれる

第7章 量子プログラミング・実機編

  • IBMのサイトに行って、そのアカウントにTokenを使ってローカルからアクセスして…というのは、本が書かれた時から仕様変更があるらしく、難航
  • それよりはIBMのサイト上で遊ぶのがよいかも
  • いずれにしてもtutorialはこちら

qiskit.org

Appendix

正三角形で作る立体

  • 底面と上面が正三角形x6でできた正六角形で、底面と上面を\pi/6だけ角度をずらし、側面に正三角形を貼る。側面の正三角形は、1点を底面(もしくは上面)と共有し、その対辺を、もう片方の上面(もしくは底面)と共有する
  • 次数6の頂点が2個、次数5の頂点が12個
  • ちなみに、正三角形で作る穴のない閉多面体では、次数が6か5の頂点しかない場合、次数5の頂点はいつも12個となる

サッカーボール 切頂20面体 双対グラフ

  • サッカーボールの展開図がここにある
  • これを対応辺を糊付けして、平面グラフ化すると5角形と6角形とでできた平面グラフになる

f:id:ryamada:20190720092104j:plain

  • この頂点の周りには必ず3個の面があるので、その3面を反時計回りにID登録すると、双対グラフの向き付き3角形の集合が得られる
# サッカーボール
# の三角メッシュ
football.tri <- rbind(c(1,7,4),c(4,7,8),c(1,9,7),c(1,2,9),c(2,23,9),c(2,3,23),c(3,29,23),c(3,19,29),c(3,13,19),c(2,13,3),c(2,10,13),c(1,10,2),c(1,5,10),c(1,4,5),c(4,6,5),c(4,8,6),c(6,8,17),c(8,26,17),c(17,26,31),c(17,31,16),c(6,17,16),c(11,6,16),c(5,6,11),c(5,11,12),c(10,5,12),c(10,12,13),c(13,12,14),c(13,14,19),c(8,21,26),c(8,7,21),c(7,22,21),c(7,9,22),c(9,23,22),c(22,23,25),c(23,29,25),c(16,31,32),c(16,32,15),c(16,15,11),c(11,15,12),c(12,15,14),c(15,32,18),c(15,18,14),c(14,18,19),c(20,19,18),c(29,19,20),c(26,27,31),c(27,26,24),c(26,21,24),c(21,22,24),c(24,22,25),c(27,24,28),c(24,25,28),c(25,29,28),c(28,29,20),c(31,27,30),c(27,28,30),c(28,20,30),c(32,31,30),c(18,32,30),c(20,18,30))

ぱらぱらめくる『Picturing Quantum Processes』

1 Introduction

  • 長年にわたり量子力学では、うまく説明がつかないことがあり、それらを「バグ」のように扱ってきたが、そもそも「バグ」ではなく、「そういうもの・そういう性質をもつものだ」と考えればよいのでは、というスタンスに立つ
    • バグを説明するためにいろいろなものを導入してみたが失敗している(もしくは完全には成功していない):C*-代数(非可換代数)、Quantum logicにおける確率の取り扱い・non-distributivity、Quantum measure theory(加算できないmeasure)
  • いわゆる数学的記述とピクチャ記述の違いは、プログラムのバイナリと人にやさしいプログラミング言語との違いのようなもの
  • Process Theoryで考える。因果関係でとらえるのではなく、そのように変化していく、というとらえ方
  • 量子力学に限らず、論理学にも応用範囲は広がる

2 Guide to Reading This Textbook

  • 大まかな流れは、以下の通りで
  • 基本は、箱と線(wire)
  • String diagrams (線の引き方を見ていくと、水平方向・鉛直方向に反転可能になったりする)。これの導入により、non-separability,unitarity,impossibility to clone arbitrary states,quantum teleportationなどを扱えるようになる
  • Thin vs. Thick. 量子の説明はthin、それの二重・二乗・内積がthickとなりそれは古典力学対象。消滅も扱う
  • Spidersは3個以上の箱をつなぐ。Spidersの手足が集まる胴体は複数あったものを一つにまとめたりできる
  • Spidersに異なる色を着けられる、異なるphasesを与えられる
  • これら全部の道具立てがそろったら、量子力学の全体像をpicturingしていく

3 Processes as Diagrams

  • 過程(processes)が箱で、システム(全体の成り立ち)が線(wires)
  • 0個以上の入力を持ち、0個以上の出力を持つものは、すべて過程(関数型プログラミングっぽい)。線は入力・出力に対応し、型を持つ
  • 過程には、動詞的なもの(時間をかけて何かを起こす)が入ることもあり、装置名が入ることもある
  • 線が表すのは情報フロー
  • 情報には型があり、それは線の属性。過程に定めた入力・出力の型合わせは大事
  • 過程理論
    • T:線が持つ型の集合
    • P:過程の集合
    • 過程の線連結の解釈ができること。それらが全体で系として閉じていること
    • ダイアグラムで描いてあるが、数式的表現をしようと思えばできる
    • ダイアグラムとして異なっていても、過程として同じことになるものはある。論理式の変形や関数の表現の変更などがそれに相当する
    • 過程から生える、入力・出力の線の順番には意味がある
    • 演算順序の変更可能性などの議論にも使える
    • 回路に並列・直列の概念があるが、それは、過程が一緒に起きるか、順序づいて起きるかに対応する
  • 状態は入力ナシで出力アリ、Effectsは入力アリで出力ナシ、Numbersは入出力ナシ。状態があって、Effectにつなぐと併せてNumberになることになるが、それが「確率」だったりする
  • この状態とEffectはいわゆる、ブラとケット

4 String Diagrams

  • 分離可能か、分離不可能か
  • 状態が複数の出力線を持ったり、Effectが複数の入力線を持ったりできる。そのとき、単線入出力の状態・Effectに分離できるかできないか、という話
  • 分離できない状態がcups、分離できないEffectsがcaps
  • cup的状態、cap的Effectは、CUP形の線、CAP形の線で置き換えることができる
  • Cup線、Cap線を含むダイアグラムがString Diagram
  • 行列の転置とトレースもString diagramで簡単に描ける。転置は、入るものと出るものとが交換された過程(この過程は行列)。トレースは過程(行列)を含んだ数(入出力なしの過程)
  • 反転
    • 縦方向の反転:Adjoints(随伴), Conjugates(共役), 内積, ユニタリー、Positivity(正値性)
  • Projectros: 正でitempotent(二乗しても同じ)。これを使うと、複雑なString diagramがシンプルに分離される
  • 分離(不)可能性、コピー(不)可能性、時間逆行、テレポーテーョンなどがString diagramで示せる

5 Hilbert Space from Diagrams

  • Hilbert Spaceを考えるにあたり:
    • 線形代数的に考える
    • 正規直交基底がすべての型にある
    • 行列サイズは任意
    • (行列で表された)過程は同じ型なら加算可能
    • 成分や等倍は複素数
  • p237に、Hilbert spaceでの、Process theoryの概念表現がまとめられている

6 Quantum Processes

  • ここからが本番。線形写像とそのProcess theory 的ダイアグラムから、段階を追ってQuantum processとそのProcess theory的ダイアグラムへと説明を進める
    • 線形写像に「二乗」処理をすることで、pure quantum mapsにして、それに"discarding"を付与してquantum mapsにし、さらにnon-determinismを付与して、quantum processesに持っていく
    • 量子的測定は、システムと関わりうる唯一の手段で、システムと独立には行うことができないものであり、non-deterministicな量子過程の一つとして扱う
  • 線形写像とそのダイアグラムでは、Effectsは「システムを調べること」に相当し、状態に対して、その随伴を対応付けることが、システムがその状態にあるかどうかを調べることであり、それが「数」として表れ、それが、「はい、その状態にあります」という答えの確率に相当した
  • ただし、ここで出てくる数は実数とも限らないし、必ずしも0-1の範囲に収まるようになっていないので、「確率」として受け取るのは不適当なままになっている
  • 正の数を得るためのルールは、複素数とその共役複素数の積を取ること。そして0-1に収めるには、状態とEffectとをそれぞれ規格化しておくことで実現可能
  • これを「二乗をとる」ステップとする。これでpure quantum mapsの段階まで進んだ
  • 二乗するとphase 情報を喪失する。共役複素数を掛けることで実・虚の振り分けが持っていたphase情報を相殺し、その代わりに「実」を得ることを実現しているから
  • 二乗すると変わるのは、複素数複素数でなくなること、和が素直な和にならないこと(大きさの平方根を取る必要が出る、など)、直交基底が直交基底でなくなること
  • phaseが失われることに対応して、それが「なくなること」をダイアグラムで表示する必要が出る
  • 状態に純粋状態とmixed 状態とがあり、その描き方に違いが出る

7 Quantum Measurement

  • 観察することが量子過程なわけではない
  • ある特別なタイプの量子過程が量子測定に相当する。それがダイアグラムとしてあらわされる

8 Picturing Classical-Quantum Processes

  • Spider登場
  • Cups,CapsのつながりがSpider。結合点を縮合できる。線を一般化したもの

9 Picturing Phases and Complementarity

  • 2色を使ってphaseを表現。Spiderのbodyに色が着く
  • SpiderにはComplementary spiderが対応づく

10 Quantum Theory: The Full Picture

  • 総まとめ
  • この章がわかれば、この本はそれでよい、と言う感じの章

11 Quantum Foundations

12 Quantum Computation

13 Quantum Resources

14 Quantomatic

  • diagrammatic proof assistant アプリケーション
  • 問題をダイアグラムで描き、そこにダイアグラム的に同値なものをルール登録して簡略化させたりできる

quantomatic.github.io