如何将以下论点翻译成 Prolog?似乎它不需要谓词。(注意:我用 & 表示连词,| 表示析取。)
G -> (H & J)
(H | J) -> S
小号 | R
Ⱶ G -> R
另外,我将如何查阅 Prolog 数据库以确定 (G -> R) 为假,因此该论点无效?这已经有一段时间。
(是的,这是作业。教授要求我们证明这个论点,但如果 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 做的那样,但我真的希望它也能显示参数何时无效,即谓词失败时。我不知道该怎么做。