三角化・結び目・団代数・双曲幾何・確率論・量子確率論~たまった資料の整理をする

はじめに

  • コロナ禍のため(?)に資料を読み捨てにして整理せずにいたら、収拾がつかなくなってきたので、いったん整理する

団代数

三角化

結び目・結び目補空間・3-多様体

双曲幾何

代数と幾何

Teichmuller space

曲面解析・変形

  • Hyperbolid Harmonic Mapping for Surface Registration : 曲面のハンドリング。{Ricci flow、双曲幾何構造分解としてのパンツ分解、等温座標系、共形変換} = {Discrete Hyperbolic Ricci Flow, Hyperbolic Pants Decomposition, Homotopy Class, Non-linear Heat Diffustion}
  • Recent Advances in Computational Conformal Geometry(2009) : 曲面の共形変換の総説。Ricci flowベースで説明しつつ、Teichmuller spaceと言う単語への言及もある。Ricci flowで変形して、hyperbolic uniformization metricを計算することができる、その後、パンツ分解をすることで、Fenchel-Nielsen coordinatesを付与することによりTeichmuller spaceとつなげることができる 

トロピカル代数・トロピカル幾何

Circle packing, Sphere packing, Applonian circles

行列に関すること

量子確率論

sagemath snappy のドッカーを使ってみる

  • こちらトポロジーツール"snappy"をsagemathと連携して使う環境づくりについて説明してある
  • 結局、dockerで諸々を入れるのが良いということらしいのでdockerhubにあるcomputop/sageをドッカーで入れることにする
  • そのためにまず(Windows環境で)dockerが使えるようにすることにする
  • こちらからドッカー環境をローカルPCに作る
  • Get dockerして、ダウンロードされたexeファイルを実行するだけ
  • デスクトップにできたドッカーイメージをダブルクリックして開始。
  • すると、Linux カーネル更新プログラム パッケージを入れろ、と言われるので、こちらのx64 マシン用の最新の WSL2 Linux カーネル更新プログラム パッケージをダウンロードしてください。をクリックして、言われるがままに実行する。
  • そのうえで、Dockerを再起動すると、Docker環境らしきものが立ち上がり、右側にコマンドを打てる場所が現れる
  • 今、使いたいsagemathとsnappyが連携している「もの」を入れるべく、このサイトのコマンドを、Docker内のコマンドプロンプトに打っていく
  • そもそも、最初のコマンド(以下)にかかる時間が長い…sagemath本体を入れているからだろう…
docker pull computop/sage
  • 引き続いて
docker run -it computop/sage
  • とやると、どうやら、ドッカーイメージが「入った」ことになるらしい
  • Dockerのアイコンをダブルクリックするとドッカーが立ち上がったよというメッセージが出るので、そうしたら、コマンドプロンプト
docker run -it -p 127.0.0.1:8888:8888 computop/sage
||
-と打つ。その上で
>||
$ sage --notebook

とすると

Starting up Sage Jupyter Notebook, viewable at http://localhost:8888
  • と出るので、ブラウザにてhttp://localhost:8888を開くと、いわゆるJupyter notebookの画面となるから、そこでsagemathのノートを開く

f:id:ryamada:20201024085551p:plain

Manifold?
import snappy
M = snappy.Manifold("m004")
M.alexander_polynomial()
D = M.dirichlet_domain()
K1 = Link([[8,3,1,4],[2,6,3,5],[6,2,7,1],[4,7,5,8]])
  • とか、する。
  • お絵描きがまだうまく動かないのだが…

f:id:ryamada:20201024085611p:plain

双曲幾何とポアンカレ半平面と射影変換

  • 双曲幾何空間をポアンカレ半(超)平面で表すモデルの話と、それが射影変換で自由に等距離的に変換される話
  • Wiki記事の話をRでなぞって確かめる

準同型暗号による秘密裡の計算 RSA

library(openssl)
# RSAの乗算の準同型の確認
# RSAの鍵
e <- 17
p <- 61 # 素数
q <- 53 # 素数
n <- p * q
d <- 413

# m1とm2とを暗号化し
# 暗号化されたM1,M2のみを使って
# m1 x m2 の値の暗号化された値を作り
# 返却する
# 返却された人は、こっそりm1 x m2の値を知ることができる

m1 <- 6
m2 <- 3
m3 <- m1 * m2

# 暗号化
M1 <- bignum_mod_exp(bignum(m1),bignum(e),bignum(n))
M2 <- bignum_mod_exp(bignum(m2),bignum(e),bignum(n))

# m1, m2 の値を知っていれば、m3 = m1 x m2 を計算して
# その暗号を作ることはできるが、それはできない仕掛け
# M3 <- bignum_mod_exp(bignum(m3),bignum(e),bignum(n))

M3_angou <- M1 * M2

# 暗号化されたM3 (M3_angou)を秘密鍵で開く
bignum_mod_exp(M3_angou,bignum(d),bignum(n))

m1 * m2
m3

Rで暗号化

  • 素因数分解に基づく(RSA)公開鍵と秘密鍵の生成や、共通鍵を持ち合うAES方式を実装したopensslパッケージ
  • それのラッパーパッケージであるencryptrパッケージ
  • AESについて
  • 公開鍵暗号について
  • encryptrパッケージの説明
    • genkeys()の内部でopenssl::write_pem()を呼び出している。ウィンドウを立ち上げて「パスワード」のGUI入力を求め、それに基づいて(それを大きな整数とみなして)秘密鍵を作り、さらにそこから公開鍵を作っている(秘密鍵から公開鍵の生成は簡単な計算なので)
    • 現れる公開鍵・秘密鍵は、凄く長い文字列として保管される
    • 生成された鍵(大きな数字など)は以下のようなデータ構造で保管される
