LTS Termination Proof

by T2Cert

Input

Integer Transition System

Proof

1 Invariant Updates

The following invariants are asserted.

0: 1 + fact3_post ≤ 01 + factor_post ≤ 0−1 − factor_post ≤ 01 + fact3_0 ≤ 01 + factor_0 ≤ 0−1 − factor_0 ≤ 0
1: 1 + fact3_post ≤ 01 + factor_post ≤ 0−1 − factor_post ≤ 01 + fact3_0 ≤ 01 + factor_0 ≤ 0−1 − factor_0 ≤ 0Sorted5_0 ≤ 0Sorted5_0 ≤ 0
2: 1 + fact3_post ≤ 01 + factor_post ≤ 0−1 − factor_post ≤ 01 + fact3_0 ≤ 01 + factor_0 ≤ 0−1 − factor_0 ≤ 0
3: 1 + fact3_post ≤ 01 + factor_post ≤ 0−1 − factor_post ≤ 01 + fact3_0 ≤ 01 + factor_0 ≤ 0−1 − factor_0 ≤ 0
4: 1 + fact3_post ≤ 01 + factor_post ≤ 0−1 − factor_post ≤ 01 + fact3_0 ≤ 01 + factor_0 ≤ 0−1 − factor_0 ≤ 0
5: 1 + fact3_post ≤ 01 + factor_post ≤ 0−1 − factor_post ≤ 01 + fact3_0 ≤ 01 + factor_0 ≤ 0−1 − factor_0 ≤ 0
6: 1 + fact3_post ≤ 01 + factor_post ≤ 0−1 − factor_post ≤ 01 + fact3_0 ≤ 01 + factor_0 ≤ 0−1 − factor_0 ≤ 0
7: 1 + fact3_post ≤ 01 + factor_post ≤ 0−1 − factor_post ≤ 01 + fact3_0 ≤ 01 + factor_0 ≤ 0−1 − factor_0 ≤ 0
8: 1 + fact3_post ≤ 01 + factor_post ≤ 0−1 − factor_post ≤ 01 + fact3_0 ≤ 01 + factor_0 ≤ 0−1 − factor_0 ≤ 0
9: 1 + fact3_post ≤ 01 + factor_post ≤ 0−1 − factor_post ≤ 01 + fact3_0 ≤ 01 + factor_0 ≤ 0−1 − factor_0 ≤ 0
10: 1 + fact3_post ≤ 01 + factor_post ≤ 0−1 − factor_post ≤ 01 + fact3_0 ≤ 01 + factor_0 ≤ 0−1 − factor_0 ≤ 0Sorted5_0 ≤ 0Sorted5_0 ≤ 0
11: 1 + fact3_post ≤ 01 + factor_post ≤ 0−1 − factor_post ≤ 01 + fact3_0 ≤ 01 + factor_0 ≤ 0−1 − factor_0 ≤ 0
12: 1 + fact3_post ≤ 01 + factor_post ≤ 0−1 − factor_post ≤ 01 + fact3_0 ≤ 01 + factor_0 ≤ 0−1 − factor_0 ≤ 0
13: 1 + fact3_post ≤ 01 + factor_post ≤ 0−1 − factor_post ≤ 01 + fact3_0 ≤ 01 + factor_0 ≤ 0−1 − factor_0 ≤ 0
14: TRUE
15: TRUE

The invariants are proved as follows.

IMPACT Invariant Proof

2 Switch to Cooperation Termination Proof

