YES Problem: msort(nil()) -> nil() msort(.(x,y)) -> .(min(x,y),msort(del(min(x,y),.(x,y)))) min(x,nil()) -> x min(x,.(y,z)) -> if(<=(x,y),min(x,z),min(y,z)) del(x,nil()) -> nil() del(x,.(y,z)) -> if(=(x,y),z,.(y,del(x,z))) Proof: DP Processor: DPs: msort#(.(x,y)) -> del#(min(x,y),.(x,y)) msort#(.(x,y)) -> msort#(del(min(x,y),.(x,y))) msort#(.(x,y)) -> min#(x,y) min#(x,.(y,z)) -> min#(y,z) min#(x,.(y,z)) -> min#(x,z) del#(x,.(y,z)) -> del#(x,z) TRS: msort(nil()) -> nil() msort(.(x,y)) -> .(min(x,y),msort(del(min(x,y),.(x,y)))) min(x,nil()) -> x min(x,.(y,z)) -> if(<=(x,y),min(x,z),min(y,z)) del(x,nil()) -> nil() del(x,.(y,z)) -> if(=(x,y),z,.(y,del(x,z))) Usable Rule Processor: DPs: msort#(.(x,y)) -> del#(min(x,y),.(x,y)) msort#(.(x,y)) -> msort#(del(min(x,y),.(x,y))) msort#(.(x,y)) -> min#(x,y) min#(x,.(y,z)) -> min#(y,z) min#(x,.(y,z)) -> min#(x,z) del#(x,.(y,z)) -> del#(x,z) TRS: f11(x,y) -> x f11(x,y) -> y min(x,nil()) -> x min(x,.(y,z)) -> if(<=(x,y),min(x,z),min(y,z)) del(x,.(y,z)) -> if(=(x,y),z,.(y,del(x,z))) del(x,nil()) -> nil() TDG Processor: DPs: msort#(.(x,y)) -> del#(min(x,y),.(x,y)) msort#(.(x,y)) -> msort#(del(min(x,y),.(x,y))) msort#(.(x,y)) -> min#(x,y) min#(x,.(y,z)) -> min#(y,z) min#(x,.(y,z)) -> min#(x,z) del#(x,.(y,z)) -> del#(x,z) TRS: f11(x,y) -> x f11(x,y) -> y min(x,nil()) -> x min(x,.(y,z)) -> if(<=(x,y),min(x,z),min(y,z)) del(x,.(y,z)) -> if(=(x,y),z,.(y,del(x,z))) del(x,nil()) -> nil() graph: min#(x,.(y,z)) -> min#(y,z) -> min#(x,.(y,z)) -> min#(x,z) min#(x,.(y,z)) -> min#(y,z) -> min#(x,.(y,z)) -> min#(y,z) min#(x,.(y,z)) -> min#(x,z) -> min#(x,.(y,z)) -> min#(x,z) min#(x,.(y,z)) -> min#(x,z) -> min#(x,.(y,z)) -> min#(y,z) del#(x,.(y,z)) -> del#(x,z) -> del#(x,.(y,z)) -> del#(x,z) msort#(.(x,y)) -> min#(x,y) -> min#(x,.(y,z)) -> min#(x,z) msort#(.(x,y)) -> min#(x,y) -> min#(x,.(y,z)) -> min#(y,z) msort#(.(x,y)) -> del#(min(x,y),.(x,y)) -> del#(x,.(y,z)) -> del#(x,z) msort#(.(x,y)) -> msort#(del(min(x,y),.(x,y))) -> msort#(.(x,y)) -> min#(x,y) msort#(.(x,y)) -> msort#(del(min(x,y),.(x,y))) -> msort#(.(x,y)) -> msort#(del(min(x,y),.(x,y))) msort#(.(x,y)) -> msort#(del(min(x,y),.(x,y))) -> msort#(.(x,y)) -> del#(min(x,y),.(x,y)) CDG Processor: DPs: msort#(.(x,y)) -> del#(min(x,y),.(x,y)) msort#(.(x,y)) -> msort#(del(min(x,y),.(x,y))) msort#(.(x,y)) -> min#(x,y) min#(x,.(y,z)) -> min#(y,z) min#(x,.(y,z)) -> min#(x,z) del#(x,.(y,z)) -> del#(x,z) TRS: f11(x,y) -> x f11(x,y) -> y min(x,nil()) -> x min(x,.(y,z)) -> if(<=(x,y),min(x,z),min(y,z)) del(x,.(y,z)) -> if(=(x,y),z,.(y,del(x,z))) del(x,nil()) -> nil() graph: min#(x,.(y,z)) -> min#(y,z) -> min#(x,.(y,z)) -> min#(y,z) min#(x,.(y,z)) -> min#(y,z) -> min#(x,.(y,z)) -> min#(x,z) min#(x,.(y,z)) -> min#(x,z) -> min#(x,.(y,z)) -> min#(y,z) min#(x,.(y,z)) -> min#(x,z) -> min#(x,.(y,z)) -> min#(x,z) del#(x,.(y,z)) -> del#(x,z) -> del#(x,.(y,z)) -> del#(x,z) msort#(.(x,y)) -> min#(x,y) -> min#(x,.(y,z)) -> min#(y,z) msort#(.(x,y)) -> min#(x,y) -> min#(x,.(y,z)) -> min#(x,z) msort#(.(x,y)) -> del#(min(x,y),.(x,y)) -> del#(x,.(y,z)) -> del#(x,z) Restore Modifier: DPs: msort#(.(x,y)) -> del#(min(x,y),.(x,y)) msort#(.(x,y)) -> msort#(del(min(x,y),.(x,y))) msort#(.(x,y)) -> min#(x,y) min#(x,.(y,z)) -> min#(y,z) min#(x,.(y,z)) -> min#(x,z) del#(x,.(y,z)) -> del#(x,z) TRS: msort(nil()) -> nil() msort(.(x,y)) -> .(min(x,y),msort(del(min(x,y),.(x,y)))) min(x,nil()) -> x min(x,.(y,z)) -> if(<=(x,y),min(x,z),min(y,z)) del(x,nil()) -> nil() del(x,.(y,z)) -> if(=(x,y),z,.(y,del(x,z))) SCC Processor: #sccs: 2 #rules: 3 #arcs: 8/36 DPs: del#(x,.(y,z)) -> del#(x,z) TRS: msort(nil()) -> nil() msort(.(x,y)) -> .(min(x,y),msort(del(min(x,y),.(x,y)))) min(x,nil()) -> x min(x,.(y,z)) -> if(<=(x,y),min(x,z),min(y,z)) del(x,nil()) -> nil() del(x,.(y,z)) -> if(=(x,y),z,.(y,del(x,z))) Matrix Interpretation Processor: dimension: 1 interpretation: [del#](x0, x1) = x1, [=](x0, x1) = 0, [if](x0, x1, x2) = 0, [<=](x0, x1) = 0, [del](x0, x1) = 0, [min](x0, x1) = x0, [.](x0, x1) = x1 + 1, [msort](x0) = x0, [nil] = 0 orientation: del#(x,.(y,z)) = z + 1 >= z = del#(x,z) msort(nil()) = 0 >= 0 = nil() msort(.(x,y)) = y + 1 >= 1 = .(min(x,y),msort(del(min(x,y),.(x,y)))) min(x,nil()) = x >= x = x min(x,.(y,z)) = x >= 0 = if(<=(x,y),min(x,z),min(y,z)) del(x,nil()) = 0 >= 0 = nil() del(x,.(y,z)) = 0 >= 0 = if(=(x,y),z,.(y,del(x,z))) problem: DPs: TRS: msort(nil()) -> nil() msort(.(x,y)) -> .(min(x,y),msort(del(min(x,y),.(x,y)))) min(x,nil()) -> x min(x,.(y,z)) -> if(<=(x,y),min(x,z),min(y,z)) del(x,nil()) -> nil() del(x,.(y,z)) -> if(=(x,y),z,.(y,del(x,z))) Qed DPs: min#(x,.(y,z)) -> min#(y,z) min#(x,.(y,z)) -> min#(x,z) TRS: msort(nil()) -> nil() msort(.(x,y)) -> .(min(x,y),msort(del(min(x,y),.(x,y)))) min(x,nil()) -> x min(x,.(y,z)) -> if(<=(x,y),min(x,z),min(y,z)) del(x,nil()) -> nil() del(x,.(y,z)) -> if(=(x,y),z,.(y,del(x,z))) Matrix Interpretation Processor: dimension: 1 interpretation: [min#](x0, x1) = x1 + 1, [=](x0, x1) = 0, [if](x0, x1, x2) = 0, [<=](x0, x1) = 0, [del](x0, x1) = 0, [min](x0, x1) = x0, [.](x0, x1) = x0 + x1 + 1, [msort](x0) = x0 + 1, [nil] = 0 orientation: min#(x,.(y,z)) = y + z + 2 >= z + 1 = min#(y,z) min#(x,.(y,z)) = y + z + 2 >= z + 1 = min#(x,z) msort(nil()) = 1 >= 0 = nil() msort(.(x,y)) = x + y + 2 >= x + 2 = .(min(x,y),msort(del(min(x,y),.(x,y)))) min(x,nil()) = x >= x = x min(x,.(y,z)) = x >= 0 = if(<=(x,y),min(x,z),min(y,z)) del(x,nil()) = 0 >= 0 = nil() del(x,.(y,z)) = 0 >= 0 = if(=(x,y),z,.(y,del(x,z))) problem: DPs: TRS: msort(nil()) -> nil() msort(.(x,y)) -> .(min(x,y),msort(del(min(x,y),.(x,y)))) min(x,nil()) -> x min(x,.(y,z)) -> if(<=(x,y),min(x,z),min(y,z)) del(x,nil()) -> nil() del(x,.(y,z)) -> if(=(x,y),z,.(y,del(x,z))) Qed