はじめに
自作Prolog処理系のテストも兼ねてPrologで複素数に関するコードを書きました。将来、実用になるであろう量子コンピューターの理解には複素数も関連するとのことです。Pythonなどには数学関数ライブラリが完備されていますが、自分で複素関数の理解、再確認のためにコードを書いてみるのもいいかもしれません。
飯高先生の本のアイディア
著名な数学者である飯高茂先生の著作に「Prologで作る数学の世界」があります。Prologを応用して集合論、位相、群論について考えを深めていくという内容の名著です。この集合論をPrologで記述する飯高先生の手法にヒントを得て中置記法の演算子を定義し、それで複素関数をPrologで記述してみました。
コード
:- op(700,xfx,isc).
X isc c(R1,I1)+c(R2,I2) :-
R is R1+R2,
I is I1+I2,
X = c(R,I).
X isc c(R1,I1)-c(R2,I2) :-
R is R1-R2,
I is I1-I2,
X = c(R,I).
X isc c(R1,I1)*c(R2,I2) :-
R is R1*R2-I1*I2,
I is R1*I2+I1*R2,
X = c(R,I).
X isc c(R1,I1)/c(R2,I2) :-
D is R2^2+I2^2,
R is (R1*R2-I1*I2)/D,
I is (R1*I2+I1*R2)/D,
X = c(R,I).
X isc conjugate(c(R,I)) :-
X = c(R,-I).
X isc real_part(c(R,I)) :-
X = R.
X isc imag_part(c(R,I)) :-
X = I.
X isc abs(c(R,I)) :-
X is sqrt(R^2+I^2).
実行例
N-Prolog Ver 1.83
?- [-'tests/comp.pl'].
yes
?- X isc c(2,3)+c(4,5).
X = c(6,8) .
yes
?- X isc abs(c(2,3)).
X = 3.605551275463989 .
yes
?- X isc conjugate(c(1,2)).
X = c(1,-2) .
yes
?-
複素関数の理解へ
数学の教科書を片手に複素数における三角関数をPrologで記述してみるなどすると、興味が湧き、理解が深まるものと思います。
これから10年の間に学ぶべきもの
最新のモダンな言語、言語処理系や新たなライブラリを学ぶことも必要でしょう。一方、現在AIの主流になったDeepLearningでは線形代数と微積分の知識が必要とされています。量子コンピューターにおいては複素関数ほか数学の知識が必要とされるとのことです。そうした基礎を習得しておくこともまた、必要とされる学びではないだろうか?と私は思っています。
参考資料
社会人のための量子コンピューター超入門 基本数学編
https://qiita.com/Ayumu_walker/items/17e7a947e27823070b40