(VAR @l @x @xs @y @ys ) (STRATEGY INNERMOST) (RULES #less(@x,@y) -> #cklt(#compare(@x,@y)) findMin(@l) -> findMin#1(@l) findMin#1(::(@x,@xs)) -> findMin#2(findMin(@xs),@x) findMin#1(nil) -> nil findMin#2(::(@y,@ys),@x) -> findMin#3(#less(@x,@y),@x,@y,@ys) findMin#2(nil,@x) -> ::(@x,nil) findMin#3(#false,@x,@y,@ys) -> ::(@y,::(@x,@ys)) findMin#3(#true,@x,@y,@ys) -> ::(@x,::(@y,@ys)) minSort(@l) -> minSort#1(findMin(@l)) minSort#1(::(@x,@xs)) -> ::(@x,minSort(@xs)) minSort#1(nil) -> nil #cklt(#EQ) ->= #false #cklt(#GT) ->= #false #cklt(#LT) ->= #true #compare(#0,#0) ->= #EQ #compare(#0,#neg(@y)) ->= #GT #compare(#0,#pos(@y)) ->= #LT #compare(#0,#s(@y)) ->= #LT #compare(#neg(@x),#0) ->= #LT #compare(#neg(@x),#neg(@y)) ->= #compare(@y,@x) #compare(#neg(@x),#pos(@y)) ->= #LT #compare(#pos(@x),#0) ->= #GT #compare(#pos(@x),#neg(@y)) ->= #GT #compare(#pos(@x),#pos(@y)) ->= #compare(@x,@y) #compare(#s(@x),#0) ->= #GT #compare(#s(@x),#s(@y)) ->= #compare(@x,@y) )