誰でも簡単に可換で結合的な演算子を作る方法
アドカレ11日目の参加記事です。他の人の記事もぜひ読んでみてください!
明日:ーーー
冪乗はいい性質を持っていない演算
みなさんはどのような演算を知っていますか?
足し算+、引き算-、掛け算×、割り算÷
これら四則演算と呼ばれるものは小学校で習ったと思います。
引き算は負の数(加法逆元)を足して、割り算は真分数(乗法逆元)を掛けているだけですから、
四則演算は本質的には2つですね!
足し算と掛け算はいい性質を持っています。
結合法則(結合性)と交換法則(可換性)です。
しかも、掛け算は足し算の繰り返しですから、分配法則まで成り立っちゃいます!!
ヤッター
他に習った演算はないでしょうか?
中学校では冪乗、高校では対数なども習いましたね!
冪乗は掛け算をさらに繰り返したものですね。
でもこちらはいい性質を持っていなかったのです……
例えば結合法則
(4^3)^2 = 64^2 = 4092
4^(3^2) = 4^9 = 262144
括弧の位置を変えただけで、違う値になってしまいました。
つまり結合法則を冪乗は持っていないのです(残念)
交換法則もありません。
2^3=8
3^2=9
悲しいですね…
この記事の本筋ではありませんが、冪乗の擁護もしてみましょう。冪乗は掛け算の繰り返しですから、分配法則が成り立っているのではないのでしょうか(名推理)
それでは調べてみましょう!
右分配法則
a^c × b^c = (a×b)^c
いい感じですね!これは
a×c+b×c = (a+b)×c
との類似になっています。
左分配法則……?
a^b × a^c = a^(b+c)
ん……?
(a×b+a×c)= a×(b+c)
と形は少し似ていますが、冪乗と掛け算をしていたはずなのにいきなり足し算が出てきています……
やっぱり冪乗はダメな子ですね
ああ、誰でも簡単に可換で結合的な演算子を作る方法はないのでしょうか……
長い長い導入が終わり、次は可換ハイパー演算子について語っていきます!
可換ハイパー演算子 〜掛け算に分配的な可換で結合的な演算〜
突然ですが、足し算と掛け算を対応させることが可能です!!
つまり、以下の関数方程式を満たす関数fが存在します。
f(x+y) = f(x)×f(y)
本当に存在するんでしょうか?
はい!存在します!
その一つは指数関数e^x (以降exp(x)と表記) です。
exp(x+y) は指数法則からexp(x+y) = exp(x)exp(y)が成り立つます!
これはまさに上記の関数方程式を満たしています!!*1
ここである疑問が浮かびます。
加法から乗法に対応させる関数が存在しましたが、
乗法から未知の演算に対応させる関数は存在するのでしょうか。
f(x×y) = f(x)⊗f(y)
さて困りました。演算は未知だし、演算が決まっていないので関数も見つけることができません。
しかしここで逆転の発想です。関数の方を自分で勝手に定めちゃいましょう!
すると、上記の等式から演算は定義されるのです!
ここでfをexpとすると⊗は以下のような等式を満たします。
exp(x×y) = exp(x)⊗exp(y)
しかしこのままではちょっとわかりづらいです。なのでexpの逆関数、すなわち対数関数logを利用して、x⊗y = ……という形にしていきます。
方法は簡単で、xをlog x に置き換えると…
x⊗y = exp( log(x)×log(y) )
となります。 これは
x × y = exp( log(x)+log(y) )
と似ていますね!
x⊗y が指数関数と対数関数の組み合わせから定義されていて、わかりやすいですね!
しかし、この演算はいい性質を持っているのでしょうか?
それでは、結合性と可換性について確かめましょう。
結合性の証明
(x⊗y)⊗z
= exp(log( exp( log(x)×log(y) ) )×log(z))
= exp( log(x)×log(y)×log(z) )
= exp( log(x)×(log(y)×log(z)) )
= exp( log(x)× log(exp(log(y)×log(z))) )
= (x⊗(y⊗z))
冪乗では成り立たなかった結合性が成り立っています!
可換性はどうでしょうか?
可換性の証明
x⊗y
= exp( log(x)×log(y) )
= exp( log(y)× log(x))
= y⊗x
これで結合性と可換性が成り立つことがわかりました!
さらにそれに加えて、もう一つ素晴らしい性質があります。
それは乗法に対する分配法則です!
分配法則の証明
x⊗(y×z)
= exp( log(x)×log(y×z) )
= exp( log(x)×(log(y)+log(z)) )
= exp(log(x)log(y)+log(x)log(z))
= exp(log(x)log(y)) × exp(log(x)log(z))
= (x⊗y × x⊗z)
結合性も可換性もあって分配法則もある。
まさにこの演算は
加法、乗法に並ぶ、第三の演算と考えても良いのでしょう。
……欲張りな読者は気づいているかもしれませんが、この第三の演算に分配的な演算に分配的な演算も考えることができます。
さらに、その第四の演算に分配的な演算も考えることができます。
いくらでもこの方法で分配的な系列を作ることができます!!!
驚くことに逆に第一の演算とも呼ぶべき足し算が分配的になるような演算も作ることができます。
このように再帰的に定義される演算はCommutative hyperoperationsと呼ばれています。
最終章もっと別の演算たち
新しい演算子⊕を作ることができます。
具体的に書くと
x⊕y := f(f^-1(x) + f(y)^-1)
ですね。
このようにして定義された演算は結合法則も可換性も満たします。
fの中にfの逆関数があるのがうまく効いています。
それでは様々な結合的で可換な演算子たちをいくつか鑑賞して終わりたいと思います。
- x⊕y := x+y+c
- x⊕y := xyc
- x⊕y := sin(arcsin(x)+arcsin(y))
- x⊕y := arcsin(sin(x)+sin(y))
- x⊕y := √(x^2+y^2)
- x⊕y := log(exp(x)+exp(y))
- x⊕y := tan(tan^-1(x)+tan^-1(y)) = (x+y)/(1-xy)
もっと何か書こうとしてあらかじめ改行したが使われなかった場所