プログラミング言語論 第10回 Prolog入門 担当:犬塚.

Slides:



Advertisements
Similar presentations
SPSSによるHosmer-Lemeshow検定について
Advertisements

レポート書き方. おしいレポート よく調べてある それぞれの、1文の言っていることは正 しい しかし、全体として、何が言いた いのかわからない 内容の重要だが、全体の構成も重 要である.
1 7.時間限定チューリングマシンと クラス P. 2 7 -1.入力サイズ チューリングマシンの入力記号 の長さ を 入力サイズという。 名称:合成数の問題 インスタンス:整数n 問:nは合成数か? 通常は、入力サイズとしてはもっとも短い表現での 長さが利用される。 例えば、次のような合成数の問題における入力サイズは、
7.n次の行列式   一般的な(n次の)行列式の定義には、数学的な概念がいろいろ必要である。まずそれらを順に見ていく。
第 3 回 iPhone アプリ開発勉強会 Objective-C 基礎講座 - インスタンスメソッド - 三井 相和.
9.線形写像.
3.多項式計算アルゴリズム べき乗の計算 多項式の計算.
情報処理A 第10回 Excelの使い方 その3.
麻雀ゲーム 和島研究室 ソ 小林巧人
5.連立一次方程式.
相関.
1 情報量(2章). 2 物理的概念との対比1(入れ物と中 身) 塩水 塩 データ 情報 情報の量? 塩分の量! 情報の量は見た目ではわ からない。データと情報 は異なる概念。 塩分の量は見た目 ではわからない。 しかし、本質的な もの。
―本日の講義― ・平均と分散 -代表値 -ぱらつき(分散・標準偏差等) ・Excelによる演習
論理回路 第2回 今日の内容 前回の課題の説明 数の体系 – 数の表現 – 代表的な数 – 基数の変換 – 補数.
ノイズ. 雑音とも呼ばれる。(音でなくても、雑 音という) 入力データに含まれる、本来ほしくない 成分.
人工知能特論 II 第 6 回 二宮 崇 1. 今日の講義の予定 確率的文法 品詞解析 HMM 構文解析 PCFG 教科書 北研二 ( 著 ) 辻井潤一 ( 編 ) 言語と計算 4 確率的言語モデル 東大出版会 C. D. Manning & Hinrich Schütze “FOUNDATIONS.
広告付き価格サービ ス 小園一正. はじめに 世の中には様々な表現方法の広告があり ます。その中でも私たち学生にとって身 近にあるものを広告媒体として取り入れ られている。 価格サービス(無料配布のルーズリー フ)を体験したことにより興味を惹かれ るきっかけとなった。主な目的は、これ.
素数判定法 2011/6/20.
フーリエ係数の性質. どこまで足す? 理想的には無限大であるが、実際に はそれは出来ない これをフーリエ解析してみる.
公開鍵暗号系 2011/05/09.
1章 行列と行列式.
プログラミングⅠ( 1 組) 第 9 回
フーリエ級数. 一般的な波はこのように表せる a,b をフーリエ級数とい う 比率:
プログラミング入門2 第4回 式文 代入式 論理演算子 ループの脱出、スキップ 情報工学科 篠埜 功.
3.エントロピーの性質と各種情報量.
9.通信路符号化手法1 (誤り検出と誤り訂正の原理)
Excelによる積分.
1 6.低次の行列式とその応用. 2 行列式とは 行列式とは、正方行列の特徴を表す一つのスカ ラーである。すなわち、行列式は正方行列からスカ ラーに写す写像の一種とみなすこともできる。 正方行列 スカラー(実数) の行列に対する行列式を、 次の行列式という。 行列 の行列式を とも表す。 行列式と行列の記号.
計算のスピードアップ コンピュータでも、sin、cosの計算は大変です 足し算、引き算、掛け算、割り算は早いです
線形符号(10章).
1 0章 数学基礎. 2 ( 定義)集合 集合については、 3セメスタ開講の「離散数学」で詳しく扱う。 集合 大学では、高校より厳密に議論を行う。そのために、議論の 対象を明確にする必要がある。 ある “ もの ” (基本的な対象、概念)の集まりを、 集合という。 集合に含まれる “ もの ” を、集合の要素または元という。
10.PとNP完全問題との境界.
4.プッシュダウンオートマトンと 文脈自由文法の等価性
1 0章 数学基礎. 2 ( 定義)集合 集合については、 3セメスタ開講の「離散数学」で詳しく扱う。 集合 大学では、高校より厳密に議論を行う。そのために、議論の 対象を明確にする必要がある。 ある “ もの ” (基本的な対象、概念)の集まりを、 集合という。 集合に含まれる “ もの ” を、集合の要素または元という。
人工知能特論II 第7回 二宮 崇.
信号測定. 正弦波 多くの場合正弦波は 0V の上下で振動する しかし、これでは AD 変換器に入れら れないので、オフ セットを調整して データを取った.
1 9.線形写像. 2 ここでは、行列の積によって、写像を 定義できることをみていく。 また、行列の積によって定義される写 像の性質を調べていく。
通信路(7章).
3.プッシュダウンオートマトンと 文脈自由文法
6.符号化法(6章).
ビット. 十進数と二進数 十進数  0から9までの数字を使って 0、1、2、3、4、5、6、7、8、9、 10、11、12 と数える 二進数  0と1を使って 0、1、10、11、100、101、11 0、111 と数える.
人工知能特論 II 第 4 回 二宮 崇 1. CCG (COMBINATORY CATEGORIAL GRAMMAR) 組合せ範疇文法 2 今日の講義の予定.
アルゴリズムとデータ構造 補足資料14-1 「ハッシュ法」
3.正方行列(単位行列、逆行列、対称行列、交代行列)
年度 情報数理学. 2 履修にあたって 2009 年度 大学院奇数セメスター(前期)開講 K336→ 大学院棟 D 416(次回から)教室: 時限: 火曜日3時限( 12:50 - 14:20 ) 担当 草苅良至 4/21( 火) 休講 → 補講 ?/? ? 時限 D416.
様々な情報源(4章).
論理回路 第1回. 今日の内容 論理回路とは? 本講義の位置づけ,達成目標 講義スケジュールと内容 受講時の注意事項 成績の評価方法.
プログラミング言語論 第1回 イントロダクション 担当:犬塚. 講義内容と目的  プログラミング言語パラダイム  プログラミング言語の諸要素  プログラム理論  プログラムの意味論 講義の目的  プログラミング言語に関するアイデアを一通り習得する こと。
Analog “ neuronal ” networks in early vision Koch and Yuille et al. Proc Academic National Sciences 1986.
C言語応用 構造体.
実装の流れと 今後のスケジュール 03k0014 岸原 大祐. システム概要 天気データをもとに、前向き推論をし ていき、親の代わりに子供に服装、持 ち物、気をつけることなどを教える。
3.多項式計算アルゴリズム べき乗の計算 多項式の計算.
Automatic Language Acquisition, an Interactive Approach † Robert J. Martin † 大西昇 ‡ 山村毅 † 名古屋大学 ‡ 愛知県立大学.
JPN 312 (Fall 2007): Conversation and Composition 文句 ( もんく ) を言う.
移動エージェントプログラムの 動作表示のためのアニメーション言 語 名古屋大学情報工学コース 坂部研究室 高岸 健.
1 プログラミング言語論 第13回 プログラムの意味論と検証 (2) 表示的意味論 担当:犬塚. 2 表示的意味論 denotational semantics  表示的意味論では、プログラムの要素とそれが 意味するものを対応付ける。 変数 式 文 A B … A+2 2B+C A:=A+2 if.
プログラミング言語論 第9回 論理型プログラミング言語 担当:犬塚.
1 プログラミング言語論 第5回 手続き呼出し 担当:犬塚. 2 今日の講義 手続きや関数などの呼出しに関わること  手続きの宣言、手続きの定義  名前の束縛とスコープ  ブロック構造  スコープ規則  引数渡し  引数渡しと評価(計算)方式.
プログラミングⅠ( 2 組) 第 1 回 / pLB1.pptx.
8.任意のデータ構造 (グラフの表現とアルゴリズム)
プログラミング入門2 第3回 複合文、繰り返し 情報工学科 篠埜 功.
リファクタリング支援のための コードクローンに含まれる識別子の変更内容分析 井上研究室 工藤 良介 1.
第14回 プログラムの意味論と検証(3) 不動点意味論 担当:犬塚
ことばとコンピュータ 2007 年度 1 学期 第 1 回. 2 ことばとコンピュータ 授業科目名:言語情報処理論 授業題目名:ことばとコンピュータ 履修コード: 5067 教室: 323 一学期開講 授業の進め方 – 基本的に講義中心ですすめ,時々コンピュー タを使う.
オセロの思考アルゴリズムについて 1103072 岩間 隆浩.
音の変化を視覚化する サウンドプレイヤーの作成
プログラミングの基礎知識 プログラミングの手順と重要概念 アルゴリズム. プログラミングの手順 コーディング エディタなどでコードを記述 コンパイル・インタープリタ 実行可能な形に翻訳 デバッグ(虫取り、不具合の調整) 完成!
本文. 考えながら読みましょ う 「いろいろなこと」( 3 行目)は何で すか 「①電話料金はコンビニで支払いをしていま す。いつでも払えますから、便利です。」 「②夕食はコンビニで買います。お弁当やお かずがいろいろありますから。」今、若者に 人気のあるコンビニは、いろいろなことをす るのに非常に便利な場所になった。
11万km上空のかぐやから見た地球. デジタル信号処理 Digital Signal Processing 2010 年度春学期 Spring Semester, 2010 担当者: 栗濱 忠司( Professor ) 第3週第3週.
今日の内容 高階関数  関数を値として扱う 関数を引数にとる 関数を返す関数 プログラミングの例題  クイックソート.
Presentation transcript:

