愛想モルフィズム

I saw what I am

SymPy 備忘録 #1 sympy.poly.polytools 周辺

研究でSymPyを使っているのですが,だいぶ癖が強いと感じたので,個人的躓きポイントをまとめます.

github

github.com

Official documentation

www.sympy.org

Poly class

多項式を扱う基本的なクラスはPolyです.これは sympy/poly/polytools.py 内で定義されています.多項式の定義は

>>> from sympy import *
>>> x, y = symbols('x, y') # define variables
>>> f = Poly(x + 2 * y)
Poly(x + 2*y, x, y, domain=ZZ)
>>> f.degree()
1

というふうに行います.4行目の中盤の"x,y"は式の変数を表し,内部処理的にはこれはgensというlistになっています.poly()メソッドを使っても同じようにできます.

>>> f = poly(x + 2*y)
>>> f
Poly(x + 2*y, x, y, domain='ZZ')

単純に f = x + 2 * y とすると,Add オブジェクトになります.Add オブジェクトには degree() メソッドがないのでエラーになります.

>>> g = x + 2 * y
>>> g
x + 2 * y
>>> type(g)
<class 'sympy.core.add.Add'>
>>> g.degree()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Add' object has no attribute 'degree'

さて,Poly.__new__() は引数によってオブジェクトの生成法が異なるようですが,大体は式( Expr のサブクラスのオブジェクト)を元に生成することが多いと思いますが,Poly 自体は Basic のサブクラスであり,プレーンな式の情報を得るためには as_expr() メソッドを使います.

>>> f.as_expr()
x + 2*y

subs method

Poly クラスには代入を行う subs() というメソッドがあります.より正確には,それは Basic クラス内で実装されています.subs() に dict で変数と値を入れるとそれぞれの変数に値を代入した値が返されます.

>>> f.subs({x: 1, y: 1})
3

クセつよポイントはここからです. x 2x を代入したいと思ったとき,

>>> f.subs({x: 2 * x})
Poly((2*x) + 2*y, 2*x, y, domain='ZZ')

こうしてしまうと,変数が  2x y の Poly オブジェクトが帰ってきます.正確ではない解決方法としては,

>>> poly(f.as_expr().subs({x: 2 * x}))
Poly(2*x + 2*y, x, y, domain='ZZ')

とすれば良いでしょう.

LT method

Polyは先頭項 (Leading Term) を返す LT() というメソッドがあります.

>>> f = poly(x**2 + 2 * x + 1)
>>> f
Poly(x**2 + 2*x + 1, x, domain='ZZ')
>>> LT(f)
x**2

クセつよポイントとしては,Poly オブジェクトではなく Pow オブジェクトが帰ってくることです.

>>> m = LT(f)
>>> m
x**2
>>> type(m)
<class 'sympy.core.power.Pow'>

つまり,この先頭項をいじったり,次数を求めたりするときに注意が必要です.

>>> m.degree()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Pow' object has no attribute 'degree'

単純に式変形だけで事が済んでしまう計算の場合は Expr のまま行い,degree() や LT() といったPoly のメソッドを組み合わせたい場合は意味不明なネストが必要になります.必要でないのであれば教えて下さいお願いします.

domain option

Poly オブジェクトは生成時に何も指定しない場合は整係数多項式になります.これをいじる場合は,生成時に domain オプションで指定します.

>>> f = poly(x + 2 * y, domain='FF(5)')
>>> f
Poly(x + 2*y, x, y, modulus=5)
>>> a = symbols('a')
>>> f = poly(x + 2 * a * y, domain='ZZ[a]')
>>> f
Poly(x + 2*a*y, x, y, domain='ZZ[a]')

上の例では  \mathbb{F}_5 上の多項式を定義しています.他に指定できる domain は sympy/polys/polyoptions.py に記述されています.domainオプションに文字列を渡して,それを正規表現で合致したら対応するオブジェクトを返すという実装になっており,それ以外は突っぱねられます.

>>> f = poly(x + 2 * a * y, domain='FF(5)[a]/(a**2 - 2)')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>  
sympy.polys.polyerrors.OptionError: expected a valid domain specification, got FF(5)[a]/(a**2 - 2)

上の例では,有限体上の多項式環の剰余環上での多項式を定義しようとしてエラーになっています.ちなみに今の自分の研究は,pythonで(SymPyで)これを実装することがテーマの1つになっています.

もし地道にやろうと思えば,この domain オプション周辺を書き直す必要があり,めちゃくちゃめんどくさそうです.ただ,SymPy 的にはそのやり方が正しいはずです.

Conclusion

  • Poly は Basic のサブクラス
  • 単純な式は Expr およびそのサブクラス
  • ごっちゃになりがちなので気をつける

SymPy使ってるとほんまにイライラする.査読よろしくお願いします.

f:id:dafuyafu:20200721050813p:plain
記事の内容とは全く関係のないDiana香澄

ムゲンの実の数学 #2 低次における味の総数の最大値

見切れている数式はスクロールで!


dafuyafu.hatenablog.com

ムゲンの実の数学#2です.

今回は,前回の記事で定義した  S_n について,その低次の具体例,すなわち  S_1, S_2 について考えてみたいと思います.

前回の振り返り

ムゲンの実というお菓子は赤色のシャリシャリの実,黄色のシュワシュワの実,そして青色のヒエヒエの実からなります.ムゲンの実1袋につき,3種類の実がそれぞれ15個ずつ,合計45個入っていると仮定します.このムゲンの実が  n 袋ある状態を  n ムゲンの実モデル ( n-IBM ) といいます.