We consider the following cutpoint-transitions:
1 22 1: i8_post + i8_post ≤ 0i8_posti8_post ≤ 0i8_0 + i8_0 ≤ 0i8_0i8_0 ≤ 0factor_post + factor_post ≤ 0factor_postfactor_post ≤ 0factor_0 + factor_0 ≤ 0factor_0factor_0 ≤ 0fact3_post + fact3_post ≤ 0fact3_postfact3_post ≤ 0fact3_0 + fact3_0 ≤ 0fact3_0fact3_0 ≤ 0___const_99_0 + ___const_99_0 ≤ 0___const_99_0___const_99_0 ≤ 0___const_100_0 + ___const_100_0 ≤ 0___const_100_0___const_100_0 ≤ 0Temp6_post + Temp6_post ≤ 0Temp6_postTemp6_post ≤ 0Temp6_0 + Temp6_0 ≤ 0Temp6_0Temp6_0 ≤ 0Sorted5_post + Sorted5_post ≤ 0Sorted5_postSorted5_post ≤ 0Sorted5_0 + Sorted5_0 ≤ 0Sorted5_0Sorted5_0 ≤ 0Index7_post + Index7_post ≤ 0Index7_postIndex7_post ≤ 0Index7_0 + Index7_0 ≤ 0Index7_0Index7_0 ≤ 0Index2_post + Index2_post ≤ 0Index2_postIndex2_post ≤ 0Index2_0 + Index2_0 ≤ 0Index2_0Index2_0 ≤ 0
2 29 2: i8_post + i8_post ≤ 0i8_posti8_post ≤ 0i8_0 + i8_0 ≤ 0i8_0i8_0 ≤ 0factor_post + factor_post ≤ 0factor_postfactor_post ≤ 0factor_0 + factor_0 ≤ 0factor_0factor_0 ≤ 0fact3_post + fact3_post ≤ 0fact3_postfact3_post ≤ 0fact3_0 + fact3_0 ≤ 0fact3_0fact3_0 ≤ 0___const_99_0 + ___const_99_0 ≤ 0___const_99_0___const_99_0 ≤ 0___const_100_0 + ___const_100_0 ≤ 0___const_100_0___const_100_0 ≤ 0Temp6_post + Temp6_post ≤ 0Temp6_postTemp6_post ≤ 0Temp6_0 + Temp6_0 ≤ 0Temp6_0Temp6_0 ≤ 0Sorted5_post + Sorted5_post ≤ 0Sorted5_postSorted5_post ≤ 0Sorted5_0 + Sorted5_0 ≤ 0Sorted5_0Sorted5_0 ≤ 0Index7_post + Index7_post ≤ 0Index7_postIndex7_post ≤ 0Index7_0 + Index7_0 ≤ 0Index7_0Index7_0 ≤ 0Index2_post + Index2_post ≤ 0Index2_postIndex2_post ≤ 0Index2_0 + Index2_0 ≤ 0Index2_0Index2_0 ≤ 0
9 36 9: i8_post + i8_post ≤ 0i8_posti8_post ≤ 0i8_0 + i8_0 ≤ 0i8_0i8_0 ≤ 0factor_post + factor_post ≤ 0factor_postfactor_post ≤ 0factor_0 + factor_0 ≤ 0factor_0factor_0 ≤ 0fact3_post + fact3_post ≤ 0fact3_postfact3_post ≤ 0fact3_0 + fact3_0 ≤ 0fact3_0fact3_0 ≤ 0___const_99_0 + ___const_99_0 ≤ 0___const_99_0___const_99_0 ≤ 0___const_100_0 + ___const_100_0 ≤ 0___const_100_0___const_100_0 ≤ 0Temp6_post + Temp6_post ≤ 0Temp6_postTemp6_post ≤ 0Temp6_0 + Temp6_0 ≤ 0Temp6_0Temp6_0 ≤ 0Sorted5_post + Sorted5_post ≤ 0Sorted5_postSorted5_post ≤ 0Sorted5_0 + Sorted5_0 ≤ 0Sorted5_0Sorted5_0 ≤ 0Index7_post + Index7_post ≤ 0Index7_postIndex7_post ≤ 0Index7_0 + Index7_0 ≤ 0Index7_0Index7_0 ≤ 0Index2_post + Index2_post ≤ 0Index2_postIndex2_post ≤ 0Index2_0 + Index2_0 ≤ 0Index2_0Index2_0 ≤ 0
and for every transition t, a duplicate t is considered.

