1 of 23

数理論理学

第2回

Prolog プログラミング

​

© 加藤,高田,新出

2 of 23

7.2節(p. 169)

簡単なプログラムによるProlog プログラミング

7.3節(p. 177)

一般的な確定節

3 of 23

Prolog (Programing in logic)

  • 一階述語論理を基礎としたプログラミング言語。
  • 人工知能研究用言語の一つ。
  • 人間の思考過程をプログラムに反映できる。

1974年 マルセイユ大学 コルメラワにより開発

4 of 23

Prolog (Programing in logic)

  • 一階述語論理を基礎としたプログラミング言語。

​

1974年 マルセイユ大学 コルメラワにより開発

本書を用いた講義の目的

​

Prolog の基礎である述語論理と

Prolog の動作原理である導出規則

の理解。

5 of 23

「ひろしがまる子の親である」という関係

Prologでは

parent(hiroshi, maruko).

parent(sumire, maruko).

male(hiroshi).

female(sumire).

female(maruko).

?- parent(X, maruko).

X = hiroshi

6 of 23

準備作業とプログラムの作成

$ mkdir prolog

$ cd prolog

$ emacs sakurake.pl &

​

parent(hiroshi, maruko).

parent(sumire, maruko).

male(hiroshi).

female(sumire).

female(maruko).

7 of 23

parent(tomozou, hiroshi).

parent(kotake, hiroshi).

parent(hiroshi, sakiko).

parent(sumire, sakiko).

parent(hiroshi, maruko).

parent(sumire, maruko).

male(tomozou).

male(hiroshi).

female(kotake).

female(sumire).

female(sakiko).

female(maruko).

child(X, Y) :- parent(Y, X).

mother(X, Y) :- parent(X, Y), female(X).

プログラム作成

ファイル名 sakurake.pl

(Windows のメモ帳の場合)ファイルの種類「全てのファイル」        

8 of 23

準備作業とプログラムの実行

$ mkdir prolog

$ cd prolog

$ emacs sakurake.pl &

​

$ swipl

Welcome to SWI-prolog…

:

?- ['sakurake.pl'].

9 of 23

parent(tomozou, hiroshi).

parent(kotake, hiroshi).

parent(hiroshi, sakiko).

parent(sumire, sakiko).

parent(hiroshi, maruko).

parent(sumire, maruko).

male(tomozou).

male(hiroshi).

female(kotake).

female(sumire).

female(sakiko).

female(maruko).

child(X, Y) :- parent(Y, X).

mother(X, Y) :- parent(X, Y), female(X).

事実節

10 of 23

まる子がひろしの子供かどうか

child(tomozou, hiroshi).

child(kotake, hiroshi).

child(hiroshi, sakiko).

child(sumire, sakiko).

child(hiroshi, maruko).

child(sumire, maruko).

事実節だけ

では、表現

力に限界が

ある

11 of 23

ルールの導入

child(X, Y) :- parent(Y, X).

​

Y が Xの親

X は Y の

子供である。

ならば

:-

ヘッド部

ボディー部

確定節(プログラム節)

事実節も確定節の一種

12 of 23

?- listing.

parent(tomozou, hiroshi).

​

:

child(A, B) :-

parent(B, A).

​

mother(A, B) :-

parent(A, B),

female(A).

13 of 23

?- child(maruko, hiroshi).

true.

​

?- child(maruko, X).

X = hiroshi ;

X = sumire ;

​

14 of 23

parent(sumire, maruko). では不十分!

条件のAnd合成

すみれ は まる子の母親である。

mother(X,Y) :- parent(X,Y), female(X).

X が Yの親であり、

かつ X が女性

X は Y の

母親である。

ならば

かつ

15 of 23

?- listing.

parent(tomozou, hiroshi).

​

:

child(A, B) :-

parent(B, A).

​

mother(A, B) :-

parent(A, B),

female(A).

16 of 23

?- mother(sumire, maruko).

true.

?- mother(hiroshi, maruko).

false.

?- mother(X, maruko).

X = sumire ;

​

17 of 23

練習問題 条件のAnd合成の応用

さき子は、まる子の兄弟姉妹である。

  • X は、Z の子供である。
  • Y は、Z の子供である。
  • X と Y は違う人物である。

X と Y

の親は

同じ

ルールを作る方針

X \= Y.

sibling(X,Y) :- 条件1,条件2,…

18 of 23

?- sibling(sakiko, maruko).

true.

?- sibling(maruko, maruko).

false.

?- sibling(X, maruko).

X= sakiko

練習問題   実行結果

19 of 23

sibling(X, Y) :-

child(X, Z),

child(Y, Z),

      X \= Y.

練習問題 解答例

20 of 23

parent(tomozou, hiroshi).

parent(kotake, hiroshi).

parent(hiroshi, sakiko).

parent(sumire, sakiko).

parent(hiroshi, maruko).

parent(sumire, maruko).

male(tomozou).

male(hiroshi).

female(kotake).

female(sumire).

female(sakiko).

female(maruko).

child(X, Y) :- parent(Y, X).

mother(X, Y) :- parent(X, Y), female(X).

事実節

21 of 23

演習課題2 の準備

parent(tomozou, hiroshi).

    :

parent(sumire, maruko).

parent(sakiko, tomohiro).

male(tomozou).

male(hiroshi).

female(kotake).

female(sumire).

female(sakiko).

female(maruko).

male(tomohiro).

child(X, Y) :- parent(Y, X).

mother(X, Y) :- parent(X, Y), female(X).

事実節の追加

22 of 23

演習課題2 条件のAnd合成の応用

ともひろは、まる子の甥である。

  • Y は、Z の兄弟姉妹である。
  • X は、Z の子供である。
  • X は、男性である。

​

ルールを作る方針

nephew (X,Y) :- 条件1,条件2,…

23 of 23

?- nephew(tomohiro, maruko).

true.

?- nephew(tomohiro, sakiko).

false.

?- nephew (tomohiro, X).

X= maruko;

演習課題2   実行結果