YES Problem: is_empty(nil()) -> true() is_empty(cons(x,l)) -> false() hd(cons(x,l)) -> x tl(cons(x,l)) -> l append(l1,l2) -> ifappend(l1,l2,l1) ifappend(l1,l2,nil()) -> l2 ifappend(l1,l2,cons(x,l)) -> cons(x,append(l,l2)) Proof: DP Processor: DPs: append#(l1,l2) -> ifappend#(l1,l2,l1) ifappend#(l1,l2,cons(x,l)) -> append#(l,l2) TRS: is_empty(nil()) -> true() is_empty(cons(x,l)) -> false() hd(cons(x,l)) -> x tl(cons(x,l)) -> l append(l1,l2) -> ifappend(l1,l2,l1) ifappend(l1,l2,nil()) -> l2 ifappend(l1,l2,cons(x,l)) -> cons(x,append(l,l2)) EDG Processor: DPs: append#(l1,l2) -> ifappend#(l1,l2,l1) ifappend#(l1,l2,cons(x,l)) -> append#(l,l2) TRS: is_empty(nil()) -> true() is_empty(cons(x,l)) -> false() hd(cons(x,l)) -> x tl(cons(x,l)) -> l append(l1,l2) -> ifappend(l1,l2,l1) ifappend(l1,l2,nil()) -> l2 ifappend(l1,l2,cons(x,l)) -> cons(x,append(l,l2)) graph: ifappend#(l1,l2,cons(x,l)) -> append#(l,l2) -> append#(l1,l2) -> ifappend#(l1,l2,l1) append#(l1,l2) -> ifappend#(l1,l2,l1) -> ifappend#(l1,l2,cons(x,l)) -> append#(l,l2) Subterm Criterion Processor: simple projection: pi(append#) = 0 pi(ifappend#) = 2 problem: DPs: append#(l1,l2) -> ifappend#(l1,l2,l1) TRS: is_empty(nil()) -> true() is_empty(cons(x,l)) -> false() hd(cons(x,l)) -> x tl(cons(x,l)) -> l append(l1,l2) -> ifappend(l1,l2,l1) ifappend(l1,l2,nil()) -> l2 ifappend(l1,l2,cons(x,l)) -> cons(x,append(l,l2)) Matrix Interpretation Processor: dimension: 1 interpretation: [ifappend#](x0, x1, x2) = 0, [append#](x0, x1) = 1, [ifappend](x0, x1, x2) = x1 + x2, [append](x0, x1) = x0 + x1, [tl](x0) = x0, [hd](x0) = x0, [false] = 0, [cons](x0, x1) = x0 + x1, [true] = 0, [is_empty](x0) = 0, [nil] = 0 orientation: append#(l1,l2) = 1 >= 0 = ifappend#(l1,l2,l1) is_empty(nil()) = 0 >= 0 = true() is_empty(cons(x,l)) = 0 >= 0 = false() hd(cons(x,l)) = l + x >= x = x tl(cons(x,l)) = l + x >= l = l append(l1,l2) = l1 + l2 >= l1 + l2 = ifappend(l1,l2,l1) ifappend(l1,l2,nil()) = l2 >= l2 = l2 ifappend(l1,l2,cons(x,l)) = l + l2 + x >= l + l2 + x = cons(x,append(l,l2)) problem: DPs: TRS: is_empty(nil()) -> true() is_empty(cons(x,l)) -> false() hd(cons(x,l)) -> x tl(cons(x,l)) -> l append(l1,l2) -> ifappend(l1,l2,l1) ifappend(l1,l2,nil()) -> l2 ifappend(l1,l2,cons(x,l)) -> cons(x,append(l,l2)) Qed