さて,ムゲンの実は無限個の実がある場合はそれらを重複を許して無限個組み合わせることで無限通りの味を食べることができます.では, n-IBMでは何種類の味を食べることができるか?ということについて考えていました.この味の種類の最大値を  S_n と表します.

定理 2.1  S_1 = 16.

定理1の主張は「1袋のムゲンの実では最大16種類の味を食べることができる」ということです.無駄に難しく書いているふうに思うかもしれませんが,これは数学的正確性を失わずに記述するためには絶対に必要な手続きです.

証明(概略) まず,前回の記事で16種類の味を構成した.よって  S_1 \geq 16 である.ここで,これ以上の味の種類を作ることができないことを示す.
ここで,前回の記事の通り,この16種類の味を構成した時点で残っている実の数は3つであり,3つの組み合わせで得られる味はすべて網羅しているのでこの構成方法ではこれ以上の味を構成できない.
よって,この構成方法を用いないで構成する必要がある.4つ実を使って得られる組み合わせの代わりに5つ以上実を使って得られる組み合わせを採用する.しかし,この方法だと余剰の実の数が少なくなり得られる味の個数も増えることがない.よって16個以上の味は作ることができない. \square

証明2 Pythonを用いて実際にすべての組み合わせを計算した.

# ibm.py

import itertools as it
import numpy as np

if __name__ == '__main__':
    l = ['R', 'Y', 'B']
    proj = []
    for i in range(4): # 4種類までに制限
        h = list(it.combinations_with_replacement(l, i + 1))
        for v in h:
            r = 0
            y = 0
            b = 0
            for e in v:
                if e == 'R':
                    r += 1
                elif e == 'Y':
                    y += 1
                elif e == 'B':
                    b += 1
            vec = np.array([r,y,b])
            for c in range(4):
                flag = True
                for p in proj:
                    if np.array_equal((c + 2) * p, vec):
                        flag = False
                        break
                if not flag:
                    break
            if flag:
                proj.append(vec)

    maximum = 0
    for i in range(len(proj) - 1):
        reg = it.combinations(proj, i + 1)
        for r in reg:
            s = np.array([0,0,0])
            for v in r:
                s += v
            if s[0] <= 15 and s[1] <= 15 and s[2] <= 15:
                maximum = i + 1
            else:
                pass

    print("S_1 = " + maximum)
S_1 = 16

これを計算すると  S_1 = 16 となる. \square

これを実行すると計算終了までに5分くらいかかります.並列化などを使って高速化させると1分ぐらいまでに短縮できました.

f:id:dafuyafu:20200227103249j:plain
S_1 = 16

定理 2.2  S_2 = 26.

残念ながら上記のプログラムの方針では (値を変えても) うまく計算できませんでした.itertools.combination() での組合せの生成で組合せ爆発が生じており,5つの実を使って得られる味10個の組み合わせを列挙しようとするとメモリが足りませんでした.改良が求められます.

一般論

さて,一般的な場合を考えるときに以下の数列を考えます.

 {\displaystyle C_k =\  _{3} \mathrm{H}_k - \sum_{i \lneq k,\ i | k} C_i}

 C_k はちょうど  \mathbb{P} の点  P = [a:b:c] であって  m_a + m_b + m_c = k を満たす点  P の個数を表していることがわかると思います.例えば  k = 1 のときは

 C_1 = \ _{3} \mathrm{H}_1 = \ _{3} \mathrm{C}_1 = 3

となりますが,ちょうどこれは  m_a + m_b + m_c = 1 を満たす点が

 [1:0:0], [0:1:0], [0:0:1]

の3つあることと対応しています.同様に  C_2

 C_2 = \ _{3} \mathrm{H}_2 - C_1 = \ _{4} \mathrm{C}_2 - 3 = 3

となり, k = 4 のときは前回の記事でやったとおり,

 C_4 = \ _{3} \mathrm{H}_4 - \{C_1 + C_2 \}= \ _{6} \mathrm{C}_4 - 3 - 3 = 9

となります.IBMの言葉で書き下すと,3種類の実を  k 個使って食べられる味の総数から, k 個未満でまかなえるものは除いた味の総数を  C_k は表しているのです.

ここで,さらに

 {\displaystyle T_k = \sum_{i = 1}^k C_i}
 {\displaystyle B_k = \sum_{i = 1}^k i C_i}

とします.これはそれぞれ, T_k は1個から  k 個まで使って食べられる味の総数 B_k は1個から  k 個まで使って全種類の味を食べるのに必要な実の総数(の最小値)を表しています.

実際, [1:0:0] という味を食べるのに赤を2個食べてしまうと実の総数は1個分多くなってしまいます.よって正確には B_k は最も効率的に全種類食べたときの実の総数を表していると言えます.

補題 2.3 ある  k > 0 が存在して  B_{k-1} \leq 45 n \leq B_k と表せるとき,

 T_{k-1} + 1 \leq S_n \leq T_k

証明 読者への課題とする(迫真)

この補題は,前回の記事でやったように,少ない個数の実を使うやり方から順番にとっていけば,食べられる味の総数を最大化できるということを意味しています.また,味の個数の最大値の存在範囲は,実の絶対数によって制限できることも分かります.

系 2.4

  1.  23 \leq S_2, S_3 \leq 40
  2.  41 \leq S_4, S_5 \leq 55
  3.  56 \leq S_6, S_7, S_8, S_9, S_{10} \leq 88

