Error handling Prolog程序出全局堆栈错误

Error handling Prolog程序出全局堆栈错误,error-handling,prolog,out-of-memory,proof,Error Handling,Prolog,Out Of Memory,Proof,我正在尝试一个定理证明程序。但第4条规则似乎执行得很糟糕 % delete del(X, [X | Tail], Tail). del(X, [Y | Tail], [Y | Tail1]) :- del(X, Tail, Tail1). % remove remove(X, Y, L1, L2) :- del(X, L1, L3), del(Y, L3, L2). % prove prove(true). prove([L1 seq L2]) :- seq

我正在尝试一个定理证明程序。但第4条规则似乎执行得很糟糕

% delete
del(X, [X | Tail], Tail).
del(X, [Y | Tail], [Y | Tail1]) :-
    del(X, Tail, Tail1).

% remove 
remove(X, Y, L1, L2) :-
    del(X, L1, L3),
    del(Y, L3, L2).

% prove
prove(true).
prove([L1 seq L2]) :-
    seq(L1, L2),
    !.

% Rule 1
seq(L1, L2) :-
    member(X, L1),
    member(X, L2),
    !.

% Rule 4
seq(L1, L2) :-
    Z = or(X, Y),
    del(Z, L2, L4),
    remove(X, Y, L3, L4),
    seq(L1, L3).
证明[[p]顺序[q]]。-生成false,这是正确的。 证明[[p]顺序[q,r]]。-生成错误的、正确的。 但证明[[p]序列[q或r]]。-超出全局堆栈。那么我认为规则4有问题。
你知道怎么解决这个问题吗?非常感谢。

在规则4中,我只能告诉你

将Z设置为或的模板 尝试从L2中删除该模板,这样L4就被留下了,模板X和Y的组件被填充, 找到一个L3,从中可以拆下or的部件,从而得到L4, 然后你试着用L3而不是L2来解决这个问题
但这意味着L3不一定在终止方面取得任何进展。

请告诉我您的整个计划好吗?我只是看到你需要seq的操作员声明