YES Problem: tower(x) -> f(a(),x,s(0())) f(a(),0(),y) -> y f(a(),s(x),y) -> f(b(),y,s(x)) f(b(),y,x) -> f(a(),half(x),exp(y)) exp(0()) -> s(0()) exp(s(x)) -> double(exp(x)) double(0()) -> 0() double(s(x)) -> s(s(double(x))) half(0()) -> double(0()) half(s(0())) -> half(0()) half(s(s(x))) -> s(half(x)) Proof: Matrix Interpretation Processor: dim=1 interpretation: [f](x0, x1, x2) = 4x0 + 2x1 + 2x2 + 4, [double](x0) = x0, [a] = 0, [s](x0) = x0, [b] = 0, [tower](x0) = 2x0 + 5, [exp](x0) = x0, [half](x0) = x0, [0] = 0 orientation: tower(x) = 2x + 5 >= 2x + 4 = f(a(),x,s(0())) f(a(),0(),y) = 2y + 4 >= y = y f(a(),s(x),y) = 2x + 2y + 4 >= 2x + 2y + 4 = f(b(),y,s(x)) f(b(),y,x) = 2x + 2y + 4 >= 2x + 2y + 4 = f(a(),half(x),exp(y)) exp(0()) = 0 >= 0 = s(0()) exp(s(x)) = x >= x = double(exp(x)) double(0()) = 0 >= 0 = 0() double(s(x)) = x >= x = s(s(double(x))) half(0()) = 0 >= 0 = double(0()) half(s(0())) = 0 >= 0 = half(0()) half(s(s(x))) = x >= x = s(half(x)) problem: f(a(),s(x),y) -> f(b(),y,s(x)) f(b(),y,x) -> f(a(),half(x),exp(y)) exp(0()) -> s(0()) exp(s(x)) -> double(exp(x)) double(0()) -> 0() double(s(x)) -> s(s(double(x))) half(0()) -> double(0()) half(s(0())) -> half(0()) half(s(s(x))) -> s(half(x)) DP Processor: DPs: f#(a(),s(x),y) -> f#(b(),y,s(x)) f#(b(),y,x) -> exp#(y) f#(b(),y,x) -> half#(x) f#(b(),y,x) -> f#(a(),half(x),exp(y)) exp#(s(x)) -> exp#(x) exp#(s(x)) -> double#(exp(x)) double#(s(x)) -> double#(x) half#(0()) -> double#(0()) half#(s(0())) -> half#(0()) half#(s(s(x))) -> half#(x) TRS: f(a(),s(x),y) -> f(b(),y,s(x)) f(b(),y,x) -> f(a(),half(x),exp(y)) exp(0()) -> s(0()) exp(s(x)) -> double(exp(x)) double(0()) -> 0() double(s(x)) -> s(s(double(x))) half(0()) -> double(0()) half(s(0())) -> half(0()) half(s(s(x))) -> s(half(x)) TDG Processor: DPs: f#(a(),s(x),y) -> f#(b(),y,s(x)) f#(b(),y,x) -> exp#(y) f#(b(),y,x) -> half#(x) f#(b(),y,x) -> f#(a(),half(x),exp(y)) exp#(s(x)) -> exp#(x) exp#(s(x)) -> double#(exp(x)) double#(s(x)) -> double#(x) half#(0()) -> double#(0()) half#(s(0())) -> half#(0()) half#(s(s(x))) -> half#(x) TRS: f(a(),s(x),y) -> f(b(),y,s(x)) f(b(),y,x) -> f(a(),half(x),exp(y)) exp(0()) -> s(0()) exp(s(x)) -> double(exp(x)) double(0()) -> 0() double(s(x)) -> s(s(double(x))) half(0()) -> double(0()) half(s(0())) -> half(0()) half(s(s(x))) -> s(half(x)) graph: double#(s(x)) -> double#(x) -> double#(s(x)) -> double#(x) half#(s(s(x))) -> half#(x) -> half#(s(s(x))) -> half#(x) half#(s(s(x))) -> half#(x) -> half#(s(0())) -> half#(0()) half#(s(s(x))) -> half#(x) -> half#(0()) -> double#(0()) half#(s(0())) -> half#(0()) -> half#(s(s(x))) -> half#(x) half#(s(0())) -> half#(0()) -> half#(s(0())) -> half#(0()) half#(s(0())) -> half#(0()) -> half#(0()) -> double#(0()) half#(0()) -> double#(0()) -> double#(s(x)) -> double#(x) exp#(s(x)) -> double#(exp(x)) -> double#(s(x)) -> double#(x) exp#(s(x)) -> exp#(x) -> exp#(s(x)) -> double#(exp(x)) exp#(s(x)) -> exp#(x) -> exp#(s(x)) -> exp#(x) f#(b(),y,x) -> half#(x) -> half#(s(s(x))) -> half#(x) f#(b(),y,x) -> half#(x) -> half#(s(0())) -> half#(0()) f#(b(),y,x) -> half#(x) -> half#(0()) -> double#(0()) f#(b(),y,x) -> exp#(y) -> exp#(s(x)) -> double#(exp(x)) f#(b(),y,x) -> exp#(y) -> exp#(s(x)) -> exp#(x) f#(b(),y,x) -> f#(a(),half(x),exp(y)) -> f#(b(),y,x) -> f#(a(),half(x),exp(y)) f#(b(),y,x) -> f#(a(),half(x),exp(y)) -> f#(b(),y,x) -> half#(x) f#(b(),y,x) -> f#(a(),half(x),exp(y)) -> f#(b(),y,x) -> exp#(y) f#(b(),y,x) -> f#(a(),half(x),exp(y)) -> f#(a(),s(x),y) -> f#(b(),y,s(x)) f#(a(),s(x),y) -> f#(b(),y,s(x)) -> f#(b(),y,x) -> f#(a(),half(x),exp(y)) f#(a(),s(x),y) -> f#(b(),y,s(x)) -> f#(b(),y,x) -> half#(x) f#(a(),s(x),y) -> f#(b(),y,s(x)) -> f#(b(),y,x) -> exp#(y) f#(a(),s(x),y) -> f#(b(),y,s(x)) -> f#(a(),s(x),y) -> f#(b(),y,s(x)) SCC Processor: #sccs: 4 #rules: 6 #arcs: 24/100 DPs: f#(b(),y,x) -> f#(a(),half(x),exp(y)) f#(a(),s(x),y) -> f#(b(),y,s(x)) TRS: f(a(),s(x),y) -> f(b(),y,s(x)) f(b(),y,x) -> f(a(),half(x),exp(y)) exp(0()) -> s(0()) exp(s(x)) -> double(exp(x)) double(0()) -> 0() double(s(x)) -> s(s(double(x))) half(0()) -> double(0()) half(s(0())) -> half(0()) half(s(s(x))) -> s(half(x)) EDG Processor: DPs: f#(b(),y,x) -> f#(a(),half(x),exp(y)) f#(a(),s(x),y) -> f#(b(),y,s(x)) TRS: f(a(),s(x),y) -> f(b(),y,s(x)) f(b(),y,x) -> f(a(),half(x),exp(y)) exp(0()) -> s(0()) exp(s(x)) -> double(exp(x)) double(0()) -> 0() double(s(x)) -> s(s(double(x))) half(0()) -> double(0()) half(s(0())) -> half(0()) half(s(s(x))) -> s(half(x)) graph: f#(b(),y,x) -> f#(a(),half(x),exp(y)) -> f#(a(),s(x),y) -> f#(b(),y,s(x)) f#(a(),s(x),y) -> f#(b(),y,s(x)) -> f#(b(),y,x) -> f#(a(),half(x),exp(y)) Extended Uncurrying Processor: application symbol: f# symbol table: double ==> double0/1 exp ==> exp0/1 half ==> half0/1 b ==> b0/0 b_f#_1#/2 f ==> f0/3 s ==> s0/1 0 ==> 00/0 a ==> a0/0 a_f#_1#/2 uncurry-rules: eta-rules: problem: DPs: b_f#_1#(y,x) -> a_f#_1#(half0(x),exp0(y)) a_f#_1#(s0(x),y) -> b_f#_1#(y,s0(x)) TRS: f0(a0(),s0(x),y) -> f0(b0(),y,s0(x)) f0(b0(),y,x) -> f0(a0(),half0(x),exp0(y)) exp0(00()) -> s0(00()) exp0(s0(x)) -> double0(exp0(x)) double0(00()) -> 00() double0(s0(x)) -> s0(s0(double0(x))) half0(00()) -> double0(00()) half0(s0(00())) -> half0(00()) half0(s0(s0(x))) -> s0(half0(x)) Usable Rule Processor: DPs: b_f#_1#(y,x) -> a_f#_1#(half0(x),exp0(y)) a_f#_1#(s0(x),y) -> b_f#_1#(y,s0(x)) TRS: exp0(00()) -> s0(00()) exp0(s0(x)) -> double0(exp0(x)) double0(00()) -> 00() double0(s0(x)) -> s0(s0(double0(x))) half0(00()) -> double0(00()) half0(s0(00())) -> half0(00()) half0(s0(s0(x))) -> s0(half0(x)) Matrix Interpretation Processor: dim=1 usable rules: double0(00()) -> 00() double0(s0(x)) -> s0(s0(double0(x))) half0(00()) -> double0(00()) half0(s0(00())) -> half0(00()) half0(s0(s0(x))) -> s0(half0(x)) interpretation: [a_f#_1#](x0, x1) = 2x0 + 1, [00] = 0, [b_f#_1#](x0, x1) = x1 + 3, [s0](x0) = x0 + 2, [half0](x0) = 1/2x0, [exp0](x0) = 0, [double0](x0) = 5/2x0 orientation: b_f#_1#(y,x) = x + 3 >= x + 1 = a_f#_1#(half0(x),exp0(y)) a_f#_1#(s0(x),y) = 2x + 5 >= x + 5 = b_f#_1#(y,s0(x)) exp0(00()) = 0 >= 2 = s0(00()) exp0(s0(x)) = 0 >= 0 = double0(exp0(x)) double0(00()) = 0 >= 0 = 00() double0(s0(x)) = 5/2x + 5 >= 5/2x + 4 = s0(s0(double0(x))) half0(00()) = 0 >= 0 = double0(00()) half0(s0(00())) = 1 >= 0 = half0(00()) half0(s0(s0(x))) = 1/2x + 2 >= 1/2x + 2 = s0(half0(x)) problem: DPs: a_f#_1#(s0(x),y) -> b_f#_1#(y,s0(x)) TRS: exp0(00()) -> s0(00()) exp0(s0(x)) -> double0(exp0(x)) double0(00()) -> 00() double0(s0(x)) -> s0(s0(double0(x))) half0(00()) -> double0(00()) half0(s0(00())) -> half0(00()) half0(s0(s0(x))) -> s0(half0(x)) Restore Modifier: DPs: a_f#_1#(s0(x),y) -> b_f#_1#(y,s0(x)) TRS: f0(a0(),s0(x),y) -> f0(b0(),y,s0(x)) f0(b0(),y,x) -> f0(a0(),half0(x),exp0(y)) exp0(00()) -> s0(00()) exp0(s0(x)) -> double0(exp0(x)) double0(00()) -> 00() double0(s0(x)) -> s0(s0(double0(x))) half0(00()) -> double0(00()) half0(s0(00())) -> half0(00()) half0(s0(s0(x))) -> s0(half0(x)) SCC Processor: #sccs: 0 #rules: 0 #arcs: 2/1 DPs: exp#(s(x)) -> exp#(x) TRS: f(a(),s(x),y) -> f(b(),y,s(x)) f(b(),y,x) -> f(a(),half(x),exp(y)) exp(0()) -> s(0()) exp(s(x)) -> double(exp(x)) double(0()) -> 0() double(s(x)) -> s(s(double(x))) half(0()) -> double(0()) half(s(0())) -> half(0()) half(s(s(x))) -> s(half(x)) Subterm Criterion Processor: simple projection: pi(exp#) = 0 problem: DPs: TRS: f(a(),s(x),y) -> f(b(),y,s(x)) f(b(),y,x) -> f(a(),half(x),exp(y)) exp(0()) -> s(0()) exp(s(x)) -> double(exp(x)) double(0()) -> 0() double(s(x)) -> s(s(double(x))) half(0()) -> double(0()) half(s(0())) -> half(0()) half(s(s(x))) -> s(half(x)) Qed DPs: half#(s(s(x))) -> half#(x) half#(s(0())) -> half#(0()) TRS: f(a(),s(x),y) -> f(b(),y,s(x)) f(b(),y,x) -> f(a(),half(x),exp(y)) exp(0()) -> s(0()) exp(s(x)) -> double(exp(x)) double(0()) -> 0() double(s(x)) -> s(s(double(x))) half(0()) -> double(0()) half(s(0())) -> half(0()) half(s(s(x))) -> s(half(x)) Subterm Criterion Processor: simple projection: pi(half#) = 0 problem: DPs: TRS: f(a(),s(x),y) -> f(b(),y,s(x)) f(b(),y,x) -> f(a(),half(x),exp(y)) exp(0()) -> s(0()) exp(s(x)) -> double(exp(x)) double(0()) -> 0() double(s(x)) -> s(s(double(x))) half(0()) -> double(0()) half(s(0())) -> half(0()) half(s(s(x))) -> s(half(x)) Qed DPs: double#(s(x)) -> double#(x) TRS: f(a(),s(x),y) -> f(b(),y,s(x)) f(b(),y,x) -> f(a(),half(x),exp(y)) exp(0()) -> s(0()) exp(s(x)) -> double(exp(x)) double(0()) -> 0() double(s(x)) -> s(s(double(x))) half(0()) -> double(0()) half(s(0())) -> half(0()) half(s(s(x))) -> s(half(x)) Subterm Criterion Processor: simple projection: pi(double#) = 0 problem: DPs: TRS: f(a(),s(x),y) -> f(b(),y,s(x)) f(b(),y,x) -> f(a(),half(x),exp(y)) exp(0()) -> s(0()) exp(s(x)) -> double(exp(x)) double(0()) -> 0() double(s(x)) -> s(s(double(x))) half(0()) -> double(0()) half(s(0())) -> half(0()) half(s(s(x))) -> s(half(x)) Qed