トーラスとは

  • トーラスはWikiで見れば曖昧さ回避ページ(こちら)があるように、色々な書き方がある
    • 幾何・位相幾何・代数幾何での使い方は1つながりでまとめたい
  • トーラスはドーナツのように「穴が一つ〜種数が1」の閉曲面

http://upload.wikimedia.org/wikipedia/commons/thumb/1/17/Torus.png/220px-Torus.png

    • 特にドーナツは『2-トーラス』
      • ここで言う『2-』は円周"S^1"(1次元の閉曲面)の2個の直積T^2=S^1 \times S^1
    • 『n-トーラス』はT^n=\prod_{i=1}^n S^1
  • 円周S^1複素平面で考えると、絶対値が1の複素数の集合。位相を重視すれば、中央に穴が空いていると考えることもできて、そうすると\mathbf{C^x} = \mathbf{C}/\{0\}と表せる
    • \mathbf{C^x}S^1とは「同じ」とみなせば、n-トーラスはT^n = \mathbf{C^x}^nとなる
  • \mathbf{C^x}群論的に言うと、「情報についての可換群」であって、そのn個の直積T^nも可換群
    • n次元複素空間座標(t_1,...,t_n)で考えれば、\forall i, t_i \ne 0なる亜空間に対応している
    • 式で書けば\prod_{i=1}^n t_i \ne 0
    • 代数幾何学的に言い換えると、「代数的トーラスT^nは、T^n \subset \mathbf{C^n}であって、正則関数fが0とならない領域」となる
  • 円周はぐるりと閉じていて、両端を同一視しているので、剰余環とも見えている
  • こんな用語の連想ゲームを言葉で書いてきたけれど、連想ゲームはこんな絵になっている(こちらの『学習手法』による)

代数的トーラス	トーラス	代数	Cx^r	T
トーラス	種数	1	閉曲面
閉曲面	閉	曲面
種数	輪の数
T	Cx^r	正則関数	t1t2...tr
Cx^r	Cx	r
Cx	C	{0}	乗法	可換群
正則関数	非0
円周	S1	Cx
T	S1^r
S1^r	S1	r
    • そのファイルを置いたディレクトリを冒頭で指定してお絵かき
setwd("ファイルを保管したディレクトリ")
library(igraph)
infiles <- list.files()
infile.list <- list()
for(i in 1:length(infiles)){
	infile.list[[i]] <- read.table(infiles[i], sep = "\t", fill =TRUE)
}
g <- graph.empty(directed=FALSE)
g.plus <- graph.empty(directed=FALSE)
v.list <- list()
v.plus.list <- list()
e.list <- list()
e.plus.list <- list()
for(i in 1:length(infile.list)){
	infile <- infile.list[[i]]
	# 行列の方が好きなので行列にする
	infile.m <- as.matrix(infile)

	# エッジに関係するところだけを取り出す
	infile.m <- infile.m[,1:length(infile.m[1,])]
	# ノードをユニークにする
	unique.word <- unique(c(infile.m))
	unique.word <- unique.word[which(unique.word != "")]
	# ノードの名前に順序idをつける
	v.list[[i]] <- NULL
	v.list[[i]] <- unique.word
	e.list[[i]] <- matrix(0,0,2)
	v.plus.list[[i]] <- unique.word
	e.plus.list[[i]] <- matrix(0,0,2)
	#g <- g + vertices(v.name)

	# 行ごとに要素数を数えて
	for(j in 1:length(infile.m[,1])){
		num.kids <- length(which(infile.m[j,] != ""))-1
		if(num.kids>=1){
			for(k in 1:num.kids){
				#g <- g + edges(c(infile.m[i,1],infile.m[i,j+1]))
				e.list[[i]] <- rbind(e.list[[i]],c(infile.m[j,1],infile.m[j,k+1]))
			}
		}
		
	}
	sorted.e.list <- t(apply(e.list[[i]],1,sort))
	tmp.v <- paste(sorted.e.list[,1],sorted.e.list[,2],sep="")
	v.plus.list[[i]] <- c(unique.word,infiles[i],tmp.v)
	v.plus.list[[i]] <- unique(v.plus.list[[i]])
	#e.plus.list[[i]] <- e.list[[i]]
	for(j in 1:length(e.list[[i]][,1])){
		e.plus.list[[i]] <- rbind(e.plus.list[[i]],c(e.list[[i]][j,1],tmp.v[j]))
		e.plus.list[[i]] <- rbind(e.plus.list[[i]],c(e.list[[i]][j,2],tmp.v[j]))
		e.plus.list[[i]] <- rbind(e.plus.list[[i]],c(tmp.v[j],infiles[i]))
	}
	#plot(g,vertex.label=V(g)$name)

}
unique.v <- unique(unlist(v.list))
unique.plus.v <- unique(unlist(v.plus.list))
g <- graph.empty(directed=FALSE) + vertices(unique.v)
g.plus <- graph.empty(directed=FALSE) + vertices(unique.plus.v)
for(i in 1:length(infile.list)){
	for(j in 1:length(e.list[[i]][,1])){
		g <- g + edges(e.list[[i]][j,])
	}
	for(j in 1:length(e.plus.list[[i]][,1])){
		g.plus <- g.plus + edges(e.plus.list[[i]][j,])
	}
}
plot(g,vertex.label=V(g)$name,vertex.size=3,edge.arrow.mode=0)
dev.new()
plot(g.plus,vertex.label=V(g.plus)$name,vertex.size=3,edge.arrow.mode=0)