0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Prologで作る数学の世界 位相空間の計算

Last updated at Posted at 2025-06-18

数学ライブラリで位相空間計算

お詫びと訂正

前回の記事で3点集合の位相空間について誤ったことを書いていたころがわかりました。正しくは29個です。
飯高先生もそのように書いています。私のコードが64個を出力していて同型が含まれているからと推測したのですが、単なるバグでした。飯高先生の本はARITY/PROLOG用に係れておりfor_any/2をifthenelse/3を使ってかなりトリッキーに書いてました。これがN-Prologではどうもうまくいきません。そこで、全面的に書き直し、数学ライブラリにまとめました。この結果、正しく29個が出力されましたのでご報告いたします。

数学ライブラリとその計算結果

N-Prolog ver4.40においてライブラリを整理しmathライブラリを追加しました。ここには飯高先生の本の話を簡単に再現できるようにしています。飯高先生のコードは数学表記に似せた中置記法を使用していました。私は述語論理の形式に従いできるだけわかりやすいように書き直しました。三点集合の位相空間を求める様子をご覧ください。

bandicam 2025-06-17 12-53-01-683.jpg

数学ライブラリ

今のところ集合、位相に必要な述語を用意してあります。これから群論や、写像の
数学実験に必要な述語を拡充していく予定です。できるだけシンプルに述語論理で表しています。

% mathematics library
:- module(math,[union/3,intersection/3,difference/3,subset/2,eqset/2,
                powerset/2,forall/2,topology/2,topology_space/2]).

%sets
union(X,Y,Z1) :-
    union1(X,Y,Z),
    sort(Z,Z1),!.

union1([], L, L).
union1([X|Xs], L, [X|Ys]) :- 
    \+ member(X, L),
    union1(Xs, L, Ys).
union1([X|Xs], L, Ys) :- 
    member(X, L), 
    union1(Xs, L, Ys).

intersection(X,Y,Z1) :-
    intersection1(X,Y,Z),
    sort(Z,Z1),!.

intersection1([], _, []).
intersection1([X|Xs], L, [X|Ys]) :- 
    member(X, L), 
    intersection1(Xs, L, Ys).
intersection1([X|Xs], L, Ys) :- 
    \+ member(X, L), 
    intersection1(Xs, L, Ys).

difference(X,Y,Z1) :-
    difference1(X,Y,Z),
    sort(Z,Z1),!.

difference1([], _, []).
difference1([X|Xs], L, [X|Ys]) :- 
    \+ member(X, L), 
    difference1(Xs, L, Ys).
difference1([X|Xs], L, Ys) :- 
    member(X, L), 
    difference1(Xs, L, Ys).

subset([],[]).
subset([X|L],[X|S]) :-
subset(L,S).
subset(L, [_|S]) :-
subset(L,S).

eqset(X,Y) :-
    subset(X,Y),
    subset(Y,X).

powerset([], [[]]).
powerset([X|Xs], P) :-
    powerset(Xs, Ps),
    add_elem(X, Ps, Ps1),
    append(Ps, Ps1, P).

add_elem(_, [], []).
add_elem(X, [Set|Sets], [[X|Set]|Sets1]) :-
    add_elem(X, Sets, Sets1).

% control
forall(P, Q) :-
    \+ (P, \+ Q).


% topology 
topology(O,Z) :-
    member([],O),!,
    member(Z,O),!,
    forall(math_select2(O,[X,Y]),math_topology1([X,Y],O)),!.

select2(O,[X,Y]) :-
    select(X,O,O1),
    select(Y,O1,_).

topology1([X,Y],O) :-
    union(X,Y,U),
    member(U,O),
    intersection(X,Y,I),
    member(I,O),!.

topology_space(X,Z) :-
    powerset(X,Y),
    subset(Z,Y),
    topology(Z,X).

飯高先生へご連絡

数学者、飯高先生はすでに大学を退任されていて連絡先がわかりませんでした。そこで出版社である朝倉書店にお手紙を送り、私の活動のこと、先生の本が海外でも注目されていることを伝えました。先生は私のN-Prologのことを面白がってくださいました。また、その著作を通じて多くの人々とつながれることを喜んでおられました。
英語版の出版は配布の問題などから難しいようです。

Prologで数学の問題を考えるのはとても楽しい経験です。さらに勉強をすすめて群論、ガロアの有名な群論による証明にもとりくむ予定です。乞うご期待

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?