YES Problem: app(app(app(if(),true()),x),y) -> x app(app(app(if(),false()),x),y) -> y app(app(filter(),f),nil()) -> nil() app(app(filter(),f),app(app(cons(),x),xs)) -> app(app(app(if(),app(f,x)),app(app(cons(),x),app(app(filter(),f),xs))),app(app(filter(),f),xs)) Proof: Uncurry Processor: if3(true(),x,y) -> x if3(false(),x,y) -> y filter2(f,nil()) -> nil() filter2(f,cons2(x,xs)) -> if3(app(f,x),cons2(x,filter2(f,xs)),filter2(f,xs)) app(if2(x5,x4),x6) -> if3(x5,x4,x6) app(if1(x5),x6) -> if2(x5,x6) app(if(),x6) -> if1(x6) app(filter1(x5),x6) -> filter2(x5,x6) app(filter(),x6) -> filter1(x6) app(cons1(x5),x6) -> cons2(x5,x6) app(cons(),x6) -> cons1(x6) DP Processor: DPs: filter{2,#}(f,cons2(x,xs)) -> filter{2,#}(f,xs) filter{2,#}(f,cons2(x,xs)) -> app#(f,x) filter{2,#}(f,cons2(x,xs)) -> if{3,#}(app(f,x),cons2(x,filter2(f,xs)),filter2(f,xs)) app#(if2(x5,x4),x6) -> if{3,#}(x5,x4,x6) app#(filter1(x5),x6) -> filter{2,#}(x5,x6) TRS: if3(true(),x,y) -> x if3(false(),x,y) -> y filter2(f,nil()) -> nil() filter2(f,cons2(x,xs)) -> if3(app(f,x),cons2(x,filter2(f,xs)),filter2(f,xs)) app(if2(x5,x4),x6) -> if3(x5,x4,x6) app(if1(x5),x6) -> if2(x5,x6) app(if(),x6) -> if1(x6) app(filter1(x5),x6) -> filter2(x5,x6) app(filter(),x6) -> filter1(x6) app(cons1(x5),x6) -> cons2(x5,x6) app(cons(),x6) -> cons1(x6) TDG Processor: DPs: filter{2,#}(f,cons2(x,xs)) -> filter{2,#}(f,xs) filter{2,#}(f,cons2(x,xs)) -> app#(f,x) filter{2,#}(f,cons2(x,xs)) -> if{3,#}(app(f,x),cons2(x,filter2(f,xs)),filter2(f,xs)) app#(if2(x5,x4),x6) -> if{3,#}(x5,x4,x6) app#(filter1(x5),x6) -> filter{2,#}(x5,x6) TRS: if3(true(),x,y) -> x if3(false(),x,y) -> y filter2(f,nil()) -> nil() filter2(f,cons2(x,xs)) -> if3(app(f,x),cons2(x,filter2(f,xs)),filter2(f,xs)) app(if2(x5,x4),x6) -> if3(x5,x4,x6) app(if1(x5),x6) -> if2(x5,x6) app(if(),x6) -> if1(x6) app(filter1(x5),x6) -> filter2(x5,x6) app(filter(),x6) -> filter1(x6) app(cons1(x5),x6) -> cons2(x5,x6) app(cons(),x6) -> cons1(x6) graph: app#(filter1(x5),x6) -> filter{2,#}(x5,x6) -> filter{2,#}(f,cons2(x,xs)) -> if{3,#}(app(f,x),cons2(x,filter2(f,xs)),filter2(f,xs)) app#(filter1(x5),x6) -> filter{2,#}(x5,x6) -> filter{2,#}(f,cons2(x,xs)) -> app#(f,x) app#(filter1(x5),x6) -> filter{2,#}(x5,x6) -> filter{2,#}(f,cons2(x,xs)) -> filter{2,#}(f,xs) filter{2,#}(f,cons2(x,xs)) -> app#(f,x) -> app#(filter1(x5),x6) -> filter{2,#}(x5,x6) filter{2,#}(f,cons2(x,xs)) -> app#(f,x) -> app#(if2(x5,x4),x6) -> if{3,#}(x5,x4,x6) filter{2,#}(f,cons2(x,xs)) -> filter{2,#}(f,xs) -> filter{2,#}(f,cons2(x,xs)) -> if{3,#}(app(f,x),cons2(x,filter2(f,xs)),filter2(f,xs)) filter{2,#}(f,cons2(x,xs)) -> filter{2,#}(f,xs) -> filter{2,#}(f,cons2(x,xs)) -> app#(f,x) filter{2,#}(f,cons2(x,xs)) -> filter{2,#}(f,xs) -> filter{2,#}(f,cons2(x,xs)) -> filter{2,#}(f,xs) SCC Processor: #sccs: 1 #rules: 3 #arcs: 8/25 DPs: app#(filter1(x5),x6) -> filter{2,#}(x5,x6) filter{2,#}(f,cons2(x,xs)) -> filter{2,#}(f,xs) filter{2,#}(f,cons2(x,xs)) -> app#(f,x) TRS: if3(true(),x,y) -> x if3(false(),x,y) -> y filter2(f,nil()) -> nil() filter2(f,cons2(x,xs)) -> if3(app(f,x),cons2(x,filter2(f,xs)),filter2(f,xs)) app(if2(x5,x4),x6) -> if3(x5,x4,x6) app(if1(x5),x6) -> if2(x5,x6) app(if(),x6) -> if1(x6) app(filter1(x5),x6) -> filter2(x5,x6) app(filter(),x6) -> filter1(x6) app(cons1(x5),x6) -> cons2(x5,x6) app(cons(),x6) -> cons1(x6) Subterm Criterion Processor: simple projection: pi(filter{2,#}) = 1 pi(app#) = 1 problem: DPs: app#(filter1(x5),x6) -> filter{2,#}(x5,x6) TRS: if3(true(),x,y) -> x if3(false(),x,y) -> y filter2(f,nil()) -> nil() filter2(f,cons2(x,xs)) -> if3(app(f,x),cons2(x,filter2(f,xs)),filter2(f,xs)) app(if2(x5,x4),x6) -> if3(x5,x4,x6) app(if1(x5),x6) -> if2(x5,x6) app(if(),x6) -> if1(x6) app(filter1(x5),x6) -> filter2(x5,x6) app(filter(),x6) -> filter1(x6) app(cons1(x5),x6) -> cons2(x5,x6) app(cons(),x6) -> cons1(x6) SCC Processor: #sccs: 0 #rules: 0 #arcs: 5/1