YES TRS: merge(nil(),y) -> y merge(x,nil()) -> x merge(.(x,y),.(u,v)) -> if(<(x,u),.(x,merge(y,.(u,v))),.(u,merge(.(x,y),v))) ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) if(true(),x,y) -> x if(false(),x,y) -> x linear polynomial interpretations on N: merge_A(x1,x2) = x1 + x2 merge#_A(x1,x2) = 1 nil_A = 1 nil#_A = 0 ._A(x1,x2) = 1 .#_A(x1,x2) = 0 if_A(x1,x2,x3) = x2 if#_A(x1,x2,x3) = 0 <_A(x1,x2) = x1 + 1 <#_A(x1,x2) = 0 ++_A(x1,x2) = x2 + 1 ++#_A(x1,x2) = x2 + 1 true_A = 1 true#_A = 0 false_A = 1 false#_A = 0 precedence: merge = if = ++ > nil = . = < = true = false