プログラミング言語論 第10回 Prolog入門 担当:犬塚

今日の講義 論理型の代表的プログラミング言語Prologを 概観する Prologの構文とプログラミング Prologプログラムの実行 バックトラック 実行の制御:カット データベース操作

節形式(clausal form) P ←Q1,・・・,Qmのとき、 節形式: P1∨・・・∨Pn ←Q1∧・・・∧ Qm 節形式:  P1∨・・・∨Pn ←Q1∧・・・∧ Qm =P1 ,・・・,Pn ←Q1,・・・,Qm n≦1のときホーン節(Horn clause) という。 P ←Q1,・・・,Qm  :規則(ルール)節 P← :事実(ファクト)節 ←Q1,・・・,Qm :目的(ゴール)節 ← :矛盾節(空節) P ←Q1,・・・,Qmのとき、 Pを頭部(head)、Q1,・・・,Qmを本体(body)という。

Prologの動作環境 Prologプログラム 問合せ(クェリー) =ゴール =データベース(知識ベース) ←Q1,・・・,Qm =理論  =データベース(知識ベース)  =理論  =ホーン節集合 問合せ(クェリー) =ゴール ←Q1,・・・,Qm =¬(Q1∧・・・∧Qm ) YES(問合せがDBと矛盾する) =成功  または NO(問合せがDBと矛盾しない) =失敗 +YESとする置換θ

