Maxima で綴る数学の旅

紙と鉛筆の代わりに、数式処理システムMaxima / Macsyma を使って、数学を楽しみましょう

-数学- p進数入門 積公式

0でない任意の整数(実際には有理数でも成り立つ)xについて、xの絶対値とxの全てのp進絶対値(pはすべての素数にわたる)を掛け合わすと1になる、という美しい式が成り立ちます。

$$ \left| x\right| \,\prod_{p}\left| x \right|_{p}=1$$

この式の左辺を特定のxについて計算して、1になることを確かめます。またそうなる仕組みを考えてみます。

 

をお持ちの方はp36を参照してください。

 

まず準備をします。以下で定義するpproduct(f(p),p,pmax)は、pを素数として2からpmaxまで変化させながらf(p)の値を掛け合わせます。\(f\left(2\right)\cdot f\left(3\right)\cdot f\left(5\right)\cdots f\left(pmax\right)\)を計算します。

(%i1) pproduct(e, var, pmax) ::=
if numberp(pmax) then
buildq([e:e,v:var,pm:pmax],
block([res:1],
for v:next_prime(1) next next_prime(v) while (v<=pm)
do block([],res:e*res),return(res)))
else
buildq([e:e,v:var,pm:pmax],apply(nounify(pproduct),['e,'v,pm]))$
(%i2) texput(nounify(pproduct),
lambda([arglist], block([e,v,pm],[e,v,pm]:args(arglist),
if (pm=inf) then
concat("\\prod_{",tex1(v) ,if(v='p)then""else":prime","}",tex1(e))
else
concat("\\prod_{",tex1(v) ,if(v='p)then""else":prime"," \\leq ",tex1(pm),"}",tex1(e)))))$
(%i3) texput(nounify(padic_norm),
lambda([arglist],block([f1,f2],[f1,f2]:args(arglist),
concat("\\left| ", tex1(f1), " \\right|_{",tex1(f2),"}"))))$
(%i4) load("padics")$

padicsパッケージの関数padic_norm(x,p)と準備で定義したpproduct(f(p),p,pmax)を使って積公式をmaximaのコマンドで書くと以下のようになります。
(%i5) pf:abs(x)*pproduct('padic_norm(x,p),p,inf)=1;
$$ \tag{%o5} \left| x\right| \,\prod_{p}\left| x \right|_{p}=1 $$

実はこの無限積に見える式ですが、実際には有限積です。pがある数Fまでの素数に渡る積で1になってしまいます。それ以上のpについてはxのp進絶対値が全て1になるため積の値には影響しないのです。
(%i6) pfx:abs(x)*pproduct('padic_norm(x,p),p,F)=1;
$$ \tag{%o6} \left| x\right| \,\prod_{p \leq F}\left| x \right|_{p}=1 $$

Fは簡単に求まります。xの素因数のうち最大のものがそれです。

では早速、xに具体的な値を入れて計算をやってみましょう。ここでは\(x=123454321\)を例に取ります。xを素因数分解してFを求めます。
(%i7) factor(123454321);
$$ \tag{%o7} 41^2\,271^2 $$

従って\(x=123454321\)の最大の素因数は271であることから、\(F=271\)がわかりました。これらを積公式(有限版)の左辺に代入してみます。
(%i8) lhs(pfx),x:123454321,F:271;
$$ \tag{%o8} 123454321\,\prod_{p \leq 271}\left| 123454321 \right|_{p} $$

計算します。
(%i9) %,nouns;
$$ \tag{%o9} 1 $$

ちゃんと1になりました!

 

こうなる種明かしをしましょう。

p進絶対値の定義をよく考えてみると、pがxの素因数でない場合、xのp進絶対値は1になります。例えば\(x=123454321\)の例で3進絶対値、5進絶対値を計算してみます。

(%i10) 'padic_norm(x,p)=factor(padic_norm(x,p)),x:123454321,p:3;
$$ \tag{%o10} \left| 123454321 \right|_{3}=1 $$
(%i11) 'padic_norm(x,p)=factor(padic_norm(x,p)),x:123454321,p:5;
$$ \tag{%o11} \left| 123454321 \right|_{5}=1 $$

つまりpはxの全ての素因数(この場合は41, 271)に渡れば良いだけだったのです。それ以外のpではp進絶対値が1になってしまい積に影響しません。

では、xの41進絶対値、271進絶対値を計算すると以下のようになります。積公式の左辺は実質的にはこの場合の積だけを考えれば良いのです。

(%i12) 'padic_norm(x,p)=factor(padic_norm(x,p)),x:123454321,p:41;
$$ \tag{%o12} \left| 123454321 \right|_{41}=\frac{1}{41^2} $$
(%i13) 'padic_norm(x,p)=factor(padic_norm(x,p)),x:123454321,p:271;
$$ \tag{%o13} \left| 123454321 \right|_{271}=\frac{1}{271^2} $$

これらの積に、

(%i14) factor(123454321);
$$ \tag{%o14} 41^2\,271^2 $$

をかければ1になるのは当たり前ですね。

xが有理数の場合もxを分子と分母に分けて考えれば全く同じ議論が成立します。