Prolog入門 ーIT中級者用ー.

Slides:



Advertisements
Similar presentations
第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
Advertisements

1 情報基礎 A 第 9 週 プログラミング入門 VBA の基本文法 1 準備・変数・データの入出力 徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
一階述語論理 (first-order predicate logic) 一階述語論理入門 構文論(論理式の文 法) 意味論(論理式の解 釈) 認知システム論 知識と推論(4) 知識と論理でを組み合わせて問題を解決する.
プログラミング言語論論理型言語 論理型プログラミング言語 水野嘉明
人工知能特論2011 No.4 東京工科大学大学院 担当教員:亀田弘之.
人工知能特論2007 No.4 東京工科大学大学院 担当教員:亀田弘之.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
Fortran と有限差分法の 入門の入門の…
東京工科大学 コンピュータサイエンス学部 亀田弘之
京都大学情報学研究科 通信情報システム専攻 湯淺研究室 M2 平石 拓
Tokyo University of Technology Hiroyuki KAMEDA KE304 9:00~10:30
充足不能性と導出原理 充足不能性の証明 スコーレム標準形 エルブラン解釈 導出原理 基礎節に対する導出 導出原理の完全性と健全性.
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
Prolog演習 PowerPointのアニメーション機能を利用すると分かりやすいと思います.
人工知能特論2011 資料No.6 東京工科大学大学院 担当教員 亀田弘之.
条件式 (Conditional Expressions)
数理論理学 第1回 茨城大学工学部情報工学科 佐々木 稔.
人工知能特論2007 東京工科大学 亀田弘之.
形式言語とオートマトン Formal Languages and Automata 第4日目
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
人工知能特論2009 東京工科大学 亀田弘之 KE304.
プログラミング応用 printfと変数.
京都大学情報学研究科 通信情報システム専攻 湯淺研究室 D1 平石 拓 2005/10/18
東京工科大学 コンピュータサイエンス学部 担当:亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
形式言語とオートマトン Formal Languages and Automata 第4日目
Prolog入門 ーIT中級者用ー.
東京工科大学 コンピュータサイエンス学部 亀田弘之
平成29年5月8日(月)第4日目 担当教員:亀田弘之
述語論理.
平成27年4月20日(月)第2日目 担当教員:亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
論理プログラミング 導出の効率化 論理プログラム ホーン節 ホーン集合に対する導出戦略 論理式の手続き的解釈 Prolog
知能情報システム特論 Introduction
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
知識表現 知識の表現形式 宣言的表現 手続き的表現 プロダクション・ルール フレーム 意味ネットワーク.
統計ソフトウエアRの基礎.
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング入門 電卓を作ろう・パートI!!.
プログラミング基礎a 第4回 C言語によるプログラミング入門 条件判断と反復
平成28年4月25日(月)第3日目 担当教員:亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
執筆者:難波和明 授業者:寺尾 敦 atsushi [at] si.aoyama.ac.jp
述語論理式の構文と意味 一階述語論理式の構文 一階述語論理式の意味 述語,限量記号 自然言語文の述語論理式表現 解釈 妥当,充足不能
C言語講座 制御(選択) 2006年 計算技術研究会.
情報処理Ⅱ 2005年10月28日(金).
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
第6回放送授業.
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
PROGRAMMING IN HASKELL
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
情報処理Ⅱ 2005年11月25日(金).
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
第2章 数値の入力と変数 scanfと変数をやります.
東京工科大学 コンピュータサイエンス学部 亀田弘之
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
東京工科大学 コンピュータサイエンス学部 亀田弘之
立命館大学 情報理工学部 知能情報学科 谷口忠大
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

Prolog入門 ーIT中級者用ー

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

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

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

微分の知識(例えば…)

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

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

プログラムのソース全容 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).

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

プログラム(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).

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

プログラム(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).

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

プログラム(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である。

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

プログラム(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).

プログラム(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).

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).

プログラムのソース全容 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).

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

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

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

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

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

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

ここまでは簡単!

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

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

実例で見てみよう

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

いろいろな例 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する?

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

次へ進みましょう

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

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

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

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

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

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

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

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

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

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

練習問題 Prolog言語で2つのリストを結合するプログラムを作成しなさい。 (答え)Prologの標準的な教科書に 載っています。

まとめとコメント Progolの導入・紹介 一般の論理式 ⇒冠頭標準形 ⇒skolem標準形 ⇒節集合形式 述語論理式とProlog言語との関係 一般の論理式 ⇒冠頭標準形 ⇒skolem標準形 ⇒節集合形式 resolutionを適用できる! この特別なものがPorlog

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

さらに進んだ話題 いままでの推論は演繹的推論であった。もう一つの推論形式である、帰納的推論について簡単な紹介を行う。

演繹的推論(復習) 演繹的推論 Prolog形式表現 ソクラテスは人間である。 人間は死ぬ。 ___________ ___________  従って、 ソクラテスは死ぬ。 human(socrates). mortal(X):-human(X). ___________________ Therefore mortal(socrates).

動作例 ソースコード 動作画面 mortal(X):-human(X). human(socrates). ?- mortal(Z). Z = socrates.

トレース時の動作画面 ?- 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.

帰納的推論 ソクラテスは死ぬ。 プロトンは死ぬ。 アリストテレスは死ぬ。 ソクラテスは人間である。 プラトンは人間である。 アリストテレスは人間である。 ______________ 人間は死ぬ。

帰納的推論(その2) 1990年代以降、帰納的推論のアルゴリズムが明らかになるとともに、帰納的推論を行うシステムが実装された。さらに、さまざまな分野に応用され、人間が推論した場合と同等の結果を出力する例も現れ始めた。 Progolがそのようなシステムの1つ。