SLD導出 ・・・ ゴール Prologプログラム ←Q1,・・・,Qm Q1’←R1,・・・,Rk 新たなゴール SLD導出では、導出の 片親はいつもゴール節 ゴール ←Q1,・・・,Qm Prologプログラム Q1’←R1,・・・,Rk SLD導出では、 常に最左リテラルを 消すように動作する ホーン節なので、正のリテラル は頭部にのみ。 ゴールの最左リテラルとマッチ する頭部を持つ節を選択。 新たなゴール ←R1,・・・,Rk ,・・・,Qm マッチしたルールの本体リテラル が、ゴール節の最左に挿入される。 新たなゴールを対象に 導出を続ける。 ・・・

Prologの構文 Prologはすべて節の形式でプログラムを書く。 4つの形式に対応して、 ルール節 P :- Q1,・・・,Qm. ファクト P. ゴール ?-Q1,・・・,Qm. (プログラムの実行、問合せの場合) : -Q1,・・・,Qm. (プログラム中に書く場合) 空節 特になし。(プログラムとして書かない)

例 事実 質問 次郎は太郎の持っているものをなんでも欲しがる。 太郎は本を持っている。 次郎は本を欲しがるか? has(x,y)を 「xはyを持っている」を表す述語、 wants(x,y)を 「xはyを欲しがる」を表す述語、 taro, jiro, bookを太郎、次郎、本を表す定数とすると、 wants(jiro,Y):ーhas(taro,Y). has(taro,book). ?-wants(jiro, book).