3 Transition Removal

We remove transitions 0, 3, 4, 7, 8, 18, 20, 21 using the following ranking functions, which are bounded by −23.

15: 0
14: 0
0: 0
2: 0
1: 0
6: 0
7: 0
8: 0
9: 0
10: 0
11: 0
12: 0
13: 0
5: 0
3: 0
4: 0
15: −8
14: −9
0: −10
2: −10
2_var_snapshot: −10
2*: −10
1: −11
6: −11
7: −11
8: −11
9: −11
10: −11
11: −11
12: −11
13: −11
1_var_snapshot: −11
1*: −11
9_var_snapshot: −11
9*: −11
5: −12
3: −15
4: −16

4 Location Addition

The following skip-transition is inserted and corresponding redirections w.r.t. the old location are performed.

1* 25 1: i8_post + i8_post ≤ 0i8_posti8_post ≤ 0i8_0 + i8_0 ≤ 0i8_0i8_0 ≤ 0factor_post + factor_post ≤ 0factor_postfactor_post ≤ 0factor_0 + factor_0 ≤ 0factor_0factor_0 ≤ 0fact3_post + fact3_post ≤ 0fact3_postfact3_post ≤ 0fact3_0 + fact3_0 ≤ 0fact3_0fact3_0 ≤ 0___const_99_0 + ___const_99_0 ≤ 0___const_99_0___const_99_0 ≤ 0___const_100_0 + ___const_100_0 ≤ 0___const_100_0___const_100_0 ≤ 0Temp6_post + Temp6_post ≤ 0Temp6_postTemp6_post ≤ 0Temp6_0 + Temp6_0 ≤ 0Temp6_0Temp6_0 ≤ 0Sorted5_post + Sorted5_post ≤ 0Sorted5_postSorted5_post ≤ 0Sorted5_0 + Sorted5_0 ≤ 0Sorted5_0Sorted5_0 ≤ 0Index7_post + Index7_post ≤ 0Index7_postIndex7_post ≤ 0Index7_0 + Index7_0 ≤ 0Index7_0Index7_0 ≤ 0Index2_post + Index2_post ≤ 0Index2_postIndex2_post ≤ 0Index2_0 + Index2_0 ≤ 0Index2_0Index2_0 ≤ 0

5 Location Addition

The following skip-transition is inserted and corresponding redirections w.r.t. the old location are performed.

1 23 1_var_snapshot: i8_post + i8_post ≤ 0i8_posti8_post ≤ 0i8_0 + i8_0 ≤ 0i8_0i8_0 ≤ 0factor_post + factor_post ≤ 0factor_postfactor_post ≤ 0factor_0 + factor_0 ≤ 0factor_0factor_0 ≤ 0fact3_post + fact3_post ≤ 0fact3_postfact3_post ≤ 0fact3_0 + fact3_0 ≤ 0fact3_0fact3_0 ≤ 0___const_99_0 + ___const_99_0 ≤ 0___const_99_0___const_99_0 ≤ 0___const_100_0 + ___const_100_0 ≤ 0___const_100_0___const_100_0 ≤ 0Temp6_post + Temp6_post ≤ 0Temp6_postTemp6_post ≤ 0Temp6_0 + Temp6_0 ≤ 0Temp6_0Temp6_0 ≤ 0Sorted5_post + Sorted5_post ≤ 0Sorted5_postSorted5_post ≤ 0Sorted5_0 + Sorted5_0 ≤ 0Sorted5_0Sorted5_0 ≤ 0Index7_post + Index7_post ≤ 0Index7_postIndex7_post ≤ 0Index7_0 + Index7_0 ≤ 0Index7_0Index7_0 ≤ 0Index2_post + Index2_post ≤ 0Index2_postIndex2_post ≤ 0Index2_0 + Index2_0 ≤ 0Index2_0Index2_0 ≤ 0

6 Location Addition

