YES Problem: app(app(twice(),f),x) -> app(f,app(f,x)) app(app(map(),f),nil()) -> nil() app(app(map(),f),app(app(cons(),h),t)) -> app(app(cons(),app(f,h)),app(app(map(),f),t)) app(app(fmap(),nil()),x) -> nil() app(app(fmap(),app(app(cons(),f),t_f())),x) -> app(app(cons(),app(f,x)),app(app(fmap(),t_f()),x)) Proof: Uncurry Processor: twice2(f,x) -> app(f,app(f,x)) map2(f,nil()) -> nil() map2(f,cons2(h,t)) -> cons2(app(f,h),map2(f,t)) fmap2(nil(),x) -> nil() fmap2(cons2(f,t_f()),x) -> cons2(app(f,x),fmap2(t_f(),x)) app(twice1(x4),x5) -> twice2(x4,x5) app(twice(),x5) -> twice1(x5) 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(fmap1(x4),x5) -> fmap2(x4,x5) app(fmap(),x5) -> fmap1(x5) DP Processor: DPs: twice{2,#}(f,x) -> app#(f,x) twice{2,#}(f,x) -> app#(f,app(f,x)) map{2,#}(f,cons2(h,t)) -> map{2,#}(f,t) map{2,#}(f,cons2(h,t)) -> app#(f,h) fmap{2,#}(cons2(f,t_f()),x) -> fmap{2,#}(t_f(),x) fmap{2,#}(cons2(f,t_f()),x) -> app#(f,x) app#(twice1(x4),x5) -> twice{2,#}(x4,x5) app#(map1(x4),x5) -> map{2,#}(x4,x5) app#(fmap1(x4),x5) -> fmap{2,#}(x4,x5) TRS: twice2(f,x) -> app(f,app(f,x)) map2(f,nil()) -> nil() map2(f,cons2(h,t)) -> cons2(app(f,h),map2(f,t)) fmap2(nil(),x) -> nil() fmap2(cons2(f,t_f()),x) -> cons2(app(f,x),fmap2(t_f(),x)) app(twice1(x4),x5) -> twice2(x4,x5) app(twice(),x5) -> twice1(x5) 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(fmap1(x4),x5) -> fmap2(x4,x5) app(fmap(),x5) -> fmap1(x5) TDG Processor: DPs: twice{2,#}(f,x) -> app#(f,x) twice{2,#}(f,x) -> app#(f,app(f,x)) map{2,#}(f,cons2(h,t)) -> map{2,#}(f,t) map{2,#}(f,cons2(h,t)) -> app#(f,h) fmap{2,#}(cons2(f,t_f()),x) -> fmap{2,#}(t_f(),x) fmap{2,#}(cons2(f,t_f()),x) -> app#(f,x) app#(twice1(x4),x5) -> twice{2,#}(x4,x5) app#(map1(x4),x5) -> map{2,#}(x4,x5) app#(fmap1(x4),x5) -> fmap{2,#}(x4,x5) TRS: twice2(f,x) -> app(f,app(f,x)) map2(f,nil()) -> nil() map2(f,cons2(h,t)) -> cons2(app(f,h),map2(f,t)) fmap2(nil(),x) -> nil() fmap2(cons2(f,t_f()),x) -> cons2(app(f,x),fmap2(t_f(),x)) app(twice1(x4),x5) -> twice2(x4,x5) app(twice(),x5) -> twice1(x5) 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(fmap1(x4),x5) -> fmap2(x4,x5) app(fmap(),x5) -> fmap1(x5) graph: fmap{2,#}(cons2(f,t_f()),x) -> fmap{2,#}(t_f(),x) -> fmap{2,#}(cons2(f,t_f()),x) -> app#(f,x) fmap{2,#}(cons2(f,t_f()),x) -> fmap{2,#}(t_f(),x) -> fmap{2,#}(cons2(f,t_f()),x) -> fmap{2,#}(t_f(),x) fmap{2,#}(cons2(f,t_f()),x) -> app#(f,x) -> app#(fmap1(x4),x5) -> fmap{2,#}(x4,x5) fmap{2,#}(cons2(f,t_f()),x) -> app#(f,x) -> app#(map1(x4),x5) -> map{2,#}(x4,x5) fmap{2,#}(cons2(f,t_f()),x) -> app#(f,x) -> app#(twice1(x4),x5) -> twice{2,#}(x4,x5) map{2,#}(f,cons2(h,t)) -> map{2,#}(f,t) -> map{2,#}(f,cons2(h,t)) -> app#(f,h) map{2,#}(f,cons2(h,t)) -> map{2,#}(f,t) -> map{2,#}(f,cons2(h,t)) -> map{2,#}(f,t) map{2,#}(f,cons2(h,t)) -> app#(f,h) -> app#(fmap1(x4),x5) -> fmap{2,#}(x4,x5) map{2,#}(f,cons2(h,t)) -> app#(f,h) -> app#(map1(x4),x5) -> map{2,#}(x4,x5) map{2,#}(f,cons2(h,t)) -> app#(f,h) -> app#(twice1(x4),x5) -> twice{2,#}(x4,x5) app#(fmap1(x4),x5) -> fmap{2,#}(x4,x5) -> fmap{2,#}(cons2(f,t_f()),x) -> app#(f,x) app#(fmap1(x4),x5) -> fmap{2,#}(x4,x5) -> fmap{2,#}(cons2(f,t_f()),x) -> fmap{2,#}(t_f(),x) app#(map1(x4),x5) -> map{2,#}(x4,x5) -> map{2,#}(f,cons2(h,t)) -> app#(f,h) app#(map1(x4),x5) -> map{2,#}(x4,x5) -> map{2,#}(f,cons2(h,t)) -> map{2,#}(f,t) app#(twice1(x4),x5) -> twice{2,#}(x4,x5) -> twice{2,#}(f,x) -> app#(f,app(f,x)) app#(twice1(x4),x5) -> twice{2,#}(x4,x5) -> twice{2,#}(f,x) -> app#(f,x) twice{2,#}(f,x) -> app#(f,app(f,x)) -> app#(fmap1(x4),x5) -> fmap{2,#}(x4,x5) twice{2,#}(f,x) -> app#(f,app(f,x)) -> app#(map1(x4),x5) -> map{2,#}(x4,x5) twice{2,#}(f,x) -> app#(f,app(f,x)) -> app#(twice1(x4),x5) -> twice{2,#}(x4,x5) twice{2,#}(f,x) -> app#(f,x) -> app#(fmap1(x4),x5) -> fmap{2,#}(x4,x5) twice{2,#}(f,x) -> app#(f,x) -> app#(map1(x4),x5) -> map{2,#}(x4,x5) twice{2,#}(f,x) -> app#(f,x) -> app#(twice1(x4),x5) -> twice{2,#}(x4,x5) Subterm Criterion Processor: simple projection: pi(twice{2,#}) = 0 pi(app#) = 0 pi(map{2,#}) = 0 pi(fmap{2,#}) = 0 problem: DPs: twice{2,#}(f,x) -> app#(f,x) twice{2,#}(f,x) -> app#(f,app(f,x)) map{2,#}(f,cons2(h,t)) -> map{2,#}(f,t) map{2,#}(f,cons2(h,t)) -> app#(f,h) TRS: twice2(f,x) -> app(f,app(f,x)) map2(f,nil()) -> nil() map2(f,cons2(h,t)) -> cons2(app(f,h),map2(f,t)) fmap2(nil(),x) -> nil() fmap2(cons2(f,t_f()),x) -> cons2(app(f,x),fmap2(t_f(),x)) app(twice1(x4),x5) -> twice2(x4,x5) app(twice(),x5) -> twice1(x5) 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(fmap1(x4),x5) -> fmap2(x4,x5) app(fmap(),x5) -> fmap1(x5) SCC Processor: #sccs: 1 #rules: 1 #arcs: 22/16 DPs: map{2,#}(f,cons2(h,t)) -> map{2,#}(f,t) TRS: twice2(f,x) -> app(f,app(f,x)) map2(f,nil()) -> nil() map2(f,cons2(h,t)) -> cons2(app(f,h),map2(f,t)) fmap2(nil(),x) -> nil() fmap2(cons2(f,t_f()),x) -> cons2(app(f,x),fmap2(t_f(),x)) app(twice1(x4),x5) -> twice2(x4,x5) app(twice(),x5) -> twice1(x5) 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(fmap1(x4),x5) -> fmap2(x4,x5) app(fmap(),x5) -> fmap1(x5) Subterm Criterion Processor: simple projection: pi(map{2,#}) = 1 problem: DPs: TRS: twice2(f,x) -> app(f,app(f,x)) map2(f,nil()) -> nil() map2(f,cons2(h,t)) -> cons2(app(f,h),map2(f,t)) fmap2(nil(),x) -> nil() fmap2(cons2(f,t_f()),x) -> cons2(app(f,x),fmap2(t_f(),x)) app(twice1(x4),x5) -> twice2(x4,x5) app(twice(),x5) -> twice1(x5) 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(fmap1(x4),x5) -> fmap2(x4,x5) app(fmap(),x5) -> fmap1(x5) Qed