YES Problem: purge(nil()) -> nil() purge(.(x,y)) -> .(x,purge(remove(x,y))) remove(x,nil()) -> nil() remove(x,.(y,z)) -> if(=(x,y),remove(x,z),.(y,remove(x,z))) Proof: DP Processor: DPs: purge#(.(x,y)) -> remove#(x,y) purge#(.(x,y)) -> purge#(remove(x,y)) remove#(x,.(y,z)) -> remove#(x,z) TRS: purge(nil()) -> nil() purge(.(x,y)) -> .(x,purge(remove(x,y))) remove(x,nil()) -> nil() remove(x,.(y,z)) -> if(=(x,y),remove(x,z),.(y,remove(x,z))) Usable Rule Processor: DPs: purge#(.(x,y)) -> remove#(x,y) purge#(.(x,y)) -> purge#(remove(x,y)) remove#(x,.(y,z)) -> remove#(x,z) TRS: remove(x,nil()) -> nil() remove(x,.(y,z)) -> if(=(x,y),remove(x,z),.(y,remove(x,z))) KBO Processor: argument filtering: pi(nil) = [] pi(.) = [0,1] pi(remove) = [0,1] pi(=) = 0 pi(if) = 0 pi(purge#) = 0 pi(remove#) = 1 usable rules: remove(x,nil()) -> nil() remove(x,.(y,z)) -> if(=(x,y),remove(x,z),.(y,remove(x,z))) weight function: w0 = 1 w(remove#) = w(purge#) = w(if) = w(=) = w(nil) = 1 w(remove) = w(.) = 0 precedence: remove# ~ purge# ~ if ~ . ~ nil > = ~ remove problem: DPs: TRS: remove(x,nil()) -> nil() remove(x,.(y,z)) -> if(=(x,y),remove(x,z),.(y,remove(x,z))) Qed