リラックスして遊び
N-Prologの開発を一通り終えてしばらくノンビリしようと思いました。かねてより途中にしていた飯高茂先生の「Prologで作る数学の世界」に取り組んでいます。群論の入門書を手にしたのは長男が生まれる頃でした。30年くらい経ちますかねぇ。飯高先生の本のコードを動かしつつ、どういうことをやっているのかを探っていました。おおよそ飯高先生のやろうとしていたことがわかったような気がしました。そこで自分流のやり方、書法でゼロから作ることにしました。モジュールにしてあります。 use_module(math). でライブラリが起動します。そのことについてご紹介しつつ数学遊びの一端をご紹介したいと思います。
群論遊び
飯高先生の本では順列を置換とみて置換に関する乗法、逆元、単位元といった計算を用意します。そしてそれらを応用して群論に取り組みます。群論は演算が所定の定義に収まっていれば群となります。置換も演算ですのでうまくやれば群となります。それを自分で計算実験するのが楽しいです。
ライブラリに準備した述語は述語形式のものと数学手表記に似せた中置記法のものがあります。ここでは飯高先生流に中置記法の方を用います。
- 乗法
N-Prolog Ver 4.42
?- use_module(math).
yes
?- X isq [2,3,1]*[2,3,1].
X = [3,1,2] .
yes
?-
- 逆元
?- X isq 1//[2,3,4,1].
X = [4,1,2,3] .
yes
?-
?- perm_ident(3,X).
X = [1,2,3] .
yes
?-
- べき乗
?- X isq [3,1,2]^3.
X = [1,2,3] .
yes
?-
位数が3であることがわかります。おもしろい!
groupe_createを使って置換にインデックスを与えます。
?- groupe_create(perm,3).
yes
?- listing.
p([1,2,3],1).
p([1,3,2],2).
p([2,1,3],3).
p([2,3,1],4).
p([3,1,2],5).
p([3,2,1],6).
yes
?-
3点集合の順列に番号を付します。それらを置換とみて計算します。isgを使います。
?- Z isg 2*2.
Z = 1 .
yes
?-
これは次の計算と同じことです。
?- Z isq [1,3,2]*[1,3,2].
Z = [1,2,3] .
yes
?-
群となるためには
p/2の置換について積の計算があり次の条件を満たす必要があります。
(1) (ab)c = a(bc)
(2) 単位元がある。
(3) 逆元がある。
これらを確認する述語 groupeを作ればこれが群になっているかどうかを確認することができます。
会話しながら動かして学ぶ
ChatGPTにしつこく質問しながら群のことを学んでいます。そしてPrologの述語を書いてみます。一発では期待した結果は得られません。多くの場合は理解不足です。ChatGPTに質問を繰り返しつつ理解を深めます。深い理解に達したときに正しく動作します。これは楽しい経験です。学校で押し付けられる勉強とは異なります。自ら没頭して勉強することにより深い喜びが得られることでしょう。
N-Prologのmathはレゴブロックの部品のようなものです。素朴な部品を組み合わせることにより多様なものを作ることができるでしょう。ぜひ、数学をお楽しみください。ドキュメントMATH.mdにライブラリの仕様を整理ていあります。
どうぞお楽しみください。