NO Initial ITS Start location: [1] Program variables: i j 0: [1] -> [2] : j'=0, T, cost: 1 1: [2] -> [3] : i'=0, T, cost: 1 2: [3] -> [4] : i-j <= 0, cost: 1 9: [3] -> [9] : i-j > 0, cost: 1 3: [4] -> [6] : -1-i+j < 0, cost: 1 6: [4] -> [5] : -1-i+j >= 0, cost: 1 7: [5] -> [8] : i'=1+i, T, cost: 1 4: [6] -> [7] : j'=2+j, T, cost: 1 5: [7] -> [5] : T, cost: 1 8: [8] -> [3] : T, cost: 1 Chained Linear Paths Start location: [1] Program variables: i j 10: [1] -> [3] : i'=0, j'=0, T, cost: 1 2: [3] -> [4] : i-j <= 0, cost: 1 9: [3] -> [9] : i-j > 0, cost: 1 6: [4] -> [5] : -1-i+j >= 0, cost: 1 12: [4] -> [5] : j'=2+j, -1-i+j < 0, cost: 1 13: [5] -> [3] : i'=1+i, T, cost: 1 Eliminating location [2] by chaining: Applied chaining First rule: [1] -> [2] : j'=0, T, cost: 1 Second rule: [2] -> [3] : i'=0, T, cost: 1 New rule: [1] -> [3] : i'=0, j'=0, T, cost: 1 Applied deletion Removed the following rules: 0 1 Eliminating location [6] by chaining: Applied chaining First rule: [4] -> [6] : -1-i+j < 0, cost: 1 Second rule: [6] -> [7] : j'=2+j, T, cost: 1 New rule: [4] -> [7] : j'=2+j, -1-i+j < 0, cost: 1 Applied deletion Removed the following rules: 3 4 Eliminating location [7] by chaining: Applied chaining First rule: [4] -> [7] : j'=2+j, -1-i+j < 0, cost: 1 Second rule: [7] -> [5] : T, cost: 1 New rule: [4] -> [5] : j'=2+j, -1-i+j < 0, cost: 1 Applied deletion Removed the following rules: 5 11 Eliminating location [8] by chaining: Applied chaining First rule: [5] -> [8] : i'=1+i, T, cost: 1 Second rule: [8] -> [3] : T, cost: 1 New rule: [5] -> [3] : i'=1+i, T, cost: 1 Applied deletion Removed the following rules: 7 8 Step with 10 Trace 10[T] Blocked [{}, {}] Step with 2 Trace 10[T], 2[(i-j <= 0)] Blocked [{}, {9[T]}, {}] Step with 12 Trace 10[T], 2[(i-j <= 0)], 12[(-1-i+j < 0)] Blocked [{}, {9[T]}, {6[T]}, {}] Step with 13 Trace 10[T], 2[(i-j <= 0)], 12[(-1-i+j < 0)], 13[T] Blocked [{}, {9[T]}, {6[T]}, {}, {}] Acceleration Failed marked recursive suffix as redundant Step with 2 Trace 10[T], 2[(i-j <= 0)], 12[(-1-i+j < 0)], 13[T], 2[(i-j <= 0)] Blocked [{}, {9[T]}, {6[T]}, {}, {}, {}] Accelerate Start location: [1] Program variables: i j 10: [1] -> [3] : i'=0, j'=0, T, cost: 1 2: [3] -> [4] : i-j <= 0, cost: 1 9: [3] -> [9] : i-j > 0, cost: 1 6: [4] -> [5] : -1-i+j >= 0, cost: 1 12: [4] -> [5] : j'=2+j, -1-i+j < 0, cost: 1 14: [4] -> [4] : i'=i+n, j'=2*n+j, (1-i+j >= 0 /\ 2+i-n-j > 0 /\ -1+n >= 0), cost: 1 13: [5] -> [3] : i'=1+i, T, cost: 1 Loop Acceleration Original rule: [4] -> [4] : i'=1+i, j'=2+j, (-1-i+j < 0 /\ -1+i-j <= 0), cost: 1 New rule: [4] -> [4] : i'=i+n, j'=2*n+j, (1-i+j >= 0 /\ 2+i-n-j > 0 /\ -1+n >= 0), cost: 1 1+i-j > 0 [0]: montonic decrease yields 2+i-n-j > 0 1+i-j > 0 [1]: eventual increase yields (1+i-j > 0 /\ 1 <= 0) 1-i+j >= 0 [0]: monotonic increase yields 1-i+j >= 0 Replacement map: {1+i-j > 0 -> 2+i-n-j > 0, 1-i+j >= 0 -> 1-i+j >= 0} Trace 10[T], 2[(i-j <= 0)], 14[(1-i+j >= 0 /\ 2+i-n-j > 0 /\ -1+n >= 0)] Blocked [{}, {9[T]}, {6[T]}, {14[T]}] Step with 6 Trace 10[T], 2[(i-j <= 0)], 14[(1-i+j >= 0 /\ 2+i-n-j > 0 /\ -1+n >= 0)], 6[(-1-i+j >= 0)] Blocked [{}, {9[T]}, {6[T]}, {14[T]}, {}] Step with 13 Trace 10[T], 2[(i-j <= 0)], 14[(1-i+j >= 0 /\ 2+i-n-j > 0 /\ -1+n >= 0)], 6[(-1-i+j >= 0)], 13[T] Blocked [{}, {9[T]}, {6[T]}, {14[T]}, {}, {}] Nonterm Start location: [1] Program variables: i j 10: [1] -> [3] : i'=0, j'=0, T, cost: 1 2: [3] -> [4] : i-j <= 0, cost: 1 9: [3] -> [9] : i-j > 0, cost: 1 15: [3] -> LoAT_sink : (0 >= 0 /\ 1 >= 0 /\ i-j >= 0 /\ 1-i+j >= 0 /\ -i+j >= 0), cost: NONTERM 6: [4] -> [5] : -1-i+j >= 0, cost: 1 12: [4] -> [5] : j'=2+j, -1-i+j < 0, cost: 1 14: [4] -> [4] : i'=i+n, j'=2*n+j, (1-i+j >= 0 /\ 2+i-n-j > 0 /\ -1+n >= 0), cost: 1 13: [5] -> [3] : i'=1+i, T, cost: 1 unrolling Original rule: [3] -> [3] : i'=2+2*i-j, j'=2+2*i-j, (i-j <= 0 /\ i-j >= 0 /\ 1-i+j >= 0), cost: 1 New rule: [3] -> [3] : i'=4+2*i-j, j'=4+2*i-j, (0 <= 0 /\ 0 >= 0 /\ 1 >= 0 /\ i-j <= 0 /\ i-j >= 0 /\ 1-i+j >= 0), cost: 1 Certificate of Non-Termination Original rule: [3] -> [3] : i'=4+2*i-j, j'=4+2*i-j, (0 <= 0 /\ 0 >= 0 /\ 1 >= 0 /\ i-j <= 0 /\ i-j >= 0 /\ 1-i+j >= 0), cost: 1 New rule: [3] -> LoAT_sink : (0 >= 0 /\ 1 >= 0 /\ i-j >= 0 /\ 1-i+j >= 0 /\ -i+j >= 0), cost: NONTERM 0 >= 0 [0]: monotonic increase yields 0 >= 0 1 >= 0 [0]: monotonic increase yields 1 >= 0 i-j >= 0 [0]: monotonic increase yields i-j >= 0 1-i+j >= 0 [0]: monotonic increase yields 1-i+j >= 0 -i+j >= 0 [0]: monotonic increase yields -i+j >= 0 Replacement map: {0 >= 0 -> 0 >= 0, 1 >= 0 -> 1 >= 0, i-j >= 0 -> i-j >= 0, 1-i+j >= 0 -> 1-i+j >= 0, -i+j >= 0 -> -i+j >= 0} Step with 15 Trace 10[T], 15[(0 >= 0 /\ 1 >= 0 /\ i-j >= 0 /\ 1-i+j >= 0 /\ -i+j >= 0)] Blocked [{}, {9[T]}, {15[T]}] Refute Counterexample [ i=0 j=0 ] 10 [ i=i j=j ] 15 NO Build SHA: a05f16bf13df659c382799650051f91bf6828c7b