(2.3)により,あらかたの食べられる味の総数の目算が建てられるようになります.例えば,ムゲンの実を10袋買ってきたとしても,食べられる味の総数は多くても88種類しかないということが分かります.これだとムゲン感はあまりないかもしれませんね.


今回は具体的な計算を実際に行い,それを求めるプログラムを制作し, S_n の粗方の目算を建てる不等式を得ることができました.次回はより深い考察を得るために,実を割るという操作を許し,言及を避けてきた射影空間  \mathbb{P} について考えたいと思います.

査読よろしくお願い致します.

ムゲンの実の数学 #1 有限ムゲンの実問題

見切れている数式はスクロールで!


先日バイト中にあるお菓子を見つけました.

その名もムゲンの実

f:id:dafuyafu:20200223021710j:plain
ムゲンの実

クラシエフーズ株式会社が出してるお菓子です.

無限プリン,無限きゅうり,無限ピーマン...と,やたらと無限のつく食べ物が多いのがとても気になります.そういうものは得てして高々有限です.本当に呆れ返るばかりです.

このムゲンの実もどうせ有限だろうな…と思っていたのですが,どうやら上記の無限偽装有限食品とは異なるようです.というのは,ムゲンの実の何が無限なのかというと,3つの実の組み合わせが無限通りあるということらしいのです.

どういうことかというと,パッケージに書いてあるとおり,このお菓子はヒエヒエの実シャリシャリの実およびシュワシュワの実の3種類の実からなります.

  • ヒエヒエの実 (青)
  • シャリシャリの実 (赤)
  • シュワシュワの実 (黄)

これらの3つの中からいくつか実を選んで同時に食べると,無限の味を作り出せるということらしいです.

例 1.1

  1. ヒエヒエ + シャリシャリ = かき氷味
  2. シャリシャリ + シュワシュワ = コーラフロート味
  3. シュワシュワ + シャリシャリ × 2 = グレープソーダ

これは確かに,3個の実を重複を許して  n 個 (ただし  n \geq 1 ) 取る組み合わせと考えると,実が無限個あって, n \to \infty とすると無限通りの組み合わせとなります.よって数学的にもムゲンの実は無限です.

有限ムゲンの実問題

ムゲンの実を使って組合せ最適化問題を考えてみたいと思います.以下ではムゲンの実は高々有限個あるものとします.

f:id:dafuyafu:20200223023140j:plain
ムゲンの実の中身

僕の買ったムゲンの実は

  • シャリシャリの実 (赤) : 17個
  • シュワシュワの実 (黄) : 14個
  • ヒエヒエの実 (青) : 14個

それぞれ入っていました.実際,パッケージ裏面の注意書きには

3種の混合には配慮していますが,ばらつきが生じる場合があります.

と書かれています.

若干のばらつきを是正し,それぞれ15個ずつ,合計で45個入っているものを有限ムゲンの実モデル (Finite Infinite Berry Model)と定義します.さらに,それらが  n 個ある場合,これを  n ムゲンの実モデル (  n-Infinity Berry Model ) と定義します.

ここで,

 \mathbb{P} = \{ (a,b,c) \ \mid\ a,b,c \in  \mathbb{Z}_{\geq 0}, (a,b,c) \neq (0,0,0)\} / \sim

ただし,

 (a,b,c) \sim (a', b', c') \Leftrightarrow (\lambda a, \lambda b, \lambda c) = (a', b', c') for some  \lambda \in \mathbb{Z}_{>0}

と定めます.このようにして得られる  \mathbb{P} の要素を  [a:b:c] と表します.

これは単に,シャリシャリ(赤)を1つ,シュワシュワ(黄)を1つ,ヒエヒエ(青)を1つ食べる組み合わせを  [ 1:1:1] と表そうという意味です.さらに,もし(赤)を2つ,(黄)を2つ,(青)を2つ食べる場合,それは先述の  [1:1:1] を2つ食べているのと同じになるので,こういうのはすべて同じものだと思おうということを定式化しているに過ぎません.

f:id:dafuyafu:20200223030643j:plain
[1:1:1] ~ [2:2:2]

数学的に言うと, \mathbb{P} という集合の中では  [1:1:1]  [2:2:2] は同じ元だということです. また,何も食べないという組み合わせ  [ 0:0:0] は考察の範囲から逸れるため,これを除外します.

さて,非負整数の性質より,同値類の中で最も最小なものを取ることができます.実際  [a:b:c] に対して最大公約数  \mathrm{GCD}(a,b,c) を取ってそれらをGCDで割ると,既約な最小の組み合わせをwell-definedに取ることができます.

例 1.2

 [ 12 : 18 : 24] = [ 6 \cdot 2: 6\cdot 3: 6\cdot 4] \sim [2:3:4] ( \because \mathrm{GCD}(12,18,24) = 6)

このような組み合わせは任意の  \mathbb{P} の元に対して唯一に,かつwell-definedに(代表元のとり方によらず)定まります.これを同値類の最小元と定義し, P = [a:b:c]
\in \mathbb{P} に対して  P の最小元を  m(P) = (m_a, m_b, m_c) と表します.

ここで, \mathbb{P} の有限部分集合  V \subset \mathbb{P} が以下の条件を満たすとき, V n正則部分集合 ( n-subset ) と言います:  V = \{ P_i = [a_i: b_i:c_i]\} と表したとき,

  1.  \sum m_{a_i} \leq 15 n
  2.  \sum m_{b_i} \leq 15 n
  3.  \sum m_{c_i} \leq 15 n