> str(key)
List of 4
 $ type  : chr "rsa"
 $ size  : int 2048
 $ pubkey:List of 5
  ..$ type       : chr "rsa"
  ..$ size       : int 2048
  ..$ ssh        : chr "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDyG/Ul/qY1PZzskwQxOp74JKT/vYydwx5ygRjJS8EastsrdmKN+kEu+z3M7HijycZXfRhoJWod ..."
  ..$ fingerprint: 'hash' raw [1:16] 5e 1c 70 cf ...
  ..$ data       :List of 2
  .. ..$ e: 'bignum' raw [1:3] 01 00 01
  .. ..$ n: 'bignum' raw [1:257] 00 f2 1b f5 ...
 $ data  :List of 8
  ..$ e : 'bignum' raw [1:3] 01 00 01
  ..$ n : 'bignum' raw [1:257] 00 f2 1b f5 ...
  ..$ p : 'bignum' raw [1:129] 00 fa 52 2a ...
  ..$ q : 'bignum' raw [1:129] 00 f7 9a 19 ...
  ..$ d : 'bignum' raw [1:256] 45 30 7a 31 ...
  ..$ dp: 'bignum' raw [1:129] 00 93 9e 10 ...
  ..$ dq: 'bignum' raw [1:129] 00 a9 b3 ce ...
  ..$ qi: 'bignum' raw [1:129] 00 c6 eb 8f ...

団代数と幾何的団代数とトロピカル代数

  • 団代数
    • 団代数は、\Sigma = (x,p,B)という3つ組をシードとし、そのシードの一要素だけを変異させることで新たなシードを生み出して出来上がる、シードの相互関係に付随する代数構造である
    • ちなみに、ある自然数 n があり、あるシードのxの要素数はn個であり、pの要素数は2n 個であり、Bはn x n 行列である
    • 団代数を構成するには、coefficient groupと呼ばれる群 P がまず存在する。この群は可換群であるから、x^i y^j z^kのような要素がPの要素である
    • 団代数を構成するには、このPに加えて環Zが必要である。PとZとを使って群環ZPを作る。Zは整数を要素としたものであるから、群間ZPは、整数係数単項式の和~整数係数多項式を要素とし、その和と積が定義された代数構造である
    • ここで、Fなるものを定義する。Fは群間ZPに除算を加えた体である。要するに、整数係数多項式を分子と分母に持つ有理多項式を要素とする代数構造である
    • 団代数のシードを構成する3要素のうちの1つであるx(団変数)は、この整数係数有理多項式の部分集合である
    • また、p (団係数)は、群Pの要素であり、xの1要素に、2つの団係数が付随する。このことから、Pは係数の群と呼ばれる
    • 最後に、変換行列Bは、整数要素の正方行列でSkew-symmetricに変換可能なものであるとされる
    • シードの変異\Sigma(x,p,B) \to \Sigma ' (x', p', B')は(x,p,B)の要素のみで行うことができる変換となっている
  • 幾何的団代数は三角化の全場合列挙に対応するような団代数であるが、上記のシード、P,ZP,Fなどに特徴がある
    • その特徴に沿って説明する
    • Coefficient group P に対応するのがP = \text{Trop}(q_i : i \in I) と表記される"multiplicative group of Laurent monomials" in the formal variables \{q_i : i \in I\}
    • これは、1,2,...,nと附番された変数q_iを要素とする、積演算の群であって、ローラン単項式の形をしているもののこと。要するにq_i^{a_i} q_j ^{a_j} ...というような単項式のことなので、一般的な団代数のcoefficient groupとあまり違わないが、q^aとしたときのaが負でも良いところが異なる(ようだ)
    • 次に、群環ZPに相当するものが欲しい。ZPは整数係数多項式であったが、ここで、単項式を足し合わせて多項式にするときの「足し合わせ~加算」にトロピカル加算を用いることにする
    • \Pi_i q_i^{a_i} \oplus \Pi_i q_i^{b_i} = \Pi_i q_i^{min(a_i,b_i)}と言うように
    • これにより、整数係数多項式に相当するものが、相変わらず単項式になる
    • Fに相当するものは、整数係数多項式に相当していたが単項式になったものの有理式に置き換わる。これは体的なものであるが、この体的なものをトロピカル半体と呼ぶ
    • 幾何的団代数でもシードは三つ組み\Sigma = (x,p,B)である
    • 団変数xはFの要素でありトロピカル半体であるので、ローラン単項式
    • 団係数qはローラン単項式集合Pの要素である
    • 変換行列はskew-symmetric可能行列となる
  • 幾何的団代数とタイヒミューラー空間座標
    • 幾何的団代数では、ある団変数 x が与えられたとき、n個の変数がある。そのn個の団変数がそれぞれ、ローラン単項式である
    • また、団係数もqの要素も|I|個ある (n個?)。これもローラン単項式
    • これらのローラン単項式のそれぞれの値が正の実数になっているから、n + |I|個の正の実数セットがとれる。そして、あるシードのxの附番を決めれば、団変数の入れ替えをしても、附番ルールに迷いは生じないから、正の実数ベクトルとしてとりあつかえる
    • この正の実数ベクトルを、幾何的団代数シードが作るn正則グラフというトポロジー空間の座標とする
    • この正の値をとる高次元座標は、曲面にpuncturesを取って、そこに作りうる三角化と対応し、それが作るトポロジカル空間をTeichmullerとし、個々の三角化の座標をlambda lengthで与えたものとなるという
    • これが、三角化の幾何的団代数の座標化と、そのTeichmuller space座標化との対応である