# LTS Termination Proof

by AProVE

## Input

Integer Transition System
• Initial Location: f193_0__init__LE, f518_0__init__InvokeMethod, f480_0_main_InvokeMethod, f481_0_main_InvokeMethod, f482_0_main_InvokeMethod, f388_0_height_NONNULL, f1_0_main_Load, __init
• Transitions: (pre-variables and post-variables)  f1_0_main_Load 1 f480_0_main_InvokeMethod: x1 = _arg1 ∧ x2 = _arg2 ∧ x3 = _arg3 ∧ x1 = _arg1P ∧ x2 = _arg2P ∧ x3 = _arg3P ∧ 0 = _arg2 ∧ 2 ≤ _arg1P − 1 ∧ 0 ≤ _arg1 − 1 f1_0_main_Load 2 f480_0_main_InvokeMethod: x1 = _x ∧ x2 = _x1 ∧ x3 = _x2 ∧ x1 = _x3 ∧ x2 = _x4 ∧ x3 = _x5 ∧ 0 = _x1 ∧ 1 ≤ _x3 − 1 ∧ 0 ≤ _x − 1 ∧ _x3 − 1 ≤ _x f1_0_main_Load 3 f481_0_main_InvokeMethod: x1 = _x7 ∧ x2 = _x8 ∧ x3 = _x9 ∧ x1 = _x10 ∧ x2 = _x11 ∧ x3 = _x12 ∧ 0 ≤ _x7 − 1 ∧ −1 ≤ _x13 − 1 ∧ 2 ≤ _x10 − 1 ∧ 1 = _x8 f1_0_main_Load 4 f481_0_main_InvokeMethod: x1 = _x16 ∧ x2 = _x17 ∧ x3 = _x18 ∧ x1 = _x19 ∧ x2 = _x22 ∧ x3 = _x23 ∧ _x19 − 1 ≤ _x16 ∧ −1 ≤ _x24 − 1 ∧ 0 ≤ _x16 − 1 ∧ 1 ≤ _x19 − 1 ∧ 1 = _x17 f1_0_main_Load 5 f482_0_main_InvokeMethod: x1 = _x25 ∧ x2 = _x26 ∧ x3 = _x29 ∧ x1 = _x30 ∧ x2 = _x31 ∧ x3 = _x32 ∧ 0 ≤ _x33⋅_x34 ∧ 1 ≤ _x26 − 1 ∧ −1 ≤ _x34 − 1 ∧ −1 ≤ _x33 − 1 ∧ _x30 ≤ _x25 ∧ 0 ≤ _x25 − 1 ∧ 0 ≤ _x30 − 1 ∧ 2 ≤ _x31 − 1 f1_0_main_Load 6 f482_0_main_InvokeMethod: x1 = _x35 ∧ x2 = _x36 ∧ x3 = _x37 ∧ x1 = _x38 ∧ x2 = _x39 ∧ x3 = _x40 ∧ 0 ≤ _x41⋅_x42 ∧ 1 ≤ _x36 − 1 ∧ −1 ≤ _x42 − 1 ∧ −1 ≤ _x41 − 1 ∧ _x38 ≤ _x35 ∧ _x39 − 1 ≤ _x35 ∧ 0 ≤ _x35 − 1 ∧ 0 ≤ _x38 − 1 ∧ 1 ≤ _x39 − 1 f1_0_main_Load 7 f193_0__init__LE: x1 = _x43 ∧ x2 = _x44 ∧ x3 = _x45 ∧ x1 = _x47 ∧ x2 = _x48 ∧ x3 = _x49 ∧ 10 = _x47 ∧ 0 = _x44 ∧ 0 ≤ _x43 − 1 f1_0_main_Load 8 f193_0__init__LE: x1 = _x50 ∧ x2 = _x51 ∧ x3 = _x52 ∧ x1 = _x53 ∧ x2 = _x54 ∧ x3 = _x55 ∧ 0 ≤ _x50 − 1 ∧ −1 ≤ _x56 − 1 ∧ 1 = _x51 ∧ 10 = _x53 f1_0_main_Load 9 f193_0__init__LE: x1 = _x57 ∧ x2 = _x58 ∧ x3 = _x59 ∧ x1 = _x60 ∧ x2 = _x61 ∧ x3 = _x62 ∧ 0 ≤ _x63⋅_x65 ∧ 1 ≤ _x58 − 1 ∧ −1 ≤ _x65 − 1 ∧ −1 ≤ _x63 − 1 ∧ 0 ≤ _x57 − 1 ∧ _x63⋅_x65 + 10 = _x60 f193_0__init__LE 10 f193_0__init__LE: x1 = _x66 ∧ x2 = _x67 ∧ x3 = _x68 ∧ x1 = _x70 ∧ x2 = _x71 ∧ x3 = _x72 ∧ _x66 − 1 = _x70 ∧ _x66 − 1 ≤ _x66 − 1 ∧ 1 ≤ _x66 − 1 f193_0__init__LE 11 f518_0__init__InvokeMethod: x1 = _x73 ∧ x2 = _x74 ∧ x3 = _x75 ∧ x1 = _x76 ∧ x2 = _x77 ∧ x3 = _x78 ∧ _x73 − 1 = _x77 ∧ 1 ≤ _x73 − 1 ∧ 4 ≤ _x76 − 1 ∧ _x73 − 1 ≤ _x73 − 1 f193_0__init__LE 12 f518_0__init__InvokeMethod: x1 = _x79 ∧ x2 = _x80 ∧ x3 = _x81 ∧ x1 = _x82 ∧ x2 = _x83 ∧ x3 = _x84 ∧ _x79 − 1 = _x83 ∧ 1 ≤ _x79 − 1 ∧ 3 ≤ _x82 − 1 ∧ _x79 − 1 ≤ _x79 − 1 f518_0__init__InvokeMethod 13 f193_0__init__LE: x1 = _x85 ∧ x2 = _x86 ∧ x3 = _x87 ∧ x1 = _x88 ∧ x2 = _x89 ∧ x3 = _x90 ∧ _x86 = _x88 ∧ 0 ≤ _x86 − 1 ∧ 2 ≤ _x85 − 1 f480_0_main_InvokeMethod 14 f388_0_height_NONNULL: x1 = _x91 ∧ x2 = _x92 ∧ x3 = _x93 ∧ x1 = _x94 ∧ x2 = _x95 ∧ x3 = _x96 ∧ −1 ≤ _x95 − 1 ∧ 0 ≤ _x94 − 1 ∧ 0 ≤ _x91 − 1 ∧ _x95 + 1 ≤ _x91 ∧ _x94 ≤ _x91 f481_0_main_InvokeMethod 15 f388_0_height_NONNULL: x1 = _x97 ∧ x2 = _x98 ∧ x3 = _x99 ∧ x1 = _x100 ∧ x2 = _x101 ∧ x3 = _x102 ∧ −1 ≤ _x101 − 1 ∧ 0 ≤ _x100 − 1 ∧ 0 ≤ _x97 − 1 ∧ _x101 + 1 ≤ _x97 ∧ _x100 ≤ _x97 f482_0_main_InvokeMethod 16 f388_0_height_NONNULL: x1 = _x103 ∧ x2 = _x104 ∧ x3 = _x105 ∧ x1 = _x106 ∧ x2 = _x107 ∧ x3 = _x108 ∧ _x106 ≤ _x104 ∧ 1 ≤ _x109 − 1 ∧ _x107 + 1 ≤ _x104 ∧ 0 ≤ _x103 − 1 ∧ 0 ≤ _x104 − 1 ∧ 0 ≤ _x106 − 1 ∧ −1 ≤ _x107 − 1 f388_0_height_NONNULL 17 f388_0_height_NONNULL: x1 = _x110 ∧ x2 = _x111 ∧ x3 = _x112 ∧ x1 = _x113 ∧ x2 = _x114 ∧ x3 = _x115 ∧ −1 ≤ _x114 − 1 ∧ 0 ≤ _x113 − 1 ∧ 0 ≤ _x111 − 1 ∧ 2 ≤ _x110 − 1 ∧ _x114 + 1 ≤ _x111 ∧ _x114 + 3 ≤ _x110 ∧ _x113 ≤ _x111 ∧ _x113 + 2 ≤ _x110 f388_0_height_NONNULL 18 f388_0_height_NONNULL: x1 = _x116 ∧ x2 = _x117 ∧ x3 = _x118 ∧ x1 = _x119 ∧ x2 = _x120 ∧ x3 = _x121 ∧ −1 ≤ _x120 − 1 ∧ 0 ≤ _x119 − 1 ∧ −1 ≤ _x117 − 1 ∧ 2 ≤ _x116 − 1 ∧ _x120 + 3 ≤ _x116 ∧ _x119 + 2 ≤ _x116 __init 19 f1_0_main_Load: x1 = _x122 ∧ x2 = _x123 ∧ x3 = _x124 ∧ x1 = _x125 ∧ x2 = _x126 ∧ x3 = _x127 ∧ 0 ≤ 0

