1 / 52

Prolog 入門

Prolog 入門. ー IT 中級者用ー. Prolog とは. PRO gramming in LOG ic 人工知能用プログラミング言語 手続き型プログラミング 宣言型プログラミング 関数型プログラミング オブジェクト指向型プログラミング etc. Programming in logic 論理の言葉でプログラムを記述するプログラミング方法. 具体例. 記号微分プログラム (さっそく、作ってみよう!). 微分の知識(例えば … ). 微分の知識. d(K,X,0). 微分の知識. d(N,X,0). d(X,X,1). プログラムのソース全容.

janice
Download Presentation

Prolog 入門

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

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). • d(T,X,0) :- atom(T) ; number(T).

  13. プログラム(2/4) • 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).

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

  21. 定数 • 文字定数(atom): • 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のデータタイプ(確認) • 定数 • 文字定数: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は同じ) • 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の理解なし!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の導入・紹介 • 述語論理式と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). ___________________ Thereforemortal(socrates). • ソクラテスは人間である。 • 人間は死ぬ。 • ___________  • 従って、ソクラテスは死ぬ。

  49. 動作例 ソースコード 動作画面 ?- mortal(Z). Z = socrates. mortal(X):-human(X). human(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.

More Related