数理論理学 第8回 様々な再帰処理 © 加藤,高田,新出 7.6節 (p. 190) リスト処理 (応用問題) 前回のまとめ 論理式の性質 • 恒真 どのような解釈 I の下でも T • 充足可能 ある解釈 I の下で T • 充足不能 どのような解釈 I の下でも ⊥ 解釈の性質 • モデル 論理式 F に対して I(F) = Tとなるとき、 I は F のモデルである 課題 7 F x( bird ( x) fly ( x)) この論理式 F のモデルをひとつ作成せよ。 ただし D={mikeneko, hibari} とし、Aによる割り当てを自分 で作る。 また、なぜそれが F のモデルになるか証明せよ。 I I ({mikeneko , hibari},A ) A (bird) A ( fly ) ⊥ ⊥ hibari T T 各ますにはT か ⊥ を入れる mikeneko 証明: ここで与えた解釈 I が論理式 F のモデル となることを示す。 I (x( bird ( x) fly ( x))) (1) の値は、 p.62 規則 6. によると、 I (bird (mikeneko) fly (mikeneko)) (2) (a) と I (bird (hibari ) fly (hibari )) (3) (b) を求め、ひとつでも⊥であれば⊥。 (2)式の値は、p. 62の規則 5. によると I (bird (mikeneko)) T かつ I ( fly (mikeneko)) (c) (d) ならば⊥、そうでなければ T。 A によると、 I (bird (mikeneko)) , (e) I ( fly (mikeneko)) (f) なので(2)式の値は T となる。同様に(3)式の値 (g) は T となるので、(1)式の値は T となる。以上 より I (F ) T (h) I (F ) が示された。定義3.18より、 T となる解釈I は、F のモデルなので、 (i) ここで与えた I はF のモデルとなる。 演習課題6 member 削除 リストから要素を取り除く確定節 del を定義せよ。 ? = del(sumire,[sumire, sakiko, maruko], X). X = [sakiko, maruko] ? = del(sakiko,[sumire, sakiko, maruko], X). X = [sumire, maruko] (1) List=[ ] ならばTgtとは無関係に答えは[ ]。 (2) Listの先頭要素がTgt,残りをTailとする。TailからTgtを除 いたリストがWならば、答えはWである。 (3)先頭要素HeadがTgtでなく、かつTailからTgtを除いたもの がWならば、答えはWの先頭にHeadをつけたものである。 del( _ ,[],[]). del(Tgt , [Tgt | Tail ], W ) : -del(Tgt,Tail,W ). del(Tgt,[Head | Tail],[Head | W ]):- Tgt \ = Head , del(Tgt , Tail , W ). 練習問題 member 追加 リストとリストを結合する確定節 add を定義せよ。 ?- add([tomozou],[sumire, sakiko, maruko], X). X = [tomozou, sumire, sakiko, maruko] ?- add([tomozou, hiroshi],[sumire, sakiko, maruko], X). X = [tomozou, hiroshi, sumire, sakiko, maruko] (add は組み込み述語 append と同じもの) 追加リストを List1=[Head|Tail], 元のリストを List2 とする。 (1) List1=[]のとき、答えはList2 (2) Tail を List2に追加したものがWならば、答えはWの前に Headをつけてできるリストである。 追加リストを List1=[Head|Tail], 元のリストを List2 とする。 (1) List1=[]のとき、答えはList2 (2) Tail を List2に追加したものがWならば、答えはWの前に Headをつけてできるリストである。 add([],List2,List2). add([Head| T ail],List2,[Head| W]) : - add(T ail,List2,W). 追加リストを List1=[Head|Tail], 元のリストを List2 とする。 (1) List1=[]のとき、答えはList2 (2) Tail を List2に追加したものがWならば、答えはWの前に Headをつけてできるリストである。 add([],List2,List2). add([Head| T ail],List2,[Head| W]) : - add(T ail,List2,W). 演習課題 8 List を用いた和集合 リスト同士の和集合を求める cup (∪) を定義せよ。 ? cup([kotake, hiroshi, maruko], [tomozou, hiroshi, maruko], X ). X [kotake, tomozou, hiroshi, maruko] 二つのリストをそれぞれ List1=[Head|Tail], List2 とする。 (1) List1=[]のとき、答えは List2 (2) Head がList2のmemberかつ、TailとList2の和集合がW ならば、List1とList2の和集合はWである。 (3) Head がList2のmemberではなく、かつ、TailとList2の 和集合がWならば、List1とList2の和集合はWの前に Headをつけてできるリストである。 memberが単独で動くことを、事前に 必ず確認しておくこと。 ?- member(sumire,[sumire, sakiko, maruko]). true ? cup([kotake, hiroshi, maruko], [tomozou, hiroshi, maruko], X ). X [kotake, tomozou, hiroshi, maruko] (1) List1=[]のとき、答えは List2 (2) Head がList2のmemberかつ、TailとList2の和集合がW ならば、List1とList2の和集合はWである。 (3) Head がList2のmemberではなく、かつ、TailとList2の 和集合がWならば、List1とList2の和集合はWの前に Headをつけてできるリストである。 cup([],List2,List2). cup([Head| T ail],List2,W): - member(Head, List2), cup(T ail,List2,W). cup([Head| T ail],List2,[Head| W]): - \ member(Head, List2), cup(T ail,List2,W).
© Copyright 2024 ExpyDoc