- 『多元環とは、可換環上の加群としての構造を持ち、その構造と両立しているような積を持つ代数的構造のことである。』とはどういうことか。
- 代数的構造の考え方について、ようやく、頭の中に「道筋」が見えた感じがする。群・環・体、だけをやってもよく見えず、Coalgebraとか、関数解析、双線形、汎関数、作用素環などをなんだかなんだと、わからないなりに頭のバッファーに浮かばせたことで、つながりができたことが大きいかもしれない
- 「集合」で考える(Wiki)
- 集合とその上の演算
- はk-項演算
- 特に二項演算の場合を取り上げることも多い
- 二項演算の代数
- 集合があって、集合の要素のペアに二項演算があって、その演算の結果が集合に含まれる、それが代数的構造
- モナド
- 2つの要素とそれを結びつける行列でできた関数との組
n.elem <- 5
s <- LETTERS[1:n.elem]
s
M <- matrix(sample(1:n.elem,n.elem^2,replace=TRUE),n.elem,n.elem)
M
f.monad <- function(a,b,s){
a.id <- which(s==a)
b.id <- which(s==b)
M <- matrix(sample(1:n.elem,n.elem^2,replace=TRUE),n.elem,n.elem)
ret.id <- M[a.id,b.id]
s[ret.id]
}
f.monad("A","C",s)
matrix(s[M],dim(M))
> s
[1] "A" "B" "C" "D" "E"
> M
[,1] [,2] [,3] [,4] [,5]
[1,] 3 1 5 2 4
[2,] 5 4 1 4 2
[3,] 3 4 2 3 3
[4,] 5 2 1 1 2
[5,] 1 4 5 5 1
> f.monad("A","C",s)
[1] "A"
> matrix(s[M],dim(M))
[,1] [,2] [,3] [,4] [,5]
[1,] "C" "A" "E" "B" "D"
[2,] "E" "D" "A" "D" "B"
[3,] "C" "D" "B" "C" "C"
[4,] "E" "B" "A" "A" "B"
[5,] "A" "D" "E" "E" "A"
- 半群は、結合法則"[(a,b),c]=[a,(b,c)]"を満たすマグマ
n.elem <- 5
n.iter <- 10000
ret <- list()
cnt <- 0
for(i in 1:n.iter){
M <- array(sample(1:n.elem,n.elem^2,replace=TRUE),rep(n.elem,2))
cmb <- combn(n.elem,3)
check <- TRUE
for(j in 1:length(cmb[1,])){
first <- cmb[1,j]
second <- cmb[2,j]
third <- cmb[3,j]
A <- M[M[first,second],third]
B <- M[first,M[second,third]]
if(A != B){
check <- FALSE
break
}
}
if(check){
cnt <- cnt + 1
ret[[cnt]] <- M
}
}
cnt/n.iter
ret[[sample(1:cnt,1)]]
> cnt/n.iter
[1] 1e-04
> ret[[sample(1:cnt,1)]]
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 3 4 1
[2,] 1 4 3 4 1
[3,] 2 1 2 4 3
[4,] 5 3 5 1 4
[5,] 5 5 1 1 1
n.elem <- 5
n.iter <- 10000
ret <- list()
cnt <- 0
for(i in 1:n.iter){
M <- array(sample(1:n.elem,n.elem^2,replace=TRUE),rep(n.elem,2))
M. <- M - 1:n.elem
tmp <- apply(M.^2,2,sum)
if(prod(tmp)==0){
cnt <- cnt + 1
ret[[cnt]] <- t(M)
}
}
cnt/n.iter
ret[[sample(1:cnt,1)]]
> cnt/n.iter
[1] 0.0011
> ret[[sample(1:cnt,1)]]
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 3 1 1
[2,] 5 3 3 5 2
[3,] 2 1 1 2 3
[4,] 1 2 3 4 5
[5,] 2 3 4 4 4
- 群は単位元を持って逆元を持って、結合法則を満足する
- まず単位元を持って逆元を持つような構造を生物に探索させる
n.elem <- 4
n.iter <- 100000
ret <- list()
ret.idnt <- list()
ret.inv <- list()
cnt <- 0
for(i in 1:n.iter){
M <- array(sample(1:n.elem,n.elem^2,replace=TRUE),rep(n.elem,2))
M. <- M - 1:n.elem
tmp <- apply(M.^2,2,sum)
idnt <- which(tmp==0)
if(length(idnt)>0){
for(j in 1:length(idnt)){
tmp.M <- M - idnt[j]
tmp <- apply(tmp.M,1,prod)
if(sum(tmp^2)==0){
cnt <- cnt + 1
ret[[cnt]] <- t(M)
ret.idnt[[cnt]] <- idnt[j]
}
}
}
}
cnt/n.iter
a <- sample(1:cnt,1)
ret[[a]]
ret.idnt[[a]]
> cnt/n.iter
[1] 0.00301
> a <- sample(1:cnt,1)
> ret[[a]]
[,1] [,2] [,3] [,4]
[1,] 1 2 1 3
[2,] 4 4 4 3
[3,] 1 3 1 3
[4,] 1 2 3 4
> ret.idnt[[a]]
[1] 4
-
- ついで、結合法則も満足するまで探索させる。それが群
n.elem <- 4
n.iter <- 100000
ret <- list()
ret.idnt <- list()
ret.inv <- list()
cnt <- 0
for(i in 1:n.iter){
M <- array(sample(1:n.elem,n.elem^2,replace=TRUE),rep(n.elem,2))
M. <- M - 1:n.elem
tmp <- apply(M.^2,2,sum)
idnt <- which(tmp==0)
check.idnt <- (length(idnt)>0)
cmb <- combn(n.elem,3)
check <- TRUE
for(j in 1:length(cmb[1,])){
first <- cmb[1,j]
second <- cmb[2,j]
third <- cmb[3,j]
A <- M[M[first,second],third]
B <- M[first,M[second,third]]
if(A != B){
check <- FALSE
break
}
}
if(check.idnt & check){
for(j in 1:length(idnt)){
tmp.M <- M - idnt[j]
tmp <- apply(tmp.M,1,prod)
if(sum(tmp^2)==0){
cnt <- cnt + 1
ret[[cnt]] <- t(M)
ret.idnt[[cnt]] <- idnt[j]
}
}
}
}
cnt/n.iter
a <- sample(1:cnt,1)
ret[[a]]
ret.idnt[[a]]
> cnt/n.iter
[1] 3e-04
> ret.idnt[[a]]
[1] 4
> a <- sample(1:cnt,1)
> ret[[a]]
[,1] [,2] [,3] [,4]
[1,] 4 1 4 1
[2,] 2 4 4 3
[3,] 4 2 4 4
[4,] 1 2 3 4
> ret.idnt[[a]]
[1] 4
- アーベル群・可換群
- さらに
- これは行列探索的には、対象行列かどうか…
- 作ってみてから条件を満足することをするよりは、対象行列を作って、ほかの条件の満足を確認する、と言う方が、ランダム発生的には簡単なので
n.elem <- 3
n.iter <- 1000
ret <- list()
ret.idnt <- list()
ret.inv <- list()
cnt <- 0
for(i in 1:n.iter){
tmp.v <- sample(1:n.elem,n.elem*(n.elem-1)/2,replace=TRUE)
M <- matrix(0,n.elem,n.elem)
M[upper.tri(M)] <- tmp.v
M <- (M + t(M))
diag(M) <- 1:n.elem
M. <- M - 1:n.elem
tmp <- apply(M.^2,2,sum)
idnt <- which(tmp==0)
check.idnt <- (length(idnt)>0)
cmb <- combn(n.elem,3)
check <- TRUE
for(j in 1:length(cmb[1,])){
first <- cmb[1,j]
second <- cmb[2,j]
third <- cmb[3,j]
A <- M[M[first,second],third]
B <- M[first,M[second,third]]
if(A != B){
check <- FALSE
break
}
}
if(check.idnt & check){
for(j in 1:length(idnt)){
tmp.M <- M - idnt[j]
tmp <- apply(tmp.M,1,prod)
if(sum(tmp^2)==0){
cnt <- cnt + 1
ret[[cnt]] <- t(M)
ret.idnt[[cnt]] <- idnt[j]
}
}
}
}
cnt/n.iter
a <- sample(1:cnt,1)
ret[[a]]
ret.idnt[[a]]
> cnt/n.iter
[1] 0.118
> a <- sample(1:cnt,1)
> ret[[a]]
[,1] [,2] [,3]
[1,] 1 1 2
[2,] 1 2 3
[3,] 2 3 3
> ret.idnt[[a]]
[1] 2
- 環
- 2つの二項演算があって、片方はアーベル群的演算、もう片方は半群(またはモノイド)である
- ここまでなら、一つの集合に二つの演算を勝手に探索すればよいけれど
- さらに、アーベル群的演算と半群(モノイド)的演算との間に、分配法則が成り立つ(a+b)c=ac +bc、ので、さらに狭い
- 結合法則だけOKっていうのなら
n.elem <- 4
n.iter <- 10000
ret1 <- ret2 <- list()
cnt <- 0
for(i in 1:n.iter){
M1 <- matrix(sample(1:n.elem,n.elem^2,replace=TRUE),n.elem,n.elem)
M2 <- matrix(sample(1:n.elem,n.elem^2,replace=TRUE),n.elem,n.elem)
cmb <- combn(n.elem,3)
check <- TRUE
for(j in 1:length(cmb[1,])){
first <- cmb[1,j]
second <- cmb[2,j]
third <- cmb[3,j]
ab.c <- M2[M1[first,second],third]
ac.bc <- M1[M2[first,third],M2[second,third]]
if(ab.c != ac.bc){
check <- FALSE
break
}
}
if(check){
cnt <- cnt + 1
ret1[[cnt]] <- M1
ret2[[cnt]] <- M2
}
}
cnt/n.iter
a <- sample(1:cnt,1)
ret1[[a]]
ret2[[a]]
> cnt/n.iter
[1] 0.0133
> a <- sample(1:cnt,1)
> ret1[[a]]
[,1] [,2] [,3] [,4]
[1,] 1 2 2 1
[2,] 1 2 2 3
[3,] 4 4 3 4
[4,] 1 3 1 3
> ret2[[a]]
[,1] [,2] [,3] [,4]
[1,] 2 4 2 1
[2,] 3 4 1 1
[3,] 1 2 2 4
[4,] 4 4 2 1
-
- 体は、環の二つの演算の両方が群の演算(片方はアーベル群、もう片方はアーベル群とは限らない群)。ただし、後者では「0元」を除いた元が群になっていればよい
- じゃあ、ここまで来たとして、「どうして、数の歴史では、こんなに制約のきつい構造からスタートして、だんだんに単純化した構造へと理解が進んだのか」ということ。数の認識機構である神経系が「体」的になっているから???
- モジュール(加群)
- 集合Aの演算を係数と呼ばれる、集合Aの要素とは別のものの集合Bとその演算(それが環をなす・体をなす)と組み合わせて構築した、演算の要素と演算ルールの系
- ベクトルが集合Aで、係数が実数体だったり、複素数体だったりする
- というようなベクトルの係数倍の和とか、とか、係数の分配法則とかがうまいこと成り立たせたい、という「ベクトル空間の記述」の気持ちを反映しているので、係数は体であることを要求(環、でも)よい
- 以下は、分配法則を守らせるだけで、「環(体)」的なものを作り、それとは別に、1つの演算ができる群とを組み合わせてやってみる
- 「環(体)」的な方がn.1個の要素があって、もう一つの「群」的な方がn.2個の要素があったとき、通りの要素が取扱いの対象となって、これがいわゆる実数k次元空間であるのようなもの
- ただし、「環(体)」的な方が、「群」的な方がのときに、が対象になるも、たとえばのようになるが、これは、ただし、となってがやはり「環(体)」「群」の要素であるから、「等しいもの」に複数の表し方がある〜「同じ要素がかぶ」るので、「いわゆるベクトル空間」とは違うことになるのだが、ここでは、「集合」の「直積」になる、という話と言うことで。
- 多元環
- ひとつ前で、「環(体)」を係数として加法がある「群」がモジュールだったが、この「係数」の方には乗法があるけれど、全体には乗法がない
- 乗法がないので、うまく乗せてやりたくなる
- それを乗せると多元環(加法と乗法があるので環)
- と、ここまで来ると、『多元環とは、可換環上の加群としての構造を持ち、その構造と両立しているような積を持つ代数的構造のことである。』、とさらっと書かれていても、「はいはい、そう書くことになるよね」とそれなりに納得する