The following skip-transition is inserted and corresponding redirections w.r.t. the old location are performed.

2* 32 2: i8_post + i8_post ≤ 0i8_posti8_post ≤ 0i8_0 + i8_0 ≤ 0i8_0i8_0 ≤ 0factor_post + factor_post ≤ 0factor_postfactor_post ≤ 0factor_0 + factor_0 ≤ 0factor_0factor_0 ≤ 0fact3_post + fact3_post ≤ 0fact3_postfact3_post ≤ 0fact3_0 + fact3_0 ≤ 0fact3_0fact3_0 ≤ 0___const_99_0 + ___const_99_0 ≤ 0___const_99_0___const_99_0 ≤ 0___const_100_0 + ___const_100_0 ≤ 0___const_100_0___const_100_0 ≤ 0Temp6_post + Temp6_post ≤ 0Temp6_postTemp6_post ≤ 0Temp6_0 + Temp6_0 ≤ 0Temp6_0Temp6_0 ≤ 0Sorted5_post + Sorted5_post ≤ 0Sorted5_postSorted5_post ≤ 0Sorted5_0 + Sorted5_0 ≤ 0Sorted5_0Sorted5_0 ≤ 0Index7_post + Index7_post ≤ 0Index7_postIndex7_post ≤ 0Index7_0 + Index7_0 ≤ 0Index7_0Index7_0 ≤ 0Index2_post + Index2_post ≤ 0Index2_postIndex2_post ≤ 0Index2_0 + Index2_0 ≤ 0Index2_0Index2_0 ≤ 0

7 Location Addition

The following skip-transition is inserted and corresponding redirections w.r.t. the old location are performed.

2 30 2_var_snapshot: i8_post + i8_post ≤ 0i8_posti8_post ≤ 0i8_0 + i8_0 ≤ 0i8_0i8_0 ≤ 0factor_post + factor_post ≤ 0factor_postfactor_post ≤ 0factor_0 + factor_0 ≤ 0factor_0factor_0 ≤ 0fact3_post + fact3_post ≤ 0fact3_postfact3_post ≤ 0fact3_0 + fact3_0 ≤ 0fact3_0fact3_0 ≤ 0___const_99_0 + ___const_99_0 ≤ 0___const_99_0___const_99_0 ≤ 0___const_100_0 + ___const_100_0 ≤ 0___const_100_0___const_100_0 ≤ 0Temp6_post + Temp6_post ≤ 0Temp6_postTemp6_post ≤ 0Temp6_0 + Temp6_0 ≤ 0Temp6_0Temp6_0 ≤ 0Sorted5_post + Sorted5_post ≤ 0Sorted5_postSorted5_post ≤ 0Sorted5_0 + Sorted5_0 ≤ 0Sorted5_0Sorted5_0 ≤ 0Index7_post + Index7_post ≤ 0Index7_postIndex7_post ≤ 0Index7_0 + Index7_0 ≤ 0Index7_0Index7_0 ≤ 0Index2_post + Index2_post ≤ 0Index2_postIndex2_post ≤ 0Index2_0 + Index2_0 ≤ 0Index2_0Index2_0 ≤ 0

8 Location Addition

The following skip-transition is inserted and corresponding redirections w.r.t. the old location are performed.