Prologの構文(つづき) wants(jiro,Y):ーhas(taro,Y). has(taro,book). ?-wants(jiro, book). リテラルは述語記号と項(変数、定数)からなる。 述語記号、定数、変数は宣言なしで使ってよい。 述語記号、定数記号は、小文字のアルファベットではじめる。 変数記号は大文字のアルファベットではじめる。 これ以外に、関数記号を用いても良い。 wants(brother(X),Y):ーhas(X,Y). ?-wants(brother(taro), book).

動作例 ?-wants(jiro, book). Prologプログラム wants(jiro,Y):ーhas(taro,Y). has(taro,book). ?-has(taro,book). □

練習 質問に答えられるようにProlog形式で節を与えよ。 洋子(yoko)はセーター(sweater)を買った(bought)。 質問 洋子は洋服(clothes)を持っている(has)か? 暗黙的に分かっていること: セーターは洋服である(isa)。 AがBを買えば、AはBを持っている。 AがBをもっており、AがCであれば、AはCを持っている。

変数の解釈 節に含まれる変数は全称限定されている。 本体リテラルは負のリテラルであるので、そこに含まれる変数は存在限定されていると解釈される。 ∀X∀Y p(X)←q(X,Y) =∀X∀Y(p(X)∨¬q(X,Y)) =∀X p(X)∨¬(∃Y q(X,Y)) =∀X p(X)←∃Y q(X,Y) 例 次のルールは、祖父の述語の定義とみなせる。 grandFather(X,Y):-father(X,Z),parent(Z,Y). Zは本体の中で存在束縛されているとみなせる。

計算としての反駁 ゴールが変数Xを含む場合、 変数Xは、存在限定とみなせる。つまり、   「…を成立たせるXはありますか?」というゴールとみなせる。 ?-wants(Z, book). Θ1={W/X, brother(W)/Z, book/Y} wants(brother(X),Y) :ーhas(X,Y). has(taro,book). ?-has(W,book). Θ2={taro/W} 求めるZは、 Zθ1θ2 = brother(W) θ2 = brother(taro) □

組込み述語 DB内の節との導出のみでなく、組込みの述語(built-in predicate)によって計算が進められる。 組込みの述語: 頻繁に利用される述語、数値計算を行う述語、 副作用を伴う述語(入出力、DB操作) ← 2+3<10 ,Q2 ,・・・,Qm Prologプログラム 組込み述語の処理系 2+3<10 . 組込み述語は、プログラ ムなしでがあったのと同じ動作 をする。

「P :- Q1,・・・,Qm.」の意味 「P :- Q1,・・・,Qm.」はいくつかの解釈が可能。 論理式として: 手続きとして:

リスト Prologでもリストは重要なデータ構造である。 リストは [1, 2, 3]という表現を持つが、LISPのconsと同様に、先頭要素と、先頭を除いた要素を結合する「.」(ドット)でも表現できる。 [1, 2, 3]= .(1, [2, 3])=.(1, .(2, .(3, []))) Prologでは、[]をnilとは書かない。 さらに、先頭と先頭以外を「|」で分けて書く記法がある。 [1, 2, 3]= [1 | [2, 3]]= [1 | [2 | [3 | []]]] 次の書き方も可能。 [1, 2, 3, 4, 5]= [1, 2, | [3, 4, 5]]= [1, 2, 3 | [4 ,5]]

項(term)とデータ構造 Prologの基本データ構造は項(term)。 好きなように関数記号を組合わせて項を用いることができる。 例 father(mother(taro)) medcheck(taro, height(173),weight(62)) どのように解釈するかは、ユーザーしだい。 リストや数式も単なる項。 [1,2,3] = .(1, .(2, .(3, []))) 1+2*5 = +(1, *(2, 5)) 見た目はよく似ているが、述語記号と関数記号は全く別物。 wants(brother(taro), book).

