Prolog入門 ーIT中級者用ー.

Slides:



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

一階述語論理 (first-order predicate logic) 一階述語論理入門 構文論(論理式の文 法) 意味論(論理式の解 釈) 認知システム論 知識と推論(4) 知識と論理でを組み合わせて問題を解決する.
プログラミング言語論論理型言語 論理型プログラミング言語 水野嘉明
人工知能特論2011 No.4 東京工科大学大学院 担当教員:亀田弘之.
人工知能特論2007 No.4 東京工科大学大学院 担当教員:亀田弘之.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
Fortran と有限差分法の 入門の入門の…
基礎プログラミングおよび演習 第9回
充足不能性と導出原理 充足不能性の証明 スコーレム標準形 エルブラン解釈 導出原理 基礎節に対する導出 導出原理の完全性と健全性.
情報基礎A 第10週 プログラミング入門 VBAの基本文法2 データ型・If ~Then~Else
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
Prolog演習 PowerPointのアニメーション機能を利用すると分かりやすいと思います.
人工知能特論2011 資料No.6 東京工科大学大学院 担当教員 亀田弘之.
立命館大学 情報理工学部 知能情報学科 谷口忠大
Inverse Entailment and Progol Stephen Muggleton
条件式 (Conditional Expressions)
数理論理学 第1回 茨城大学工学部情報工学科 佐々木 稔.
オブジェクト指向 プログラミング 第一回 知能情報学部 新田直也.
情報処理3 第5回目講義         担当 鶴貝 達政 11/8/2018.
プログラミング言語入門 手続き型言語としてのJava
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
述語論理と∀(全称)∃(存在) 3回の講義の概観: 命題論理 (真理値) (公理と推論規則) 述語論理 (モデルと解釈)
述語論理と∀(全称)∃(存在) 3回の講義の概観: 命題論理 (真理値) (公理と推論規則) 述語論理 (モデルと解釈)
人工知能概論 第14回 言語と論理(3) 証明と質問応答
人工知能特論2009 東京工科大学 亀田弘之 KE304.
プログラミング言語入門.
東京工科大学 コンピュータサイエンス学部 担当:亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
平成29年5月8日(月)第4日目 担当教員:亀田弘之
述語論理.
平成27年4月20日(月)第2日目 担当教員:亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
論理プログラミング 導出の効率化 論理プログラム ホーン節 ホーン集合に対する導出戦略 論理式の手続き的解釈 Prolog
知能情報システム特論 Introduction
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
知識表現 知識の表現形式 宣言的表現 手続き的表現 プロダクション・ルール フレーム 意味ネットワーク.
統計ソフトウエアRの基礎.
Prolog入門 ーIT中級者用ー.
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
プログラミング入門 電卓を作ろう・パートI!!.
プログラミング基礎a 第4回 C言語によるプログラミング入門 条件判断と反復
平成28年4月25日(月)第3日目 担当教員:亀田弘之
第7回  命題論理.
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
述語論理式の構文と意味 一階述語論理式の構文 一階述語論理式の意味 述語,限量記号 自然言語文の述語論理式表現 解釈 妥当,充足不能
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
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
東京工科大学 コンピュータサイエンス学部 亀田弘之
立命館大学 情報理工学部 知能情報学科 谷口忠大
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). 知識部(データベース) 質問部

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

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

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