Presentation is loading. Please wait.

Presentation is loading. Please wait.

Prolog入門 ーIT中級者用ー.

Similar presentations


Presentation on theme: "Prolog入門 ーIT中級者用ー."— Presentation transcript:

1 Prolog入門 ーIT中級者用ー

2 Prologとは PROgramming in LOGic 人工知能用プログラミング言語 手続き型プログラミング 宣言型プログラミング
関数型プログラミング オブジェクト指向型プログラミング etc.

3 Programming in logic 論理の言葉でプログラムを記述するプログラミング方法

4 具体例 記号微分プログラム (さっそく、作ってみよう!)

5 微分の知識(例えば…)

6 微分の知識 d(K,X,0).

7 微分の知識 d(N,X,0). d(X,X,1).

8 プログラムのソース全容 d(X,X,1). d(T,X,0) :- atom(T) ; number(T).
d(U+V,X,DU+DV) :- d(U,X,DU), d(V,X,DV). d(U-V,X,DU+ (-DV)) :- d(U,X,DU), d(V,X,DV). d(-T,X,-R) :- d(T,X,R). d(K*U,X,K*W) :- number(K), d(U,X,W). d(U*V,X,B*U+A*V) :- d(U,X,A), d(V,X,B). d(U/V,X,W) :- d(U*V^ (-1),X,W). d(U^V,X,V*W*U^ (V+ (-1))) :- number(V), d(U,X,W). d(U^V,X,Z*log(U)*U^V+V*W*U^ (V+ (-1))) :- d(U,X,W), d(V,X,Z). d(log(T),X,R*T^ (-1)) :- d(T,X,R). d(exp(T),X,R*exp(T)) :- d(T,X,R). d(sin(T),X,R*cos(T)) :- d(T,X,R). d(cos(T),X,-R*sin(T)) :- d(T,X,R). d(tan(T),X,W) :- d(sin(T)/cos(T),X,W).

9 プログラム(1/4) d(X,X,1). d(T,X,0) :- atom(T) ; number(T).

10 プログラム(1/4-1) d(X,X,1). XをXで微分すると1. XをXでdifferentiateすると1.
Differentiation of X with respect to X is 1. d(X, X, 1).

11 d(X,X,1). 一般に、 d(f(x), x, f ’(x)).

12 プログラム(1/4) d(T,X,0) :- atom(T) ; number(T). もしTがアトムか数ならば、TをXで微分すると0.
TをXで微分すると0.もしTがアトムか数ならば. d(T,X,0) if T is atom or T is number. d(T,X,0) if atom(T) or number(T).

13 プログラム(2/4) d(U+V,X,DU+DV) :- d(U,X,DU), d(V,X,DV).
d(-T,X,-R) :- d(T,X,R).

14 プログラム(2/4-1) d(U+V,X,DU+DV) :- d(U,X,DU), d(V,X,DV).
UをXで微分したものがDUであり、かつ、 VをXで微分したものがDVであるとき、 U+VをX微分したものはDU+DVである。

15 プログラム(2/4) d(U+V,X,DU+DV) :- d(U,X,DU), d(V,X,DV).
d(-T,X,-R) :- d(T,X,R).

16 プログラム(3/4) d(K*U,X,K*W) :- number(K), d(U,X,W).
d(U*V,X,B*U+A*V) :- d(U,X,A), d(V,X,B). d(U/V,X,W) :- d(U*V^ (-1),X,W). d(U^V,X,V*W*U^ (V+ (-1))) :- number(V), d(U,X,W). d(U^V,X,Z*log(U)*U^V+V*W*U^ (V+ (-1))) :- d(U,X,W), d(V,X,Z).

17 プログラム(4/4) d(log(T),X,R*T^ (-1)) :- d(T,X,R).
d(exp(T),X,R*exp(T)) :- d(T,X,R). d(sin(T),X,R*cos(T)) :- d(T,X,R). d(cos(T),X,-R*sin(T)) :- d(T,X,R). d(tan(T),X,W) :- d(sin(T)/cos(T),X,W).

18 d(X,X,1). d(T,X,0) :- atom(T) ; number(T). d(U+V,X,DU+DV) :- d(U,X,DU), d(V,X,DV). d(U-V,X,DU+ (-DV)) :- d(U,X,DU), d(V,X,DV). d(-T,X,-R) :- d(T,X,R). d(K*U,X,K*W) :- number(K), d(U,X,W). d(U*V,X,B*U+A*V) :- d(U,X,A), d(V,X,B). d(U/V,X,W) :- d(U*V^ (-1),X,W). d(U^V,X,V*W*U^ (V+ (-1))) :- number(V), d(U,X,W). d(U^V,X,Z*log(U)*U^V+V*W*U^ (V+ (-1))) :- d(U,X,W), d(V,X,Z). d(log(T),X,R*T^ (-1)) :- d(T,X,R). d(exp(T),X,R*exp(T)) :- d(T,X,R). d(sin(T),X,R*cos(T)) :- d(T,X,R). d(cos(T),X,-R*sin(T)) :- d(T,X,R). d(tan(T),X,W) :- d(sin(T)/cos(T),X,W).

