YES We show the termination of R/S, where R is eq(0,0) -> true eq(0,s(x)) -> false eq(s(x),0) -> false eq(s(x),s(y)) -> eq(x,y) le(0,y) -> true le(s(x),0) -> false le(s(x),s(y)) -> le(x,y) app(nil,y) -> y app(add(n,x),y) -> add(n,app(x,y)) min(add(n,nil)) -> n min(add(n,add(m,x))) -> if_min(le(n,m),add(n,add(m,x))) if_min(true,add(n,add(m,x))) -> min(add(n,x)) if_min(false,add(n,add(m,x))) -> min(add(m,x)) rm(n,nil) -> nil rm(n,add(m,x)) -> if_rm(eq(n,m),n,add(m,x)) if_rm(true,n,add(m,x)) -> rm(n,x) if_rm(false,n,add(m,x)) -> add(m,rm(n,x)) minsort(nil,nil) -> nil minsort(add(n,x),y) -> if_minsort(eq(n,min(add(n,x))),add(n,x),y) if_minsort(true,add(n,x),y) -> add(n,minsort(app(rm(n,x),y),nil)) if_minsort(false,add(n,x),y) -> minsort(x,add(n,y)) and S is: rand(x) -> x rand(x) -> rand(s(x)) Since R almost dominates S and S is non-duplicating, it is enough to show finiteness of (P, Q). Here P consists of the dependency pairs eq#(s(x),s(y)) -> eq#(x,y) le#(s(x),s(y)) -> le#(x,y) app#(add(n,x),y) -> app#(x,y) min#(add(n,add(m,x))) -> if_min#(le(n,m),add(n,add(m,x))) min#(add(n,add(m,x))) -> le#(n,m) if_min#(true,add(n,add(m,x))) -> min#(add(n,x)) if_min#(false,add(n,add(m,x))) -> min#(add(m,x)) rm#(n,add(m,x)) -> if_rm#(eq(n,m),n,add(m,x)) rm#(n,add(m,x)) -> eq#(n,m) if_rm#(true,n,add(m,x)) -> rm#(n,x) if_rm#(false,n,add(m,x)) -> rm#(n,x) minsort#(add(n,x),y) -> if_minsort#(eq(n,min(add(n,x))),add(n,x),y) minsort#(add(n,x),y) -> eq#(n,min(add(n,x))) minsort#(add(n,x),y) -> min#(add(n,x)) if_minsort#(true,add(n,x),y) -> minsort#(app(rm(n,x),y),nil) if_minsort#(true,add(n,x),y) -> app#(rm(n,x),y) if_minsort#(true,add(n,x),y) -> rm#(n,x) if_minsort#(false,add(n,x),y) -> minsort#(x,add(n,y)) and Q consists of the rules: eq(0,0) -> true eq(0,s(x)) -> false eq(s(x),0) -> false eq(s(x),s(y)) -> eq(x,y) le(0,y) -> true le(s(x),0) -> false le(s(x),s(y)) -> le(x,y) app(nil,y) -> y app(add(n,x),y) -> add(n,app(x,y)) min(add(n,nil)) -> n min(add(n,add(m,x))) -> if_min(le(n,m),add(n,add(m,x))) if_min(true,add(n,add(m,x))) -> min(add(n,x)) if_min(false,add(n,add(m,x))) -> min(add(m,x)) rm(n,nil) -> nil rm(n,add(m,x)) -> if_rm(eq(n,m),n,add(m,x)) if_rm(true,n,add(m,x)) -> rm(n,x) if_rm(false,n,add(m,x)) -> add(m,rm(n,x)) minsort(nil,nil) -> nil minsort(add(n,x),y) -> if_minsort(eq(n,min(add(n,x))),add(n,x),y) if_minsort(true,add(n,x),y) -> add(n,minsort(app(rm(n,x),y),nil)) if_minsort(false,add(n,x),y) -> minsort(x,add(n,y)) rand(x) -> x rand(x) -> rand(s(x)) The weakly monotone algebra (N^2, >_lex) with eq#_A((x1,y1),(x2,y2)) = (1, 3) s_A((x1,y1)) = (x1, y1 + 1) le#_A((x1,y1),(x2,y2)) = (0, 0) app#_A((x1,y1),(x2,y2)) = (x1, 0) add_A((x1,y1),(x2,y2)) = (x1 + x2 + 2, 1) min#_A((x1,y1)) = (x1 + 1, y1) if_min#_A((x1,y1),(x2,y2)) = (x2, 0) le_A((x1,y1),(x2,y2)) = (x2 + 2, y2 + 3) true_A = (1, 3) false_A = (1, 5) rm#_A((x1,y1),(x2,y2)) = (x2, y2 + 1) if_rm#_A((x1,y1),(x2,y2),(x3,y3)) = (x3, y3) eq_A((x1,y1),(x2,y2)) = (x2 + 2, y2 + 1) minsort#_A((x1,y1),(x2,y2)) = (x1 + x2 + 2, 4) if_minsort#_A((x1,y1),(x2,y2),(x3,y3)) = (x2 + x3 + 2, 4) min_A((x1,y1)) = (x1 + 1, 1) app_A((x1,y1),(x2,y2)) = (x1 + x2, y2 + 1) rm_A((x1,y1),(x2,y2)) = (x2, 2) nil_A = (0, 2) 0_A = (1, 1) if_min_A((x1,y1),(x2,y2)) = (x2, 0) if_rm_A((x1,y1),(x2,y2),(x3,y3)) = (x3, 1) minsort_A((x1,y1),(x2,y2)) = (x1 + x2 + 1, 1) if_minsort_A((x1,y1),(x2,y2),(x3,y3)) = (x2 + x3 + 1, 1) rand_A((x1,y1)) = (x1 + 1, 0) strictly orients the following dependency pairs: app#(add(n,x),y) -> app#(x,y) min#(add(n,add(m,x))) -> if_min#(le(n,m),add(n,add(m,x))) min#(add(n,add(m,x))) -> le#(n,m) if_min#(true,add(n,add(m,x))) -> min#(add(n,x)) if_min#(false,add(n,add(m,x))) -> min#(add(m,x)) rm#(n,add(m,x)) -> if_rm#(eq(n,m),n,add(m,x)) rm#(n,add(m,x)) -> eq#(n,m) if_rm#(true,n,add(m,x)) -> rm#(n,x) if_rm#(false,n,add(m,x)) -> rm#(n,x) minsort#(add(n,x),y) -> eq#(n,min(add(n,x))) minsort#(add(n,x),y) -> min#(add(n,x)) if_minsort#(true,add(n,x),y) -> minsort#(app(rm(n,x),y),nil) if_minsort#(true,add(n,x),y) -> app#(rm(n,x),y) if_minsort#(true,add(n,x),y) -> rm#(n,x) We remove them from the set of dependency pairs. The weakly monotone algebra (N^2, >_lex) with eq#_A((x1,y1),(x2,y2)) = (x1, y1) s_A((x1,y1)) = (x1, y1 + 1) le#_A((x1,y1),(x2,y2)) = (x1, y1) minsort#_A((x1,y1),(x2,y2)) = (0, 0) add_A((x1,y1),(x2,y2)) = (x1 + x2 + 2, 1) if_minsort#_A((x1,y1),(x2,y2),(x3,y3)) = (0, 0) eq_A((x1,y1),(x2,y2)) = (x1 + 2, y1 + 1) min_A((x1,y1)) = (x1 + 1, 1) false_A = (1, 3) 0_A = (1, 1) true_A = (1, 3) le_A((x1,y1),(x2,y2)) = (x1 + 2, y1 + 1) app_A((x1,y1),(x2,y2)) = (x1 + x2, y2 + 1) nil_A = (0, 2) if_min_A((x1,y1),(x2,y2)) = (x2, 0) rm_A((x1,y1),(x2,y2)) = (x2, 2) if_rm_A((x1,y1),(x2,y2),(x3,y3)) = (x3, 1) minsort_A((x1,y1),(x2,y2)) = (x1 + x2 + 1, 1) if_minsort_A((x1,y1),(x2,y2),(x3,y3)) = (x2 + x3 + 1, 1) rand_A((x1,y1)) = (x1 + 1, 0) strictly orients the following dependency pairs: eq#(s(x),s(y)) -> eq#(x,y) le#(s(x),s(y)) -> le#(x,y) We remove them from the set of dependency pairs. The weakly monotone algebra (N^2, >_lex) with minsort#_A((x1,y1),(x2,y2)) = (x1 + 1, y1) add_A((x1,y1),(x2,y2)) = (x1 + x2 + 2, 1) if_minsort#_A((x1,y1),(x2,y2),(x3,y3)) = (x2, y2 + 1) eq_A((x1,y1),(x2,y2)) = (2, 1) min_A((x1,y1)) = (x1 + 1, 1) false_A = (1, 3) 0_A = (0, 1) true_A = (1, 2) s_A((x1,y1)) = (x1, y1) le_A((x1,y1),(x2,y2)) = (x2 + 2, y2 + 1) app_A((x1,y1),(x2,y2)) = (x1 + x2, y2 + 1) nil_A = (0, 1) if_min_A((x1,y1),(x2,y2)) = (x2, 0) rm_A((x1,y1),(x2,y2)) = (x2, y2 + 1) if_rm_A((x1,y1),(x2,y2),(x3,y3)) = (x3, y3) minsort_A((x1,y1),(x2,y2)) = (x1 + x2 + 1, 1) if_minsort_A((x1,y1),(x2,y2),(x3,y3)) = (x2 + x3 + 1, 1) rand_A((x1,y1)) = (x1 + 1, 0) strictly orients the following dependency pairs: minsort#(add(n,x),y) -> if_minsort#(eq(n,min(add(n,x))),add(n,x),y) if_minsort#(false,add(n,x),y) -> minsort#(x,add(n,y)) We remove them from the set of dependency pairs. No dependency pair remains.