good
リストの各用語がペアノ数であるリストを取るルールで Prolog プログラムを作成しようとしています。リスト内の各要素が前の要素よりも大きい場合にのみ、ルールは true になります。
たとえば、次の例が当てはまる必要があります。
good([]).
good([0]).
good([0,s(0)]).
good([0,s(s(0))]).
good([0,s(0),s(s(0))]).
また、次の例は false である必要があります。
good([s(0),0]).
good([0,s(0),0]).
これが私のコードです:
plus(X,0,X).
plus(X,s(Y),s(Z)) :- plus(X,Y,Z).
geq(X,Y) :- plus(K,Y,X).
ge(X,Y) :- geq(X,Y), not(X = Y).
good([]).
good([X]).
good([H|T]) :- good(H,T).
good(X,[H|T]) :- ge(H,X), good(T).
ただし、正のクエリgood([0,s(0),s(s(0))])
の場合、 true と false の両方がソリューションです。
エラーは何ですか?