例1.3 (赤)を10個,(黄)を1個食べる組み合わせ  [16:1:0] と (赤)を6個,(青)を5個食べる組み合わせ  [6: 0: 5] からなる集合  V は 1正則ではありません.

 V = \{[16:1:0], [6:0:5]\}: 1正則でない.

なぜならば,(赤)の総数を見ると  16 + 6 = 22 > 15 となり,これらの組み合わせは1袋ではまかないきれません.しかし,2袋あれば事足ります.つまり  V は2正則です.実際,2以上の整数  k に対して  Vk 正則です.

このように,正則という概念はその組み合わせは  n 袋で食べることができるか?を考えるためのものです.


さて, n正則部分集合全体の集合を  \mathrm{Reg}(n) と表します. \mathrm{Reg}(n) のなかで,集合の位数すなわち元の個数が最大であるものが存在し,その位数を  S_n と表します.

問題 n-IBMにおける  S_n を求めよ.

簡単な例

 1-IBM を考えます.なにはともあれ,平均的に食べていったほうが組み合わせは多くなりそうな気がするので,そういう食べ方を考えます.

まず,1個ずつ食べる組み合わせが3つあります.

  • 赤だけ食べる. [1:0:0]
  • 黄だけ食べる. [0:1:0]
  • 青だけ食べる. [0:0:1]

さらに,2個食べる組み合わせも  \binom{3}{2} 個.

  • 赤 + 黄  [1:1:0]
  • 赤 + 青  [1:0:1]
  • 黄 + 青  [0:1:1]

ここで,赤だけを2つ食べたり,黄だけを2つ食べたりする組み合わせは上記の1個ずつ食べる組み合わせで計上しているものと考えられるので,これらは除外されます(数式的には  [2:0:0] \sim [1:0:0] となっていることに注意).

3個ずつ食べる組み合わせは少し複雑で,重複を許して3個食べる組み合わせが7通りあります.

  • 赤 + 赤 + 黄  [2:1:0]
  • 赤 + 赤 + 青  [2:0:1]
  • 赤 + 黄 + 黄  [1:2:0]
  • 赤 + 黄 + 青  [1:1:1]
  • 赤 + 青 + 青  [1:0:2]
  • 黄 + 黄 + 青  [0:2:1]
  • 黄 + 青 + 青  [0:1:2]

これは重複組合せ  _{3} \mathrm{H}_3 = 10 の中で除外されるべき3通り(赤+赤+赤など)を除いた7通りであると考えれば分かりやすいかと思います.

ここまでで,赤黄青それぞれ10個ずつ消費しました.残り5個ずつを使って最も多く組み合わせを作ることが目標となります.順当に行くと次は4つずつ食べる組み合わせを考えることになります.実際これは9通りあります.

  • 赤 + 赤 + 赤 + 黄  [3:1:0]
  • 赤 + 赤 + 赤 + 青  [3:0:1]
  • 赤 + 赤 + 黄 + 青  [2:1:1]
  • 赤 + 黄 + 黄 + 黄  [1:3:0]
  • 赤 + 黄 + 黄 + 青  [1:2:1]
  • 赤 + 黄 + 青 + 青  [1:1:2]
  • 赤 + 青 + 青 + 青  [1:0:3]
  • 黄 + 黄 + 黄 + 青  [0:3:1]
  • 黄 + 青 + 青 + 青  [0:1:3]

この中から,うまく実を5個ずつだけ使って組み合わせを多く取らなければなりません.つまり, [3:1:0] のような組み合わせは優先的に取るべきではないということです.

しかしながら,やってみるとわかるのですが,どのように取ろうとしてもこの中から3つしか取れません.例えば,

  1.  [2:1:1],\ [1:2:1],\ [1:1:2]
  2.  [0:3:1],\ [3:0:1],\ [1:0:3]
  3.  [2:1:1],\ [0:1:3],\ [1:2:1]

といった具合です.どのように取ってもかならず3つ実が残ってしまいます.

ここまで考えると,組み合わせの総数は

 3 + 3 + 7 + 3 = 16

となっています.

問題1.  S_1 = 16 を示せ.

気が向いたらやってみてください.


考えられる別問題としては

  1.  S_n を取る組み合わせでは実がいくつ余るか?
  2. 1つも実を余らせないで  S_n を取ることができる  n は存在するか?
  3. よりモデルを一般化し実の種類を  m としたとき, S_{m,n} はどうなるか?
  4. 一つの実を複数食べる場合なども計上するように単純化すると S_n はどうなるか?(チーズバーガーを2個食べるのと,ダブルチーズバーガーを1個食べるときの味は等価か?)

などが挙げられます.時間があればこれらも考えてみたいと思います.

査読よろしくお願い致します.しゃーしたー

【ガルパ】ぎゅっDAYS♪のコード進行

f:id:dafuyafu:20190113213521j:plain
フヘヘ

ハッピーラッキースマイルイエエエエーイ!!!

みなさん、ガルパしてますか?

bang-dream.bushimo.jp

今回は、先日ガルパにチャレンジ楽曲として配信が始まった

Pastel*Palettesの「ぎゅっDAYS♪」について、

なんとなく秀和みを感じてしまったので、

そのコード進行について見ていきたいと思います。

本題

(Key: F, BPM: 170)

イントロ

C#dim7 | F/C | C#dim7 | F/C C Caug
F | Gdim7 A | Dm | E♭ F(7)
B♭ | B♭m | Csus4 | C Caug

