2

次の引数を Prolog に変換するにはどうすればよいですか? 述語は必要ないようです。(注: 接続詞には & を、選言には | を使用します。)

G -> (H & J)

(H | J) -> S

さ | R

Ⱶ G -> R

また、Prolog データベースを参照して、(G -> R) が false であり、したがって引数が無効であることを判断するにはどうすればよいでしょうか? 久しぶり。

(はい、これは宿題です。教授は私たちに証明を求めましたが、G、H、J、および S が真で R が偽の場合、証明は有効ではありません。)

編集:

ダニエルの答えに基づいて、私はこれを書きました:

boolean(true).
boolean(fail).
argument(G, H, J, R, S) :-
    boolean(G),
    boolean(H),
    boolean(J),
    boolean(R),
    boolean(S),
    (G -> R) ->
    (G -> (H , J)),
    ((H ; J) -> S),
    (S ; R).

しかし、実行すると、次のようになります。

?- argument(G, H, J, R, S).
G = H, H = J, J = R, R = S, S = true.

失敗した場合を表示するにはどうすればよいですか?

編集#2:

今私はこれを持っています:

boolean(true).
boolean(false).
argument(G, H, J, R, S) :-
    boolean(G), boolean(H), boolean(J), boolean(R), boolean(S),
    (((G -> R); true) ->
    ((G -> (H , J); true),
    ((H ; J) -> S; true),
    (S ; R))); true.

Prolog が期待するように、すべての成功したケースを調べますが、引数が無効な場合、つまり述語が失敗した場合も表示する必要があります。これを行う方法がわかりません。

4

1 に答える 1