Download presentation
Presentation is loading. Please wait.
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
練習問題 Prolog言語で2つのリストを結合するプログラムを作成しなさい。 (答え)Prologの標準的な教科書に 載っています。
45
まとめとコメント Progolの導入・紹介 一般の論理式 ⇒冠頭標準形 ⇒skolem標準形 ⇒節集合形式
述語論理式とProlog言語との関係 一般の論理式 ⇒冠頭標準形 ⇒skolem標準形 ⇒節集合形式 resolutionを適用できる! この特別なものがPorlog
46
付録. Prolog言語の処理系 swi-prolog Arity-prolog Run Prolog K-prolog IF-Prolog
Quintus Prolog Sictus Prolog Yap etc.
47
さらに進んだ話題 いままでの推論は演繹的推論であった。もう一つの推論形式である、帰納的推論について簡単な紹介を行う。
48
演繹的推論(復習) 演繹的推論 Prolog形式表現 ソクラテスは人間である。 人間は死ぬ。 ___________
___________ 従って、 ソクラテスは死ぬ。 human(socrates). mortal(X):-human(X). ___________________ Therefore mortal(socrates).
49
動作例 ソースコード 動作画面 mortal(X):-human(X). human(socrates). ?- mortal(Z).
Z = socrates.
50
トレース時の動作画面 ?- trace. true. [trace] 1 ?- mortal(A). Call: (6) mortal(_G454) ? creep Call: (7) human(_G454) ? creep Exit: (7) human(socrates) ? creep Exit: (6) mortal(socrates) ? creep A = socrates.
51
帰納的推論 ソクラテスは死ぬ。 プロトンは死ぬ。 アリストテレスは死ぬ。 ソクラテスは人間である。 プラトンは人間である。
アリストテレスは人間である。 ______________ 人間は死ぬ。
52
帰納的推論(その2) 1990年代以降、帰納的推論のアルゴリズムが明らかになるとともに、帰納的推論を行うシステムが実装された。さらに、さまざまな分野に応用され、人間が推論した場合と同等の結果を出力する例も現れ始めた。 Progolがそのようなシステムの1つ。
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.