Aメロ

F/C | F/C | B♭m | B♭m
Am7 | Dm7 | Gm7 | C/G Caug/G#
F/C | A/E | E♭ | D7
Gm | Gm Am | B♭m | C
C#dim7 | F/C | C#dim7 | F/C

Bメロ

C/G | Dm7 | C/G | F
D7 | G/D
Gm7 | Am7 | B♭ | B♭ | C

サビ

F/C | A7 | Dm7 | E♭ F(/C)
B♭ | B♭m | Csus4 | C(sus4)1
F/C | A7 | Cm72 | D(7)
Gm | Gm Am | B♭m | C Fsus4 F | Fsus4 F

アウトロ

F9 | Gm7 | Csus4 | Am/G
F9 | Gm7 | Csus4 | C/G
B♭M7 | B♭m7 | C3 Caug F/C


イントロで出てくる

C#dim7 と Gdim7 はコード的には同じ音で構成されます。

なぜ同じ音かは、ピアノの鍵盤を  \mathbb{Z} / 12 \mathbb{Z} だと思えば自明です。

詳しくは下記の記事をご参照ください。

dafuyafu.hatenablog.com

ただ、これら2つのコードは

構成音が同じでもベース音が違うため、

今回の場合は上記のようなコード進行がそれぞれ当てはまると思います。


いきなりイントロがホールトーンスケールで

度肝を抜かれつつオーギュメントが出てきたので

最初チャレンジライブでプレイしてて

笑ってしまいそうになりました。

アウトロは多分ガバガバです。ほならね?


なんとなく智也と秀和を足して2で割ったような編曲だなと思いました(小並感)

しゃーしたー


  1. ずっとCsus4かも

  2. E♭かも

  3. 前に細かく(Gm Am B♭) 等が入るかも

段論 #3.5 下段環を用いた準加算の概論

 \newcommand{\zz}{\mathbb{Z}}  \newcommand{\gg}{\mathbf{G}}  \newcommand{\ff}{\mathbb{F}}  \newcommand{\gcd}{\mathrm{GCD}}  \newcommand{\nn}{\mathbb{N}}  \newcommand{\gg}{\mathbf{G}}

f:id:dafuyafu:20181014010641p:plain

見切れている数式はスクロールすると読めます

dafuyafu.hatenablog.com

下段環の理論では,与えられた群や環についてその下のレベルの演算を持つ対象を構成する方法を導入した.巨大数論では「コンウェイのチェーン表記」等の高いレベルの演算を導入してより大きな数を作ることを目標とするが,下段環論はその真逆の発想で,演算を下に落としていくのである.次の我々の目標は下段環論の代数幾何との関連である.まずは代数多様体の座標環の下段環と幾何事象との対応を述べる.(著者注:途中単発で楕円曲線の下段環を考えるかもしれない.)

演習の解説

演習3-A  \ff_3 \ff_2 の下段環であるか?

解答 下段環である.
 今, \ff_2 の自由下段環  L(\ff_2)イデアル  \mathfrak{b} を以下のように定義する.

 \mathfrak{b} := \langle (0,0,0), (1,0^{-1}, 0^{-1}) \rangle

このとき,

\begin{align*} 0^{-1} \cdot (0,0,0) &= (0^{-1}, 0^{-1}, 0^{-1})\\ &= 0^{-1} - (0,0) \in \mathfrak{b}\\ 0^{-1} \cdot (1, 0^{-1}, 0^{-1}) &= (1^{-1}, 0,0)\\ &= 1^{-1} - (0^{-1}, 0^{-1}) \in \mathfrak{b} \end{align*}

となるので, B = L(\ff_2) / \mathfrak{b} において,

\begin{align*} 1^{-1} &= (0^{-1}, 0^{-1})\\ &= (0,0,0,0) = (0) \end{align*}

が成り立つので,

\begin{align*} 0 = 1^{-1} &= (0)\\ 1 = 0^{-1} &= (0,0)\\ () &= (0,0,0) \end{align*}

という関係式が得られるため,任意の  B の系列は  (), (0), (0,0) と簡約して表せる.ここで, g : B \to \ff_3

\begin{align*} &f( () ) = 0\\ &f( (0) ) = 1\\ &f( (0,0) ) = 2 \end{align*}

とすると, f はwell-definedな環準同型になり,また全単射でもある.よって  B \simeq \ff_3 となる.

注 3-B 環(というか体)  \ff_3 = \zz /3\zz の演算表は以下のようになる.

\begin{equation} \begin{array}{c|ccc} + & 0 & 1 & 2 \\ \hline 0 & 0 & 1 & 2 \\ 1 & 1 & 2 & 0\\ 2 & 2 & 0 & 1 \end{array} \end{equation}

\begin{equation} \begin{array}{c|ccc} \cdot & 0 & 1 & 2 \\ \hline 0 & 0 & 0 & 0 \\ 1 & 0 & 1 & 2\\ 2 & 0 & 2 & 1 \end{array} \end{equation}

 \cdot の演算表に注目すると,既約剰余類群  (\zz/3\zz)^{\times} は和に関するアーベル群  \ff_2 = \zz / 2\zz に同型である.

\begin{equation} \begin{array}{c|cc} \cdot_{\ff_3} & 1 & 2 \\ \hline 1 & 1 & 2\\ 2 & 2 & 1 \end{array} \simeq \begin{array}{c|cc} +_{\ff_2} & 0 & 1 \\ \hline 0 & 0 & 1\\ 1 & 1 & 0 \end{array} \end{equation}