9* 39 9: i8_post + i8_post ≤ 0i8_posti8_post ≤ 0i8_0 + i8_0 ≤ 0i8_0i8_0 ≤ 0factor_post + factor_post ≤ 0factor_postfactor_post ≤ 0factor_0 + factor_0 ≤ 0factor_0factor_0 ≤ 0fact3_post + fact3_post ≤ 0fact3_postfact3_post ≤ 0fact3_0 + fact3_0 ≤ 0fact3_0fact3_0 ≤ 0___const_99_0 + ___const_99_0 ≤ 0___const_99_0___const_99_0 ≤ 0___const_100_0 + ___const_100_0 ≤ 0___const_100_0___const_100_0 ≤ 0Temp6_post + Temp6_post ≤ 0Temp6_postTemp6_post ≤ 0Temp6_0 + Temp6_0 ≤ 0Temp6_0Temp6_0 ≤ 0Sorted5_post + Sorted5_post ≤ 0Sorted5_postSorted5_post ≤ 0Sorted5_0 + Sorted5_0 ≤ 0Sorted5_0Sorted5_0 ≤ 0Index7_post + Index7_post ≤ 0Index7_postIndex7_post ≤ 0Index7_0 + Index7_0 ≤ 0Index7_0Index7_0 ≤ 0Index2_post + Index2_post ≤ 0Index2_postIndex2_post ≤ 0Index2_0 + Index2_0 ≤ 0Index2_0Index2_0 ≤ 0

9 Location Addition

The following skip-transition is inserted and corresponding redirections w.r.t. the old location are performed.

9 37 9_var_snapshot: i8_post + i8_post ≤ 0i8_posti8_post ≤ 0i8_0 + i8_0 ≤ 0i8_0i8_0 ≤ 0factor_post + factor_post ≤ 0factor_postfactor_post ≤ 0factor_0 + factor_0 ≤ 0factor_0factor_0 ≤ 0fact3_post + fact3_post ≤ 0fact3_postfact3_post ≤ 0fact3_0 + fact3_0 ≤ 0fact3_0fact3_0 ≤ 0___const_99_0 + ___const_99_0 ≤ 0___const_99_0___const_99_0 ≤ 0___const_100_0 + ___const_100_0 ≤ 0___const_100_0___const_100_0 ≤ 0Temp6_post + Temp6_post ≤ 0Temp6_postTemp6_post ≤ 0Temp6_0 + Temp6_0 ≤ 0Temp6_0Temp6_0 ≤ 0Sorted5_post + Sorted5_post ≤ 0Sorted5_postSorted5_post ≤ 0Sorted5_0 + Sorted5_0 ≤ 0Sorted5_0Sorted5_0 ≤ 0Index7_post + Index7_post ≤ 0Index7_postIndex7_post ≤ 0Index7_0 + Index7_0 ≤ 0Index7_0Index7_0 ≤ 0Index2_post + Index2_post ≤ 0Index2_postIndex2_post ≤ 0Index2_0 + Index2_0 ≤ 0Index2_0Index2_0 ≤ 0

10 SCC Decomposition

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

10.1 SCC Subproblem 1/2

Here we consider the SCC { 1, 6, 7, 8, 9, 10, 11, 12, 13, 1_var_snapshot, 1*, 9_var_snapshot, 9* }.

10.1.1 Transition Removal

We remove transition 19 using the following ranking functions, which are bounded by −2.

1: 13⋅___const_99_0factor_post − 13⋅i8_0
6: −9 + 13⋅___const_99_0 − 2⋅factor_0 + 2⋅factor_post − 13⋅i8_0
7: −12 + 13⋅___const_99_0 − 2⋅factor_0 − 13⋅i8_0
8: −2 + 13⋅___const_99_0 − 13⋅i8_0
9: 2 + 13⋅___const_99_0 + 2⋅factor_0 + 2⋅factor_post − 13⋅i8_0
10: 1 + 13⋅___const_99_0 + 2⋅factor_0 − 13⋅i8_0
11: −2 + 13⋅___const_99_0 − 13⋅i8_0
12: 13⋅___const_99_0 + 2⋅factor_0 − 13⋅i8_0
13: 13⋅___const_99_0 + 2⋅factor_post − 13⋅i8_0
1_var_snapshot: 13⋅___const_99_0 − 13⋅i8_0
1*: 13⋅___const_99_0 − 2⋅factor_0 − 13⋅i8_0
9_var_snapshot: 2 + 13⋅___const_99_0 + 2⋅factor_0 + 2⋅factor_post − 13⋅i8_0
9*: 13⋅___const_99_0 + 2⋅factor_0 − 13⋅i8_0

