YES Problem: app(app(map(),f),nil()) -> nil() app(app(map(),f),app(app(cons(),x),xs)) -> app(app(cons(),app(f,x)),app(app(map(),f),xs)) app(flatten(),app(app(node(),x),xs)) -> app(app(cons(),x),app(concat(),app(app(map(),flatten()),xs))) app(concat(),nil()) -> nil() app(concat(),app(app(cons(),x),xs)) -> app(app(append(),x),app(concat(),xs)) app(app(append(),nil()),xs) -> xs app(app(append(),app(app(cons(),x),xs)),ys) -> app(app(cons(),x),app(app(append(),xs),ys)) Proof: Uncurry Processor: map2(f,nil()) -> nil() map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs)) flatten1(node2(x,xs)) -> cons2(x,concat1(map2(flatten(),xs))) concat1(nil()) -> nil() concat1(cons2(x,xs)) -> append2(x,concat1(xs)) append2(nil(),xs) -> xs append2(cons2(x,xs),ys) -> cons2(x,append2(xs,ys)) app(map1(x4),x5) -> map2(x4,x5) app(map(),x5) -> map1(x5) app(cons1(x4),x5) -> cons2(x4,x5) app(cons(),x5) -> cons1(x5) app(flatten(),x5) -> flatten1(x5) app(node1(x4),x5) -> node2(x4,x5) app(node(),x5) -> node1(x5) app(concat(),x5) -> concat1(x5) app(append1(x4),x5) -> append2(x4,x5) app(append(),x5) -> append1(x5) DP Processor: DPs: map{2,#}(f,cons2(x,xs)) -> map{2,#}(f,xs) map{2,#}(f,cons2(x,xs)) -> app#(f,x) flatten{1,#}(node2(x,xs)) -> map{2,#}(flatten(),xs) flatten{1,#}(node2(x,xs)) -> concat{1,#}(map2(flatten(),xs)) concat{1,#}(cons2(x,xs)) -> concat{1,#}(xs) concat{1,#}(cons2(x,xs)) -> append{2,#}(x,concat1(xs)) append{2,#}(cons2(x,xs),ys) -> append{2,#}(xs,ys) app#(map1(x4),x5) -> map{2,#}(x4,x5) app#(flatten(),x5) -> flatten{1,#}(x5) app#(concat(),x5) -> concat{1,#}(x5) app#(append1(x4),x5) -> append{2,#}(x4,x5) TRS: map2(f,nil()) -> nil() map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs)) flatten1(node2(x,xs)) -> cons2(x,concat1(map2(flatten(),xs))) concat1(nil()) -> nil() concat1(cons2(x,xs)) -> append2(x,concat1(xs)) append2(nil(),xs) -> xs append2(cons2(x,xs),ys) -> cons2(x,append2(xs,ys)) app(map1(x4),x5) -> map2(x4,x5) app(map(),x5) -> map1(x5) app(cons1(x4),x5) -> cons2(x4,x5) app(cons(),x5) -> cons1(x5) app(flatten(),x5) -> flatten1(x5) app(node1(x4),x5) -> node2(x4,x5) app(node(),x5) -> node1(x5) app(concat(),x5) -> concat1(x5) app(append1(x4),x5) -> append2(x4,x5) app(append(),x5) -> append1(x5) TDG Processor: DPs: map{2,#}(f,cons2(x,xs)) -> map{2,#}(f,xs) map{2,#}(f,cons2(x,xs)) -> app#(f,x) flatten{1,#}(node2(x,xs)) -> map{2,#}(flatten(),xs) flatten{1,#}(node2(x,xs)) -> concat{1,#}(map2(flatten(),xs)) concat{1,#}(cons2(x,xs)) -> concat{1,#}(xs) concat{1,#}(cons2(x,xs)) -> append{2,#}(x,concat1(xs)) append{2,#}(cons2(x,xs),ys) -> append{2,#}(xs,ys) app#(map1(x4),x5) -> map{2,#}(x4,x5) app#(flatten(),x5) -> flatten{1,#}(x5) app#(concat(),x5) -> concat{1,#}(x5) app#(append1(x4),x5) -> append{2,#}(x4,x5) TRS: map2(f,nil()) -> nil() map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs)) flatten1(node2(x,xs)) -> cons2(x,concat1(map2(flatten(),xs))) concat1(nil()) -> nil() concat1(cons2(x,xs)) -> append2(x,concat1(xs)) append2(nil(),xs) -> xs append2(cons2(x,xs),ys) -> cons2(x,append2(xs,ys)) app(map1(x4),x5) -> map2(x4,x5) app(map(),x5) -> map1(x5) app(cons1(x4),x5) -> cons2(x4,x5) app(cons(),x5) -> cons1(x5) app(flatten(),x5) -> flatten1(x5) app(node1(x4),x5) -> node2(x4,x5) app(node(),x5) -> node1(x5) app(concat(),x5) -> concat1(x5) app(append1(x4),x5) -> append2(x4,x5) app(append(),x5) -> append1(x5) graph: append{2,#}(cons2(x,xs),ys) -> append{2,#}(xs,ys) -> append{2,#}(cons2(x,xs),ys) -> append{2,#}(xs,ys) concat{1,#}(cons2(x,xs)) -> append{2,#}(x,concat1(xs)) -> append{2,#}(cons2(x,xs),ys) -> append{2,#}(xs,ys) concat{1,#}(cons2(x,xs)) -> concat{1,#}(xs) -> concat{1,#}(cons2(x,xs)) -> append{2,#}(x,concat1(xs)) concat{1,#}(cons2(x,xs)) -> concat{1,#}(xs) -> concat{1,#}(cons2(x,xs)) -> concat{1,#}(xs) flatten{1,#}(node2(x,xs)) -> concat{1,#}(map2(flatten(),xs)) -> concat{1,#}(cons2(x,xs)) -> append{2,#}(x,concat1(xs)) flatten{1,#}(node2(x,xs)) -> concat{1,#}(map2(flatten(),xs)) -> concat{1,#}(cons2(x,xs)) -> concat{1,#}(xs) flatten{1,#}(node2(x,xs)) -> map{2,#}(flatten(),xs) -> map{2,#}(f,cons2(x,xs)) -> app#(f,x) flatten{1,#}(node2(x,xs)) -> map{2,#}(flatten(),xs) -> map{2,#}(f,cons2(x,xs)) -> map{2,#}(f,xs) app#(append1(x4),x5) -> append{2,#}(x4,x5) -> append{2,#}(cons2(x,xs),ys) -> append{2,#}(xs,ys) app#(map1(x4),x5) -> map{2,#}(x4,x5) -> map{2,#}(f,cons2(x,xs)) -> app#(f,x) app#(map1(x4),x5) -> map{2,#}(x4,x5) -> map{2,#}(f,cons2(x,xs)) -> map{2,#}(f,xs) app#(concat(),x5) -> concat{1,#}(x5) -> concat{1,#}(cons2(x,xs)) -> append{2,#}(x,concat1(xs)) app#(concat(),x5) -> concat{1,#}(x5) -> concat{1,#}(cons2(x,xs)) -> concat{1,#}(xs) app#(flatten(),x5) -> flatten{1,#}(x5) -> flatten{1,#}(node2(x,xs)) -> concat{1,#}(map2(flatten(),xs)) app#(flatten(),x5) -> flatten{1,#}(x5) -> flatten{1,#}(node2(x,xs)) -> map{2,#}(flatten(),xs) map{2,#}(f,cons2(x,xs)) -> app#(f,x) -> app#(append1(x4),x5) -> append{2,#}(x4,x5) map{2,#}(f,cons2(x,xs)) -> app#(f,x) -> app#(concat(),x5) -> concat{1,#}(x5) map{2,#}(f,cons2(x,xs)) -> app#(f,x) -> app#(flatten(),x5) -> flatten{1,#}(x5) map{2,#}(f,cons2(x,xs)) -> app#(f,x) -> app#(map1(x4),x5) -> map{2,#}(x4,x5) map{2,#}(f,cons2(x,xs)) -> map{2,#}(f,xs) -> map{2,#}(f,cons2(x,xs)) -> app#(f,x) map{2,#}(f,cons2(x,xs)) -> map{2,#}(f,xs) -> map{2,#}(f,cons2(x,xs)) -> map{2,#}(f,xs) SCC Processor: #sccs: 3 #rules: 7 #arcs: 21/121 DPs: flatten{1,#}(node2(x,xs)) -> map{2,#}(flatten(),xs) map{2,#}(f,cons2(x,xs)) -> map{2,#}(f,xs) map{2,#}(f,cons2(x,xs)) -> app#(f,x) app#(map1(x4),x5) -> map{2,#}(x4,x5) app#(flatten(),x5) -> flatten{1,#}(x5) TRS: map2(f,nil()) -> nil() map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs)) flatten1(node2(x,xs)) -> cons2(x,concat1(map2(flatten(),xs))) concat1(nil()) -> nil() concat1(cons2(x,xs)) -> append2(x,concat1(xs)) append2(nil(),xs) -> xs append2(cons2(x,xs),ys) -> cons2(x,append2(xs,ys)) app(map1(x4),x5) -> map2(x4,x5) app(map(),x5) -> map1(x5) app(cons1(x4),x5) -> cons2(x4,x5) app(cons(),x5) -> cons1(x5) app(flatten(),x5) -> flatten1(x5) app(node1(x4),x5) -> node2(x4,x5) app(node(),x5) -> node1(x5) app(concat(),x5) -> concat1(x5) app(append1(x4),x5) -> append2(x4,x5) app(append(),x5) -> append1(x5) Subterm Criterion Processor: simple projection: pi(map{2,#}) = 1 pi(app#) = 1 pi(flatten{1,#}) = 0 problem: DPs: app#(map1(x4),x5) -> map{2,#}(x4,x5) app#(flatten(),x5) -> flatten{1,#}(x5) TRS: map2(f,nil()) -> nil() map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs)) flatten1(node2(x,xs)) -> cons2(x,concat1(map2(flatten(),xs))) concat1(nil()) -> nil() concat1(cons2(x,xs)) -> append2(x,concat1(xs)) append2(nil(),xs) -> xs append2(cons2(x,xs),ys) -> cons2(x,append2(xs,ys)) app(map1(x4),x5) -> map2(x4,x5) app(map(),x5) -> map1(x5) app(cons1(x4),x5) -> cons2(x4,x5) app(cons(),x5) -> cons1(x5) app(flatten(),x5) -> flatten1(x5) app(node1(x4),x5) -> node2(x4,x5) app(node(),x5) -> node1(x5) app(concat(),x5) -> concat1(x5) app(append1(x4),x5) -> append2(x4,x5) app(append(),x5) -> append1(x5) SCC Processor: #sccs: 0 #rules: 0 #arcs: 9/4 DPs: concat{1,#}(cons2(x,xs)) -> concat{1,#}(xs) TRS: map2(f,nil()) -> nil() map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs)) flatten1(node2(x,xs)) -> cons2(x,concat1(map2(flatten(),xs))) concat1(nil()) -> nil() concat1(cons2(x,xs)) -> append2(x,concat1(xs)) append2(nil(),xs) -> xs append2(cons2(x,xs),ys) -> cons2(x,append2(xs,ys)) app(map1(x4),x5) -> map2(x4,x5) app(map(),x5) -> map1(x5) app(cons1(x4),x5) -> cons2(x4,x5) app(cons(),x5) -> cons1(x5) app(flatten(),x5) -> flatten1(x5) app(node1(x4),x5) -> node2(x4,x5) app(node(),x5) -> node1(x5) app(concat(),x5) -> concat1(x5) app(append1(x4),x5) -> append2(x4,x5) app(append(),x5) -> append1(x5) Subterm Criterion Processor: simple projection: pi(concat{1,#}) = 0 problem: DPs: TRS: map2(f,nil()) -> nil() map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs)) flatten1(node2(x,xs)) -> cons2(x,concat1(map2(flatten(),xs))) concat1(nil()) -> nil() concat1(cons2(x,xs)) -> append2(x,concat1(xs)) append2(nil(),xs) -> xs append2(cons2(x,xs),ys) -> cons2(x,append2(xs,ys)) app(map1(x4),x5) -> map2(x4,x5) app(map(),x5) -> map1(x5) app(cons1(x4),x5) -> cons2(x4,x5) app(cons(),x5) -> cons1(x5) app(flatten(),x5) -> flatten1(x5) app(node1(x4),x5) -> node2(x4,x5) app(node(),x5) -> node1(x5) app(concat(),x5) -> concat1(x5) app(append1(x4),x5) -> append2(x4,x5) app(append(),x5) -> append1(x5) Qed DPs: append{2,#}(cons2(x,xs),ys) -> append{2,#}(xs,ys) TRS: map2(f,nil()) -> nil() map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs)) flatten1(node2(x,xs)) -> cons2(x,concat1(map2(flatten(),xs))) concat1(nil()) -> nil() concat1(cons2(x,xs)) -> append2(x,concat1(xs)) append2(nil(),xs) -> xs append2(cons2(x,xs),ys) -> cons2(x,append2(xs,ys)) app(map1(x4),x5) -> map2(x4,x5) app(map(),x5) -> map1(x5) app(cons1(x4),x5) -> cons2(x4,x5) app(cons(),x5) -> cons1(x5) app(flatten(),x5) -> flatten1(x5) app(node1(x4),x5) -> node2(x4,x5) app(node(),x5) -> node1(x5) app(concat(),x5) -> concat1(x5) app(append1(x4),x5) -> append2(x4,x5) app(append(),x5) -> append1(x5) Subterm Criterion Processor: simple projection: pi(append{2,#}) = 0 problem: DPs: TRS: map2(f,nil()) -> nil() map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs)) flatten1(node2(x,xs)) -> cons2(x,concat1(map2(flatten(),xs))) concat1(nil()) -> nil() concat1(cons2(x,xs)) -> append2(x,concat1(xs)) append2(nil(),xs) -> xs append2(cons2(x,xs),ys) -> cons2(x,append2(xs,ys)) app(map1(x4),x5) -> map2(x4,x5) app(map(),x5) -> map1(x5) app(cons1(x4),x5) -> cons2(x4,x5) app(cons(),x5) -> cons1(x5) app(flatten(),x5) -> flatten1(x5) app(node1(x4),x5) -> node2(x4,x5) app(node(),x5) -> node1(x5) app(concat(),x5) -> concat1(x5) app(append1(x4),x5) -> append2(x4,x5) app(append(),x5) -> append1(x5) Qed