つまり, \ff_3 の積が  \ff_2 の和になっていると考えることができる.

\begin{equation} \begin{array}{c|cc} \mathrm{level} & \ff_2 & \ff_3 \simeq L(\ff_2) / \mathfrak{b} \\ \hline 1 & \cdot_{\ff_2} & \\ \hline 0 & +_{\ff_2} & \cdot_{\ff_3} \\ \hline -1 & & +_{\ff_3} \end{array} \end{equation}

ここで,下段環の構成から  L(\ff_2) および  \ff_3 の積の部分群が  \ff_2 であるという意味で  \ff_2 \subset \ff_3 であるので, \ff_3 の和を自然と  \ff_2 に引き戻すことができる.

\begin{equation} \begin{array}{c|ccc} \mathrm{level} & \ff_2 & & \ff_3 \\ \hline 1 & \cdot_{\ff_2} & & \\ \hline 0 & +_{\ff_2} & & \cdot_{\ff_3} \\ \hline -1 & \underline{+_{\ff_3}} & \dashleftarrow & +_{\ff_3} \end{array} \end{equation}

このようにして, \ff_2 の和よりもレベルの低い演算を得ることができる.しかし,図における  +_{\ff_3} はあくまで  \ff_3 の演算であるので, \ff_2 の中では演算がはみ出してしまう.今の場合具体的には空文字  () という元が増えている.

\begin{equation} \begin{array}{ccccc} (0) & +_{\ff_3} & (0,0) & = & ()\\ \in & & \in & & \not\in \\ \ff_2 & & \ff_2 & & \ff_2 \end{array} \end{equation}

つまり, \ff_2 \ff_3 に拡大することで元の  \ff_2準加算を実現することができる.これを数学的に定式化したものが下段環の理論である.


壮大な目標を書きましたが、実現できるかどうかは分かりません。まぁ、気楽に行きましょう。

段論 #3 群・環の下段環

 \newcommand{\zz}{\mathbb{Z}}  \newcommand{\gg}{\mathbf{G}}  \newcommand{\ff}{\mathbb{F}}  \newcommand{\gcd}{\mathrm{GCD}}  \newcommand{\nn}{\mathbb{N}}  \newcommand{\gg}{\mathbf{G}}

見切れている数式はスクロールすると読めます

dafuyafu.hatenablog.com

前回までの記事で一般にモノイドの場合について下段環を構成した.今回は群や環についての理論を整理する.

群の下段環

 G を群, L(G) をその自由下段環とする.

命題3.1 G がアーベル群であることと,その任意の下段環  A可換環であることは同値.

証明 ( \Rightarrow)  G の可換性は  G \cup G^{-1} に誘導される.これは, x, y \in G について

 x^{-1} \cdot y = (x \cdot y)^{-1} = (y \cdot x)^{-1} = y \cdot x^{-1}

となることから成り立つ.よって,任意の  \mathbf{x}, \mathbf{y} \in L(G) についても

\begin{align*} \mathbf{x} \cdot \mathbf{y} &= (x_1 , \ldots, x_r) \cdot (y_1 , \ldots, y_s)\\ &= (x_1 \cdot y_1, x_1 \cdot y_2 , \ldots, x_r \cdot y_s)\\ &= (y_1 \cdot x_1, y_1 \cdot x_2, \ldots, y_s \cdot x_r)\\ &= \mathbf{y} \cdot \mathbf{x} \end{align*}

となるので,自由下段環  L(G)可換環となる.よって,その任意の剰余環は可換環であるので成り立つ.
( \Leftarrow)  L(G) 自身も  L(G) の剰余環であるので仮定から  L(G)可換環.ここで, L(G) - \left\{ ()\right\} は積についてアーベル群をなすが, G はその部分群であるので, G もまたアーベル群となる. \square

例3.2.1 3次対称群  S_3 はアーベル群でないので,当たり前だが  L(S_3)可換環でない.この場合非可換環論の知識が必要なため(具体的には右イデアルと左イデアル,両側イデアルを区別しなければならないなど),一般に研究は難しいと思われる.

環の下段環

環はそもそも和についてアーベル群をなすので,自然に下段環を構成することができる.

例3.2.2 アーベル群としての  \ff_2 = \zz /2\zz の自由下段環  L(\ff_2) を考える.今,文字集合

 \ff_2 \cup \ff_2^{-1} = \left\{ 0, 1, 0^{-1}, 1^{-1}\right\}

となっており,これに空文字  () を加えた有限長系列であって,系列の文字を入れ替えたものを同値として,その同値類全体が  L(\ff_2) である.ここで, L(\ff_2)イデアル  \mathfrak{a} を以下のように定義する.

 \mathfrak{a} := \langle (0,0,0,0,0), (1, 0^{-1}, 0^{-1}) \rangle

このとき,

\begin{align*} 0^{-1} \cdot (0,0,0,0,0) &= (0^{-1}, 0^{-1}, 0^{-1}, 0^{-1}, 0^{-1})\\ &= 0^{-1} - (0,0,0,0) \in \mathfrak{a} \end{align*}

および

\begin{align*} 0^{-1} \cdot (1,0^{-1}, 0^{-1}) &= (1^{-1}, 0,0)\\ &= 1^{-1} - (0^{-1},0^{-1}) \in \mathfrak{a} \end{align*}

となるので, A = L(\ff_2) / \mathfrak{a} において

