9.37/3.24 WORST_CASE(NON_POLY, ?) 9.37/3.25 proof of /export/starexec/sandbox2/benchmark/theBenchmark.xml 9.37/3.25 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 9.37/3.25 9.37/3.25 9.37/3.25 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(INF, INF). 9.37/3.25 9.37/3.25 (0) CpxRelTRS 9.37/3.25 (1) STerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 211 ms] 9.37/3.25 (2) CpxRelTRS 9.37/3.25 (3) RelTrsToDecreasingLoopProblemProof [LOWER BOUND(ID), 0 ms] 9.37/3.25 (4) TRS for Loop Detection 9.37/3.25 (5) DecreasingLoopProof [LOWER BOUND(ID), 0 ms] 9.37/3.25 (6) BEST 9.37/3.25 (7) proven lower bound 9.37/3.25 (8) LowerBoundPropagationProof [FINISHED, 0 ms] 9.37/3.25 (9) BOUNDS(n^1, INF) 9.37/3.25 (10) TRS for Loop Detection 9.37/3.25 (11) InfiniteLowerBoundProof [FINISHED, 1188 ms] 9.37/3.25 (12) BOUNDS(INF, INF) 9.37/3.25 9.37/3.25 9.37/3.25 ---------------------------------------- 9.37/3.25 9.37/3.25 (0) 9.37/3.25 Obligation: 9.37/3.25 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(INF, INF). 9.37/3.25 9.37/3.25 9.37/3.25 The TRS R consists of the following rules: 9.37/3.25 9.37/3.25 turing(I(IfGoto(i1, i2), r), revltape, Cons(x, xs), prog) -> turing[Ite](!EQ(x, i1), I(IfGoto(i1, i2), r), revltape, Cons(x, xs), prog) 9.37/3.25 turing(I(Goto(int), r), revltape, rtape, prog) -> turing(lookup(int, prog), revltape, rtape, prog) 9.37/3.25 turing(I(Right, r), revltape, Cons(x, xs), prog) -> turing(r, Cons(x, revltape), xs, prog) 9.37/3.25 turing(I(Right, r), revltape, Nil, prog) -> turing(r, Cons(0, revltape), Nil, prog) 9.37/3.25 turing(I(Left, r), Cons(x, xs), rtape, prog) -> turing(r, xs, Cons(x, rtape), prog) 9.37/3.25 turing(I(Left, r), Nil, rtape, prog) -> turing(r, Nil, Cons(0, rtape), prog) 9.37/3.25 turing(I(Write(int), r), revltape, Cons(x, xs), prog) -> turing(r, revltape, Cons(int, xs), prog) 9.37/3.25 turing(I(Halt, r), revltape, rtape, prog) -> rtape 9.37/3.25 turing(Empty, revltape, rtape, prog) -> rtape 9.37/3.25 lookup(S(x), I(l, r)) -> lookup(x, r) 9.37/3.25 instrsConstrCheck(I(l1, r1), I(x, y)) -> True 9.37/3.25 instrsConstrCheck(I(l1, r1), Empty) -> False 9.37/3.25 instrsConstrCheck(Empty, I(x, y)) -> False 9.37/3.25 instrsConstrCheck(Empty, Empty) -> True 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), IfGoto(igtNat12, igtNat22)) -> True 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Right) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Left) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Halt) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Goto(gtNat2)) -> True 9.37/3.25 instrConstrCheck(Goto(gtNat), Right) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Left) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Halt) -> False 9.37/3.25 instrConstrCheck(Right, IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Right, Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Right, Right) -> True 9.37/3.25 instrConstrCheck(Right, Left) -> False 9.37/3.25 instrConstrCheck(Right, Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Right, Halt) -> False 9.37/3.25 instrConstrCheck(Left, IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Left, Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Left, Right) -> False 9.37/3.25 instrConstrCheck(Left, Left) -> True 9.37/3.25 instrConstrCheck(Left, Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Left, Halt) -> False 9.37/3.25 instrConstrCheck(Write(wNat), IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Right) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Left) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Write(wNat2)) -> True 9.37/3.25 instrConstrCheck(Write(wNat), Halt) -> False 9.37/3.25 instrConstrCheck(Halt, IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Halt, Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Halt, Right) -> False 9.37/3.25 instrConstrCheck(Halt, Left) -> False 9.37/3.25 instrConstrCheck(Halt, Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Halt, Halt) -> True 9.37/3.25 notEmpty(Cons(x, xs)) -> True 9.37/3.25 notEmpty(Nil) -> False 9.37/3.25 lookup(0, instrs) -> instrs 9.37/3.25 instrsSecond(I(l, r)) -> r 9.37/3.25 instrsFirst(I(l, r)) -> l 9.37/3.25 getWrite(Write(int)) -> int 9.37/3.25 getGotoSecond(IfGoto(i1, i2)) -> i2 9.37/3.25 getGotoFirst(IfGoto(i1, i2)) -> i1 9.37/3.25 getGoto(Goto(int)) -> int 9.37/3.25 run(prog, tapeinput) -> turing(prog, Nil, tapeinput, prog) 9.37/3.25 9.37/3.25 The (relative) TRS S consists of the following rules: 9.37/3.25 9.37/3.25 !EQ(S(x), S(y)) -> !EQ(x, y) 9.37/3.25 !EQ(0, S(y)) -> False 9.37/3.25 !EQ(S(x), 0) -> False 9.37/3.25 !EQ(0, 0) -> True 9.37/3.25 turing[Ite](True, I(IfGoto(i1, i2), r), revltape, rtape, prog) -> turing(lookup(i2, prog), revltape, rtape, prog) 9.37/3.25 turing[Ite](False, I(l, r), revltape, rtape, prog) -> turing(r, revltape, rtape, prog) 9.37/3.25 9.37/3.25 Rewrite Strategy: INNERMOST 9.37/3.25 ---------------------------------------- 9.37/3.25 9.37/3.25 (1) STerminationProof (BOTH CONCRETE BOUNDS(ID, ID)) 9.37/3.25 proved termination of relative rules 9.37/3.25 ---------------------------------------- 9.37/3.25 9.37/3.25 (2) 9.37/3.25 Obligation: 9.37/3.25 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(INF, INF). 9.37/3.25 9.37/3.25 9.37/3.25 The TRS R consists of the following rules: 9.37/3.25 9.37/3.25 turing(I(IfGoto(i1, i2), r), revltape, Cons(x, xs), prog) -> turing[Ite](!EQ(x, i1), I(IfGoto(i1, i2), r), revltape, Cons(x, xs), prog) 9.37/3.25 turing(I(Goto(int), r), revltape, rtape, prog) -> turing(lookup(int, prog), revltape, rtape, prog) 9.37/3.25 turing(I(Right, r), revltape, Cons(x, xs), prog) -> turing(r, Cons(x, revltape), xs, prog) 9.37/3.25 turing(I(Right, r), revltape, Nil, prog) -> turing(r, Cons(0, revltape), Nil, prog) 9.37/3.25 turing(I(Left, r), Cons(x, xs), rtape, prog) -> turing(r, xs, Cons(x, rtape), prog) 9.37/3.25 turing(I(Left, r), Nil, rtape, prog) -> turing(r, Nil, Cons(0, rtape), prog) 9.37/3.25 turing(I(Write(int), r), revltape, Cons(x, xs), prog) -> turing(r, revltape, Cons(int, xs), prog) 9.37/3.25 turing(I(Halt, r), revltape, rtape, prog) -> rtape 9.37/3.25 turing(Empty, revltape, rtape, prog) -> rtape 9.37/3.25 lookup(S(x), I(l, r)) -> lookup(x, r) 9.37/3.25 instrsConstrCheck(I(l1, r1), I(x, y)) -> True 9.37/3.25 instrsConstrCheck(I(l1, r1), Empty) -> False 9.37/3.25 instrsConstrCheck(Empty, I(x, y)) -> False 9.37/3.25 instrsConstrCheck(Empty, Empty) -> True 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), IfGoto(igtNat12, igtNat22)) -> True 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Right) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Left) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Halt) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Goto(gtNat2)) -> True 9.37/3.25 instrConstrCheck(Goto(gtNat), Right) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Left) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Halt) -> False 9.37/3.25 instrConstrCheck(Right, IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Right, Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Right, Right) -> True 9.37/3.25 instrConstrCheck(Right, Left) -> False 9.37/3.25 instrConstrCheck(Right, Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Right, Halt) -> False 9.37/3.25 instrConstrCheck(Left, IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Left, Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Left, Right) -> False 9.37/3.25 instrConstrCheck(Left, Left) -> True 9.37/3.25 instrConstrCheck(Left, Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Left, Halt) -> False 9.37/3.25 instrConstrCheck(Write(wNat), IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Right) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Left) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Write(wNat2)) -> True 9.37/3.25 instrConstrCheck(Write(wNat), Halt) -> False 9.37/3.25 instrConstrCheck(Halt, IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Halt, Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Halt, Right) -> False 9.37/3.25 instrConstrCheck(Halt, Left) -> False 9.37/3.25 instrConstrCheck(Halt, Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Halt, Halt) -> True 9.37/3.25 notEmpty(Cons(x, xs)) -> True 9.37/3.25 notEmpty(Nil) -> False 9.37/3.25 lookup(0, instrs) -> instrs 9.37/3.25 instrsSecond(I(l, r)) -> r 9.37/3.25 instrsFirst(I(l, r)) -> l 9.37/3.25 getWrite(Write(int)) -> int 9.37/3.25 getGotoSecond(IfGoto(i1, i2)) -> i2 9.37/3.25 getGotoFirst(IfGoto(i1, i2)) -> i1 9.37/3.25 getGoto(Goto(int)) -> int 9.37/3.25 run(prog, tapeinput) -> turing(prog, Nil, tapeinput, prog) 9.37/3.25 9.37/3.25 The (relative) TRS S consists of the following rules: 9.37/3.25 9.37/3.25 !EQ(S(x), S(y)) -> !EQ(x, y) 9.37/3.25 !EQ(0, S(y)) -> False 9.37/3.25 !EQ(S(x), 0) -> False 9.37/3.25 !EQ(0, 0) -> True 9.37/3.25 turing[Ite](True, I(IfGoto(i1, i2), r), revltape, rtape, prog) -> turing(lookup(i2, prog), revltape, rtape, prog) 9.37/3.25 turing[Ite](False, I(l, r), revltape, rtape, prog) -> turing(r, revltape, rtape, prog) 9.37/3.25 9.37/3.25 Rewrite Strategy: INNERMOST 9.37/3.25 ---------------------------------------- 9.37/3.25 9.37/3.25 (3) RelTrsToDecreasingLoopProblemProof (LOWER BOUND(ID)) 9.37/3.25 Transformed a relative TRS into a decreasing-loop problem. 9.37/3.25 ---------------------------------------- 9.37/3.25 9.37/3.25 (4) 9.37/3.25 Obligation: 9.37/3.25 Analyzing the following TRS for decreasing loops: 9.37/3.25 9.37/3.25 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(INF, INF). 9.37/3.25 9.37/3.25 9.37/3.25 The TRS R consists of the following rules: 9.37/3.25 9.37/3.25 turing(I(IfGoto(i1, i2), r), revltape, Cons(x, xs), prog) -> turing[Ite](!EQ(x, i1), I(IfGoto(i1, i2), r), revltape, Cons(x, xs), prog) 9.37/3.25 turing(I(Goto(int), r), revltape, rtape, prog) -> turing(lookup(int, prog), revltape, rtape, prog) 9.37/3.25 turing(I(Right, r), revltape, Cons(x, xs), prog) -> turing(r, Cons(x, revltape), xs, prog) 9.37/3.25 turing(I(Right, r), revltape, Nil, prog) -> turing(r, Cons(0, revltape), Nil, prog) 9.37/3.25 turing(I(Left, r), Cons(x, xs), rtape, prog) -> turing(r, xs, Cons(x, rtape), prog) 9.37/3.25 turing(I(Left, r), Nil, rtape, prog) -> turing(r, Nil, Cons(0, rtape), prog) 9.37/3.25 turing(I(Write(int), r), revltape, Cons(x, xs), prog) -> turing(r, revltape, Cons(int, xs), prog) 9.37/3.25 turing(I(Halt, r), revltape, rtape, prog) -> rtape 9.37/3.25 turing(Empty, revltape, rtape, prog) -> rtape 9.37/3.25 lookup(S(x), I(l, r)) -> lookup(x, r) 9.37/3.25 instrsConstrCheck(I(l1, r1), I(x, y)) -> True 9.37/3.25 instrsConstrCheck(I(l1, r1), Empty) -> False 9.37/3.25 instrsConstrCheck(Empty, I(x, y)) -> False 9.37/3.25 instrsConstrCheck(Empty, Empty) -> True 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), IfGoto(igtNat12, igtNat22)) -> True 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Right) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Left) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Halt) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Goto(gtNat2)) -> True 9.37/3.25 instrConstrCheck(Goto(gtNat), Right) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Left) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Halt) -> False 9.37/3.25 instrConstrCheck(Right, IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Right, Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Right, Right) -> True 9.37/3.25 instrConstrCheck(Right, Left) -> False 9.37/3.25 instrConstrCheck(Right, Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Right, Halt) -> False 9.37/3.25 instrConstrCheck(Left, IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Left, Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Left, Right) -> False 9.37/3.25 instrConstrCheck(Left, Left) -> True 9.37/3.25 instrConstrCheck(Left, Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Left, Halt) -> False 9.37/3.25 instrConstrCheck(Write(wNat), IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Right) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Left) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Write(wNat2)) -> True 9.37/3.25 instrConstrCheck(Write(wNat), Halt) -> False 9.37/3.25 instrConstrCheck(Halt, IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Halt, Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Halt, Right) -> False 9.37/3.25 instrConstrCheck(Halt, Left) -> False 9.37/3.25 instrConstrCheck(Halt, Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Halt, Halt) -> True 9.37/3.25 notEmpty(Cons(x, xs)) -> True 9.37/3.25 notEmpty(Nil) -> False 9.37/3.25 lookup(0, instrs) -> instrs 9.37/3.25 instrsSecond(I(l, r)) -> r 9.37/3.25 instrsFirst(I(l, r)) -> l 9.37/3.25 getWrite(Write(int)) -> int 9.37/3.25 getGotoSecond(IfGoto(i1, i2)) -> i2 9.37/3.25 getGotoFirst(IfGoto(i1, i2)) -> i1 9.37/3.25 getGoto(Goto(int)) -> int 9.37/3.25 run(prog, tapeinput) -> turing(prog, Nil, tapeinput, prog) 9.37/3.25 9.37/3.25 The (relative) TRS S consists of the following rules: 9.37/3.25 9.37/3.25 !EQ(S(x), S(y)) -> !EQ(x, y) 9.37/3.25 !EQ(0, S(y)) -> False 9.37/3.25 !EQ(S(x), 0) -> False 9.37/3.25 !EQ(0, 0) -> True 9.37/3.25 turing[Ite](True, I(IfGoto(i1, i2), r), revltape, rtape, prog) -> turing(lookup(i2, prog), revltape, rtape, prog) 9.37/3.25 turing[Ite](False, I(l, r), revltape, rtape, prog) -> turing(r, revltape, rtape, prog) 9.37/3.25 9.37/3.25 Rewrite Strategy: INNERMOST 9.37/3.25 ---------------------------------------- 9.37/3.25 9.37/3.25 (5) DecreasingLoopProof (LOWER BOUND(ID)) 9.37/3.25 The following loop(s) give(s) rise to the lower bound Omega(n^1): 9.37/3.25 9.37/3.25 The rewrite sequence 9.37/3.25 9.37/3.25 turing(I(Left, r), Cons(x, xs), rtape, prog) ->^+ turing(r, xs, Cons(x, rtape), prog) 9.37/3.25 9.37/3.25 gives rise to a decreasing loop by considering the right hand sides subterm at position []. 9.37/3.25 9.37/3.25 The pumping substitution is [r / I(Left, r), xs / Cons(x, xs)]. 9.37/3.25 9.37/3.25 The result substitution is [rtape / Cons(x, rtape)]. 9.37/3.25 9.37/3.25 9.37/3.25 9.37/3.25 9.37/3.25 ---------------------------------------- 9.37/3.25 9.37/3.25 (6) 9.37/3.25 Complex Obligation (BEST) 9.37/3.25 9.37/3.25 ---------------------------------------- 9.37/3.25 9.37/3.25 (7) 9.37/3.25 Obligation: 9.37/3.25 Proved the lower bound n^1 for the following obligation: 9.37/3.25 9.37/3.25 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(INF, INF). 9.37/3.25 9.37/3.25 9.37/3.25 The TRS R consists of the following rules: 9.37/3.25 9.37/3.25 turing(I(IfGoto(i1, i2), r), revltape, Cons(x, xs), prog) -> turing[Ite](!EQ(x, i1), I(IfGoto(i1, i2), r), revltape, Cons(x, xs), prog) 9.37/3.25 turing(I(Goto(int), r), revltape, rtape, prog) -> turing(lookup(int, prog), revltape, rtape, prog) 9.37/3.25 turing(I(Right, r), revltape, Cons(x, xs), prog) -> turing(r, Cons(x, revltape), xs, prog) 9.37/3.25 turing(I(Right, r), revltape, Nil, prog) -> turing(r, Cons(0, revltape), Nil, prog) 9.37/3.25 turing(I(Left, r), Cons(x, xs), rtape, prog) -> turing(r, xs, Cons(x, rtape), prog) 9.37/3.25 turing(I(Left, r), Nil, rtape, prog) -> turing(r, Nil, Cons(0, rtape), prog) 9.37/3.25 turing(I(Write(int), r), revltape, Cons(x, xs), prog) -> turing(r, revltape, Cons(int, xs), prog) 9.37/3.25 turing(I(Halt, r), revltape, rtape, prog) -> rtape 9.37/3.25 turing(Empty, revltape, rtape, prog) -> rtape 9.37/3.25 lookup(S(x), I(l, r)) -> lookup(x, r) 9.37/3.25 instrsConstrCheck(I(l1, r1), I(x, y)) -> True 9.37/3.25 instrsConstrCheck(I(l1, r1), Empty) -> False 9.37/3.25 instrsConstrCheck(Empty, I(x, y)) -> False 9.37/3.25 instrsConstrCheck(Empty, Empty) -> True 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), IfGoto(igtNat12, igtNat22)) -> True 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Right) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Left) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Halt) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Goto(gtNat2)) -> True 9.37/3.25 instrConstrCheck(Goto(gtNat), Right) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Left) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Halt) -> False 9.37/3.25 instrConstrCheck(Right, IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Right, Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Right, Right) -> True 9.37/3.25 instrConstrCheck(Right, Left) -> False 9.37/3.25 instrConstrCheck(Right, Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Right, Halt) -> False 9.37/3.25 instrConstrCheck(Left, IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Left, Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Left, Right) -> False 9.37/3.25 instrConstrCheck(Left, Left) -> True 9.37/3.25 instrConstrCheck(Left, Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Left, Halt) -> False 9.37/3.25 instrConstrCheck(Write(wNat), IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Right) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Left) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Write(wNat2)) -> True 9.37/3.25 instrConstrCheck(Write(wNat), Halt) -> False 9.37/3.25 instrConstrCheck(Halt, IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Halt, Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Halt, Right) -> False 9.37/3.25 instrConstrCheck(Halt, Left) -> False 9.37/3.25 instrConstrCheck(Halt, Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Halt, Halt) -> True 9.37/3.25 notEmpty(Cons(x, xs)) -> True 9.37/3.25 notEmpty(Nil) -> False 9.37/3.25 lookup(0, instrs) -> instrs 9.37/3.25 instrsSecond(I(l, r)) -> r 9.37/3.25 instrsFirst(I(l, r)) -> l 9.37/3.25 getWrite(Write(int)) -> int 9.37/3.25 getGotoSecond(IfGoto(i1, i2)) -> i2 9.37/3.25 getGotoFirst(IfGoto(i1, i2)) -> i1 9.37/3.25 getGoto(Goto(int)) -> int 9.37/3.25 run(prog, tapeinput) -> turing(prog, Nil, tapeinput, prog) 9.37/3.25 9.37/3.25 The (relative) TRS S consists of the following rules: 9.37/3.25 9.37/3.25 !EQ(S(x), S(y)) -> !EQ(x, y) 9.37/3.25 !EQ(0, S(y)) -> False 9.37/3.25 !EQ(S(x), 0) -> False 9.37/3.25 !EQ(0, 0) -> True 9.37/3.25 turing[Ite](True, I(IfGoto(i1, i2), r), revltape, rtape, prog) -> turing(lookup(i2, prog), revltape, rtape, prog) 9.37/3.25 turing[Ite](False, I(l, r), revltape, rtape, prog) -> turing(r, revltape, rtape, prog) 9.37/3.25 9.37/3.25 Rewrite Strategy: INNERMOST 9.37/3.25 ---------------------------------------- 9.37/3.25 9.37/3.25 (8) LowerBoundPropagationProof (FINISHED) 9.37/3.25 Propagated lower bound. 9.37/3.25 ---------------------------------------- 9.37/3.25 9.37/3.25 (9) 9.37/3.25 BOUNDS(n^1, INF) 9.37/3.25 9.37/3.25 ---------------------------------------- 9.37/3.25 9.37/3.25 (10) 9.37/3.25 Obligation: 9.37/3.25 Analyzing the following TRS for decreasing loops: 9.37/3.25 9.37/3.25 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(INF, INF). 9.37/3.25 9.37/3.25 9.37/3.25 The TRS R consists of the following rules: 9.37/3.25 9.37/3.25 turing(I(IfGoto(i1, i2), r), revltape, Cons(x, xs), prog) -> turing[Ite](!EQ(x, i1), I(IfGoto(i1, i2), r), revltape, Cons(x, xs), prog) 9.37/3.25 turing(I(Goto(int), r), revltape, rtape, prog) -> turing(lookup(int, prog), revltape, rtape, prog) 9.37/3.25 turing(I(Right, r), revltape, Cons(x, xs), prog) -> turing(r, Cons(x, revltape), xs, prog) 9.37/3.25 turing(I(Right, r), revltape, Nil, prog) -> turing(r, Cons(0, revltape), Nil, prog) 9.37/3.25 turing(I(Left, r), Cons(x, xs), rtape, prog) -> turing(r, xs, Cons(x, rtape), prog) 9.37/3.25 turing(I(Left, r), Nil, rtape, prog) -> turing(r, Nil, Cons(0, rtape), prog) 9.37/3.25 turing(I(Write(int), r), revltape, Cons(x, xs), prog) -> turing(r, revltape, Cons(int, xs), prog) 9.37/3.25 turing(I(Halt, r), revltape, rtape, prog) -> rtape 9.37/3.25 turing(Empty, revltape, rtape, prog) -> rtape 9.37/3.25 lookup(S(x), I(l, r)) -> lookup(x, r) 9.37/3.25 instrsConstrCheck(I(l1, r1), I(x, y)) -> True 9.37/3.25 instrsConstrCheck(I(l1, r1), Empty) -> False 9.37/3.25 instrsConstrCheck(Empty, I(x, y)) -> False 9.37/3.25 instrsConstrCheck(Empty, Empty) -> True 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), IfGoto(igtNat12, igtNat22)) -> True 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Right) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Left) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(IfGoto(igtNat1, igtNat2), Halt) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Goto(gtNat2)) -> True 9.37/3.25 instrConstrCheck(Goto(gtNat), Right) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Left) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Goto(gtNat), Halt) -> False 9.37/3.25 instrConstrCheck(Right, IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Right, Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Right, Right) -> True 9.37/3.25 instrConstrCheck(Right, Left) -> False 9.37/3.25 instrConstrCheck(Right, Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Right, Halt) -> False 9.37/3.25 instrConstrCheck(Left, IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Left, Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Left, Right) -> False 9.37/3.25 instrConstrCheck(Left, Left) -> True 9.37/3.25 instrConstrCheck(Left, Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Left, Halt) -> False 9.37/3.25 instrConstrCheck(Write(wNat), IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Right) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Left) -> False 9.37/3.25 instrConstrCheck(Write(wNat), Write(wNat2)) -> True 9.37/3.25 instrConstrCheck(Write(wNat), Halt) -> False 9.37/3.25 instrConstrCheck(Halt, IfGoto(igtNat12, igtNat22)) -> False 9.37/3.25 instrConstrCheck(Halt, Goto(gtNat2)) -> False 9.37/3.25 instrConstrCheck(Halt, Right) -> False 9.37/3.25 instrConstrCheck(Halt, Left) -> False 9.37/3.25 instrConstrCheck(Halt, Write(wNat2)) -> False 9.37/3.25 instrConstrCheck(Halt, Halt) -> True 9.37/3.25 notEmpty(Cons(x, xs)) -> True 9.37/3.25 notEmpty(Nil) -> False 9.37/3.25 lookup(0, instrs) -> instrs 9.37/3.25 instrsSecond(I(l, r)) -> r 9.37/3.25 instrsFirst(I(l, r)) -> l 9.37/3.25 getWrite(Write(int)) -> int 9.37/3.25 getGotoSecond(IfGoto(i1, i2)) -> i2 9.37/3.25 getGotoFirst(IfGoto(i1, i2)) -> i1 9.37/3.25 getGoto(Goto(int)) -> int 9.37/3.25 run(prog, tapeinput) -> turing(prog, Nil, tapeinput, prog) 9.37/3.25 9.37/3.25 The (relative) TRS S consists of the following rules: 9.37/3.25 9.37/3.25 !EQ(S(x), S(y)) -> !EQ(x, y) 9.37/3.25 !EQ(0, S(y)) -> False 9.37/3.25 !EQ(S(x), 0) -> False 9.37/3.25 !EQ(0, 0) -> True 9.37/3.25 turing[Ite](True, I(IfGoto(i1, i2), r), revltape, rtape, prog) -> turing(lookup(i2, prog), revltape, rtape, prog) 9.37/3.25 turing[Ite](False, I(l, r), revltape, rtape, prog) -> turing(r, revltape, rtape, prog) 9.37/3.25 9.37/3.25 Rewrite Strategy: INNERMOST 9.37/3.25 ---------------------------------------- 9.37/3.25 9.37/3.25 (11) InfiniteLowerBoundProof (FINISHED) 9.37/3.25 The following loop proves infinite runtime complexity: 9.37/3.25 9.37/3.25 The rewrite sequence 9.37/3.25 9.37/3.25 turing(I(Goto(0), r), revltape, rtape, I(Goto(0), r2_0)) ->^+ turing(I(Goto(0), r2_0), revltape, rtape, I(Goto(0), r2_0)) 9.37/3.25 9.37/3.25 gives rise to a decreasing loop by considering the right hand sides subterm at position []. 9.37/3.25 9.37/3.25 The pumping substitution is [ ]. 9.37/3.25 9.37/3.25 The result substitution is [r / r2_0]. 9.37/3.25 9.37/3.25 9.37/3.25 9.37/3.25 9.37/3.25 ---------------------------------------- 9.37/3.25 9.37/3.25 (12) 9.37/3.25 BOUNDS(INF, INF) 9.61/3.30 EOF