## Proof

### 1 Switch to Cooperation Termination Proof

We consider the following cutpoint-transitions:
 f193_0__init__LE f193_0__init__LE f193_0__init__LE: x1 = x1 ∧ x2 = x2 ∧ x3 = x3 f518_0__init__InvokeMethod f518_0__init__InvokeMethod f518_0__init__InvokeMethod: x1 = x1 ∧ x2 = x2 ∧ x3 = x3 f480_0_main_InvokeMethod f480_0_main_InvokeMethod f480_0_main_InvokeMethod: x1 = x1 ∧ x2 = x2 ∧ x3 = x3 f481_0_main_InvokeMethod f481_0_main_InvokeMethod f481_0_main_InvokeMethod: x1 = x1 ∧ x2 = x2 ∧ x3 = x3 f482_0_main_InvokeMethod f482_0_main_InvokeMethod f482_0_main_InvokeMethod: x1 = x1 ∧ x2 = x2 ∧ x3 = x3 f388_0_height_NONNULL f388_0_height_NONNULL f388_0_height_NONNULL: x1 = x1 ∧ x2 = x2 ∧ x3 = x3 f1_0_main_Load f1_0_main_Load f1_0_main_Load: x1 = x1 ∧ x2 = x2 ∧ x3 = x3 __init __init __init: x1 = x1 ∧ x2 = x2 ∧ x3 = x3
and for every transition t, a duplicate t is considered.

### 2 SCC Decomposition

We consider subproblems for each of the 2 SCC(s) of the program graph.

### 2.1 SCC Subproblem 1/2

Here we consider the SCC { f193_0__init__LE, f518_0__init__InvokeMethod }.

### 2.1.1 Transition Removal

We remove transitions 10, 13, 12, 11 using the following ranking functions, which are bounded by 0.

 f193_0__init__LE: 2⋅x1 f518_0__init__InvokeMethod: 1 + 2⋅x2

### 2.1.2 Trivial Cooperation Program

There are no more "sharp" transitions in the cooperation program. Hence the cooperation termination is proved.

### 2.2 SCC Subproblem 2/2

Here we consider the SCC { f388_0_height_NONNULL }.

### 2.2.1 Transition Removal

We remove transitions 17, 18 using the following ranking functions, which are bounded by 0.

 f388_0_height_NONNULL: x1

### 2.2.2 Trivial Cooperation Program

There are no more "sharp" transitions in the cooperation program. Hence the cooperation termination is proved.

## Tool configuration

AProVE

• version: AProVE Commit ID: unknown
• strategy: Statistics for single proof: 100.00 % (8 real / 0 unknown / 0 assumptions / 8 total proof steps)