組込み述語 数式 副作用を伴う述語 データベースの操作 X is 数式 : 数式を評価してXに単一化する。 例 X is 2+3   X is sqrt(2) 数式はこのゴールに出会った時点で変数を含んでいてはならない。 数式 < 数式 : 数式を評価して等号/不等号を成否を見る。<,>, =<,>=,<>,== など。 例 3*5 < 2+3   5-1=:=2+3 副作用を伴う述語 入出力 : write(X), read(X) データベースの操作 assert : データベースへの節の追加 retract : データベースから節の削除

Prologの変数と大域的状態変化 Prologには通常の変数の概念がない。 例 P(X,Y):-Z is X*2, W is Z+3, Z+W<Y. 値の代入をすることはできない。 変数は単一化するのみ。 一旦、単一化(具体化)されると他の値に単一化しなおすことはできない。 大域的な状態を記憶したい場合は、データベースにassert、retractする。 例 assert(age(taro, 14)). retract(age(taro, _)). assert(age(taro, 15)).

プログラム例 append([],Y,Y). append([A|X],Y,[A|Z]):-append(X,Y,Z). fact(0,1) fact(X,Y):-X1 is X-1, fact(X1,Y1),Y is Y1*X.

実行順序:非論理的要素 prologではP∧Q=Q∧P、P∨Q=Q∨Pが成立たない。 節の順序 P∧Q≠Q∧P 節の順序 P∧Q≠Q∧P fact(0,1) fact(X,Y):-X1 is X-1, fact(X1,Y1),Y is Y1*X. の2つの節の順序は変えられない。 SLD導出では、上から順に導出可能な節を探す。 リテラルの順序:P∨Q≠Q∨P 次の節の本体リテラルの順序は変えられない。 SLD導出では左から導出を試みる。 変数が具体化されていないと、isで失敗する。

バックトラック 節を上から下へ、リテラルを左から右 へ探索。全解を探索することもできる。 途中で失敗した場合に別の探索経路 節1 parent(X,Y):-father(X,Y). 節2 parent(X,Y):-father-in-law(X,Y). 節3 parent(X,Y):-moter(X,Y). 節4 parent(X,Y):-moter-in-law(X,Y). 節5 father(kenji,taro). 節6 father(kenji,hanako). 節7 mother(yoko,taro). 節8 mother(yoko,hanako). 節を上から下へ、リテラルを左から右 へ探索。全解を探索することもできる。 途中で失敗した場合に別の探索経路 に戻ることをバックトラックという。 ?-parent(A,B). 節1 節4 節2 節3 ?-father(A,B). ?-mother(A,B). 節5 ?-father- -in-law(A,B). ?-mother- -in-law(A,B). 節7 節8 節6 ○ × × ○ A=kenji B=taro ○ ○ A=yoko B=hanako A=kenji B=hanako A=yoko B=taro

カットと実行順序の制御 次式は2つのケース場合わけで定義している。 abs(X,Y) :- X>=0, Y is X. abs(X,Y) :- X<0,Y is -X. このときは、1つ目の節のX>=0の部分で成功すれば、2つ目の節へのバックトラックは不要。 バックトラックさせないことを明示するため、!を用いる。 abs(X,Y) :- X>=0, !, Y is X. abs(X,Y) :- X<0, !,Y is -X.

失敗による否定 Negation as failure ホーン節では、節の本体はすべて否定。 したがって否定的意味を扱うことはできない。 しかし、次のとおりnotを定義すると、おおよそ否定の意味になる。 not(P):-P, !, fail. not(P). Pが成功すれば、そこでバックトラックを打ち切り、失敗させる。最初から失敗した場合は、バックトラックで2つ目の節を採用し、無条件で成功。

練習 sum2n(N,S)で、S=1+2+・・・+Nを求める述語。 exp(X,Y)で、Y=2Xを求める述語。 length(L,X)で、リストLの長さをXに求める述語。 sumlist (L,S)で、数のリストL中の数の合計をSに求める述語。

まとめ 項が基本のデータ構造 論理型言語パラダイムの代表としてPrologを概観した。 Prologでは 非論理的要素も含む プログラム=論理式の集合(理論) プログラムの実行=証明 非論理的要素も含む 実行の順序(上から下、左から右)=SLD導出 バックトラックとカット 項が基本のデータ構造