10.1.2 Transition Removal

We remove transition 16 using the following ranking functions, which are bounded by 3.

1: −7⋅Index7_0 + 7⋅___const_99_0 + factor_post
6: −3 − 7⋅Index7_0 + 7⋅___const_99_0 − 5⋅factor_post
7: −7⋅Index7_0 + 7⋅___const_99_0 + 4⋅factor_0 − 5⋅factor_post
8: −7⋅Index7_0 + 7⋅___const_99_0factor_0
9: 6 − 7⋅Index7_0 + 7⋅___const_99_0
10: −1 − 7⋅Index7_0 + 7⋅___const_99_0 + factor_0 + factor_post
11: −7⋅Index7_0 + 7⋅___const_99_0 − 2⋅factor_post
12: 3 − 7⋅Index7_0 + 7⋅___const_99_0
13: −1 − 7⋅Index7_0 + 7⋅___const_99_0 − 5⋅factor_post
1_var_snapshot: −7⋅Index7_0 + 7⋅___const_99_0 + factor_0 + factor_post
1*: −7⋅Index7_0 + 7⋅___const_99_0
9_var_snapshot: −7⋅Index7_0 + 7⋅___const_99_0 − 5⋅factor_post
9*: −7⋅Index7_0 + 7⋅___const_99_0 − 7⋅factor_post

10.1.3 Transition Removal

We remove transitions 23, 25, 37, 39, 5, 6, 9, 10, 11, 12, 13, 14, 15, 17 using the following ranking functions, which are bounded by −6.

1: 4⋅factor_0
6: factor_post
7: factor_0 + factor_post
8: 2 − 6⋅fact3_post + 3⋅factor_0 + factor_post
9: −4⋅fact3_post + 3⋅factor_0factor_post
10: factor_0 + 5⋅factor_post
11: −6⋅fact3_post + factor_post
12: −6⋅fact3_postfactor_0 + factor_post
13: 0
1_var_snapshot: 5⋅factor_post
1*: −2 + factor_0
9_var_snapshot: factor_post
9*: −6⋅fact3_post + 3⋅factor_0

10.1.4 Splitting Cut-Point Transitions

We consider 2 subproblems corresponding to sets of cut-point transitions as follows.

10.1.4.1 Cut-Point Subproblem 1/2

Here we consider cut-point transition 22.

10.1.4.1.1 Splitting Cut-Point Transitions

There remain no cut-point transition to consider. Hence the cooperation termination is trivial.

10.1.4.2 Cut-Point Subproblem 2/2

Here we consider cut-point transition 36.

10.1.4.2.1 Splitting Cut-Point Transitions

There remain no cut-point transition to consider. Hence the cooperation termination is trivial.

10.2 SCC Subproblem 2/2

Here we consider the SCC { 0, 2, 2_var_snapshot, 2* }.

10.2.1 Transition Removal

We remove transition 1 using the following ranking functions, which are bounded by −4.

0: −1 − 4⋅Index2_0 + 4⋅___const_100_0 + 2⋅factor_post
2: −1 − 4⋅Index2_0 + 4⋅___const_100_0
2_var_snapshot: −4⋅Index2_0 + 4⋅___const_100_0 + 2⋅factor_post
2*: −4⋅Index2_0 + 4⋅___const_100_0

10.2.2 Transition Removal

We remove transitions 30, 32, 2 using the following ranking functions, which are bounded by −1.

0: −1
2: fact3_post
2_var_snapshot: 0
2*: 1 − fact3_post

10.2.3 Splitting Cut-Point Transitions

We consider 1 subproblems corresponding to sets of cut-point transitions as follows.

10.2.3.1 Cut-Point Subproblem 1/1

Here we consider cut-point transition 29.

10.2.3.1.1 Splitting Cut-Point Transitions

There remain no cut-point transition to consider. Hence the cooperation termination is trivial.

Tool configuration

T2Cert