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