\begin{align*} () &= (0,0,0,0,0)\\ 0 &= (0)\\ 1 &= (0,0)\\ 0^{-1} &= (0, 0, 0, 0)\\ 1^{-1} &= (0^{-1},0^{-1})\\ &= (0,0,0,0,0,0,0,0) = (0,0,0) \end{align*}

が成り立つ.よって, 0 以外の文字はすべて  0 の何個かの和で書くことができるようになる.なお, L(\ff_2) A における積  \cdot \ff_2 におけるアーベル群としての演算である通常の和であることに注意せよ.

Claim:  A \simeq \ff_5

 \because)  f : A \to \ff_5

\begin{align*} &f( () ) = 0\\ &f( (0) ) = 1\\ &f( (0,0) ) = 2\\ &f( (0,0,0) ) = 3\\ &f( (0,0,0,0) )= 4\\ \end{align*}

とすればwell-definedな環準同型であり,かつ全単射となるので成り立つ. \square

よって, \ff_5 \ff_2 の下段環である.また,今の場合  \ff_5 が体であることから, \mathfrak{a} \subset L(\ff_2) は極大イデアルであることもわかった.

演習3-A  \ff_3 \ff_2 の下段環であるか.

以上です.査読よろしくおねがいします.演習の解答は次の記事で.

段論 #2 自由下段環

 \newcommand{\nn}{\mathbb{N}}  \newcommand{\zz}{\mathbb{Z}}

見切れている数式はスクロールで見れます

dafuyafu.hatenablog.com

dafuyafu.hatenablog.com

前回の続きを書きます.

一般化

導入記事と前回の記事では与えられたモノイド上の自由群の剰余群から自然数モノイドへ準同型を作り,それを用いて下段環を定義したが,この方法ではそのようなモノイド準同型が存在しない場合は下段環を構成できない.そこで,前回定義した下段環の構成をより一般化し,広い範囲で考える.冗長になるが,再び最初から構成する.

 S = (S,  \cdot, e) をモノイドとし, S 上の自由群を  F(S) と表す. H \subset F(S) を以下のように定義する.

 H := \langle (a_1, \ldots, a_n, (a_{\sigma(1)})^{-1}, \ldots, (a_{\sigma(n)})^{-1}) \in F(S) \ \mid\  n \in \zz_{\geq 0},\sigma \in \mathrm{Sym}(n) \ \rangle

ただし, \mathrm{Sym}(n)n 次対称群を表し, n = 0 のときは空文字  () を表す.

補題2.1  HF(S)正規部分群である.

証明 まず, H が部分群であることは明らかであるので,正規部分群であることを示す.任意の  x \in F(S), h \in H について,


