NO Problem: app(app(const(),x),y) -> x app(app(app(subst(),f),g),x) -> app(app(f,x),app(g,x)) app(app(fix(),f),x) -> app(app(f,app(fix(),f)),x) Proof: Extended Uncurrying Processor: application symbol: app symbol table: fix ==> fix0/0 fix1/1 fix2/2 subst ==> subst0/0 subst1/1 subst2/2 subst3/3 const ==> const0/0 const1/1 const2/2 uncurry-rules: app(const1(x4),x5) -> const2(x4,x5) app(const0(),x4) -> const1(x4) app(subst2(x7,x8),x9) -> subst3(x7,x8,x9) app(subst1(x7),x8) -> subst2(x7,x8) app(subst0(),x7) -> subst1(x7) app(fix1(x11),x12) -> fix2(x11,x12) app(fix0(),x11) -> fix1(x11) eta-rules: problem: const2(x,y) -> x subst3(f,g,x) -> app(app(f,x),app(g,x)) fix2(f,x) -> app(app(f,fix1(f)),x) app(const1(x4),x5) -> const2(x4,x5) app(const0(),x4) -> const1(x4) app(subst2(x7,x8),x9) -> subst3(x7,x8,x9) app(subst1(x7),x8) -> subst2(x7,x8) app(subst0(),x7) -> subst1(x7) app(fix1(x11),x12) -> fix2(x11,x12) app(fix0(),x11) -> fix1(x11) Unfolding Processor: loop length: 5 terms: fix2(subst1(x85658),x86396) app(app(subst1(x85658),fix1(subst1(x85658))),x86396) app(subst2(x85658,fix1(subst1(x85658))),x86396) subst3(x85658,fix1(subst1(x85658)),x86396) app(app(x85658,x86396),app(fix1(subst1(x85658)),x86396)) context: app(app(x85658,x86396),[]) substitution: x85658 -> x85658 x86396 -> x86396 Qed