[b][size=150]このワークシートは[url=https://www.geogebra.org/m/twxxx3yq]Math by Code[/url]の一部です。[br][/size][/b][br]前回は[br]f(x)の最小分解体Kを使った代数拡大K/Qをガロア群G(f/Q)[br]とガロア群を定義したね。[br][br]もとの数体をQに限定せずに、一般化して定義してみよう。[br][br]不変体に着目[br][br][size=150][b]<不変体は中間体>[br][/b][/size][size=150][b][color=#0000ff]・代数拡大L/KでLの部分体L[sup]H[/sup]は、体Kの自己同型群(G=Aut(K))の部分群Hで不変な体。[br][/color][/b][/size][size=150]つまり、かきまぜ方の1つHを体Lに作用させても動かない部分のことだね。[br]KそのものはどのHでも不変だから、[b]不変体はL/Kの中間の体[/b]になる。[br][br][/size][size=150][b]<中間体と部分群は表裏一体>[br][/b][/size][size=150][b]部分群HをG全体にすると、L[/b][sup]G[/sup][b]=Kなら、L/Kは[/b][color=#0000ff]正規拡大(ガロア拡大)[/color][b]という。[br]このときG=[b]Gal(L/K)=Aut(L/K)を、[/b]LのK上の[/b][color=#0000ff]ガロア群[/color][b]という。次数は[L:K]=|G|。[br][/b][size=100][color=#0000ff](例)[br]Qが不変体で、ガロア群がAut(L/Q)、L/Qがガロア拡大になる例[br][/color]・f(x)=x[sup]2[/sup]-2の最小分解体L=Q(√2)。ガロア群=S2。[br]・f(x)=x[sup]4[/sup]-10x-1の最小分解体L=Q(√2+√3)。ガロア群=V4。 [br]・f(x)=x[sup]3[/sup]-2の最小分解体L=Q(ω, [math]\sqrt[3]{2}[/math] ) 。ガロア群=S3。[br][/size][/size][color=#0000ff](例)[/color][br]ガロア拡大でない例[br]・f(x)=x[sup]3[/sup]-2に対して、L=Q( [math]\sqrt[3]{2}[/math] ) ={p+q [math]\sqrt[3]{2}[/math] +r [math]\sqrt[3]{2}[/math][sup]2[/sup] |p,q,r∈Q}とする。[br][b]Aut(L/K)={e}だった。[color=#0000ff]拡大したあとの全体がまるごと動かない。[/color][br]つまり、[/b]L[sup]Q[/sup]=Lになってしまうから、ガロア拡大でもガロア群でもない。[br][b][color=#0000ff][size=150]「拡大したところが動いて、拡大のもとが動かない」[br][/size][/color][/b]という[b]2層化がガロア拡大のイメージと言えるね。[/b][br]
[b][size=150]<ガロア拡大とガロア群の包含関係の逆転>[br][/size][/b]L/KがQの拡大体によるガロア拡大で、G=Gal(L/K)とする。[br]・MがL/Kの中間体ならL/Mもガロア拡大で、Mを不変にする群は部分群H=Fix[sub]G[/sub](M)<G。[br]・Gの部分群HはM=L[sup]H[/sup]を不変にする。MはL/Kの中間体。[br][br]中間体の集合を[u]M[/u][i]、[/i]部分群の集合を[u]H[/u]とするとき[br][b]*[/b]:[b][u]M[/u]→[u]H[/u]、¥:[b][u]H[/u]→[/b][b][u]M[/u]とすると、[/b][br][/b][size=150][b][b][color=#0000ff][br]・Gの部分群hと中間体mの一対一対応がある。[br][/color][/b][/b][size=100]中間体m∈[u]M[/u]に対してはm*はLのすべての自己同型群。[br]部分群h∈[u]H[/u]に対してはh¥はhの不変体。[br][/size][/size][size=150][color=#0000ff][br]・Gの部分群hと中間体mの一対一対応は、包含関係を逆転させる。[br][br]m1<m2∈Mなら、m1*>m2*∈H[br][/color][br]だから、[br][color=#0000ff][size=200][b]K*=G, M*=H,L*={e}[br][/b][/size][/color][/size]つまり、富士山の頂上の体Kから中間体Mが続き、そこから麓の体Lへと流れがある。[br]「富士山の体」のこの拡大体の流れ [color=#0000ff][b]K<Ms<L [/b][/color]に対して、[br]逆さ富士では、Kを不変にする群G、次にMを不変にする群Hが続き、Lを不変にする群{e}とつながる。[br]「逆さ富士の群」の部分群の流れ [color=#0000ff][b]G>Hs>{e} [/b][/color]が対応す[br]つまり、富士山の頂上の体Kから中間体Mが続き、そこから麓の体Lへと流れがある。[br][br]・[L:K]=|G|の中間体をMとする。M*が自己同型群Gの部分群。[br][b][color=#0000ff][size=200][L:M]=|M*|[br][M:K]=|G|/|M*|[br][/size][/color][/b]もしも|G|=6、|M*|=3ならば、Mを基底とするLの拡大次数[L:M]も3。[br][M:K]=|G|/|M*|=6/3=2だから、Lを基底としたMの次数は2となる。[br]言い換えると、|G|=[L:K]=[L:M][M:K]=[b]|M*|[M:K][/b]だから、|M*|と|M:K|は反比例する。[br]だから、体の拡大のハッセ図と群の部分関係のハッセ図を[br][b]対応させて書くと、対応する位数の積は一定になる。[br][L:K][L*]=[L:K][{e}]=|G|[br][M:K][M*]=[L:K][H|=|G|[br][K:K][K*]=[K:K]|G|=|G|[br][/b]
[color=#0000ff](例)[br][/color]f(x)=(x[sup]2[/sup]-2)(x[sup]2[/sup]-3)の分解体Lのガロア群Gの部分群と対応するLの中間体は?[br]分解体L=Q(√2,√3)={a+b√2+c√3+d√6 | a,b,c,d∈Q}[br]ガロア群G=Gal(L/Q)=V4=Z/2Z×Z/2Z={(0,0),(0,1),(1,0),(0,0)}={e,p,q,r=pq}[br]p(√2)=-√2,p(√3)=√3,q(√2)=√2,q(√3)=-√3。[br]pq(√6)=pq(√2*√3)=p(√2*(-√3))=(-√2)(-√3)=√6[br]Gの自明でない部分群H={A,B,C}={{e,p},{e,q},{e,r}}の3個でどれも位数は2。[br]対応する中間体H=L[sup]A[/sup],L[sup]B[/sup],L[sup]C[/sup]とすると、L[sup]A[/sup]=Q(√3),L[sup]B[/sup]=Q(√2),L[sup]C[/sup]=Q(√6)。[br]拡大次数は[L:H]=[H:L]=2[br][color=#0000ff](例)[br][/color]f(x)=x[sup]3[/sup]-2の分解体Lのガロア群の部分群と対応するLの中間体は?[br]u1,u2,u3= [math]\sqrt[3]{2}[/math] , ω[math]\sqrt[3]{2}[/math] , ω[sup]2[/sup][math]\sqrt[3]{2}[/math] とおくと、[br]分解体L=Q( [math]\sqrt[3]{2}[/math] ,ω)=Q({a+bω+c [math]\sqrt[3]{2}[/math] +dω [math]\sqrt[3]{2}[/math] +e [math]\sqrt[3]{2}[/math] [sup]2[/sup]+fω [math]\sqrt[3]{2}[/math] [sup]2[/sup] | a,b,c,d,e,f∈Q}= [b]Q(u1,u2,u3)[/b]。[br]ガロア群G=Gal(L/K)=S3={e, s:(1 2 3), ss:(1 3 2), a:(1 2) , b:(1 3) ,c :(2 3)} [L:K]=6[br]Gの自明でない部分群H={A,B,C,N}={{e,a},{e,b},{e,c},{e,s,ss}}の4個で位数は2か3。[br]だから、拡大次数[H:Q]=2か3。[br]u1,u2,u3はそれぞれ、互換c(2 3),b(1 3),a(1 2)で不変だとすると対応する中間L[sup]C[/sup],L[sup]B[/sup],L[sup]A[/sup]=Q(u1),Q(u2),Q(u3)。[br]自明でない中間体M=Q(ω)はωが2次方程式の解で[M:Q]=2だから、[L:M]=6/2=3となりNの次数に一致する。L[sup]N[/sup]=Q(ω)。N={e,r,s}は正規部分群。[br]
[color=#9900ff][b][u][size=150]質問:ガロア対応を視覚化するコードはどうかけばよいでしょうか。[br][/size][/u][/b][/color][br]群のハッセ図をhasseGでかきます。[br]表示するためのデータを{ノード名:表示ラベル}の辞書形式itemsで渡します。[br]位数のデータをsizeで渡します。[br]そのあとG.node()でitemsをノードにしてグラフにつけましょう。[br]最後にitemsを→でつなぐために、2つのノード(群)の位数sizeを[br]読み取って割り切れてしかも、[b]divCount==2(素数)のときだけつなぎます[/b]。[br]つなぎ方は小から大へ→が出るようにするので、[br]単位元が一番上、Gが一番下、中間に部分群がきます。[br]→には位数の商(指数)をつけましょう。[br][br]体のハッセ図はhasseKでかきます。[br][b]体のハッセ図を群のハッセ図に対応させて書くと、対応する位数の積は一定になる。[br][L:K][L*]=[L:K][{e}]=|G|[br][M:K][M*]=[L:K][H|=|G|[br][K:K][K*]=[K:K]|G|=|G|[br][/b]位数データは群と同じものを渡しますが、[br]上下を逆にかくために、[br][b]自明でない部分群の位数はGの位数を割って反転させます。[br]Qを基底とした拡大の次数のデータ[/b]として使います。[br]上下逆にするので、Lが一番上、Qが一番下、中間に中間体がきます。[br]→には拡大次数をつけますが、→が縮小みたいで、何か変ですね。。。。[br]dir属性を逆にすると改善できます。[br][br]import graphviz[br]from itertools import permutations[br]def [color=#0000ff]hasseG[/color](items,size):[br] G = graphviz.Digraph()[br] for k, v in items.items():[br] G.node(name = str(k), label =v )[br] nodes = items.keys()[br] M = list(range(2,len(items)))[br][b][color=#0000ff] divCount = lambda n:len(list(filter(lambda m:n % m==0, list(range(1,n+1)))))[br] P = [x for x in M if divCount(x)==2] [br][/color][/b] for pm in permutations(items,2):[br] x,y = pm [br] a,b = size[x],size[y][br] div = a//b[br] if a % b ==0 and ([b]div in P[/b]):[br] G.edge(str(y),str(x),str(div)) #上が小y、下が大x(群)[br] return G[br]def [color=#0000ff]hasseK[/color](items,size):[br] [b]mins = min(size)[br] maxs = max(size)[br] recipro = lambda x: maxs//x if (x!=mins and x!=maxs) else x #拡大次数のために個数を反転させる。[br] size=[recipro(x) for x in size][br] [/b] G = graphviz.Digraph()[br] for k, v in items.items():[br] G.node(name = str(k), label =v )[br] nodes = items.keys()[br] M = list(range(2,len(items)))[br] divCount = lambda n:len(list(filter(lambda m:n % m==0, list(range(1,n+1)))))[br] P = [x for x in M if divCount(x)==2] [br] for pm in permutations(items,2):[br] x,y = pm [br] a,b = size[x],size[y][br] div = a//b[br] if a % b ==0 and (div in P):[br][b] G.edge(str(x),str(y),str(div),dir='back') #上が大x、下が小y[br][/b] return G[br]#=====================================================[br]items={0:"{e}",1:"A{e,a}",2:"B{e,b}",3:"C{e,c}",4:"N{e,s,ss}", 5:"G"}[br]size=[1,2,2,2,3,6][br]G = hasseG(items,size) [br]G
items={0:"Q",1:"LA=Q(u3)",2:"LB=Q(u2)",3:"LC=Q(u1)",4:"LN=Q(ω)", 5:"L"}[br]size=[1,2,2,2,3,6][br]K = hasseK(items,size) [br]K
items={0:"{e}",1:"A{e,p}",2:"B{e,q}",3:"C{e,pq}",4:"G"}[br]size=[1,2,2,2,4][br]G = hasseG(items,size) [br]G[br]
items={0:"Q",1:"LA=Q(√3)",2:"LB=Q(√2)",3:"LC=Q(√6)",4:"L"}[br]size=[1,2,2,2,4][br]K = hasseK(items,size) [br]K