YES Problem: merge(nil(),y) -> y merge(x,nil()) -> x merge(.(x,y),.(u,v)) -> if(<(x,u),.(x,merge(y,.(u,v))),.(u,merge(.(x,y),v))) ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) if(true(),x,y) -> x if(false(),x,y) -> x Proof: DP Processor: DPs: merge#(.(x,y),.(u,v)) -> merge#(.(x,y),v) merge#(.(x,y),.(u,v)) -> merge#(y,.(u,v)) merge#(.(x,y),.(u,v)) -> if#(<(x,u),.(x,merge(y,.(u,v))),.(u,merge(.(x,y),v))) ++#(.(x,y),z) -> ++#(y,z) TRS: merge(nil(),y) -> y merge(x,nil()) -> x merge(.(x,y),.(u,v)) -> if(<(x,u),.(x,merge(y,.(u,v))),.(u,merge(.(x,y),v))) ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) if(true(),x,y) -> x if(false(),x,y) -> x TDG Processor: DPs: merge#(.(x,y),.(u,v)) -> merge#(.(x,y),v) merge#(.(x,y),.(u,v)) -> merge#(y,.(u,v)) merge#(.(x,y),.(u,v)) -> if#(<(x,u),.(x,merge(y,.(u,v))),.(u,merge(.(x,y),v))) ++#(.(x,y),z) -> ++#(y,z) TRS: merge(nil(),y) -> y merge(x,nil()) -> x merge(.(x,y),.(u,v)) -> if(<(x,u),.(x,merge(y,.(u,v))),.(u,merge(.(x,y),v))) ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) if(true(),x,y) -> x if(false(),x,y) -> x graph: ++#(.(x,y),z) -> ++#(y,z) -> ++#(.(x,y),z) -> ++#(y,z) merge#(.(x,y),.(u,v)) -> merge#(.(x,y),v) -> merge#(.(x,y),.(u,v)) -> if#(<(x,u),.(x,merge(y,.(u,v))),.(u,merge(.(x,y),v))) merge#(.(x,y),.(u,v)) -> merge#(.(x,y),v) -> merge#(.(x,y),.(u,v)) -> merge#(y,.(u,v)) merge#(.(x,y),.(u,v)) -> merge#(.(x,y),v) -> merge#(.(x,y),.(u,v)) -> merge#(.(x,y),v) merge#(.(x,y),.(u,v)) -> merge#(y,.(u,v)) -> merge#(.(x,y),.(u,v)) -> if#(<(x,u),.(x,merge(y,.(u,v))),.(u,merge(.(x,y),v))) merge#(.(x,y),.(u,v)) -> merge#(y,.(u,v)) -> merge#(.(x,y),.(u,v)) -> merge#(y,.(u,v)) merge#(.(x,y),.(u,v)) -> merge#(y,.(u,v)) -> merge#(.(x,y),.(u,v)) -> merge#(.(x,y),v) SCC Processor: #sccs: 2 #rules: 3 #arcs: 7/16 DPs: merge#(.(x,y),.(u,v)) -> merge#(.(x,y),v) merge#(.(x,y),.(u,v)) -> merge#(y,.(u,v)) TRS: merge(nil(),y) -> y merge(x,nil()) -> x merge(.(x,y),.(u,v)) -> if(<(x,u),.(x,merge(y,.(u,v))),.(u,merge(.(x,y),v))) ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) if(true(),x,y) -> x if(false(),x,y) -> x Matrix Interpretation Processor: dim=1 interpretation: [merge#](x0, x1) = x0 + x1 + 3, [false] = 4, [true] = 3, [++](x0, x1) = x0 + 6x1 + 1, [if](x0, x1, x2) = 5x0 + x1 + 3, [<](x0, x1) = 0, [.](x0, x1) = x1 + 1, [merge](x0, x1) = 4x0 + x1 + 7, [nil] = 0 orientation: merge#(.(x,y),.(u,v)) = v + y + 5 >= v + y + 4 = merge#(.(x,y),v) merge#(.(x,y),.(u,v)) = v + y + 5 >= v + y + 4 = merge#(y,.(u,v)) merge(nil(),y) = y + 7 >= y = y merge(x,nil()) = 4x + 7 >= x = x merge(.(x,y),.(u,v)) = v + 4y + 12 >= v + 4y + 12 = if(<(x,u),.(x,merge(y,.(u,v))),.(u,merge(.(x,y),v))) ++(nil(),y) = 6y + 1 >= y = y ++(.(x,y),z) = y + 6z + 2 >= y + 6z + 2 = .(x,++(y,z)) if(true(),x,y) = x + 18 >= x = x if(false(),x,y) = x + 23 >= x = x problem: DPs: TRS: merge(nil(),y) -> y merge(x,nil()) -> x merge(.(x,y),.(u,v)) -> if(<(x,u),.(x,merge(y,.(u,v))),.(u,merge(.(x,y),v))) ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) if(true(),x,y) -> x if(false(),x,y) -> x Qed DPs: ++#(.(x,y),z) -> ++#(y,z) TRS: merge(nil(),y) -> y merge(x,nil()) -> x merge(.(x,y),.(u,v)) -> if(<(x,u),.(x,merge(y,.(u,v))),.(u,merge(.(x,y),v))) ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) if(true(),x,y) -> x if(false(),x,y) -> x KBO Processor: argument filtering: pi(nil) = [] pi(merge) = [0,1] pi(.) = [0,1] pi(<) = 1 pi(if) = 1 pi(++) = [0,1] pi(true) = [] pi(false) = [] pi(++#) = 0 weight function: w0 = 1 w(false) = w(true) = w(nil) = 1 w(++#) = w(++) = w(if) = w(<) = w(.) = w(merge) = 0 precedence: true ~ ++ ~ merge ~ nil > ++# ~ false ~ if ~ < ~ . problem: DPs: TRS: merge(nil(),y) -> y merge(x,nil()) -> x merge(.(x,y),.(u,v)) -> if(<(x,u),.(x,merge(y,.(u,v))),.(u,merge(.(x,y),v))) ++(nil(),y) -> y ++(.(x,y),z) -> .(x,++(y,z)) if(true(),x,y) -> x if(false(),x,y) -> x Qed