YES Problem: app(app(app(compose(),f),g),x) -> app(g,app(f,x)) app(reverse(),l) -> app(app(reverse2(),l),nil()) app(app(reverse2(),nil()),l) -> l app(app(reverse2(),app(app(cons(),x),xs)),l) -> app(app(reverse2(),xs),app(app(cons(),x),l)) app(hd(),app(app(cons(),x),xs)) -> x app(tl(),app(app(cons(),x),xs)) -> xs last() -> app(app(compose(),hd()),reverse()) init() -> app(app(compose(),reverse()),app(app(compose(),tl()),reverse())) Proof: Uncurry Processor: compose3(f,g,x) -> app(g,app(f,x)) reverse1(l) -> reverse22(l,nil()) reverse22(nil(),l) -> l reverse22(cons2(x,xs),l) -> reverse22(xs,cons2(x,l)) hd1(cons2(x,xs)) -> x tl1(cons2(x,xs)) -> xs last() -> compose2(hd(),reverse()) init() -> compose2(reverse(),compose2(tl(),reverse())) app(compose2(x6,x5),x7) -> compose3(x6,x5,x7) app(compose1(x6),x7) -> compose2(x6,x7) app(compose(),x7) -> compose1(x7) app(reverse(),x7) -> reverse1(x7) app(reverse21(x6),x7) -> reverse22(x6,x7) app(reverse2(),x7) -> reverse21(x7) app(cons1(x6),x7) -> cons2(x6,x7) app(cons(),x7) -> cons1(x7) app(hd(),x7) -> hd1(x7) app(tl(),x7) -> tl1(x7) Matrix Interpretation Processor: dim=1 interpretation: [tl1](x0) = x0 + 2, [hd1](x0) = x0 + 5, [cons2](x0, x1) = x0 + x1 + 1, [cons1](x0) = x0 + 4, [reverse22](x0, x1) = x0 + x1 + 2, [reverse21](x0) = x0 + 6, [reverse1](x0) = x0 + 2, [compose1](x0) = x0, [compose3](x0, x1, x2) = 2x0 + 2x1 + x2, [compose2](x0, x1) = x0 + x1, [init] = 3, [last] = 5, [tl] = 1, [hd] = 4, [cons] = 4, [nil] = 0, [reverse2] = 3, [reverse] = 1, [app](x0, x1) = 2x0 + x1, [compose] = 0 orientation: compose3(f,g,x) = 2f + 2g + x >= 2f + 2g + x = app(g,app(f,x)) reverse1(l) = l + 2 >= l + 2 = reverse22(l,nil()) reverse22(nil(),l) = l + 2 >= l = l reverse22(cons2(x,xs),l) = l + x + xs + 3 >= l + x + xs + 3 = reverse22(xs,cons2(x,l)) hd1(cons2(x,xs)) = x + xs + 6 >= x = x tl1(cons2(x,xs)) = x + xs + 3 >= xs = xs last() = 5 >= 5 = compose2(hd(),reverse()) init() = 3 >= 3 = compose2(reverse(),compose2(tl(),reverse())) app(compose2(x6,x5),x7) = 2x5 + 2x6 + x7 >= 2x5 + 2x6 + x7 = compose3(x6,x5,x7) app(compose1(x6),x7) = 2x6 + x7 >= x6 + x7 = compose2(x6,x7) app(compose(),x7) = x7 >= x7 = compose1(x7) app(reverse(),x7) = x7 + 2 >= x7 + 2 = reverse1(x7) app(reverse21(x6),x7) = 2x6 + x7 + 12 >= x6 + x7 + 2 = reverse22(x6,x7) app(reverse2(),x7) = x7 + 6 >= x7 + 6 = reverse21(x7) app(cons1(x6),x7) = 2x6 + x7 + 8 >= x6 + x7 + 1 = cons2(x6,x7) app(cons(),x7) = x7 + 8 >= x7 + 4 = cons1(x7) app(hd(),x7) = x7 + 8 >= x7 + 5 = hd1(x7) app(tl(),x7) = x7 + 2 >= x7 + 2 = tl1(x7) problem: compose3(f,g,x) -> app(g,app(f,x)) reverse1(l) -> reverse22(l,nil()) reverse22(cons2(x,xs),l) -> reverse22(xs,cons2(x,l)) last() -> compose2(hd(),reverse()) init() -> compose2(reverse(),compose2(tl(),reverse())) app(compose2(x6,x5),x7) -> compose3(x6,x5,x7) app(compose1(x6),x7) -> compose2(x6,x7) app(compose(),x7) -> compose1(x7) app(reverse(),x7) -> reverse1(x7) app(reverse2(),x7) -> reverse21(x7) app(tl(),x7) -> tl1(x7) Matrix Interpretation Processor: dim=3 interpretation: [1 0 0] [tl1](x0) = [0 0 0]x0 [0 0 1] , [1 0 0] [1 0 0] [0] [cons2](x0, x1) = [0 0 1]x0 + [0 0 0]x1 + [0] [0 0 0] [1 1 1] [1], [1 0 0] [1 0 0] [reverse22](x0, x1) = [0 0 0]x0 + [0 0 0]x1 [0 1 1] [0 1 0] , [1 0 0] [reverse21](x0) = [0 0 0]x0 [0 1 0] , [1 1 0] [reverse1](x0) = [0 0 0]x0 [0 1 1] , [1 0 0] [1] [compose1](x0) = [0 0 0]x0 + [0] [0 1 1] [1], [1 1 1] [1 1 0] [1 1 0] [1] [compose3](x0, x1, x2) = [0 0 0]x0 + [0 1 1]x1 + [0 0 0]x2 + [0] [1 1 1] [1 1 0] [0 1 1] [0], [1 0 0] [1 1 0] [0] [compose2](x0, x1) = [0 1 1]x0 + [0 0 0]x1 + [1] [0 0 0] [0 1 1] [0], [1] [init] = [1] [1], [0] [last] = [1] [1], [0] [tl] = [0] [0], [0] [hd] = [0] [0], [0] [nil] = [0] [0], [0] [reverse2] = [0] [0], [0] [reverse] = [0] [0], [1 1 0] [1 1 0] [app](x0, x1) = [0 0 1]x0 + [0 0 0]x1 [1 1 0] [0 1 1] , [0] [compose] = [1] [0] orientation: [1 1 1] [1 1 0] [1 1 0] [1] [1 1 1] [1 1 0] [1 1 0] compose3(f,g,x) = [0 0 0]f + [0 1 1]g + [0 0 0]x + [0] >= [0 0 0]f + [0 0 1]g + [0 0 0]x = app(g,app(f,x)) [1 1 1] [1 1 0] [0 1 1] [0] [1 1 1] [1 1 0] [0 1 1] [1 1 0] [1 0 0] reverse1(l) = [0 0 0]l >= [0 0 0]l = reverse22(l,nil()) [0 1 1] [0 1 1] [1 0 0] [1 0 0] [1 0 0] [0] [1 0 0] [1 0 0] [1 0 0] reverse22(cons2(x,xs),l) = [0 0 0]l + [0 0 0]x + [0 0 0]xs + [0] >= [0 0 0]l + [0 0 0]x + [0 0 0]xs = reverse22(xs,cons2(x,l)) [0 1 0] [0 0 1] [1 1 1] [1] [0 0 0] [0 0 1] [0 1 1] [0] [0] last() = [1] >= [1] = compose2(hd(),reverse()) [1] [0] [1] [1] init() = [1] >= [1] = compose2(reverse(),compose2(tl(),reverse())) [1] [1] [1 1 0] [1 1 1] [1 1 0] [1] [1 1 0] [1 1 1] [1 1 0] [1] app(compose2(x6,x5),x7) = [0 1 1]x5 + [0 0 0]x6 + [0 0 0]x7 + [0] >= [0 1 1]x5 + [0 0 0]x6 + [0 0 0]x7 + [0] = compose3(x6,x5,x7) [1 1 0] [1 1 1] [0 1 1] [1] [1 1 0] [1 1 1] [0 1 1] [0] [1 0 0] [1 1 0] [1] [1 0 0] [1 1 0] [0] app(compose1(x6),x7) = [0 1 1]x6 + [0 0 0]x7 + [1] >= [0 1 1]x6 + [0 0 0]x7 + [1] = compose2(x6,x7) [1 0 0] [0 1 1] [1] [0 0 0] [0 1 1] [0] [1 1 0] [1] [1 0 0] [1] app(compose(),x7) = [0 0 0]x7 + [0] >= [0 0 0]x7 + [0] = compose1(x7) [0 1 1] [1] [0 1 1] [1] [1 1 0] [1 1 0] app(reverse(),x7) = [0 0 0]x7 >= [0 0 0]x7 = reverse1(x7) [0 1 1] [0 1 1] [1 1 0] [1 0 0] app(reverse2(),x7) = [0 0 0]x7 >= [0 0 0]x7 = reverse21(x7) [0 1 1] [0 1 0] [1 1 0] [1 0 0] app(tl(),x7) = [0 0 0]x7 >= [0 0 0]x7 = tl1(x7) [0 1 1] [0 0 1] problem: reverse1(l) -> reverse22(l,nil()) reverse22(cons2(x,xs),l) -> reverse22(xs,cons2(x,l)) last() -> compose2(hd(),reverse()) init() -> compose2(reverse(),compose2(tl(),reverse())) app(compose2(x6,x5),x7) -> compose3(x6,x5,x7) app(compose(),x7) -> compose1(x7) app(reverse(),x7) -> reverse1(x7) app(reverse2(),x7) -> reverse21(x7) app(tl(),x7) -> tl1(x7) Matrix Interpretation Processor: dim=3 interpretation: [1 0 0] [0] [tl1](x0) = [0 0 1]x0 + [0] [0 1 0] [1], [1 0 0] [0] [cons2](x0, x1) = [0 1 1]x0 + x1 + [0] [0 1 1] [1], [1 0 1] [1 1 0] [0] [reverse22](x0, x1) = [0 0 1]x0 + [0 0 1]x1 + [0] [0 1 0] [0 1 0] [1], [1 0 1] [0] [reverse21](x0) = [0 0 1]x0 + [0] [0 1 0] [1], [1 0 1] [1] [reverse1](x0) = [0 0 1]x0 + [0] [0 1 0] [1], [1 0 1] [0] [compose1](x0) = [0 0 1]x0 + [0] [0 1 0] [1], [1 0 0] [1 0 0] [1 0 1] [compose3](x0, x1, x2) = [0 0 0]x0 + [0 0 0]x1 + [0 0 1]x2 [0 0 0] [0 0 0] [0 1 0] , [1 0 0] [1 0 0] [compose2](x0, x1) = [0 0 1]x0 + [0 0 0]x1 [0 0 0] [0 1 0] , [1] [init] = [1] [1], [1] [last] = [0] [0], [0] [tl] = [0] [1], [0] [hd] = [0] [0], [0] [nil] = [0] [0], [0] [reverse2] = [0] [1], [0] [reverse] = [0] [1], [1 0 1] [1 0 1] [0] [app](x0, x1) = [0 0 0]x0 + [0 0 1]x1 + [0] [0 0 0] [0 1 0] [1], [0] [compose] = [0] [0] orientation: [1 0 1] [1] [1 0 1] [0] reverse1(l) = [0 0 1]l + [0] >= [0 0 1]l + [0] = reverse22(l,nil()) [0 1 0] [1] [0 1 0] [1] [1 1 0] [1 1 1] [1 0 1] [1] [1 1 0] [1 1 1] [1 0 1] [0] reverse22(cons2(x,xs),l) = [0 0 1]l + [0 1 1]x + [0 0 1]xs + [1] >= [0 0 1]l + [0 1 1]x + [0 0 1]xs + [1] = reverse22(xs,cons2(x,l)) [0 1 0] [0 1 1] [0 1 0] [1] [0 1 0] [0 1 1] [0 1 0] [1] [1] [0] last() = [0] >= [0] = compose2(hd(),reverse()) [0] [0] [1] [0] init() = [1] >= [1] = compose2(reverse(),compose2(tl(),reverse())) [1] [1] [1 1 0] [1 0 0] [1 0 1] [0] [1 0 0] [1 0 0] [1 0 1] app(compose2(x6,x5),x7) = [0 0 0]x5 + [0 0 0]x6 + [0 0 1]x7 + [0] >= [0 0 0]x5 + [0 0 0]x6 + [0 0 1]x7 = compose3(x6,x5,x7) [0 0 0] [0 0 0] [0 1 0] [1] [0 0 0] [0 0 0] [0 1 0] [1 0 1] [0] [1 0 1] [0] app(compose(),x7) = [0 0 1]x7 + [0] >= [0 0 1]x7 + [0] = compose1(x7) [0 1 0] [1] [0 1 0] [1] [1 0 1] [1] [1 0 1] [1] app(reverse(),x7) = [0 0 1]x7 + [0] >= [0 0 1]x7 + [0] = reverse1(x7) [0 1 0] [1] [0 1 0] [1] [1 0 1] [1] [1 0 1] [0] app(reverse2(),x7) = [0 0 1]x7 + [0] >= [0 0 1]x7 + [0] = reverse21(x7) [0 1 0] [1] [0 1 0] [1] [1 0 1] [1] [1 0 0] [0] app(tl(),x7) = [0 0 1]x7 + [0] >= [0 0 1]x7 + [0] = tl1(x7) [0 1 0] [1] [0 1 0] [1] problem: app(compose2(x6,x5),x7) -> compose3(x6,x5,x7) app(compose(),x7) -> compose1(x7) app(reverse(),x7) -> reverse1(x7) Matrix Interpretation Processor: dim=3 interpretation: [1 0 0] [reverse1](x0) = [0 0 0]x0 [0 0 0] , [1 0 0] [compose1](x0) = [0 0 0]x0 [0 0 0] , [1 0 0] [1 0 0] [1 0 0] [compose3](x0, x1, x2) = [0 0 0]x0 + [0 0 0]x1 + [0 0 0]x2 [0 0 0] [0 0 0] [0 0 0] , [1 0 0] [1 0 0] [compose2](x0, x1) = [0 0 0]x0 + [0 0 0]x1 [0 0 0] [0 0 0] , [0] [reverse] = [0] [0], [1 0 0] [1 0 0] [1] [app](x0, x1) = [0 0 0]x0 + [0 0 0]x1 + [0] [0 0 0] [0 0 0] [0], [0] [compose] = [0] [0] orientation: [1 0 0] [1 0 0] [1 0 0] [1] [1 0 0] [1 0 0] [1 0 0] app(compose2(x6,x5),x7) = [0 0 0]x5 + [0 0 0]x6 + [0 0 0]x7 + [0] >= [0 0 0]x5 + [0 0 0]x6 + [0 0 0]x7 = compose3(x6,x5,x7) [0 0 0] [0 0 0] [0 0 0] [0] [0 0 0] [0 0 0] [0 0 0] [1 0 0] [1] [1 0 0] app(compose(),x7) = [0 0 0]x7 + [0] >= [0 0 0]x7 = compose1(x7) [0 0 0] [0] [0 0 0] [1 0 0] [1] [1 0 0] app(reverse(),x7) = [0 0 0]x7 + [0] >= [0 0 0]x7 = reverse1(x7) [0 0 0] [0] [0 0 0] problem: Qed