19 プログラムのソース全容 d(X,X,1). d(T,X,0) :- atom(T) ; number(T).
d(U+V,X,DU+DV) :- d(U,X,DU), d(V,X,DV). d(U-V,X,DU+ (-DV)) :- d(U,X,DU), d(V,X,DV). d(-T,X,-R) :- d(T,X,R). d(K*U,X,K*W) :- number(K), d(U,X,W). d(U*V,X,B*U+A*V) :- d(U,X,A), d(V,X,B). d(U/V,X,W) :- d(U*V^ (-1),X,W). d(U^V,X,V*W*U^ (V+ (-1))) :- number(V), d(U,X,W). d(U^V,X,Z*log(U)*U^V+V*W*U^ (V+ (-1))) :- d(U,X,W), d(V,X,Z). d(log(T),X,R*T^ (-1)) :- d(T,X,R). d(exp(T),X,R*exp(T)) :- d(T,X,R). d(sin(T),X,R*cos(T)) :- d(T,X,R). d(cos(T),X,-R*sin(T)) :- d(T,X,R). d(tan(T),X,W) :- d(sin(T)/cos(T),X,W).

20 Prologのデータタイプ 定数 変数:Hensuu, Noun(大文字で始まる) _aDog2, _名詞(_で始まる)
文字定数:abc, aDog2 (小文字で始まる) 名詞(2バイト文字で始まる) 数定数:3.14, 2007 変数:Hensuu, Noun(大文字で始まる) _aDog2, _名詞(_で始まる) 述語:p(X), is_a_dog(Animal) リスト:[1,2,3], [好き,太郎,カレー], [ ]

21 定数 文字定数(atom): 数(number): atom(ext2127) -> true
atom(2007) -> false atom(3.14) -> false 数(number): number(2005) -> true number(3.14) -> true number(ext2171) -> false

22 変数 変数(variable): var(X) var(abc)

23 述語 述語(predicate): pred(Arg1, Arg2, Arg3, … ). Is_a_dog(ポチ). Love(taro, hanako). 愛する(太郎, 花子).

24 リスト 定数や変数や述語がゼロ個以上 括弧”[“と”]”で囲まれたもの。 [a, b, c] [太郎, 花子, 次郎, pochi] [a, B, c] [愛する[太郎,花子], 年齢[太郎,20], 年齢[花子,19]] [1 , [2, [3, [4], 5, 6]], 7] [ ] (空リスト)

25 Prologのデータタイプ(確認) 定数 変数:Hensuu, Noun(大文字で始まる) _aDog2, _名詞(_で始まる)
文字定数:abc, aDog2 (小文字で始まる) 名詞(2バイト文字で始まる) 数定数:3.14, 2005 変数:Hensuu, Noun(大文字で始まる) _aDog2, _名詞(_で始まる) 述語:p(X), is_a_dog(Animal) リスト:[1,2,3], [好き,太郎,カレー], [ ]

26 ここまでは簡単!

27 次がポイント! がんばりましょう。

28 Unification(ユニフィケーション)
「ある物とある物とが同じ」という概念 「オブジェクトAとオブジェクトBとを  同一視することができる」  A <=> B と書こう。

29 実例で見てみよう

30 2007 <=> (2007と2007は同じ) 2007 <!=> 2006 (2007と2006は異なる) 2007とext2171はunifyしない。 2007 <!=> ext2171

31 いろいろな例 X と123 はunifyする? p(a,b,c) と p(a,b,c) はunifyする?
p(a) と p(X) はunifyする? [1,2,[3],4] は[1,2,3,4] とunifyする? [1,2,3] は [A,B,C] とunifyする?

32 Unify(Unification)の理解なくしてPrologの理解なし!
いろんな例で慣れよう!

33 次へ進みましょう

34 プログラム例(2) ある推論をPrologで表現し、その推論をPrologに実行させてみる。

35 ある推論 人間は死ぬ。 ソクラテスは人間である。 故に、ソクラテスは死ぬ。 前提 帰結

36 ある推論 ------------------------------------- 人間は死ぬ。 ソクラテスは人間である。
故に、ソクラテスは死ぬ。

37 これらを論理の言葉(論理式)に置き換えてみよう。

38 ある推論 人間は死ぬ  xが人間ならば、xは死ぬ。  もし人間(x)が真ならば、 死ぬ(x)。  mortal(x) if human(x).  m(x) :- h(x).

39 ある推論 ソクラテスは人間である。  ソクラテスsは人間である。  人間(s)である。  human(s).  h(s).

40 ある推論 m(X) :- h(X). h(s). m(s).

41 Prologで書くと… assert(m(X) :- h(X)). asert(h(s)). m(s).

42 Prologで書くと… assert(m(X) :- h(X)). asert(h(s)). m(s). 知識部(データベース) 質問部

43 実行方法 知識部を対話的にキーボードから入力する方法。 知識部をフィルから読み込む方法。 など

44 次回は… Progolの復習 述語論理式とProlog言語との関係 一般の論理式 ⇒冠頭標準形 ⇒skolem標準形 ⇒節集合形式
resolutionを適用できる! この特別なものがPorlog

45 付録. Prolog言語の処理系 swi-prolog Arity-prolog Run Prolog K-prolog IF-Prolog
Quintus Prolog Sictus Prolog etc.


Download ppt "Prolog入門 ーIT中級者用ー."

Similar presentations


Ads by Google