導出原理とProlog -論理と形式化 授業資料亀山(幸)、2015/6/5, 6/12 例1 H1 P :- Q. H2 Q :- R. H3 R. G1 G2 G3 G4 ?- P. ?- Q. ?- R. ?-. (ok) H1 Q ⊃ P H2 R ⊃ Q H3 R H1 Q⊃P H2 H3 R⊃Q R Q P 例2 H1 Q :- R, S. H2 R :- S. H3 S. G1 G2 G3 G4 G5 ?- Q. ?- R, S. ?- S, S. ?- S. ?- . (ok) H1 R∧S ⊃ Q H2 S ⊃ R H3 S H2 H3 H3 S⊃R S S R H1 R∧S R∧S⊃Q Q 例3-1 H1 H2 H3 H4 P :- Q, R. P :- S. Q :- S. S. G1 ?- P. G2 ?- Q, R. G3 ?- S, R. G4 ?- R. (fail) H1 H2 H3 H4 Q∧R ⊃ P S⊃P S⊃Q S H3 H4 S⊃Q S (fail) R Q H1 Q∧R Q∧R⊃P P G1に適用可能なのは、H1 だけでなく、H2 もあった! 例3-2 H1 H2 H3 H4 P :- Q, R. P :- S. Q :- S. S. G1 ?- P. G2 ?- S. G3 ?- . (ok) H1 H2 H3 H4 Q∧R ⊃ P S⊃P S⊃Q S H2 S⊃P H4 S P Prologの実行の微妙な点 H1 P. H2 P :- P. H1 P H2 P ⊃ P H3 P :- P. H4 P. H3 P ⊃ P H4 P 上にあるホーン節から先に試すので、 ゴール ?- P. を H1, H2に対して走らせると 止まるが、 H3, H4 に対して走らせると、止まらない。 論理的には、 H1 ∧ H2 と H3 ∧ H4 は同値 述語論理の例(本来の導出原理) H1 add(0,X, X). H2 add(s(X),Y,s(Z)) :- add(X, Y, Z). ゴール ?- add(s(s(0)), s(0), W). H1 ∀X. add(0, X, X) H2 ∀X,Y,Z. (add(X,Y,Z) ⊃ add(s(X),Y, s(Z))) ゴール ∃W.(add(s(s(0)), s(0), W)). 述語論理の例(本来の導出原理) [Z1:=s(Z2)] [Z2:=s(0)] H2 [X:=0,Y:=s(0),Z:=Z2] H1[X:=s(0)] a(0,s(0),Z2)⊃ H2 [X:=s(0),Y:=s(0),Z:=Z1] a(s(0),s(0),Z1)). a(0,s(0),Z2) a(s(0), s(0), Z1) a(s(0),s(0),Z1)⊃a(s(s(0)),s(0),W)) [W:=s(Z1)] a(s(s(0)), s(0), W) H1 ∀X. (add(0, X, X)) H2 ∀X,Y,Z. (add(X,Y,Z) ⊃ add(s(X),Y,s(Z))) G1→G2 [X:=s(0),Y:=s(0),Z:=Z1]+[W:=s(Z1)] G2→G3 [X:=0,Y:=s(0),Z:=Z2]+[Z1:=s(Z2)] 答え W:=s(s(s(0))) G3→G4 [X:=s(0)]+[Z2:=s(0)] G1 G2 G3 G4 ?- add(s(s(0)), s(0), W). ?- add( s(0) , s(0), Z1). ?- add( 0 , s(0), Z2). ?- . (ok) by H2 by H2 by H1 H2 add(s(X),Y,s(Z)) :- add(X, Y, Z). 単一化 (unification) add(s(X), Y ,s(Z)) vs add(s(s(0)), s(0), W) 単一化問題: X, Y, Z, W をうまくとることによって、 両者を一致させることができるか? YES [X:=s(0),Y:=s(0),W:=s(Z)] 単一化問題の解: 両者を一致させられるかどうか、と、 YESの場合は、一致させる代入のうち、最も制約が少ないもの 今日の演習 Parent(Alice, Bob). Parent(Alice, Chris). Parent(Chris, Diana). Parent(Eliza, Diana). GP(X, Z) :- Parent(X,Y), Parent(Y,Z). ?- GP(Alice, X). と ?- GP(Eliza, X). を Prolog風に実 行する過程を書きなさい。もし余力があれば、得ら れた解に対応するNKの証明図も書きなさい。 解答 H1 H2 H3 H4 H5 Parent(Alice, Bob). ヘッド Parent(Alice, Chris). Parent(Chris, Diana). Parent(Eliza, Diana). GP(X, Z) :- Parent(X,Y), Parent(Y,Z). ボディ(本体) ?- GP(Eliza, X). H5の変種 H5’ GP(X1,Z1):-P(X1,Y1),P(Y1,Z1). を考え、そのヘッドと単一化 [X1:=Eliza, Z1:=X] (あるいは[X1:=Eliza, X:=Z1]と考えてもよい) ?- Parent(Eliza,Y1), Parent(Y1,X). ゴールの1つ目の原子論理式を H4のヘッドと単一化。 [Y1:=Diana] ?- Parent(Diana, X). ゴールの1つ目と単一化可能なヘッドをもつホーン節がないので失敗。 バックトラックポイントはもうのこっていないので、失敗する。 解答 H1 H2 H3 H4 H5 Parent(Alice, Bob). ヘッド Parent(Alice, Chris). Parent(Chris, Diana). Parent(Eliza, Diana). GP(X, Z) :- Parent(X,Y), Parent(Y,Z). ボディ(本体) ?- GP(Alice, X). H5の変種 H5’ GP(X1,Z1):-P(X1,Y1),P(Y1,Z1). を考え、そのヘッドと単一化 [X1:=Alice, Z1:=X] (あるいは[X1:=Alice, X:=Z1]と考えてもよい) ?- Parent(Alice,Y1), Parent(Y1,X). ゴールの1つ目の原子論理式を H1,H2のヘッドと単一化(※)、まずはH1から。 [Y1:=Bob] ?- Parent(Bob, X). ゴールの1つ目と単一化可能なヘッドをもつホーン節がないので失敗。 バックトラックポイント※まで戻り、H2のヘッドと単一化。 [Y1:=Chris] ?- Parent(Chris,X). ゴールの1つ目とH3のヘッドを単一化。 [X:=Diana] ?-. 成功! ここまでの代入をまとめると [X:=Diana,X1:=Alice,Y1:=Chris,Z1:=Diana] (next) バックトラックポイントはもうのこっていないので、失敗する。
© Copyright 2024 ExpyDoc