\begin{align}
x + h + x^{-1} &= x + \sum (h_i + \sigma_i (h_i)^{-1})+ x^{-1}\\
&= x + \sum(h_i + \sigma_i (h_i)^{-1} + x^{-1} +  x) + x^{-1}\\
&= \sum ( (x + h_i) + \sigma'_i (x + h_i)^{-1}) \in H
\end{align}

となるので成り立つ. \square

命題2.2  L(S) := F(S)/H は単位的環である.

証明
 L(S) F(S) の演算について群になるのは明らか.さらに,任意の  x = (x_1, \ldots, x_m), y = (y_1, \ldots, y_n) (ただし  m \leq n )についても

\begin{align*} x + y &= (x_1, \ldots, x_m) + (y_1, \ldots, y_n)\\ &=(x_1, \ldots, x_m, y_1, \ldots, y_n)\\ &\equiv ( y_1, \ldots, y_n, x_1, \ldots, x_m )\mod H\quad(\because \mathrm{below.})\\ &= y + x \end{align*}

となり,アーベル群になる.(below:  \sigma \in \mathrm{Sym}(n+m)


\sigma = \left(
\begin{array}{cccccccc}
1 & \cdots & m & m+1 & \cdots & n & \cdots & n + m\\
n+1 & \cdots & n + m & 1 & \cdots & n - m& \cdots & n
\end{array}\right)

とすればよい.)
 また, S における演算  \cdot L(S) に自然に誘導される.まず, s, r \in S について

 s \cdot r^{-1} = s^{-1} \cdot r = (s \cdot r)^{-1}
 s^{-1} \cdot r^{-1} = s \cdot r

と定義する.これを用いて  x = (x_1, \ldots, x_m), y = (y_1, \ldots ,y_n) \in L(S) について

 x \cdot y = (x_1 \cdot y_1, x_1 \cdot y_2, \ldots, x_1 \cdot y_n, x_2 \cdot y_1, \ldots, x_m \cdot y_n)

と,(行列の積のように)定義する.この演算について, L(S) -\left\{ () \right\}単位元  (e) を持つモノイドをなす.また, x,y,z \in L(S) について,

\begin{align*} (x + y) \cdot z &= (x_1, \ldots, x_m, y_1, \ldots, y_n) \cdot (z_1, \ldots, z_l)\\ &= (x_1 \cdot z_1, x_1 \cdot z_2, \ldots, y_n \cdot z_l)\\ &= (x_1 \cdot z_1, \ldots , x_m z_l) + (y_1 \cdot z_1, \ldots, y_n \cdot z_l)\\ &= x \cdot z + y \cdot z \end{align*}

となり,(  x \cdot (y + z) についても同様に成り立つので)分配法則を満たす.よって  L(S) は単位的環である. \square


定義  L(S) をモノイド  S 上の自由下段環(free low-level ring)という.

前回はここから元のモノイドから自然数モノイドへのモノイド準同型を用いて同値関係を定義し,その同値関係で剰余することによって具体的な下段環を定義した.ここでは,集合論的にではなく代数的に考える.まず,簡単な例から考える.

例 2.3  \nn を ( 0 を含まない) 自然数全体の集合とすると,これは通常の積においてモノイドをなす.その自由下段環  L(\nn)

 L(\nn) = \left\{ (n_1, \ldots, n_r) \mid n_i \in \nn \cup \nn^{-1} \right\} / H

と表される環である.ただし,その引き算は

 x - y := x + y^{-1} = (x_1, \ldots, x_r, y_s^{-1}, \ldots, y_1^{-1})

であることに注意する.ここで,イデアル  \mathfrak{a} \subset L(\nn)

 \mathfrak{a} := \langle n - (1,\ldots, 1), (n^{-1}) - (1^{-1}, \ldots, 1^{-1}) \mid n \in \nn \rangle

と定義する(上のカギカッコの中で 1 は  n 個並んでいる).このとき,以下が成り立つ.

Claim:  L(\nn) / \mathfrak{a} \simeq \zz

証明   f : L(\nn) \to \zz x = (x_1, \ldots, x_r) \in L(\nn) に対し  f(x) = \sum_{i=1}^r x_i (ただし, x_i \in \nn^{-1} のときは  x_i - x_i \in \zz として和を取る)とすると, f はwell-definedな環準同型となる.さらに  f全射である.実際に,任意の  n \in \zz に対し,  x = (1, \ldots, 1) (1 が  n 個並んでいる) とすると, f(x) = n となる.次に, \mathrm{Ker} f = \mathfrak{a} であることを示す.明らかに  \mathrm{Ker} f \supset \mathfrak{a} は成り立つ.逆の包含は読者への課題とする.よって環の第一同型定理より主張は成り立つ. \square

定義A がモノイド  S下段環(low-level ring)であるとは,あるイデアル  \mathfrak{a} \subseteq L(S) が存在して  A \simeq L(S) / \mathfrak{a} であることとする.

例 2.4 (2.2)より \zz \nn の下段環である.

以下,簡便のためモノイドの演算および環の積を表す  \cdot を省略する.

命題2.5 モノイド  S,T とモノイド準同型  f :S \to T について,環準同型  L(f) : L(S) \to L(T) が存在する.

証明  f : S \to T は以下のようにして  f : S \cup S^{-1} \to T \cup T^{-1} に拡張される.

\begin{equation} \begin{array}{cccc} f: & S \cup S^{-1} & \to & T \cup T^{-1} \\ & s & \mapsto & \begin{cases} f(s) & (s \in S)\\ f(s^{-1})^{-1} & (s \in S^{-1}) \end{cases} \end{array} \end{equation}

これは再びモノイド準同型となる.ここで, L(f) : L(S) \to L(T) x = (x_1, \ldots, x_m) \in L(S) について

\begin{equation} \begin{array}{cccc} L(f): & L(S) & \to & L(T)\\ & x & \mapsto & (f(x_1), \ldots, f(x_m)) \end{array} \end{equation}

と定義する. x,y \in L(S) について,

\begin{align*} L(f) (x + y) &= L(f)(x_1, \ldots, x_m, y_1, \ldots, y_n)\\ &= (f(x_1), \ldots, f(x_m) , f(y_1), \ldots, f(y_n))\\ &= (f(x_1), \ldots, f(x_m)) + (f(y_1), \ldots, f(y_n))\\ &= L(f)(x) + L(f) (y) \end{align*}

および,

\begin{align*} L(f) (x y) &= L(f)(x_1 y_1, x_1 y_2 \ldots, x_m y_n)\\ &= (f(x_1 y_1), f(x_1 y_2), \ldots f(x_m y_n)) \\ &= (f(x_1) f(y_1), f(x_1) f(y_2), \ldots, f(x_m) f(y_n))\\ &= (f(x_1), \ldots, f(x_m)) (f(y_1), \ldots, f(y_n))\\ &= L(f)(x) \cdot L(f) (y) \end{align*}

となるので, L(f) は環準同型となる. \square

系2.6 自由下段環を構成する操作  L: S \to L(S) はモノイドの圏  \mathfrak{Mon} と 単位的環の圏  \mathfrak{Ring} についての関手をなす.

証明  \mathrm{id}_S : S \to S S 上の恒等写像とすると, L(\mathrm{id}_S) : L(S) \to L(S)

 L(\mathrm{id}_S)(x_1, \ldots, x_m) = (\mathrm{id}_S(x_1), \ldots, \mathrm{id}_S(x_m)) = (x_1, \ldots, x_m)

となり恒等写像になる.また, f: S \to T g :T \to U についても,

\begin{align*} L(g \circ f)(x_1, \ldots, x_m) &= ( (g\circ f)(x_1), \ldots, (g \circ f)(x_m))\\ &= (g(f(x_1)), \ldots, g(f(x_m)))\\ &= L(g)(f(x_1), \ldots, f(x_m))\\ &= (L(g) \circ L(f)) (x_1, \ldots, x_m) \end{align*}

となるので結合的である.以上より成り立つ. \square


今回は改めて段論の言葉を整理した.次回以降ではモノイドの下段環に加えて環の下段環,特に有限体の下段環を調べる.具体的には  \mathbb{F}_5 \mathbb{F}_2 の下段環であることなどを詳しく見ていく.