YES Problem 1: (VAR v_NonEmpty:S @_@9:S @a:S @b:S @breadth@1:S @breadth@2:S @breadth@7:S @breadth@8:S @children@3:S @children@4:S @children@5:S @children@6:S @copyover@1:S @copyover@2:S @dequeue@1:S @dequeue@2:S @dequeue@3:S @dequeue@4:S @elem:S @inq:S @l:S @l1:S @l2:S @outq:S @queue:S @queue':S @x:S @xs:S @y:S @ys:S @z:S) (RULES breadth(@breadth@1:S,@breadth@2:S) -> breadth#1(dequeue(@breadth@1:S,@breadth@2:S)) breadth#1(tuple#2(@queue':S,@elem:S)) -> breadth#2(@elem:S,@queue':S) breadth#2(::(@z:S,@_@9:S),@queue':S) -> breadth#3(breadth#4(@z:S),@queue':S) breadth#2(nil,@queue':S) -> nil breadth#3(tuple#2(@x:S,@ys:S),@queue':S) -> ::(@x:S,breadth#5(enqueues(@ys:S,@queue':S))) breadth#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> children(@children@3:S,@children@4:S,@children@5:S,@children@6:S) breadth#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> breadth(@breadth@7:S,@breadth@8:S) children(@a:S,@b:S,@l1:S,@l2:S) -> tuple#2(tuple#2(@a:S,@b:S),children#1(@l1:S,@b:S,@l2:S)) children#1(::(@x:S,@xs:S),@b:S,@l2:S) -> children#3(@l2:S,@b:S,@x:S,@xs:S) children#1(nil,@b:S,@l2:S) -> children#2(@l2:S,@b:S) children#2(::(@y:S,@ys:S),@b:S) -> ::(tuple#4(@y:S,@b:S,nil,@ys:S),nil) children#2(nil,@b:S) -> nil children#3(::(@y:S,@ys:S),@b:S,@x:S,@xs:S) -> ::(tuple#4(@x:S,@b:S,nil,@xs:S),::(tuple#4(@x:S,@y:S,@xs:S,@ys:S),nil)) children#3(nil,@b:S,@x:S,@xs:S) -> nil copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) dequeue(@dequeue@1:S,@dequeue@2:S) -> dequeue#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) dequeue#1(tuple#2(@inq:S,@outq:S)) -> dequeue#2(@outq:S,@inq:S) dequeue#2(::(@y:S,@ys:S),@inq:S) -> tuple#2(tuple#2(@inq:S,@ys:S),::(@y:S,nil)) dequeue#2(nil,@inq:S) -> dequeue#3(@inq:S) dequeue#3(::(@x:S,@xs:S)) -> dequeue#4(copyover(::(@x:S,@xs:S),nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil,nil),nil) dequeue#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> dequeue(@dequeue@3:S,@dequeue@4:S) empty(@x:S) -> tuple#2(nil,nil) enqueue(@x:S,@queue:S) -> enqueue#1(@queue:S,@x:S) enqueue#1(tuple#2(@inq:S,@outq:S),@x:S) -> tuple#2(::(@x:S,@inq:S),@outq:S) enqueues(@l:S,@queue:S) -> enqueues#1(@l:S,@queue:S) enqueues#1(::(@x:S,@xs:S),@queue:S) -> enqueues(@xs:S,enqueue(@x:S,@queue:S)) enqueues#1(nil,@queue:S) -> @queue:S startBreadth(@xs:S) -> startBreadth#1(@xs:S) startBreadth#1(::(@x:S,@xs:S)) -> startBreadth#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> breadth(@breadth@1:S,@breadth@2:S) ) (STRATEGY INNERMOST) Problem 1: Dependency Pairs Processor: -> Pairs: BREADTH(@breadth@1:S,@breadth@2:S) -> BREADTH#1(dequeue(@breadth@1:S,@breadth@2:S)) BREADTH(@breadth@1:S,@breadth@2:S) -> DEQUEUE(@breadth@1:S,@breadth@2:S) BREADTH#1(tuple#2(@queue':S,@elem:S)) -> BREADTH#2(@elem:S,@queue':S) BREADTH#2(::(@z:S,@_@9:S),@queue':S) -> BREADTH#3(breadth#4(@z:S),@queue':S) BREADTH#2(::(@z:S,@_@9:S),@queue':S) -> BREADTH#4(@z:S) BREADTH#3(tuple#2(@x:S,@ys:S),@queue':S) -> BREADTH#5(enqueues(@ys:S,@queue':S)) BREADTH#3(tuple#2(@x:S,@ys:S),@queue':S) -> ENQUEUES(@ys:S,@queue':S) BREADTH#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> CHILDREN(@children@3:S,@children@4:S,@children@5:S,@children@6:S) BREADTH#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> BREADTH(@breadth@7:S,@breadth@8:S) CHILDREN(@a:S,@b:S,@l1:S,@l2:S) -> CHILDREN#1(@l1:S,@b:S,@l2:S) CHILDREN#1(::(@x:S,@xs:S),@b:S,@l2:S) -> CHILDREN#3(@l2:S,@b:S,@x:S,@xs:S) CHILDREN#1(nil,@b:S,@l2:S) -> CHILDREN#2(@l2:S,@b:S) COPYOVER(@copyover@1:S,@copyover@2:S) -> COPYOVER#1(tuple#2(@copyover@1:S,@copyover@2:S)) COPYOVER#1(tuple#2(@inq:S,@outq:S)) -> COPYOVER#2(@inq:S,@outq:S) COPYOVER#2(::(@x:S,@xs:S),@outq:S) -> COPYOVER(@xs:S,::(@x:S,@outq:S)) DEQUEUE(@dequeue@1:S,@dequeue@2:S) -> DEQUEUE#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) DEQUEUE#1(tuple#2(@inq:S,@outq:S)) -> DEQUEUE#2(@outq:S,@inq:S) DEQUEUE#2(nil,@inq:S) -> DEQUEUE#3(@inq:S) DEQUEUE#3(::(@x:S,@xs:S)) -> COPYOVER(::(@x:S,@xs:S),nil) DEQUEUE#3(::(@x:S,@xs:S)) -> DEQUEUE#4(copyover(::(@x:S,@xs:S),nil)) DEQUEUE#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> DEQUEUE(@dequeue@3:S,@dequeue@4:S) ENQUEUE(@x:S,@queue:S) -> ENQUEUE#1(@queue:S,@x:S) ENQUEUES(@l:S,@queue:S) -> ENQUEUES#1(@l:S,@queue:S) ENQUEUES#1(::(@x:S,@xs:S),@queue:S) -> ENQUEUE(@x:S,@queue:S) ENQUEUES#1(::(@x:S,@xs:S),@queue:S) -> ENQUEUES(@xs:S,enqueue(@x:S,@queue:S)) STARTBREADTH(@xs:S) -> STARTBREADTH#1(@xs:S) STARTBREADTH#1(::(@x:S,@xs:S)) -> EMPTY(#unit) STARTBREADTH#1(::(@x:S,@xs:S)) -> ENQUEUE(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit)) STARTBREADTH#1(::(@x:S,@xs:S)) -> STARTBREADTH#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) STARTBREADTH#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> BREADTH(@breadth@1:S,@breadth@2:S) -> Rules: breadth(@breadth@1:S,@breadth@2:S) -> breadth#1(dequeue(@breadth@1:S,@breadth@2:S)) breadth#1(tuple#2(@queue':S,@elem:S)) -> breadth#2(@elem:S,@queue':S) breadth#2(::(@z:S,@_@9:S),@queue':S) -> breadth#3(breadth#4(@z:S),@queue':S) breadth#2(nil,@queue':S) -> nil breadth#3(tuple#2(@x:S,@ys:S),@queue':S) -> ::(@x:S,breadth#5(enqueues(@ys:S,@queue':S))) breadth#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> children(@children@3:S,@children@4:S,@children@5:S,@children@6:S) breadth#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> breadth(@breadth@7:S,@breadth@8:S) children(@a:S,@b:S,@l1:S,@l2:S) -> tuple#2(tuple#2(@a:S,@b:S),children#1(@l1:S,@b:S,@l2:S)) children#1(::(@x:S,@xs:S),@b:S,@l2:S) -> children#3(@l2:S,@b:S,@x:S,@xs:S) children#1(nil,@b:S,@l2:S) -> children#2(@l2:S,@b:S) children#2(::(@y:S,@ys:S),@b:S) -> ::(tuple#4(@y:S,@b:S,nil,@ys:S),nil) children#2(nil,@b:S) -> nil children#3(::(@y:S,@ys:S),@b:S,@x:S,@xs:S) -> ::(tuple#4(@x:S,@b:S,nil,@xs:S),::(tuple#4(@x:S,@y:S,@xs:S,@ys:S),nil)) children#3(nil,@b:S,@x:S,@xs:S) -> nil copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) dequeue(@dequeue@1:S,@dequeue@2:S) -> dequeue#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) dequeue#1(tuple#2(@inq:S,@outq:S)) -> dequeue#2(@outq:S,@inq:S) dequeue#2(::(@y:S,@ys:S),@inq:S) -> tuple#2(tuple#2(@inq:S,@ys:S),::(@y:S,nil)) dequeue#2(nil,@inq:S) -> dequeue#3(@inq:S) dequeue#3(::(@x:S,@xs:S)) -> dequeue#4(copyover(::(@x:S,@xs:S),nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil,nil),nil) dequeue#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> dequeue(@dequeue@3:S,@dequeue@4:S) empty(@x:S) -> tuple#2(nil,nil) enqueue(@x:S,@queue:S) -> enqueue#1(@queue:S,@x:S) enqueue#1(tuple#2(@inq:S,@outq:S),@x:S) -> tuple#2(::(@x:S,@inq:S),@outq:S) enqueues(@l:S,@queue:S) -> enqueues#1(@l:S,@queue:S) enqueues#1(::(@x:S,@xs:S),@queue:S) -> enqueues(@xs:S,enqueue(@x:S,@queue:S)) enqueues#1(nil,@queue:S) -> @queue:S startBreadth(@xs:S) -> startBreadth#1(@xs:S) startBreadth#1(::(@x:S,@xs:S)) -> startBreadth#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> breadth(@breadth@1:S,@breadth@2:S) Problem 1: SCC Processor: -> Pairs: BREADTH(@breadth@1:S,@breadth@2:S) -> BREADTH#1(dequeue(@breadth@1:S,@breadth@2:S)) BREADTH(@breadth@1:S,@breadth@2:S) -> DEQUEUE(@breadth@1:S,@breadth@2:S) BREADTH#1(tuple#2(@queue':S,@elem:S)) -> BREADTH#2(@elem:S,@queue':S) BREADTH#2(::(@z:S,@_@9:S),@queue':S) -> BREADTH#3(breadth#4(@z:S),@queue':S) BREADTH#2(::(@z:S,@_@9:S),@queue':S) -> BREADTH#4(@z:S) BREADTH#3(tuple#2(@x:S,@ys:S),@queue':S) -> BREADTH#5(enqueues(@ys:S,@queue':S)) BREADTH#3(tuple#2(@x:S,@ys:S),@queue':S) -> ENQUEUES(@ys:S,@queue':S) BREADTH#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> CHILDREN(@children@3:S,@children@4:S,@children@5:S,@children@6:S) BREADTH#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> BREADTH(@breadth@7:S,@breadth@8:S) CHILDREN(@a:S,@b:S,@l1:S,@l2:S) -> CHILDREN#1(@l1:S,@b:S,@l2:S) CHILDREN#1(::(@x:S,@xs:S),@b:S,@l2:S) -> CHILDREN#3(@l2:S,@b:S,@x:S,@xs:S) CHILDREN#1(nil,@b:S,@l2:S) -> CHILDREN#2(@l2:S,@b:S) COPYOVER(@copyover@1:S,@copyover@2:S) -> COPYOVER#1(tuple#2(@copyover@1:S,@copyover@2:S)) COPYOVER#1(tuple#2(@inq:S,@outq:S)) -> COPYOVER#2(@inq:S,@outq:S) COPYOVER#2(::(@x:S,@xs:S),@outq:S) -> COPYOVER(@xs:S,::(@x:S,@outq:S)) DEQUEUE(@dequeue@1:S,@dequeue@2:S) -> DEQUEUE#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) DEQUEUE#1(tuple#2(@inq:S,@outq:S)) -> DEQUEUE#2(@outq:S,@inq:S) DEQUEUE#2(nil,@inq:S) -> DEQUEUE#3(@inq:S) DEQUEUE#3(::(@x:S,@xs:S)) -> COPYOVER(::(@x:S,@xs:S),nil) DEQUEUE#3(::(@x:S,@xs:S)) -> DEQUEUE#4(copyover(::(@x:S,@xs:S),nil)) DEQUEUE#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> DEQUEUE(@dequeue@3:S,@dequeue@4:S) ENQUEUE(@x:S,@queue:S) -> ENQUEUE#1(@queue:S,@x:S) ENQUEUES(@l:S,@queue:S) -> ENQUEUES#1(@l:S,@queue:S) ENQUEUES#1(::(@x:S,@xs:S),@queue:S) -> ENQUEUE(@x:S,@queue:S) ENQUEUES#1(::(@x:S,@xs:S),@queue:S) -> ENQUEUES(@xs:S,enqueue(@x:S,@queue:S)) STARTBREADTH(@xs:S) -> STARTBREADTH#1(@xs:S) STARTBREADTH#1(::(@x:S,@xs:S)) -> EMPTY(#unit) STARTBREADTH#1(::(@x:S,@xs:S)) -> ENQUEUE(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit)) STARTBREADTH#1(::(@x:S,@xs:S)) -> STARTBREADTH#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) STARTBREADTH#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> BREADTH(@breadth@1:S,@breadth@2:S) -> Rules: breadth(@breadth@1:S,@breadth@2:S) -> breadth#1(dequeue(@breadth@1:S,@breadth@2:S)) breadth#1(tuple#2(@queue':S,@elem:S)) -> breadth#2(@elem:S,@queue':S) breadth#2(::(@z:S,@_@9:S),@queue':S) -> breadth#3(breadth#4(@z:S),@queue':S) breadth#2(nil,@queue':S) -> nil breadth#3(tuple#2(@x:S,@ys:S),@queue':S) -> ::(@x:S,breadth#5(enqueues(@ys:S,@queue':S))) breadth#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> children(@children@3:S,@children@4:S,@children@5:S,@children@6:S) breadth#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> breadth(@breadth@7:S,@breadth@8:S) children(@a:S,@b:S,@l1:S,@l2:S) -> tuple#2(tuple#2(@a:S,@b:S),children#1(@l1:S,@b:S,@l2:S)) children#1(::(@x:S,@xs:S),@b:S,@l2:S) -> children#3(@l2:S,@b:S,@x:S,@xs:S) children#1(nil,@b:S,@l2:S) -> children#2(@l2:S,@b:S) children#2(::(@y:S,@ys:S),@b:S) -> ::(tuple#4(@y:S,@b:S,nil,@ys:S),nil) children#2(nil,@b:S) -> nil children#3(::(@y:S,@ys:S),@b:S,@x:S,@xs:S) -> ::(tuple#4(@x:S,@b:S,nil,@xs:S),::(tuple#4(@x:S,@y:S,@xs:S,@ys:S),nil)) children#3(nil,@b:S,@x:S,@xs:S) -> nil copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) dequeue(@dequeue@1:S,@dequeue@2:S) -> dequeue#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) dequeue#1(tuple#2(@inq:S,@outq:S)) -> dequeue#2(@outq:S,@inq:S) dequeue#2(::(@y:S,@ys:S),@inq:S) -> tuple#2(tuple#2(@inq:S,@ys:S),::(@y:S,nil)) dequeue#2(nil,@inq:S) -> dequeue#3(@inq:S) dequeue#3(::(@x:S,@xs:S)) -> dequeue#4(copyover(::(@x:S,@xs:S),nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil,nil),nil) dequeue#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> dequeue(@dequeue@3:S,@dequeue@4:S) empty(@x:S) -> tuple#2(nil,nil) enqueue(@x:S,@queue:S) -> enqueue#1(@queue:S,@x:S) enqueue#1(tuple#2(@inq:S,@outq:S),@x:S) -> tuple#2(::(@x:S,@inq:S),@outq:S) enqueues(@l:S,@queue:S) -> enqueues#1(@l:S,@queue:S) enqueues#1(::(@x:S,@xs:S),@queue:S) -> enqueues(@xs:S,enqueue(@x:S,@queue:S)) enqueues#1(nil,@queue:S) -> @queue:S startBreadth(@xs:S) -> startBreadth#1(@xs:S) startBreadth#1(::(@x:S,@xs:S)) -> startBreadth#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> breadth(@breadth@1:S,@breadth@2:S) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: ENQUEUES(@l:S,@queue:S) -> ENQUEUES#1(@l:S,@queue:S) ENQUEUES#1(::(@x:S,@xs:S),@queue:S) -> ENQUEUES(@xs:S,enqueue(@x:S,@queue:S)) ->->-> Rules: breadth(@breadth@1:S,@breadth@2:S) -> breadth#1(dequeue(@breadth@1:S,@breadth@2:S)) breadth#1(tuple#2(@queue':S,@elem:S)) -> breadth#2(@elem:S,@queue':S) breadth#2(::(@z:S,@_@9:S),@queue':S) -> breadth#3(breadth#4(@z:S),@queue':S) breadth#2(nil,@queue':S) -> nil breadth#3(tuple#2(@x:S,@ys:S),@queue':S) -> ::(@x:S,breadth#5(enqueues(@ys:S,@queue':S))) breadth#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> children(@children@3:S,@children@4:S,@children@5:S,@children@6:S) breadth#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> breadth(@breadth@7:S,@breadth@8:S) children(@a:S,@b:S,@l1:S,@l2:S) -> tuple#2(tuple#2(@a:S,@b:S),children#1(@l1:S,@b:S,@l2:S)) children#1(::(@x:S,@xs:S),@b:S,@l2:S) -> children#3(@l2:S,@b:S,@x:S,@xs:S) children#1(nil,@b:S,@l2:S) -> children#2(@l2:S,@b:S) children#2(::(@y:S,@ys:S),@b:S) -> ::(tuple#4(@y:S,@b:S,nil,@ys:S),nil) children#2(nil,@b:S) -> nil children#3(::(@y:S,@ys:S),@b:S,@x:S,@xs:S) -> ::(tuple#4(@x:S,@b:S,nil,@xs:S),::(tuple#4(@x:S,@y:S,@xs:S,@ys:S),nil)) children#3(nil,@b:S,@x:S,@xs:S) -> nil copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) dequeue(@dequeue@1:S,@dequeue@2:S) -> dequeue#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) dequeue#1(tuple#2(@inq:S,@outq:S)) -> dequeue#2(@outq:S,@inq:S) dequeue#2(::(@y:S,@ys:S),@inq:S) -> tuple#2(tuple#2(@inq:S,@ys:S),::(@y:S,nil)) dequeue#2(nil,@inq:S) -> dequeue#3(@inq:S) dequeue#3(::(@x:S,@xs:S)) -> dequeue#4(copyover(::(@x:S,@xs:S),nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil,nil),nil) dequeue#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> dequeue(@dequeue@3:S,@dequeue@4:S) empty(@x:S) -> tuple#2(nil,nil) enqueue(@x:S,@queue:S) -> enqueue#1(@queue:S,@x:S) enqueue#1(tuple#2(@inq:S,@outq:S),@x:S) -> tuple#2(::(@x:S,@inq:S),@outq:S) enqueues(@l:S,@queue:S) -> enqueues#1(@l:S,@queue:S) enqueues#1(::(@x:S,@xs:S),@queue:S) -> enqueues(@xs:S,enqueue(@x:S,@queue:S)) enqueues#1(nil,@queue:S) -> @queue:S startBreadth(@xs:S) -> startBreadth#1(@xs:S) startBreadth#1(::(@x:S,@xs:S)) -> startBreadth#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> breadth(@breadth@1:S,@breadth@2:S) ->->Cycle: ->->-> Pairs: COPYOVER(@copyover@1:S,@copyover@2:S) -> COPYOVER#1(tuple#2(@copyover@1:S,@copyover@2:S)) COPYOVER#1(tuple#2(@inq:S,@outq:S)) -> COPYOVER#2(@inq:S,@outq:S) COPYOVER#2(::(@x:S,@xs:S),@outq:S) -> COPYOVER(@xs:S,::(@x:S,@outq:S)) ->->-> Rules: breadth(@breadth@1:S,@breadth@2:S) -> breadth#1(dequeue(@breadth@1:S,@breadth@2:S)) breadth#1(tuple#2(@queue':S,@elem:S)) -> breadth#2(@elem:S,@queue':S) breadth#2(::(@z:S,@_@9:S),@queue':S) -> breadth#3(breadth#4(@z:S),@queue':S) breadth#2(nil,@queue':S) -> nil breadth#3(tuple#2(@x:S,@ys:S),@queue':S) -> ::(@x:S,breadth#5(enqueues(@ys:S,@queue':S))) breadth#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> children(@children@3:S,@children@4:S,@children@5:S,@children@6:S) breadth#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> breadth(@breadth@7:S,@breadth@8:S) children(@a:S,@b:S,@l1:S,@l2:S) -> tuple#2(tuple#2(@a:S,@b:S),children#1(@l1:S,@b:S,@l2:S)) children#1(::(@x:S,@xs:S),@b:S,@l2:S) -> children#3(@l2:S,@b:S,@x:S,@xs:S) children#1(nil,@b:S,@l2:S) -> children#2(@l2:S,@b:S) children#2(::(@y:S,@ys:S),@b:S) -> ::(tuple#4(@y:S,@b:S,nil,@ys:S),nil) children#2(nil,@b:S) -> nil children#3(::(@y:S,@ys:S),@b:S,@x:S,@xs:S) -> ::(tuple#4(@x:S,@b:S,nil,@xs:S),::(tuple#4(@x:S,@y:S,@xs:S,@ys:S),nil)) children#3(nil,@b:S,@x:S,@xs:S) -> nil copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) dequeue(@dequeue@1:S,@dequeue@2:S) -> dequeue#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) dequeue#1(tuple#2(@inq:S,@outq:S)) -> dequeue#2(@outq:S,@inq:S) dequeue#2(::(@y:S,@ys:S),@inq:S) -> tuple#2(tuple#2(@inq:S,@ys:S),::(@y:S,nil)) dequeue#2(nil,@inq:S) -> dequeue#3(@inq:S) dequeue#3(::(@x:S,@xs:S)) -> dequeue#4(copyover(::(@x:S,@xs:S),nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil,nil),nil) dequeue#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> dequeue(@dequeue@3:S,@dequeue@4:S) empty(@x:S) -> tuple#2(nil,nil) enqueue(@x:S,@queue:S) -> enqueue#1(@queue:S,@x:S) enqueue#1(tuple#2(@inq:S,@outq:S),@x:S) -> tuple#2(::(@x:S,@inq:S),@outq:S) enqueues(@l:S,@queue:S) -> enqueues#1(@l:S,@queue:S) enqueues#1(::(@x:S,@xs:S),@queue:S) -> enqueues(@xs:S,enqueue(@x:S,@queue:S)) enqueues#1(nil,@queue:S) -> @queue:S startBreadth(@xs:S) -> startBreadth#1(@xs:S) startBreadth#1(::(@x:S,@xs:S)) -> startBreadth#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> breadth(@breadth@1:S,@breadth@2:S) ->->Cycle: ->->-> Pairs: DEQUEUE(@dequeue@1:S,@dequeue@2:S) -> DEQUEUE#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) DEQUEUE#1(tuple#2(@inq:S,@outq:S)) -> DEQUEUE#2(@outq:S,@inq:S) DEQUEUE#2(nil,@inq:S) -> DEQUEUE#3(@inq:S) DEQUEUE#3(::(@x:S,@xs:S)) -> DEQUEUE#4(copyover(::(@x:S,@xs:S),nil)) DEQUEUE#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> DEQUEUE(@dequeue@3:S,@dequeue@4:S) ->->-> Rules: breadth(@breadth@1:S,@breadth@2:S) -> breadth#1(dequeue(@breadth@1:S,@breadth@2:S)) breadth#1(tuple#2(@queue':S,@elem:S)) -> breadth#2(@elem:S,@queue':S) breadth#2(::(@z:S,@_@9:S),@queue':S) -> breadth#3(breadth#4(@z:S),@queue':S) breadth#2(nil,@queue':S) -> nil breadth#3(tuple#2(@x:S,@ys:S),@queue':S) -> ::(@x:S,breadth#5(enqueues(@ys:S,@queue':S))) breadth#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> children(@children@3:S,@children@4:S,@children@5:S,@children@6:S) breadth#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> breadth(@breadth@7:S,@breadth@8:S) children(@a:S,@b:S,@l1:S,@l2:S) -> tuple#2(tuple#2(@a:S,@b:S),children#1(@l1:S,@b:S,@l2:S)) children#1(::(@x:S,@xs:S),@b:S,@l2:S) -> children#3(@l2:S,@b:S,@x:S,@xs:S) children#1(nil,@b:S,@l2:S) -> children#2(@l2:S,@b:S) children#2(::(@y:S,@ys:S),@b:S) -> ::(tuple#4(@y:S,@b:S,nil,@ys:S),nil) children#2(nil,@b:S) -> nil children#3(::(@y:S,@ys:S),@b:S,@x:S,@xs:S) -> ::(tuple#4(@x:S,@b:S,nil,@xs:S),::(tuple#4(@x:S,@y:S,@xs:S,@ys:S),nil)) children#3(nil,@b:S,@x:S,@xs:S) -> nil copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) dequeue(@dequeue@1:S,@dequeue@2:S) -> dequeue#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) dequeue#1(tuple#2(@inq:S,@outq:S)) -> dequeue#2(@outq:S,@inq:S) dequeue#2(::(@y:S,@ys:S),@inq:S) -> tuple#2(tuple#2(@inq:S,@ys:S),::(@y:S,nil)) dequeue#2(nil,@inq:S) -> dequeue#3(@inq:S) dequeue#3(::(@x:S,@xs:S)) -> dequeue#4(copyover(::(@x:S,@xs:S),nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil,nil),nil) dequeue#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> dequeue(@dequeue@3:S,@dequeue@4:S) empty(@x:S) -> tuple#2(nil,nil) enqueue(@x:S,@queue:S) -> enqueue#1(@queue:S,@x:S) enqueue#1(tuple#2(@inq:S,@outq:S),@x:S) -> tuple#2(::(@x:S,@inq:S),@outq:S) enqueues(@l:S,@queue:S) -> enqueues#1(@l:S,@queue:S) enqueues#1(::(@x:S,@xs:S),@queue:S) -> enqueues(@xs:S,enqueue(@x:S,@queue:S)) enqueues#1(nil,@queue:S) -> @queue:S startBreadth(@xs:S) -> startBreadth#1(@xs:S) startBreadth#1(::(@x:S,@xs:S)) -> startBreadth#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> breadth(@breadth@1:S,@breadth@2:S) ->->Cycle: ->->-> Pairs: BREADTH(@breadth@1:S,@breadth@2:S) -> BREADTH#1(dequeue(@breadth@1:S,@breadth@2:S)) BREADTH#1(tuple#2(@queue':S,@elem:S)) -> BREADTH#2(@elem:S,@queue':S) BREADTH#2(::(@z:S,@_@9:S),@queue':S) -> BREADTH#3(breadth#4(@z:S),@queue':S) BREADTH#3(tuple#2(@x:S,@ys:S),@queue':S) -> BREADTH#5(enqueues(@ys:S,@queue':S)) BREADTH#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> BREADTH(@breadth@7:S,@breadth@8:S) ->->-> Rules: breadth(@breadth@1:S,@breadth@2:S) -> breadth#1(dequeue(@breadth@1:S,@breadth@2:S)) breadth#1(tuple#2(@queue':S,@elem:S)) -> breadth#2(@elem:S,@queue':S) breadth#2(::(@z:S,@_@9:S),@queue':S) -> breadth#3(breadth#4(@z:S),@queue':S) breadth#2(nil,@queue':S) -> nil breadth#3(tuple#2(@x:S,@ys:S),@queue':S) -> ::(@x:S,breadth#5(enqueues(@ys:S,@queue':S))) breadth#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> children(@children@3:S,@children@4:S,@children@5:S,@children@6:S) breadth#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> breadth(@breadth@7:S,@breadth@8:S) children(@a:S,@b:S,@l1:S,@l2:S) -> tuple#2(tuple#2(@a:S,@b:S),children#1(@l1:S,@b:S,@l2:S)) children#1(::(@x:S,@xs:S),@b:S,@l2:S) -> children#3(@l2:S,@b:S,@x:S,@xs:S) children#1(nil,@b:S,@l2:S) -> children#2(@l2:S,@b:S) children#2(::(@y:S,@ys:S),@b:S) -> ::(tuple#4(@y:S,@b:S,nil,@ys:S),nil) children#2(nil,@b:S) -> nil children#3(::(@y:S,@ys:S),@b:S,@x:S,@xs:S) -> ::(tuple#4(@x:S,@b:S,nil,@xs:S),::(tuple#4(@x:S,@y:S,@xs:S,@ys:S),nil)) children#3(nil,@b:S,@x:S,@xs:S) -> nil copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) dequeue(@dequeue@1:S,@dequeue@2:S) -> dequeue#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) dequeue#1(tuple#2(@inq:S,@outq:S)) -> dequeue#2(@outq:S,@inq:S) dequeue#2(::(@y:S,@ys:S),@inq:S) -> tuple#2(tuple#2(@inq:S,@ys:S),::(@y:S,nil)) dequeue#2(nil,@inq:S) -> dequeue#3(@inq:S) dequeue#3(::(@x:S,@xs:S)) -> dequeue#4(copyover(::(@x:S,@xs:S),nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil,nil),nil) dequeue#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> dequeue(@dequeue@3:S,@dequeue@4:S) empty(@x:S) -> tuple#2(nil,nil) enqueue(@x:S,@queue:S) -> enqueue#1(@queue:S,@x:S) enqueue#1(tuple#2(@inq:S,@outq:S),@x:S) -> tuple#2(::(@x:S,@inq:S),@outq:S) enqueues(@l:S,@queue:S) -> enqueues#1(@l:S,@queue:S) enqueues#1(::(@x:S,@xs:S),@queue:S) -> enqueues(@xs:S,enqueue(@x:S,@queue:S)) enqueues#1(nil,@queue:S) -> @queue:S startBreadth(@xs:S) -> startBreadth#1(@xs:S) startBreadth#1(::(@x:S,@xs:S)) -> startBreadth#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> breadth(@breadth@1:S,@breadth@2:S) The problem is decomposed in 4 subproblems. Problem 1.1: Subterm Processor: -> Pairs: ENQUEUES(@l:S,@queue:S) -> ENQUEUES#1(@l:S,@queue:S) ENQUEUES#1(::(@x:S,@xs:S),@queue:S) -> ENQUEUES(@xs:S,enqueue(@x:S,@queue:S)) -> Rules: breadth(@breadth@1:S,@breadth@2:S) -> breadth#1(dequeue(@breadth@1:S,@breadth@2:S)) breadth#1(tuple#2(@queue':S,@elem:S)) -> breadth#2(@elem:S,@queue':S) breadth#2(::(@z:S,@_@9:S),@queue':S) -> breadth#3(breadth#4(@z:S),@queue':S) breadth#2(nil,@queue':S) -> nil breadth#3(tuple#2(@x:S,@ys:S),@queue':S) -> ::(@x:S,breadth#5(enqueues(@ys:S,@queue':S))) breadth#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> children(@children@3:S,@children@4:S,@children@5:S,@children@6:S) breadth#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> breadth(@breadth@7:S,@breadth@8:S) children(@a:S,@b:S,@l1:S,@l2:S) -> tuple#2(tuple#2(@a:S,@b:S),children#1(@l1:S,@b:S,@l2:S)) children#1(::(@x:S,@xs:S),@b:S,@l2:S) -> children#3(@l2:S,@b:S,@x:S,@xs:S) children#1(nil,@b:S,@l2:S) -> children#2(@l2:S,@b:S) children#2(::(@y:S,@ys:S),@b:S) -> ::(tuple#4(@y:S,@b:S,nil,@ys:S),nil) children#2(nil,@b:S) -> nil children#3(::(@y:S,@ys:S),@b:S,@x:S,@xs:S) -> ::(tuple#4(@x:S,@b:S,nil,@xs:S),::(tuple#4(@x:S,@y:S,@xs:S,@ys:S),nil)) children#3(nil,@b:S,@x:S,@xs:S) -> nil copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) dequeue(@dequeue@1:S,@dequeue@2:S) -> dequeue#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) dequeue#1(tuple#2(@inq:S,@outq:S)) -> dequeue#2(@outq:S,@inq:S) dequeue#2(::(@y:S,@ys:S),@inq:S) -> tuple#2(tuple#2(@inq:S,@ys:S),::(@y:S,nil)) dequeue#2(nil,@inq:S) -> dequeue#3(@inq:S) dequeue#3(::(@x:S,@xs:S)) -> dequeue#4(copyover(::(@x:S,@xs:S),nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil,nil),nil) dequeue#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> dequeue(@dequeue@3:S,@dequeue@4:S) empty(@x:S) -> tuple#2(nil,nil) enqueue(@x:S,@queue:S) -> enqueue#1(@queue:S,@x:S) enqueue#1(tuple#2(@inq:S,@outq:S),@x:S) -> tuple#2(::(@x:S,@inq:S),@outq:S) enqueues(@l:S,@queue:S) -> enqueues#1(@l:S,@queue:S) enqueues#1(::(@x:S,@xs:S),@queue:S) -> enqueues(@xs:S,enqueue(@x:S,@queue:S)) enqueues#1(nil,@queue:S) -> @queue:S startBreadth(@xs:S) -> startBreadth#1(@xs:S) startBreadth#1(::(@x:S,@xs:S)) -> startBreadth#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> breadth(@breadth@1:S,@breadth@2:S) ->Projection: pi(ENQUEUES) = 1 pi(ENQUEUES#1) = 1 Problem 1.1: SCC Processor: -> Pairs: ENQUEUES(@l:S,@queue:S) -> ENQUEUES#1(@l:S,@queue:S) -> Rules: breadth(@breadth@1:S,@breadth@2:S) -> breadth#1(dequeue(@breadth@1:S,@breadth@2:S)) breadth#1(tuple#2(@queue':S,@elem:S)) -> breadth#2(@elem:S,@queue':S) breadth#2(::(@z:S,@_@9:S),@queue':S) -> breadth#3(breadth#4(@z:S),@queue':S) breadth#2(nil,@queue':S) -> nil breadth#3(tuple#2(@x:S,@ys:S),@queue':S) -> ::(@x:S,breadth#5(enqueues(@ys:S,@queue':S))) breadth#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> children(@children@3:S,@children@4:S,@children@5:S,@children@6:S) breadth#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> breadth(@breadth@7:S,@breadth@8:S) children(@a:S,@b:S,@l1:S,@l2:S) -> tuple#2(tuple#2(@a:S,@b:S),children#1(@l1:S,@b:S,@l2:S)) children#1(::(@x:S,@xs:S),@b:S,@l2:S) -> children#3(@l2:S,@b:S,@x:S,@xs:S) children#1(nil,@b:S,@l2:S) -> children#2(@l2:S,@b:S) children#2(::(@y:S,@ys:S),@b:S) -> ::(tuple#4(@y:S,@b:S,nil,@ys:S),nil) children#2(nil,@b:S) -> nil children#3(::(@y:S,@ys:S),@b:S,@x:S,@xs:S) -> ::(tuple#4(@x:S,@b:S,nil,@xs:S),::(tuple#4(@x:S,@y:S,@xs:S,@ys:S),nil)) children#3(nil,@b:S,@x:S,@xs:S) -> nil copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) dequeue(@dequeue@1:S,@dequeue@2:S) -> dequeue#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) dequeue#1(tuple#2(@inq:S,@outq:S)) -> dequeue#2(@outq:S,@inq:S) dequeue#2(::(@y:S,@ys:S),@inq:S) -> tuple#2(tuple#2(@inq:S,@ys:S),::(@y:S,nil)) dequeue#2(nil,@inq:S) -> dequeue#3(@inq:S) dequeue#3(::(@x:S,@xs:S)) -> dequeue#4(copyover(::(@x:S,@xs:S),nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil,nil),nil) dequeue#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> dequeue(@dequeue@3:S,@dequeue@4:S) empty(@x:S) -> tuple#2(nil,nil) enqueue(@x:S,@queue:S) -> enqueue#1(@queue:S,@x:S) enqueue#1(tuple#2(@inq:S,@outq:S),@x:S) -> tuple#2(::(@x:S,@inq:S),@outq:S) enqueues(@l:S,@queue:S) -> enqueues#1(@l:S,@queue:S) enqueues#1(::(@x:S,@xs:S),@queue:S) -> enqueues(@xs:S,enqueue(@x:S,@queue:S)) enqueues#1(nil,@queue:S) -> @queue:S startBreadth(@xs:S) -> startBreadth#1(@xs:S) startBreadth#1(::(@x:S,@xs:S)) -> startBreadth#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> breadth(@breadth@1:S,@breadth@2:S) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.2: Reduction Pairs Processor: -> Pairs: COPYOVER(@copyover@1:S,@copyover@2:S) -> COPYOVER#1(tuple#2(@copyover@1:S,@copyover@2:S)) COPYOVER#1(tuple#2(@inq:S,@outq:S)) -> COPYOVER#2(@inq:S,@outq:S) COPYOVER#2(::(@x:S,@xs:S),@outq:S) -> COPYOVER(@xs:S,::(@x:S,@outq:S)) -> Rules: breadth(@breadth@1:S,@breadth@2:S) -> breadth#1(dequeue(@breadth@1:S,@breadth@2:S)) breadth#1(tuple#2(@queue':S,@elem:S)) -> breadth#2(@elem:S,@queue':S) breadth#2(::(@z:S,@_@9:S),@queue':S) -> breadth#3(breadth#4(@z:S),@queue':S) breadth#2(nil,@queue':S) -> nil breadth#3(tuple#2(@x:S,@ys:S),@queue':S) -> ::(@x:S,breadth#5(enqueues(@ys:S,@queue':S))) breadth#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> children(@children@3:S,@children@4:S,@children@5:S,@children@6:S) breadth#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> breadth(@breadth@7:S,@breadth@8:S) children(@a:S,@b:S,@l1:S,@l2:S) -> tuple#2(tuple#2(@a:S,@b:S),children#1(@l1:S,@b:S,@l2:S)) children#1(::(@x:S,@xs:S),@b:S,@l2:S) -> children#3(@l2:S,@b:S,@x:S,@xs:S) children#1(nil,@b:S,@l2:S) -> children#2(@l2:S,@b:S) children#2(::(@y:S,@ys:S),@b:S) -> ::(tuple#4(@y:S,@b:S,nil,@ys:S),nil) children#2(nil,@b:S) -> nil children#3(::(@y:S,@ys:S),@b:S,@x:S,@xs:S) -> ::(tuple#4(@x:S,@b:S,nil,@xs:S),::(tuple#4(@x:S,@y:S,@xs:S,@ys:S),nil)) children#3(nil,@b:S,@x:S,@xs:S) -> nil copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) dequeue(@dequeue@1:S,@dequeue@2:S) -> dequeue#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) dequeue#1(tuple#2(@inq:S,@outq:S)) -> dequeue#2(@outq:S,@inq:S) dequeue#2(::(@y:S,@ys:S),@inq:S) -> tuple#2(tuple#2(@inq:S,@ys:S),::(@y:S,nil)) dequeue#2(nil,@inq:S) -> dequeue#3(@inq:S) dequeue#3(::(@x:S,@xs:S)) -> dequeue#4(copyover(::(@x:S,@xs:S),nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil,nil),nil) dequeue#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> dequeue(@dequeue@3:S,@dequeue@4:S) empty(@x:S) -> tuple#2(nil,nil) enqueue(@x:S,@queue:S) -> enqueue#1(@queue:S,@x:S) enqueue#1(tuple#2(@inq:S,@outq:S),@x:S) -> tuple#2(::(@x:S,@inq:S),@outq:S) enqueues(@l:S,@queue:S) -> enqueues#1(@l:S,@queue:S) enqueues#1(::(@x:S,@xs:S),@queue:S) -> enqueues(@xs:S,enqueue(@x:S,@queue:S)) enqueues#1(nil,@queue:S) -> @queue:S startBreadth(@xs:S) -> startBreadth#1(@xs:S) startBreadth#1(::(@x:S,@xs:S)) -> startBreadth#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> breadth(@breadth@1:S,@breadth@2:S) -> Usable rules: Empty ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [breadth](X1,X2) = 0 [breadth#1](X) = 0 [breadth#2](X1,X2) = 0 [breadth#3](X1,X2) = 0 [breadth#4](X) = 0 [breadth#5](X) = 0 [children](X1,X2,X3,X4) = 0 [children#1](X1,X2,X3) = 0 [children#2](X1,X2) = 0 [children#3](X1,X2,X3,X4) = 0 [copyover](X1,X2) = 0 [copyover#1](X) = 0 [copyover#2](X1,X2) = 0 [dequeue](X1,X2) = 0 [dequeue#1](X) = 0 [dequeue#2](X1,X2) = 0 [dequeue#3](X) = 0 [dequeue#4](X) = 0 [empty](X) = 0 [enqueue](X1,X2) = 0 [enqueue#1](X1,X2) = 0 [enqueues](X1,X2) = 0 [enqueues#1](X1,X2) = 0 [startBreadth](X) = 0 [startBreadth#1](X) = 0 [startBreadth#2](X) = 0 [#unit] = 0 [::](X1,X2) = 2.X1 + 2.X2 + 2 [fSNonEmpty] = 0 [nil] = 0 [tuple#2](X1,X2) = 2.X1 [tuple#4](X1,X2,X3,X4) = 0 [BREADTH](X1,X2) = 0 [BREADTH#1](X) = 0 [BREADTH#2](X1,X2) = 0 [BREADTH#3](X1,X2) = 0 [BREADTH#4](X) = 0 [BREADTH#5](X) = 0 [CHILDREN](X1,X2,X3,X4) = 0 [CHILDREN#1](X1,X2,X3) = 0 [CHILDREN#2](X1,X2) = 0 [CHILDREN#3](X1,X2,X3,X4) = 0 [COPYOVER](X1,X2) = 2.X1 + 1 [COPYOVER#1](X) = X [COPYOVER#2](X1,X2) = 2.X1 [DEQUEUE](X1,X2) = 0 [DEQUEUE#1](X) = 0 [DEQUEUE#2](X1,X2) = 0 [DEQUEUE#3](X) = 0 [DEQUEUE#4](X) = 0 [EMPTY](X) = 0 [ENQUEUE](X1,X2) = 0 [ENQUEUE#1](X1,X2) = 0 [ENQUEUES](X1,X2) = 0 [ENQUEUES#1](X1,X2) = 0 [STARTBREADTH](X) = 0 [STARTBREADTH#1](X) = 0 [STARTBREADTH#2](X) = 0 Problem 1.2: SCC Processor: -> Pairs: COPYOVER#1(tuple#2(@inq:S,@outq:S)) -> COPYOVER#2(@inq:S,@outq:S) COPYOVER#2(::(@x:S,@xs:S),@outq:S) -> COPYOVER(@xs:S,::(@x:S,@outq:S)) -> Rules: breadth(@breadth@1:S,@breadth@2:S) -> breadth#1(dequeue(@breadth@1:S,@breadth@2:S)) breadth#1(tuple#2(@queue':S,@elem:S)) -> breadth#2(@elem:S,@queue':S) breadth#2(::(@z:S,@_@9:S),@queue':S) -> breadth#3(breadth#4(@z:S),@queue':S) breadth#2(nil,@queue':S) -> nil breadth#3(tuple#2(@x:S,@ys:S),@queue':S) -> ::(@x:S,breadth#5(enqueues(@ys:S,@queue':S))) breadth#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> children(@children@3:S,@children@4:S,@children@5:S,@children@6:S) breadth#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> breadth(@breadth@7:S,@breadth@8:S) children(@a:S,@b:S,@l1:S,@l2:S) -> tuple#2(tuple#2(@a:S,@b:S),children#1(@l1:S,@b:S,@l2:S)) children#1(::(@x:S,@xs:S),@b:S,@l2:S) -> children#3(@l2:S,@b:S,@x:S,@xs:S) children#1(nil,@b:S,@l2:S) -> children#2(@l2:S,@b:S) children#2(::(@y:S,@ys:S),@b:S) -> ::(tuple#4(@y:S,@b:S,nil,@ys:S),nil) children#2(nil,@b:S) -> nil children#3(::(@y:S,@ys:S),@b:S,@x:S,@xs:S) -> ::(tuple#4(@x:S,@b:S,nil,@xs:S),::(tuple#4(@x:S,@y:S,@xs:S,@ys:S),nil)) children#3(nil,@b:S,@x:S,@xs:S) -> nil copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) dequeue(@dequeue@1:S,@dequeue@2:S) -> dequeue#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) dequeue#1(tuple#2(@inq:S,@outq:S)) -> dequeue#2(@outq:S,@inq:S) dequeue#2(::(@y:S,@ys:S),@inq:S) -> tuple#2(tuple#2(@inq:S,@ys:S),::(@y:S,nil)) dequeue#2(nil,@inq:S) -> dequeue#3(@inq:S) dequeue#3(::(@x:S,@xs:S)) -> dequeue#4(copyover(::(@x:S,@xs:S),nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil,nil),nil) dequeue#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> dequeue(@dequeue@3:S,@dequeue@4:S) empty(@x:S) -> tuple#2(nil,nil) enqueue(@x:S,@queue:S) -> enqueue#1(@queue:S,@x:S) enqueue#1(tuple#2(@inq:S,@outq:S),@x:S) -> tuple#2(::(@x:S,@inq:S),@outq:S) enqueues(@l:S,@queue:S) -> enqueues#1(@l:S,@queue:S) enqueues#1(::(@x:S,@xs:S),@queue:S) -> enqueues(@xs:S,enqueue(@x:S,@queue:S)) enqueues#1(nil,@queue:S) -> @queue:S startBreadth(@xs:S) -> startBreadth#1(@xs:S) startBreadth#1(::(@x:S,@xs:S)) -> startBreadth#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> breadth(@breadth@1:S,@breadth@2:S) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.3: Reduction Pairs Processor: -> Pairs: DEQUEUE(@dequeue@1:S,@dequeue@2:S) -> DEQUEUE#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) DEQUEUE#1(tuple#2(@inq:S,@outq:S)) -> DEQUEUE#2(@outq:S,@inq:S) DEQUEUE#2(nil,@inq:S) -> DEQUEUE#3(@inq:S) DEQUEUE#3(::(@x:S,@xs:S)) -> DEQUEUE#4(copyover(::(@x:S,@xs:S),nil)) DEQUEUE#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> DEQUEUE(@dequeue@3:S,@dequeue@4:S) -> Rules: breadth(@breadth@1:S,@breadth@2:S) -> breadth#1(dequeue(@breadth@1:S,@breadth@2:S)) breadth#1(tuple#2(@queue':S,@elem:S)) -> breadth#2(@elem:S,@queue':S) breadth#2(::(@z:S,@_@9:S),@queue':S) -> breadth#3(breadth#4(@z:S),@queue':S) breadth#2(nil,@queue':S) -> nil breadth#3(tuple#2(@x:S,@ys:S),@queue':S) -> ::(@x:S,breadth#5(enqueues(@ys:S,@queue':S))) breadth#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> children(@children@3:S,@children@4:S,@children@5:S,@children@6:S) breadth#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> breadth(@breadth@7:S,@breadth@8:S) children(@a:S,@b:S,@l1:S,@l2:S) -> tuple#2(tuple#2(@a:S,@b:S),children#1(@l1:S,@b:S,@l2:S)) children#1(::(@x:S,@xs:S),@b:S,@l2:S) -> children#3(@l2:S,@b:S,@x:S,@xs:S) children#1(nil,@b:S,@l2:S) -> children#2(@l2:S,@b:S) children#2(::(@y:S,@ys:S),@b:S) -> ::(tuple#4(@y:S,@b:S,nil,@ys:S),nil) children#2(nil,@b:S) -> nil children#3(::(@y:S,@ys:S),@b:S,@x:S,@xs:S) -> ::(tuple#4(@x:S,@b:S,nil,@xs:S),::(tuple#4(@x:S,@y:S,@xs:S,@ys:S),nil)) children#3(nil,@b:S,@x:S,@xs:S) -> nil copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) dequeue(@dequeue@1:S,@dequeue@2:S) -> dequeue#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) dequeue#1(tuple#2(@inq:S,@outq:S)) -> dequeue#2(@outq:S,@inq:S) dequeue#2(::(@y:S,@ys:S),@inq:S) -> tuple#2(tuple#2(@inq:S,@ys:S),::(@y:S,nil)) dequeue#2(nil,@inq:S) -> dequeue#3(@inq:S) dequeue#3(::(@x:S,@xs:S)) -> dequeue#4(copyover(::(@x:S,@xs:S),nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil,nil),nil) dequeue#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> dequeue(@dequeue@3:S,@dequeue@4:S) empty(@x:S) -> tuple#2(nil,nil) enqueue(@x:S,@queue:S) -> enqueue#1(@queue:S,@x:S) enqueue#1(tuple#2(@inq:S,@outq:S),@x:S) -> tuple#2(::(@x:S,@inq:S),@outq:S) enqueues(@l:S,@queue:S) -> enqueues#1(@l:S,@queue:S) enqueues#1(::(@x:S,@xs:S),@queue:S) -> enqueues(@xs:S,enqueue(@x:S,@queue:S)) enqueues#1(nil,@queue:S) -> @queue:S startBreadth(@xs:S) -> startBreadth#1(@xs:S) startBreadth#1(::(@x:S,@xs:S)) -> startBreadth#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> breadth(@breadth@1:S,@breadth@2:S) -> Usable rules: copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [breadth](X1,X2) = 0 [breadth#1](X) = 0 [breadth#2](X1,X2) = 0 [breadth#3](X1,X2) = 0 [breadth#4](X) = 0 [breadth#5](X) = 0 [children](X1,X2,X3,X4) = 0 [children#1](X1,X2,X3) = 0 [children#2](X1,X2) = 0 [children#3](X1,X2,X3,X4) = 0 [copyover](X1,X2) = 2 [copyover#1](X) = 2 [copyover#2](X1,X2) = 2 [dequeue](X1,X2) = 0 [dequeue#1](X) = 0 [dequeue#2](X1,X2) = 0 [dequeue#3](X) = 0 [dequeue#4](X) = 0 [empty](X) = 0 [enqueue](X1,X2) = 0 [enqueue#1](X1,X2) = 0 [enqueues](X1,X2) = 0 [enqueues#1](X1,X2) = 0 [startBreadth](X) = 0 [startBreadth#1](X) = 0 [startBreadth#2](X) = 0 [#unit] = 0 [::](X1,X2) = X1 + 2 [fSNonEmpty] = 0 [nil] = 0 [tuple#2](X1,X2) = 2.X1 [tuple#4](X1,X2,X3,X4) = 0 [BREADTH](X1,X2) = 0 [BREADTH#1](X) = 0 [BREADTH#2](X1,X2) = 0 [BREADTH#3](X1,X2) = 0 [BREADTH#4](X) = 0 [BREADTH#5](X) = 0 [CHILDREN](X1,X2,X3,X4) = 0 [CHILDREN#1](X1,X2,X3) = 0 [CHILDREN#2](X1,X2) = 0 [CHILDREN#3](X1,X2,X3,X4) = 0 [COPYOVER](X1,X2) = 0 [COPYOVER#1](X) = 0 [COPYOVER#2](X1,X2) = 0 [DEQUEUE](X1,X2) = 2.X1 + 2 [DEQUEUE#1](X) = X + 1 [DEQUEUE#2](X1,X2) = 2.X2 + 1 [DEQUEUE#3](X) = 2.X [DEQUEUE#4](X) = X + 2 [EMPTY](X) = 0 [ENQUEUE](X1,X2) = 0 [ENQUEUE#1](X1,X2) = 0 [ENQUEUES](X1,X2) = 0 [ENQUEUES#1](X1,X2) = 0 [STARTBREADTH](X) = 0 [STARTBREADTH#1](X) = 0 [STARTBREADTH#2](X) = 0 Problem 1.3: SCC Processor: -> Pairs: DEQUEUE#1(tuple#2(@inq:S,@outq:S)) -> DEQUEUE#2(@outq:S,@inq:S) DEQUEUE#2(nil,@inq:S) -> DEQUEUE#3(@inq:S) DEQUEUE#3(::(@x:S,@xs:S)) -> DEQUEUE#4(copyover(::(@x:S,@xs:S),nil)) DEQUEUE#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> DEQUEUE(@dequeue@3:S,@dequeue@4:S) -> Rules: breadth(@breadth@1:S,@breadth@2:S) -> breadth#1(dequeue(@breadth@1:S,@breadth@2:S)) breadth#1(tuple#2(@queue':S,@elem:S)) -> breadth#2(@elem:S,@queue':S) breadth#2(::(@z:S,@_@9:S),@queue':S) -> breadth#3(breadth#4(@z:S),@queue':S) breadth#2(nil,@queue':S) -> nil breadth#3(tuple#2(@x:S,@ys:S),@queue':S) -> ::(@x:S,breadth#5(enqueues(@ys:S,@queue':S))) breadth#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> children(@children@3:S,@children@4:S,@children@5:S,@children@6:S) breadth#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> breadth(@breadth@7:S,@breadth@8:S) children(@a:S,@b:S,@l1:S,@l2:S) -> tuple#2(tuple#2(@a:S,@b:S),children#1(@l1:S,@b:S,@l2:S)) children#1(::(@x:S,@xs:S),@b:S,@l2:S) -> children#3(@l2:S,@b:S,@x:S,@xs:S) children#1(nil,@b:S,@l2:S) -> children#2(@l2:S,@b:S) children#2(::(@y:S,@ys:S),@b:S) -> ::(tuple#4(@y:S,@b:S,nil,@ys:S),nil) children#2(nil,@b:S) -> nil children#3(::(@y:S,@ys:S),@b:S,@x:S,@xs:S) -> ::(tuple#4(@x:S,@b:S,nil,@xs:S),::(tuple#4(@x:S,@y:S,@xs:S,@ys:S),nil)) children#3(nil,@b:S,@x:S,@xs:S) -> nil copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) dequeue(@dequeue@1:S,@dequeue@2:S) -> dequeue#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) dequeue#1(tuple#2(@inq:S,@outq:S)) -> dequeue#2(@outq:S,@inq:S) dequeue#2(::(@y:S,@ys:S),@inq:S) -> tuple#2(tuple#2(@inq:S,@ys:S),::(@y:S,nil)) dequeue#2(nil,@inq:S) -> dequeue#3(@inq:S) dequeue#3(::(@x:S,@xs:S)) -> dequeue#4(copyover(::(@x:S,@xs:S),nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil,nil),nil) dequeue#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> dequeue(@dequeue@3:S,@dequeue@4:S) empty(@x:S) -> tuple#2(nil,nil) enqueue(@x:S,@queue:S) -> enqueue#1(@queue:S,@x:S) enqueue#1(tuple#2(@inq:S,@outq:S),@x:S) -> tuple#2(::(@x:S,@inq:S),@outq:S) enqueues(@l:S,@queue:S) -> enqueues#1(@l:S,@queue:S) enqueues#1(::(@x:S,@xs:S),@queue:S) -> enqueues(@xs:S,enqueue(@x:S,@queue:S)) enqueues#1(nil,@queue:S) -> @queue:S startBreadth(@xs:S) -> startBreadth#1(@xs:S) startBreadth#1(::(@x:S,@xs:S)) -> startBreadth#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> breadth(@breadth@1:S,@breadth@2:S) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.4: Reduction Pairs Processor: -> Pairs: BREADTH(@breadth@1:S,@breadth@2:S) -> BREADTH#1(dequeue(@breadth@1:S,@breadth@2:S)) BREADTH#1(tuple#2(@queue':S,@elem:S)) -> BREADTH#2(@elem:S,@queue':S) BREADTH#2(::(@z:S,@_@9:S),@queue':S) -> BREADTH#3(breadth#4(@z:S),@queue':S) BREADTH#3(tuple#2(@x:S,@ys:S),@queue':S) -> BREADTH#5(enqueues(@ys:S,@queue':S)) BREADTH#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> BREADTH(@breadth@7:S,@breadth@8:S) -> Rules: breadth(@breadth@1:S,@breadth@2:S) -> breadth#1(dequeue(@breadth@1:S,@breadth@2:S)) breadth#1(tuple#2(@queue':S,@elem:S)) -> breadth#2(@elem:S,@queue':S) breadth#2(::(@z:S,@_@9:S),@queue':S) -> breadth#3(breadth#4(@z:S),@queue':S) breadth#2(nil,@queue':S) -> nil breadth#3(tuple#2(@x:S,@ys:S),@queue':S) -> ::(@x:S,breadth#5(enqueues(@ys:S,@queue':S))) breadth#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> children(@children@3:S,@children@4:S,@children@5:S,@children@6:S) breadth#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> breadth(@breadth@7:S,@breadth@8:S) children(@a:S,@b:S,@l1:S,@l2:S) -> tuple#2(tuple#2(@a:S,@b:S),children#1(@l1:S,@b:S,@l2:S)) children#1(::(@x:S,@xs:S),@b:S,@l2:S) -> children#3(@l2:S,@b:S,@x:S,@xs:S) children#1(nil,@b:S,@l2:S) -> children#2(@l2:S,@b:S) children#2(::(@y:S,@ys:S),@b:S) -> ::(tuple#4(@y:S,@b:S,nil,@ys:S),nil) children#2(nil,@b:S) -> nil children#3(::(@y:S,@ys:S),@b:S,@x:S,@xs:S) -> ::(tuple#4(@x:S,@b:S,nil,@xs:S),::(tuple#4(@x:S,@y:S,@xs:S,@ys:S),nil)) children#3(nil,@b:S,@x:S,@xs:S) -> nil copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) dequeue(@dequeue@1:S,@dequeue@2:S) -> dequeue#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) dequeue#1(tuple#2(@inq:S,@outq:S)) -> dequeue#2(@outq:S,@inq:S) dequeue#2(::(@y:S,@ys:S),@inq:S) -> tuple#2(tuple#2(@inq:S,@ys:S),::(@y:S,nil)) dequeue#2(nil,@inq:S) -> dequeue#3(@inq:S) dequeue#3(::(@x:S,@xs:S)) -> dequeue#4(copyover(::(@x:S,@xs:S),nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil,nil),nil) dequeue#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> dequeue(@dequeue@3:S,@dequeue@4:S) empty(@x:S) -> tuple#2(nil,nil) enqueue(@x:S,@queue:S) -> enqueue#1(@queue:S,@x:S) enqueue#1(tuple#2(@inq:S,@outq:S),@x:S) -> tuple#2(::(@x:S,@inq:S),@outq:S) enqueues(@l:S,@queue:S) -> enqueues#1(@l:S,@queue:S) enqueues#1(::(@x:S,@xs:S),@queue:S) -> enqueues(@xs:S,enqueue(@x:S,@queue:S)) enqueues#1(nil,@queue:S) -> @queue:S startBreadth(@xs:S) -> startBreadth#1(@xs:S) startBreadth#1(::(@x:S,@xs:S)) -> startBreadth#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> breadth(@breadth@1:S,@breadth@2:S) -> Usable rules: breadth#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> children(@children@3:S,@children@4:S,@children@5:S,@children@6:S) children(@a:S,@b:S,@l1:S,@l2:S) -> tuple#2(tuple#2(@a:S,@b:S),children#1(@l1:S,@b:S,@l2:S)) children#1(::(@x:S,@xs:S),@b:S,@l2:S) -> children#3(@l2:S,@b:S,@x:S,@xs:S) children#1(nil,@b:S,@l2:S) -> children#2(@l2:S,@b:S) children#2(::(@y:S,@ys:S),@b:S) -> ::(tuple#4(@y:S,@b:S,nil,@ys:S),nil) children#2(nil,@b:S) -> nil children#3(::(@y:S,@ys:S),@b:S,@x:S,@xs:S) -> ::(tuple#4(@x:S,@b:S,nil,@xs:S),::(tuple#4(@x:S,@y:S,@xs:S,@ys:S),nil)) children#3(nil,@b:S,@x:S,@xs:S) -> nil copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) dequeue(@dequeue@1:S,@dequeue@2:S) -> dequeue#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) dequeue#1(tuple#2(@inq:S,@outq:S)) -> dequeue#2(@outq:S,@inq:S) dequeue#2(::(@y:S,@ys:S),@inq:S) -> tuple#2(tuple#2(@inq:S,@ys:S),::(@y:S,nil)) dequeue#2(nil,@inq:S) -> dequeue#3(@inq:S) dequeue#3(::(@x:S,@xs:S)) -> dequeue#4(copyover(::(@x:S,@xs:S),nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil,nil),nil) dequeue#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> dequeue(@dequeue@3:S,@dequeue@4:S) enqueue(@x:S,@queue:S) -> enqueue#1(@queue:S,@x:S) enqueue#1(tuple#2(@inq:S,@outq:S),@x:S) -> tuple#2(::(@x:S,@inq:S),@outq:S) enqueues(@l:S,@queue:S) -> enqueues#1(@l:S,@queue:S) enqueues#1(::(@x:S,@xs:S),@queue:S) -> enqueues(@xs:S,enqueue(@x:S,@queue:S)) enqueues#1(nil,@queue:S) -> @queue:S ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 2 ->Bound: 1 ->Interpretation: [breadth](X1,X2) = 0 [breadth#1](X) = 0 [breadth#2](X1,X2) = 0 [breadth#3](X1,X2) = 0 [breadth#4](X) = [0 1;1 0].X + [1;1] [breadth#5](X) = 0 [children](X1,X2,X3,X4) = [1 0;0 0].X1 + [1 1;0 0].X2 + [0 1;0 1].X3 + [1 1;1 0].X4 + [1;1] [children#1](X1,X2,X3) = [0 1;1 1].X1 + [0 0;1 1].X2 + [1 0;1 1].X3 + [0;1] [children#2](X1,X2) = [1 0;1 1].X1 + [0 0;1 1].X2 + [0;1] [children#3](X1,X2,X3,X4) = [1 0;1 1].X1 + [0 0;1 0].X2 + [1 1;1 1].X4 + [1;1] [copyover](X1,X2) = [1 0;1 0].X1 + [1 0;1 0].X2 + [0;1] [copyover#1](X) = [1 0;1 0].X + [0;1] [copyover#2](X1,X2) = [1 0;1 0].X1 + [1 0;1 0].X2 + [0;1] [dequeue](X1,X2) = [1 0;1 0].X1 + [1 0;1 0].X2 + [0;1] [dequeue#1](X) = [1 0;1 0].X + [0;1] [dequeue#2](X1,X2) = [1 0;1 0].X1 + [1 0;1 0].X2 + [0;1] [dequeue#3](X) = [1 0;1 0].X + [0;1] [dequeue#4](X) = [1 0;1 0].X + [0;1] [empty](X) = 0 [enqueue](X1,X2) = [1 0;1 0].X1 + [1 0;0 1].X2 + [1;1] [enqueue#1](X1,X2) = [1 0;0 1].X1 + [1 0;1 0].X2 + [1;1] [enqueues](X1,X2) = [1 0;1 1].X1 + [1 0;0 1].X2 + [0;1] [enqueues#1](X1,X2) = [1 0;1 1].X1 + [1 0;0 1].X2 + [0;1] [startBreadth](X) = 0 [startBreadth#1](X) = 0 [startBreadth#2](X) = 0 [#unit] = 0 [::](X1,X2) = [1 0;0 0].X1 + [1 0;1 1].X2 + [1;1] [fSNonEmpty] = 0 [nil] = 0 [tuple#2](X1,X2) = [1 0;0 0].X1 + [1 0;1 0].X2 + [0;1] [tuple#4](X1,X2,X3,X4) = [0 0;1 0].X1 + [0 0;1 1].X2 + [0 1;0 1].X3 + [1 0;1 1].X4 [BREADTH](X1,X2) = [1 0;1 0].X1 + [1 0;1 0].X2 + [1;1] [BREADTH#1](X) = [1 0;1 0].X + [0;1] [BREADTH#2](X1,X2) = [1 0;1 0].X1 + [1 0;1 0].X2 + [0;1] [BREADTH#3](X1,X2) = [0 1;0 1].X1 + [1 0;1 0].X2 [BREADTH#4](X) = 0 [BREADTH#5](X) = [1 0;1 0].X + [1;1] [CHILDREN](X1,X2,X3,X4) = 0 [CHILDREN#1](X1,X2,X3) = 0 [CHILDREN#2](X1,X2) = 0 [CHILDREN#3](X1,X2,X3,X4) = 0 [COPYOVER](X1,X2) = 0 [COPYOVER#1](X) = 0 [COPYOVER#2](X1,X2) = 0 [DEQUEUE](X1,X2) = 0 [DEQUEUE#1](X) = 0 [DEQUEUE#2](X1,X2) = 0 [DEQUEUE#3](X) = 0 [DEQUEUE#4](X) = 0 [EMPTY](X) = 0 [ENQUEUE](X1,X2) = 0 [ENQUEUE#1](X1,X2) = 0 [ENQUEUES](X1,X2) = 0 [ENQUEUES#1](X1,X2) = 0 [STARTBREADTH](X) = 0 [STARTBREADTH#1](X) = 0 [STARTBREADTH#2](X) = 0 Problem 1.4: SCC Processor: -> Pairs: BREADTH#1(tuple#2(@queue':S,@elem:S)) -> BREADTH#2(@elem:S,@queue':S) BREADTH#2(::(@z:S,@_@9:S),@queue':S) -> BREADTH#3(breadth#4(@z:S),@queue':S) BREADTH#3(tuple#2(@x:S,@ys:S),@queue':S) -> BREADTH#5(enqueues(@ys:S,@queue':S)) BREADTH#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> BREADTH(@breadth@7:S,@breadth@8:S) -> Rules: breadth(@breadth@1:S,@breadth@2:S) -> breadth#1(dequeue(@breadth@1:S,@breadth@2:S)) breadth#1(tuple#2(@queue':S,@elem:S)) -> breadth#2(@elem:S,@queue':S) breadth#2(::(@z:S,@_@9:S),@queue':S) -> breadth#3(breadth#4(@z:S),@queue':S) breadth#2(nil,@queue':S) -> nil breadth#3(tuple#2(@x:S,@ys:S),@queue':S) -> ::(@x:S,breadth#5(enqueues(@ys:S,@queue':S))) breadth#4(tuple#4(@children@3:S,@children@4:S,@children@5:S,@children@6:S)) -> children(@children@3:S,@children@4:S,@children@5:S,@children@6:S) breadth#5(tuple#2(@breadth@7:S,@breadth@8:S)) -> breadth(@breadth@7:S,@breadth@8:S) children(@a:S,@b:S,@l1:S,@l2:S) -> tuple#2(tuple#2(@a:S,@b:S),children#1(@l1:S,@b:S,@l2:S)) children#1(::(@x:S,@xs:S),@b:S,@l2:S) -> children#3(@l2:S,@b:S,@x:S,@xs:S) children#1(nil,@b:S,@l2:S) -> children#2(@l2:S,@b:S) children#2(::(@y:S,@ys:S),@b:S) -> ::(tuple#4(@y:S,@b:S,nil,@ys:S),nil) children#2(nil,@b:S) -> nil children#3(::(@y:S,@ys:S),@b:S,@x:S,@xs:S) -> ::(tuple#4(@x:S,@b:S,nil,@xs:S),::(tuple#4(@x:S,@y:S,@xs:S,@ys:S),nil)) children#3(nil,@b:S,@x:S,@xs:S) -> nil copyover(@copyover@1:S,@copyover@2:S) -> copyover#1(tuple#2(@copyover@1:S,@copyover@2:S)) copyover#1(tuple#2(@inq:S,@outq:S)) -> copyover#2(@inq:S,@outq:S) copyover#2(::(@x:S,@xs:S),@outq:S) -> copyover(@xs:S,::(@x:S,@outq:S)) copyover#2(nil,@outq:S) -> tuple#2(nil,@outq:S) dequeue(@dequeue@1:S,@dequeue@2:S) -> dequeue#1(tuple#2(@dequeue@1:S,@dequeue@2:S)) dequeue#1(tuple#2(@inq:S,@outq:S)) -> dequeue#2(@outq:S,@inq:S) dequeue#2(::(@y:S,@ys:S),@inq:S) -> tuple#2(tuple#2(@inq:S,@ys:S),::(@y:S,nil)) dequeue#2(nil,@inq:S) -> dequeue#3(@inq:S) dequeue#3(::(@x:S,@xs:S)) -> dequeue#4(copyover(::(@x:S,@xs:S),nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil,nil),nil) dequeue#4(tuple#2(@dequeue@3:S,@dequeue@4:S)) -> dequeue(@dequeue@3:S,@dequeue@4:S) empty(@x:S) -> tuple#2(nil,nil) enqueue(@x:S,@queue:S) -> enqueue#1(@queue:S,@x:S) enqueue#1(tuple#2(@inq:S,@outq:S),@x:S) -> tuple#2(::(@x:S,@inq:S),@outq:S) enqueues(@l:S,@queue:S) -> enqueues#1(@l:S,@queue:S) enqueues#1(::(@x:S,@xs:S),@queue:S) -> enqueues(@xs:S,enqueue(@x:S,@queue:S)) enqueues#1(nil,@queue:S) -> @queue:S startBreadth(@xs:S) -> startBreadth#1(@xs:S) startBreadth#1(::(@x:S,@xs:S)) -> startBreadth#2(enqueue(tuple#4(@x:S,@x:S,@xs:S,@xs:S),empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1:S,@breadth@2:S)) -> breadth(@breadth@1:S,@breadth@2:S) ->Strongly Connected Components: There is no strongly connected component The problem is finite.