(0) Obligation:

Need to prove time_complexity of the following program:
/**
 * Example taken from "A Term Rewriting Approach to the Automated Termination
 * Analysis of Imperative Programs" (http://www.cs.unm.edu/~spf/papers/2009-02.pdf)
 * and converted to Java.
 */

public class PastaB2 {
    public static void main(int x, int y) {
        while (x > y) {
            x--;
            y++;
        }
    }
}


(1) JBCToGraph (BOTH CONCRETE BOUNDS(ID, ID) transformation)

Constructed TerminationGraph.

(2) Obligation:

Termination Graph based on JBC Program:
PastaB2.main(II)V: Graph of 44 nodes with 1 SCC.


(3) TerminationGraphToComplexityProof (BOTH CONCRETE BOUNDS(ID, ADD(4)) transformation)

Extracted set of 40 edges for the analysis of TIME complexity. Kept leaves.

(4) Obligation:

Set of 40 edges based on JBC Program.
Performed SCC analyses:
  • Used field analysis yielded the following read fields:

Considered paths: nonterm paths and paths from start to sinks

(5) JBCGraphEdgesToCpxIntTrsProof (CONCRETE UPPER BOUND(ID) transformation)

Transformed 40 jbc graph edges to a weighted ITS with 40 rules.
Used simplified encoding of division and modulo.
Filtered conditions with variables that do not depend on the variables on the lhs or rhs without taking transitive dependencies into account.
Did no encode lower bounds for putfield and astore.

(6) Obligation:

IntTrs with 40 rules
Start term: main_Load_2(#0, #1, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_Load_2(i2, i3, env, static) -{0,0}> main_Load_3(i2, i3, env, static) :|: 0 >= 0
main_Load_3(i2, i3, env, static) -{0,0}> langle_clinit_rangle_ConstantStackPush_6(i2, i3, env, static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(i2, i3, env, static) -{1,1}> langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, i3, env, static) :|: iconst_0 = 0
langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, i3, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_13(a2, i2, i3, iconst_0, env, static) :|: a2 = 2 && iconst_0 = 0 && 0 < a2
langle_clinit_rangle_FieldAccess_13(a2, i2, i3, iconst_0, env, static) -{1,1}> langle_clinit_rangle_New_16(i2, i3, env, static') :|: 0 <= a2 && iconst_0 = 0 && static' <= static + a2 && 0 <= static && 0 < a2
langle_clinit_rangle_New_16(i2, i3, env, static) -{0,0}> langle_clinit_rangle_New_17(i2, i3, env, static) :|: 0 >= 0
langle_clinit_rangle_New_17(i2, i3, env, static) -{0,0}> langle_clinit_rangle_New_19(i2, i3, env, static) :|: 0 <= static
langle_clinit_rangle_New_19(i2, i3, env, static) -{1,1}> langle_clinit_rangle_Duplicate_20(o2, i2, i3, env, static) :|: 0 < o2 && o2 = 1
langle_clinit_rangle_Duplicate_20(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_ConstantStackPush_22(o2, i2, i3, env, static) :|: 0 < o2
langle_clinit_rangle_ConstantStackPush_22(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_InvokeMethod_23(o2, NULL, i2, i3, env, static) :|: NULL = 0 && 0 < o2
langle_clinit_rangle_InvokeMethod_23(o2, NULL, i2, i3, env, static) -{1,1}> langle_init_rangle_Load_24(o2, i2, i3, env, static) :|: NULL = 0 && 0 < o2
langle_init_rangle_Load_24(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_InvokeMethod_27(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_27(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Load_28(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Load_28(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_InvokeMethod_30(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_30(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Return_32(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Return_32(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Return_35(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Return_35(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_37(o2, i2, i3, env, static) :|: 0 < o2
langle_clinit_rangle_FieldAccess_37(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_Return_40(i2, i3, env, static') :|: 0 < o2 && 0 <= o2 && 0 <= static && static' <= static + o2
langle_clinit_rangle_Return_40(i2, i3, env, static) -{1,1}> main_Load_41(i2, i3, env, static) :|: 0 >= 0
main_Load_41(i2, i3, env, static) -{0,0}> main_Load_42(i2, i3, env, static) :|: 0 >= 0
main_Load_42(i2, i3, env, static) -{0,0}> main_Load_43(i2, i3, env, static) :|: 0 <= static
main_Load_43(i2, i3, env, static) -{0,0}> main_Load_45(i2, i3, env, static) :|: 0 >= 0
main_Load_45(i2, i3, env, static) -{0,0}> main_Load_47(i2, i3, env, static) :|: 0 >= 0
main_Load_47(i2, i3, env, static) -{1,1}> main_Load_50(i2, i3, env, static) :|: 0 >= 0
main_Load_50(i2, i3, env, static) -{1,1}> main_LE_55(i2, i3, env, static) :|: 0 >= 0
main_LE_55(i2, i3, env, static) -{0,0}> main_LE_57(i2, i3, env, static) :|: i2 <= i3
main_LE_55(i2, i3, env, static) -{0,0}> main_LE_59(i2, i3, env, static) :|: i3 < i2
main_LE_59(i2, i3, env, static) -{1,1}> main_Inc_62(i2, i3, env, static) :|: i3 < i2
main_Inc_62(i2, i3, env, static) -{1,1}> main_Inc_66(i2, i3, i7, env, static) :|: i2 + -1 = i7
main_Inc_66(i2, i3, i7, env, static) -{1,1}> main_JMP_69(i2, i3, i7, i8, env, static) :|: i3 + 1 = i8
main_JMP_69(i2, i3, i7, i8, env, static) -{0,0}> main_JMP_132(i2, i3, i7, i8, env, static) :|: 0 >= 0
main_JMP_132(i2, i3, i27, i32, env, static) -{1,1}> main_Load_134(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_Load_134(i2, i3, i27, i32, env, static) -{1,1}> main_Load_140(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_Load_140(i2, i3, i27, i32, env, static) -{1,1}> main_LE_144(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_LE_144(i2, i3, i27, i32, env, static) -{0,0}> main_LE_153(i2, i3, i27, i32, env, static) :|: i27 <= i32
main_LE_144(i2, i3, i27, i32, env, static) -{0,0}> main_LE_154(i2, i3, i27, i32, env, static) :|: i32 < i27
main_LE_154(i2, i3, i27, i32, env, static) -{1,1}> main_Inc_168(i2, i3, i27, i32, env, static) :|: i32 < i27
main_Inc_168(i2, i3, i27, i32, env, static) -{1,1}> main_Inc_180(i2, i3, i55, i32, env, static) :|: i27 + -1 = i55
main_Inc_180(i2, i3, i55, i32, env, static) -{1,1}> main_JMP_189(i2, i3, i55, i60, env, static) :|: i32 + 1 = i60
main_JMP_189(i2, i3, i55, i60, env, static) -{0,0}> main_JMP_132(i2, i3, i55, i60, env, static) :|: 0 >= 0

(7) StraightLineCodeCompressionProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)

obtained
main_Load_2(i2, i3, env, static) -{17,17}> main_LE_55(i2, i3, env, static'1) :|: 0 >= 0 && 0 < 2 && 0 <= static'1 && 0 <= static && 0 <= 1 && 0 < 1 && static''' <= static + 2 && 0 <= static''' && 0 <= 2 && static'1 <= static''' + 1
by chaining
main_Load_2(i2, i3, env, static) -{0,0}> main_Load_3(i2, i3, env, static) :|: 0 >= 0
main_Load_3(i2, i3, env, static) -{0,0}> langle_clinit_rangle_ConstantStackPush_6(i2, i3, env, static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(i2, i3, env, static) -{1,1}> langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, i3, env, static) :|: iconst_0 = 0
langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, i3, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_13(a2, i2, i3, iconst_0, env, static) :|: a2 = 2 && iconst_0 = 0 && 0 < a2
langle_clinit_rangle_FieldAccess_13(a2, i2, i3, iconst_0, env, static) -{1,1}> langle_clinit_rangle_New_16(i2, i3, env, static') :|: 0 <= a2 && iconst_0 = 0 && static' <= static + a2 && 0 <= static && 0 < a2
langle_clinit_rangle_New_16(i2, i3, env, static) -{0,0}> langle_clinit_rangle_New_17(i2, i3, env, static) :|: 0 >= 0
langle_clinit_rangle_New_17(i2, i3, env, static) -{0,0}> langle_clinit_rangle_New_19(i2, i3, env, static) :|: 0 <= static
langle_clinit_rangle_New_19(i2, i3, env, static) -{1,1}> langle_clinit_rangle_Duplicate_20(o2, i2, i3, env, static) :|: 0 < o2 && o2 = 1
langle_clinit_rangle_Duplicate_20(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_ConstantStackPush_22(o2, i2, i3, env, static) :|: 0 < o2
langle_clinit_rangle_ConstantStackPush_22(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_InvokeMethod_23(o2, NULL, i2, i3, env, static) :|: NULL = 0 && 0 < o2
langle_clinit_rangle_InvokeMethod_23(o2, NULL, i2, i3, env, static) -{1,1}> langle_init_rangle_Load_24(o2, i2, i3, env, static) :|: NULL = 0 && 0 < o2
langle_init_rangle_Load_24(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_InvokeMethod_27(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_27(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Load_28(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Load_28(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_InvokeMethod_30(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_30(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Return_32(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Return_32(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Return_35(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Return_35(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_37(o2, i2, i3, env, static) :|: 0 < o2
langle_clinit_rangle_FieldAccess_37(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_Return_40(i2, i3, env, static') :|: 0 < o2 && 0 <= o2 && 0 <= static && static' <= static + o2
langle_clinit_rangle_Return_40(i2, i3, env, static) -{1,1}> main_Load_41(i2, i3, env, static) :|: 0 >= 0
main_Load_41(i2, i3, env, static) -{0,0}> main_Load_42(i2, i3, env, static) :|: 0 >= 0
main_Load_42(i2, i3, env, static) -{0,0}> main_Load_43(i2, i3, env, static) :|: 0 <= static
main_Load_43(i2, i3, env, static) -{0,0}> main_Load_45(i2, i3, env, static) :|: 0 >= 0
main_Load_45(i2, i3, env, static) -{0,0}> main_Load_47(i2, i3, env, static) :|: 0 >= 0
main_Load_47(i2, i3, env, static) -{1,1}> main_Load_50(i2, i3, env, static) :|: 0 >= 0
main_Load_50(i2, i3, env, static) -{1,1}> main_LE_55(i2, i3, env, static) :|: 0 >= 0

obtained
main_LE_55(i2, i3, env, static) -{3,3}> main_JMP_132(i2, i3, i7', i8', env, static) :|: 0 >= 0 && i2 + -1 = i7' && i3 + 1 = i8' && i3 < i2
by chaining
main_LE_55(i2, i3, env, static) -{0,0}> main_LE_59(i2, i3, env, static) :|: i3 < i2
main_LE_59(i2, i3, env, static) -{1,1}> main_Inc_62(i2, i3, env, static) :|: i3 < i2
main_Inc_62(i2, i3, env, static) -{1,1}> main_Inc_66(i2, i3, i7, env, static) :|: i2 + -1 = i7
main_Inc_66(i2, i3, i7, env, static) -{1,1}> main_JMP_69(i2, i3, i7, i8, env, static) :|: i3 + 1 = i8
main_JMP_69(i2, i3, i7, i8, env, static) -{0,0}> main_JMP_132(i2, i3, i7, i8, env, static) :|: 0 >= 0

obtained
main_JMP_132(i2, i3, i27, i32, env, static) -{3,3}> main_LE_144(i2, i3, i27, i32, env, static) :|: 0 >= 0
by chaining
main_JMP_132(i2, i3, i27, i32, env, static) -{1,1}> main_Load_134(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_Load_134(i2, i3, i27, i32, env, static) -{1,1}> main_Load_140(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_Load_140(i2, i3, i27, i32, env, static) -{1,1}> main_LE_144(i2, i3, i27, i32, env, static) :|: 0 >= 0

obtained
main_LE_144(i2, i3, i27, i32, env, static) -{3,3}> main_JMP_132(i2, i3, i55', i60', env, static) :|: 0 >= 0 && i27 + -1 = i55' && i32 + 1 = i60' && i32 < i27
by chaining
main_LE_144(i2, i3, i27, i32, env, static) -{0,0}> main_LE_154(i2, i3, i27, i32, env, static) :|: i32 < i27
main_LE_154(i2, i3, i27, i32, env, static) -{1,1}> main_Inc_168(i2, i3, i27, i32, env, static) :|: i32 < i27
main_Inc_168(i2, i3, i27, i32, env, static) -{1,1}> main_Inc_180(i2, i3, i55, i32, env, static) :|: i27 + -1 = i55
main_Inc_180(i2, i3, i55, i32, env, static) -{1,1}> main_JMP_189(i2, i3, i55, i60, env, static) :|: i32 + 1 = i60
main_JMP_189(i2, i3, i55, i60, env, static) -{0,0}> main_JMP_132(i2, i3, i55, i60, env, static) :|: 0 >= 0

(8) Obligation:

IntTrs with 6 rules
Start term: main_Load_2(#0, #1, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_Load_2(i2, i3, env, static) -{17,17}> main_LE_55(i2, i3, env, static'1) :|: 0 >= 0 && 0 < 2 && 0 <= static'1 && 0 <= static && 0 <= 1 && 0 < 1 && static''' <= static + 2 && 0 <= static''' && 0 <= 2 && static'1 <= static''' + 1
main_LE_55(i2, i3, env, static) -{0,0}> main_LE_57(i2, i3, env, static) :|: i2 <= i3
main_LE_55(i2, i3, env, static) -{3,3}> main_JMP_132(i2, i3, i7', i8', env, static) :|: 0 >= 0 && i2 + -1 = i7' && i3 + 1 = i8' && i3 < i2
main_JMP_132(i2, i3, i27, i32, env, static) -{3,3}> main_LE_144(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_LE_144(i2, i3, i27, i32, env, static) -{0,0}> main_LE_153(i2, i3, i27, i32, env, static) :|: i27 <= i32
main_LE_144(i2, i3, i27, i32, env, static) -{3,3}> main_JMP_132(i2, i3, i55', i60', env, static) :|: 0 >= 0 && i27 + -1 = i55' && i32 + 1 = i60' && i32 < i27

(9) MovedArithmeticFromConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)

Moved arithmethic from constraints to rhss.

main_LE_144(i2, i3, i27, i32, env, static) -{3,3}> main_JMP_132(i2, i3, i55', i60', env, static) :|: 0 >= 0 && i27 + -1 = i55' && i32 + 1 = i60' && i32 < i27
was transformed to
main_LE_144(i2, i3, i27, i32, env, static) -{3,3}> main_JMP_132(i2, i3, i27 + -1, i32 + 1, env, static) :|: 0 >= 0 && i27 + -1 = i55' && i32 + 1 = i60' && i32 < i27

main_LE_55(i2, i3, env, static) -{3,3}> main_JMP_132(i2, i3, i7', i8', env, static) :|: 0 >= 0 && i2 + -1 = i7' && i3 + 1 = i8' && i3 < i2
was transformed to
main_LE_55(i2, i3, env, static) -{3,3}> main_JMP_132(i2, i3, i2 + -1, i3 + 1, env, static) :|: 0 >= 0 && i2 + -1 = i7' && i3 + 1 = i8' && i3 < i2

(10) Obligation:

IntTrs with 6 rules
Start term: main_Load_2(#0, #1, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_LE_144(i2, i3, i27, i32, env, static) -{3,3}> main_JMP_132(i2, i3, i27 + -1, i32 + 1, env, static) :|: 0 >= 0 && i27 + -1 = i55' && i32 + 1 = i60' && i32 < i27
main_JMP_132(i2, i3, i27, i32, env, static) -{3,3}> main_LE_144(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_LE_144(i2, i3, i27, i32, env, static) -{0,0}> main_LE_153(i2, i3, i27, i32, env, static) :|: i27 <= i32
main_LE_55(i2, i3, env, static) -{0,0}> main_LE_57(i2, i3, env, static) :|: i2 <= i3
main_LE_55(i2, i3, env, static) -{3,3}> main_JMP_132(i2, i3, i2 + -1, i3 + 1, env, static) :|: 0 >= 0 && i2 + -1 = i7' && i3 + 1 = i8' && i3 < i2
main_Load_2(i2, i3, env, static) -{17,17}> main_LE_55(i2, i3, env, static'1) :|: 0 >= 0 && 0 < 2 && 0 <= static'1 && 0 <= static && 0 <= 1 && 0 < 1 && static''' <= static + 2 && 0 <= static''' && 0 <= 2 && static'1 <= static''' + 1

(11) ExpressionSimplificationProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)

Simplified expressions.

main_LE_144(i2, i3, i27, i32, env, static) -{3,3}> main_JMP_132(i2, i3, i27 + -1, i32 + 1, env, static) :|: 0 >= 0 && i27 + -1 = i55' && i32 + 1 = i60' && i32 < i27
was transformed to
main_LE_144(i2, i3, i27, i32, env, static) -{3,3}> main_JMP_132(i2, i3, i27 - 1, i32 + 1, env, static) :|: i27 - 1 = i55' && i32 + 1 = i60' && i32 < i27

main_LE_55(i2, i3, env, static) -{3,3}> main_JMP_132(i2, i3, i2 + -1, i3 + 1, env, static) :|: 0 >= 0 && i2 + -1 = i7' && i3 + 1 = i8' && i3 < i2
was transformed to
main_LE_55(i2, i3, env, static) -{3,3}> main_JMP_132(i2, i3, i2 - 1, i3 + 1, env, static) :|: i2 - 1 = i7' && i3 + 1 = i8' && i3 < i2

main_Load_2(i2, i3, env, static) -{17,17}> main_LE_55(i2, i3, env, static'1) :|: 0 >= 0 && 0 < 2 && 0 <= static'1 && 0 <= static && 0 <= 1 && 0 < 1 && static''' <= static + 2 && 0 <= static''' && 0 <= 2 && static'1 <= static''' + 1
was transformed to
main_Load_2(i2, i3, env, static) -{17,17}> main_LE_55(i2, i3, env, static'1) :|: 0 <= static'1 && 0 <= static && static''' <= static + 2 && 0 <= static''' && static'1 <= static''' + 1

(12) Obligation:

IntTrs with 6 rules
Start term: main_Load_2(#0, #1, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_JMP_132(i2, i3, i27, i32, env, static) -{3,3}> main_LE_144(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_LE_55(i2, i3, env, static) -{3,3}> main_JMP_132(i2, i3, i2 - 1, i3 + 1, env, static) :|: i2 - 1 = i7' && i3 + 1 = i8' && i3 < i2
main_LE_144(i2, i3, i27, i32, env, static) -{0,0}> main_LE_153(i2, i3, i27, i32, env, static) :|: i27 <= i32
main_Load_2(i2, i3, env, static) -{17,17}> main_LE_55(i2, i3, env, static'1) :|: 0 <= static'1 && 0 <= static && static''' <= static + 2 && 0 <= static''' && static'1 <= static''' + 1
main_LE_55(i2, i3, env, static) -{0,0}> main_LE_57(i2, i3, env, static) :|: i2 <= i3
main_LE_144(i2, i3, i27, i32, env, static) -{3,3}> main_JMP_132(i2, i3, i27 - 1, i32 + 1, env, static) :|: i27 - 1 = i55' && i32 + 1 = i60' && i32 < i27

(13) JBCGraphEdgesToCpxIntTrsProof (CONCRETE UPPER BOUND(ID) transformation)

Transformed 40 jbc graph edges to a weighted ITS with 40 rules.
Filtered conditions with variables that do not depend on the variables on the lhs or rhs without taking transitive dependencies into account.
Did no encode lower bounds for putfield and astore.

(14) Obligation:

IntTrs with 40 rules
Start term: main_Load_2(#0, #1, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_Load_2(i2, i3, env, static) -{0,0}> main_Load_3(i2, i3, env, static) :|: 0 >= 0
main_Load_3(i2, i3, env, static) -{0,0}> langle_clinit_rangle_ConstantStackPush_6(i2, i3, env, static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(i2, i3, env, static) -{1,1}> langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, i3, env, static) :|: iconst_0 = 0
langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, i3, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_13(a2, i2, i3, iconst_0, env, static) :|: a2 = 2 && iconst_0 = 0 && 0 < a2
langle_clinit_rangle_FieldAccess_13(a2, i2, i3, iconst_0, env, static) -{1,1}> langle_clinit_rangle_New_16(i2, i3, env, static') :|: 0 <= a2 && iconst_0 = 0 && static' <= static + a2 && 0 <= static && 0 < a2
langle_clinit_rangle_New_16(i2, i3, env, static) -{0,0}> langle_clinit_rangle_New_17(i2, i3, env, static) :|: 0 >= 0
langle_clinit_rangle_New_17(i2, i3, env, static) -{0,0}> langle_clinit_rangle_New_19(i2, i3, env, static) :|: 0 <= static
langle_clinit_rangle_New_19(i2, i3, env, static) -{1,1}> langle_clinit_rangle_Duplicate_20(o2, i2, i3, env, static) :|: 0 < o2 && o2 = 1
langle_clinit_rangle_Duplicate_20(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_ConstantStackPush_22(o2, i2, i3, env, static) :|: 0 < o2
langle_clinit_rangle_ConstantStackPush_22(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_InvokeMethod_23(o2, NULL, i2, i3, env, static) :|: NULL = 0 && 0 < o2
langle_clinit_rangle_InvokeMethod_23(o2, NULL, i2, i3, env, static) -{1,1}> langle_init_rangle_Load_24(o2, i2, i3, env, static) :|: NULL = 0 && 0 < o2
langle_init_rangle_Load_24(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_InvokeMethod_27(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_27(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Load_28(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Load_28(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_InvokeMethod_30(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_30(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Return_32(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Return_32(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Return_35(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Return_35(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_37(o2, i2, i3, env, static) :|: 0 < o2
langle_clinit_rangle_FieldAccess_37(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_Return_40(i2, i3, env, static') :|: 0 < o2 && 0 <= o2 && 0 <= static && static' <= static + o2
langle_clinit_rangle_Return_40(i2, i3, env, static) -{1,1}> main_Load_41(i2, i3, env, static) :|: 0 >= 0
main_Load_41(i2, i3, env, static) -{0,0}> main_Load_42(i2, i3, env, static) :|: 0 >= 0
main_Load_42(i2, i3, env, static) -{0,0}> main_Load_43(i2, i3, env, static) :|: 0 <= static
main_Load_43(i2, i3, env, static) -{0,0}> main_Load_45(i2, i3, env, static) :|: 0 >= 0
main_Load_45(i2, i3, env, static) -{0,0}> main_Load_47(i2, i3, env, static) :|: 0 >= 0
main_Load_47(i2, i3, env, static) -{1,1}> main_Load_50(i2, i3, env, static) :|: 0 >= 0
main_Load_50(i2, i3, env, static) -{1,1}> main_LE_55(i2, i3, env, static) :|: 0 >= 0
main_LE_55(i2, i3, env, static) -{0,0}> main_LE_57(i2, i3, env, static) :|: i2 <= i3
main_LE_55(i2, i3, env, static) -{0,0}> main_LE_59(i2, i3, env, static) :|: i3 < i2
main_LE_59(i2, i3, env, static) -{1,1}> main_Inc_62(i2, i3, env, static) :|: i3 < i2
main_Inc_62(i2, i3, env, static) -{1,1}> main_Inc_66(i2, i3, i7, env, static) :|: i2 + -1 = i7
main_Inc_66(i2, i3, i7, env, static) -{1,1}> main_JMP_69(i2, i3, i7, i8, env, static) :|: i3 + 1 = i8
main_JMP_69(i2, i3, i7, i8, env, static) -{0,0}> main_JMP_132(i2, i3, i7, i8, env, static) :|: 0 >= 0
main_JMP_132(i2, i3, i27, i32, env, static) -{1,1}> main_Load_134(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_Load_134(i2, i3, i27, i32, env, static) -{1,1}> main_Load_140(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_Load_140(i2, i3, i27, i32, env, static) -{1,1}> main_LE_144(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_LE_144(i2, i3, i27, i32, env, static) -{0,0}> main_LE_153(i2, i3, i27, i32, env, static) :|: i27 <= i32
main_LE_144(i2, i3, i27, i32, env, static) -{0,0}> main_LE_154(i2, i3, i27, i32, env, static) :|: i32 < i27
main_LE_154(i2, i3, i27, i32, env, static) -{1,1}> main_Inc_168(i2, i3, i27, i32, env, static) :|: i32 < i27
main_Inc_168(i2, i3, i27, i32, env, static) -{1,1}> main_Inc_180(i2, i3, i55, i32, env, static) :|: i27 + -1 = i55
main_Inc_180(i2, i3, i55, i32, env, static) -{1,1}> main_JMP_189(i2, i3, i55, i60, env, static) :|: i32 + 1 = i60
main_JMP_189(i2, i3, i55, i60, env, static) -{0,0}> main_JMP_132(i2, i3, i55, i60, env, static) :|: 0 >= 0

(15) StraightLineCodeCompressionProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)

obtained
main_Load_2(i2, i3, env, static) -{17,17}> main_LE_55(i2, i3, env, static'1) :|: 0 >= 0 && 0 < 2 && 0 <= static'1 && 0 <= static && 0 <= 1 && 0 < 1 && static''' <= static + 2 && 0 <= static''' && 0 <= 2 && static'1 <= static''' + 1
by chaining
main_Load_2(i2, i3, env, static) -{0,0}> main_Load_3(i2, i3, env, static) :|: 0 >= 0
main_Load_3(i2, i3, env, static) -{0,0}> langle_clinit_rangle_ConstantStackPush_6(i2, i3, env, static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(i2, i3, env, static) -{1,1}> langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, i3, env, static) :|: iconst_0 = 0
langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, i3, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_13(a2, i2, i3, iconst_0, env, static) :|: a2 = 2 && iconst_0 = 0 && 0 < a2
langle_clinit_rangle_FieldAccess_13(a2, i2, i3, iconst_0, env, static) -{1,1}> langle_clinit_rangle_New_16(i2, i3, env, static') :|: 0 <= a2 && iconst_0 = 0 && static' <= static + a2 && 0 <= static && 0 < a2
langle_clinit_rangle_New_16(i2, i3, env, static) -{0,0}> langle_clinit_rangle_New_17(i2, i3, env, static) :|: 0 >= 0
langle_clinit_rangle_New_17(i2, i3, env, static) -{0,0}> langle_clinit_rangle_New_19(i2, i3, env, static) :|: 0 <= static
langle_clinit_rangle_New_19(i2, i3, env, static) -{1,1}> langle_clinit_rangle_Duplicate_20(o2, i2, i3, env, static) :|: 0 < o2 && o2 = 1
langle_clinit_rangle_Duplicate_20(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_ConstantStackPush_22(o2, i2, i3, env, static) :|: 0 < o2
langle_clinit_rangle_ConstantStackPush_22(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_InvokeMethod_23(o2, NULL, i2, i3, env, static) :|: NULL = 0 && 0 < o2
langle_clinit_rangle_InvokeMethod_23(o2, NULL, i2, i3, env, static) -{1,1}> langle_init_rangle_Load_24(o2, i2, i3, env, static) :|: NULL = 0 && 0 < o2
langle_init_rangle_Load_24(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_InvokeMethod_27(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_27(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Load_28(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Load_28(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_InvokeMethod_30(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_30(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Return_32(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Return_32(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Return_35(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Return_35(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_37(o2, i2, i3, env, static) :|: 0 < o2
langle_clinit_rangle_FieldAccess_37(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_Return_40(i2, i3, env, static') :|: 0 < o2 && 0 <= o2 && 0 <= static && static' <= static + o2
langle_clinit_rangle_Return_40(i2, i3, env, static) -{1,1}> main_Load_41(i2, i3, env, static) :|: 0 >= 0
main_Load_41(i2, i3, env, static) -{0,0}> main_Load_42(i2, i3, env, static) :|: 0 >= 0
main_Load_42(i2, i3, env, static) -{0,0}> main_Load_43(i2, i3, env, static) :|: 0 <= static
main_Load_43(i2, i3, env, static) -{0,0}> main_Load_45(i2, i3, env, static) :|: 0 >= 0
main_Load_45(i2, i3, env, static) -{0,0}> main_Load_47(i2, i3, env, static) :|: 0 >= 0
main_Load_47(i2, i3, env, static) -{1,1}> main_Load_50(i2, i3, env, static) :|: 0 >= 0
main_Load_50(i2, i3, env, static) -{1,1}> main_LE_55(i2, i3, env, static) :|: 0 >= 0

obtained
main_LE_55(i2, i3, env, static) -{3,3}> main_JMP_132(i2, i3, i7', i8', env, static) :|: 0 >= 0 && i2 + -1 = i7' && i3 + 1 = i8' && i3 < i2
by chaining
main_LE_55(i2, i3, env, static) -{0,0}> main_LE_59(i2, i3, env, static) :|: i3 < i2
main_LE_59(i2, i3, env, static) -{1,1}> main_Inc_62(i2, i3, env, static) :|: i3 < i2
main_Inc_62(i2, i3, env, static) -{1,1}> main_Inc_66(i2, i3, i7, env, static) :|: i2 + -1 = i7
main_Inc_66(i2, i3, i7, env, static) -{1,1}> main_JMP_69(i2, i3, i7, i8, env, static) :|: i3 + 1 = i8
main_JMP_69(i2, i3, i7, i8, env, static) -{0,0}> main_JMP_132(i2, i3, i7, i8, env, static) :|: 0 >= 0

obtained
main_JMP_132(i2, i3, i27, i32, env, static) -{3,3}> main_LE_144(i2, i3, i27, i32, env, static) :|: 0 >= 0
by chaining
main_JMP_132(i2, i3, i27, i32, env, static) -{1,1}> main_Load_134(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_Load_134(i2, i3, i27, i32, env, static) -{1,1}> main_Load_140(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_Load_140(i2, i3, i27, i32, env, static) -{1,1}> main_LE_144(i2, i3, i27, i32, env, static) :|: 0 >= 0

obtained
main_LE_144(i2, i3, i27, i32, env, static) -{3,3}> main_JMP_132(i2, i3, i55', i60', env, static) :|: 0 >= 0 && i27 + -1 = i55' && i32 + 1 = i60' && i32 < i27
by chaining
main_LE_144(i2, i3, i27, i32, env, static) -{0,0}> main_LE_154(i2, i3, i27, i32, env, static) :|: i32 < i27
main_LE_154(i2, i3, i27, i32, env, static) -{1,1}> main_Inc_168(i2, i3, i27, i32, env, static) :|: i32 < i27
main_Inc_168(i2, i3, i27, i32, env, static) -{1,1}> main_Inc_180(i2, i3, i55, i32, env, static) :|: i27 + -1 = i55
main_Inc_180(i2, i3, i55, i32, env, static) -{1,1}> main_JMP_189(i2, i3, i55, i60, env, static) :|: i32 + 1 = i60
main_JMP_189(i2, i3, i55, i60, env, static) -{0,0}> main_JMP_132(i2, i3, i55, i60, env, static) :|: 0 >= 0

(16) Obligation:

IntTrs with 6 rules
Start term: main_Load_2(#0, #1, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_Load_2(i2, i3, env, static) -{17,17}> main_LE_55(i2, i3, env, static'1) :|: 0 >= 0 && 0 < 2 && 0 <= static'1 && 0 <= static && 0 <= 1 && 0 < 1 && static''' <= static + 2 && 0 <= static''' && 0 <= 2 && static'1 <= static''' + 1
main_LE_55(i2, i3, env, static) -{0,0}> main_LE_57(i2, i3, env, static) :|: i2 <= i3
main_LE_55(i2, i3, env, static) -{3,3}> main_JMP_132(i2, i3, i7', i8', env, static) :|: 0 >= 0 && i2 + -1 = i7' && i3 + 1 = i8' && i3 < i2
main_JMP_132(i2, i3, i27, i32, env, static) -{3,3}> main_LE_144(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_LE_144(i2, i3, i27, i32, env, static) -{0,0}> main_LE_153(i2, i3, i27, i32, env, static) :|: i27 <= i32
main_LE_144(i2, i3, i27, i32, env, static) -{3,3}> main_JMP_132(i2, i3, i55', i60', env, static) :|: 0 >= 0 && i27 + -1 = i55' && i32 + 1 = i60' && i32 < i27

(17) MovedArithmeticFromConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)

Moved arithmethic from constraints to rhss.

main_LE_144(i2, i3, i27, i32, env, static) -{3,3}> main_JMP_132(i2, i3, i55', i60', env, static) :|: 0 >= 0 && i27 + -1 = i55' && i32 + 1 = i60' && i32 < i27
was transformed to
main_LE_144(i2, i3, i27, i32, env, static) -{3,3}> main_JMP_132(i2, i3, i27 + -1, i32 + 1, env, static) :|: 0 >= 0 && i27 + -1 = i55' && i32 + 1 = i60' && i32 < i27

main_LE_55(i2, i3, env, static) -{3,3}> main_JMP_132(i2, i3, i7', i8', env, static) :|: 0 >= 0 && i2 + -1 = i7' && i3 + 1 = i8' && i3 < i2
was transformed to
main_LE_55(i2, i3, env, static) -{3,3}> main_JMP_132(i2, i3, i2 + -1, i3 + 1, env, static) :|: 0 >= 0 && i2 + -1 = i7' && i3 + 1 = i8' && i3 < i2

(18) Obligation:

IntTrs with 6 rules
Start term: main_Load_2(#0, #1, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_LE_144(i2, i3, i27, i32, env, static) -{3,3}> main_JMP_132(i2, i3, i27 + -1, i32 + 1, env, static) :|: 0 >= 0 && i27 + -1 = i55' && i32 + 1 = i60' && i32 < i27
main_JMP_132(i2, i3, i27, i32, env, static) -{3,3}> main_LE_144(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_LE_144(i2, i3, i27, i32, env, static) -{0,0}> main_LE_153(i2, i3, i27, i32, env, static) :|: i27 <= i32
main_LE_55(i2, i3, env, static) -{0,0}> main_LE_57(i2, i3, env, static) :|: i2 <= i3
main_LE_55(i2, i3, env, static) -{3,3}> main_JMP_132(i2, i3, i2 + -1, i3 + 1, env, static) :|: 0 >= 0 && i2 + -1 = i7' && i3 + 1 = i8' && i3 < i2
main_Load_2(i2, i3, env, static) -{17,17}> main_LE_55(i2, i3, env, static'1) :|: 0 >= 0 && 0 < 2 && 0 <= static'1 && 0 <= static && 0 <= 1 && 0 < 1 && static''' <= static + 2 && 0 <= static''' && 0 <= 2 && static'1 <= static''' + 1

(19) ExpressionSimplificationProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)

Simplified expressions.

main_LE_144(i2, i3, i27, i32, env, static) -{3,3}> main_JMP_132(i2, i3, i27 + -1, i32 + 1, env, static) :|: 0 >= 0 && i27 + -1 = i55' && i32 + 1 = i60' && i32 < i27
was transformed to
main_LE_144(i2, i3, i27, i32, env, static) -{3,3}> main_JMP_132(i2, i3, i27 - 1, i32 + 1, env, static) :|: i27 - 1 = i55' && i32 + 1 = i60' && i32 < i27

main_LE_55(i2, i3, env, static) -{3,3}> main_JMP_132(i2, i3, i2 + -1, i3 + 1, env, static) :|: 0 >= 0 && i2 + -1 = i7' && i3 + 1 = i8' && i3 < i2
was transformed to
main_LE_55(i2, i3, env, static) -{3,3}> main_JMP_132(i2, i3, i2 - 1, i3 + 1, env, static) :|: i2 - 1 = i7' && i3 + 1 = i8' && i3 < i2

main_Load_2(i2, i3, env, static) -{17,17}> main_LE_55(i2, i3, env, static'1) :|: 0 >= 0 && 0 < 2 && 0 <= static'1 && 0 <= static && 0 <= 1 && 0 < 1 && static''' <= static + 2 && 0 <= static''' && 0 <= 2 && static'1 <= static''' + 1
was transformed to
main_Load_2(i2, i3, env, static) -{17,17}> main_LE_55(i2, i3, env, static'1) :|: 0 <= static'1 && 0 <= static && static''' <= static + 2 && 0 <= static''' && static'1 <= static''' + 1

(20) Obligation:

IntTrs with 6 rules
Start term: main_Load_2(#0, #1, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_JMP_132(i2, i3, i27, i32, env, static) -{3,3}> main_LE_144(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_LE_55(i2, i3, env, static) -{3,3}> main_JMP_132(i2, i3, i2 - 1, i3 + 1, env, static) :|: i2 - 1 = i7' && i3 + 1 = i8' && i3 < i2
main_LE_144(i2, i3, i27, i32, env, static) -{0,0}> main_LE_153(i2, i3, i27, i32, env, static) :|: i27 <= i32
main_Load_2(i2, i3, env, static) -{17,17}> main_LE_55(i2, i3, env, static'1) :|: 0 <= static'1 && 0 <= static && static''' <= static + 2 && 0 <= static''' && static'1 <= static''' + 1
main_LE_55(i2, i3, env, static) -{0,0}> main_LE_57(i2, i3, env, static) :|: i2 <= i3
main_LE_144(i2, i3, i27, i32, env, static) -{3,3}> main_JMP_132(i2, i3, i27 - 1, i32 + 1, env, static) :|: i27 - 1 = i55' && i32 + 1 = i60' && i32 < i27

(21) koat Proof (EQUIVALENT transformation)

YES(?, 6*ar_0 + 6*ar_1 + 23)

Initial complexity problem:
1: T:
(Comp: ?, Cost: 3) main_JMP_132(ar_0, ar_1, ar_2, ar_3, ar_4, ar_5) -> Com_1(main_LE_144(ar_0, ar_1, ar_2, ar_3, ar_4, ar_5)) [ 0 >= 0 ]
(Comp: ?, Cost: 3) main_LE_55(ar_0, ar_1, ar_2, ar_3, ar_4, ar_5) -> Com_1(main_JMP_132(ar_0, ar_1, ar_0 - 1, ar_1 + 1, ar_2, ar_3)) [ ar_0 - 1 = i7' /\ ar_1 + 1 = i8' /\ ar_1 < ar_0 ]
(Comp: ?, Cost: 0) main_LE_144(ar_0, ar_1, ar_2, ar_3, ar_4, ar_5) -> Com_1(main_LE_153(ar_0, ar_1, ar_2, ar_3, ar_4, ar_5)) [ ar_2 <= ar_3 ]
(Comp: ?, Cost: 17) main_Load_2(ar_0, ar_1, ar_2, ar_3, ar_4, ar_5) -> Com_1(main_LE_55(ar_0, ar_1, ar_2, static'1, arityPad, arityPad)) [ 0 <= static'1 /\ 0 <= ar_3 /\ static''' <= ar_3 + 2 /\ 0 <= static''' /\ static'1 <= static''' + 1 ]
(Comp: ?, Cost: 0) main_LE_55(ar_0, ar_1, ar_2, ar_3, ar_4, ar_5) -> Com_1(main_LE_57(ar_0, ar_1, ar_2, ar_3, arityPad, arityPad)) [ ar_0 <= ar_1 ]
(Comp: ?, Cost: 3) main_LE_144(ar_0, ar_1, ar_2, ar_3, ar_4, ar_5) -> Com_1(main_JMP_132(ar_0, ar_1, ar_2 - 1, ar_3 + 1, ar_4, ar_5)) [ ar_2 - 1 = i55' /\ ar_3 + 1 = i60' /\ ar_3 < ar_2 ]
(Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2, ar_3, ar_4, ar_5) -> Com_1(main_Load_2(ar_0, ar_1, ar_2, ar_3, ar_4, ar_5)) [ 0 <= 0 ]
start location: koat_start
leaf cost: 0

Slicing away variables that do not contribute to conditions from problem 1 leaves variables [ar_0, ar_1, ar_2, ar_3].
We thus obtain the following problem:
2: T:
(Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_Load_2(ar_0, ar_1, ar_2, ar_3)) [ 0 <= 0 ]
(Comp: ?, Cost: 3) main_LE_144(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_JMP_132(ar_0, ar_1, ar_2 - 1, ar_3 + 1)) [ ar_2 - 1 = i55' /\ ar_3 + 1 = i60' /\ ar_3 < ar_2 ]
(Comp: ?, Cost: 0) main_LE_55(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_57(ar_0, ar_1, ar_2, ar_3)) [ ar_0 <= ar_1 ]
(Comp: ?, Cost: 17) main_Load_2(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_55(ar_0, ar_1, ar_2, static'1)) [ 0 <= static'1 /\ 0 <= ar_3 /\ static''' <= ar_3 + 2 /\ 0 <= static''' /\ static'1 <= static''' + 1 ]
(Comp: ?, Cost: 0) main_LE_144(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_153(ar_0, ar_1, ar_2, ar_3)) [ ar_2 <= ar_3 ]
(Comp: ?, Cost: 3) main_LE_55(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_JMP_132(ar_0, ar_1, ar_0 - 1, ar_1 + 1)) [ ar_0 - 1 = i7' /\ ar_1 + 1 = i8' /\ ar_1 < ar_0 ]
(Comp: ?, Cost: 3) main_JMP_132(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_144(ar_0, ar_1, ar_2, ar_3)) [ 0 >= 0 ]
start location: koat_start
leaf cost: 0

Repeatedly propagating knowledge in problem 2 produces the following problem:
3: T:
(Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_Load_2(ar_0, ar_1, ar_2, ar_3)) [ 0 <= 0 ]
(Comp: ?, Cost: 3) main_LE_144(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_JMP_132(ar_0, ar_1, ar_2 - 1, ar_3 + 1)) [ ar_2 - 1 = i55' /\ ar_3 + 1 = i60' /\ ar_3 < ar_2 ]
(Comp: 1, Cost: 0) main_LE_55(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_57(ar_0, ar_1, ar_2, ar_3)) [ ar_0 <= ar_1 ]
(Comp: 1, Cost: 17) main_Load_2(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_55(ar_0, ar_1, ar_2, static'1)) [ 0 <= static'1 /\ 0 <= ar_3 /\ static''' <= ar_3 + 2 /\ 0 <= static''' /\ static'1 <= static''' + 1 ]
(Comp: ?, Cost: 0) main_LE_144(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_153(ar_0, ar_1, ar_2, ar_3)) [ ar_2 <= ar_3 ]
(Comp: 1, Cost: 3) main_LE_55(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_JMP_132(ar_0, ar_1, ar_0 - 1, ar_1 + 1)) [ ar_0 - 1 = i7' /\ ar_1 + 1 = i8' /\ ar_1 < ar_0 ]
(Comp: ?, Cost: 3) main_JMP_132(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_144(ar_0, ar_1, ar_2, ar_3)) [ 0 >= 0 ]
start location: koat_start
leaf cost: 0

A polynomial rank function with
Pol(koat_start) = 1
Pol(main_Load_2) = 1
Pol(main_LE_144) = 1
Pol(main_JMP_132) = 1
Pol(main_LE_55) = 1
Pol(main_LE_57) = 0
Pol(main_LE_153) = 0
orients all transitions weakly and the transition
main_LE_144(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_153(ar_0, ar_1, ar_2, ar_3)) [ ar_2 <= ar_3 ]
strictly and produces the following problem:
4: T:
(Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_Load_2(ar_0, ar_1, ar_2, ar_3)) [ 0 <= 0 ]
(Comp: ?, Cost: 3) main_LE_144(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_JMP_132(ar_0, ar_1, ar_2 - 1, ar_3 + 1)) [ ar_2 - 1 = i55' /\ ar_3 + 1 = i60' /\ ar_3 < ar_2 ]
(Comp: 1, Cost: 0) main_LE_55(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_57(ar_0, ar_1, ar_2, ar_3)) [ ar_0 <= ar_1 ]
(Comp: 1, Cost: 17) main_Load_2(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_55(ar_0, ar_1, ar_2, static'1)) [ 0 <= static'1 /\ 0 <= ar_3 /\ static''' <= ar_3 + 2 /\ 0 <= static''' /\ static'1 <= static''' + 1 ]
(Comp: 1, Cost: 0) main_LE_144(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_153(ar_0, ar_1, ar_2, ar_3)) [ ar_2 <= ar_3 ]
(Comp: 1, Cost: 3) main_LE_55(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_JMP_132(ar_0, ar_1, ar_0 - 1, ar_1 + 1)) [ ar_0 - 1 = i7' /\ ar_1 + 1 = i8' /\ ar_1 < ar_0 ]
(Comp: ?, Cost: 3) main_JMP_132(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_144(ar_0, ar_1, ar_2, ar_3)) [ 0 >= 0 ]
start location: koat_start
leaf cost: 0

A polynomial rank function with
Pol(koat_start) = V_1 - V_2
Pol(main_Load_2) = V_1 - V_2 - 2
Pol(main_LE_144) = V_3 - V_4
Pol(main_JMP_132) = V_3 - V_4
Pol(main_LE_55) = V_1 - V_2 - 2
Pol(main_LE_57) = V_1 - V_2 - 2
Pol(main_LE_153) = V_3 - V_4
orients all transitions weakly and the transition
main_LE_144(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_JMP_132(ar_0, ar_1, ar_2 - 1, ar_3 + 1)) [ ar_2 - 1 = i55' /\ ar_3 + 1 = i60' /\ ar_3 < ar_2 ]
strictly and produces the following problem:
5: T:
(Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_Load_2(ar_0, ar_1, ar_2, ar_3)) [ 0 <= 0 ]
(Comp: ar_0 + ar_1, Cost: 3) main_LE_144(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_JMP_132(ar_0, ar_1, ar_2 - 1, ar_3 + 1)) [ ar_2 - 1 = i55' /\ ar_3 + 1 = i60' /\ ar_3 < ar_2 ]
(Comp: 1, Cost: 0) main_LE_55(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_57(ar_0, ar_1, ar_2, ar_3)) [ ar_0 <= ar_1 ]
(Comp: 1, Cost: 17) main_Load_2(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_55(ar_0, ar_1, ar_2, static'1)) [ 0 <= static'1 /\ 0 <= ar_3 /\ static''' <= ar_3 + 2 /\ 0 <= static''' /\ static'1 <= static''' + 1 ]
(Comp: 1, Cost: 0) main_LE_144(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_153(ar_0, ar_1, ar_2, ar_3)) [ ar_2 <= ar_3 ]
(Comp: 1, Cost: 3) main_LE_55(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_JMP_132(ar_0, ar_1, ar_0 - 1, ar_1 + 1)) [ ar_0 - 1 = i7' /\ ar_1 + 1 = i8' /\ ar_1 < ar_0 ]
(Comp: ?, Cost: 3) main_JMP_132(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_144(ar_0, ar_1, ar_2, ar_3)) [ 0 >= 0 ]
start location: koat_start
leaf cost: 0

Repeatedly propagating knowledge in problem 5 produces the following problem:
6: T:
(Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_Load_2(ar_0, ar_1, ar_2, ar_3)) [ 0 <= 0 ]
(Comp: ar_0 + ar_1, Cost: 3) main_LE_144(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_JMP_132(ar_0, ar_1, ar_2 - 1, ar_3 + 1)) [ ar_2 - 1 = i55' /\ ar_3 + 1 = i60' /\ ar_3 < ar_2 ]
(Comp: 1, Cost: 0) main_LE_55(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_57(ar_0, ar_1, ar_2, ar_3)) [ ar_0 <= ar_1 ]
(Comp: 1, Cost: 17) main_Load_2(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_55(ar_0, ar_1, ar_2, static'1)) [ 0 <= static'1 /\ 0 <= ar_3 /\ static''' <= ar_3 + 2 /\ 0 <= static''' /\ static'1 <= static''' + 1 ]
(Comp: 1, Cost: 0) main_LE_144(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_153(ar_0, ar_1, ar_2, ar_3)) [ ar_2 <= ar_3 ]
(Comp: 1, Cost: 3) main_LE_55(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_JMP_132(ar_0, ar_1, ar_0 - 1, ar_1 + 1)) [ ar_0 - 1 = i7' /\ ar_1 + 1 = i8' /\ ar_1 < ar_0 ]
(Comp: ar_0 + ar_1 + 1, Cost: 3) main_JMP_132(ar_0, ar_1, ar_2, ar_3) -> Com_1(main_LE_144(ar_0, ar_1, ar_2, ar_3)) [ 0 >= 0 ]
start location: koat_start
leaf cost: 0

Complexity upper bound 6*ar_0 + 6*ar_1 + 23

Time: 0.175 sec (SMT: 0.159 sec)

(22) BOUNDS(CONSTANT, 23 + 6 * |#0| + 6 * |#1|)

(23) TerminationGraphToComplexityProof (BOTH CONCRETE BOUNDS(ID, ADD(4)) transformation)

Extracted set of 38 edges for the analysis of TIME complexity. Dropped leaves.

(24) Obligation:

Set of 38 edges based on JBC Program.
Performed SCC analyses:
  • Used field analysis yielded the following read fields:

Considered paths: all paths from start

(25) JBCGraphEdgesToCpxIntTrsProof (CONCRETE UPPER BOUND(ID) transformation)

Transformed 38 jbc graph edges to a weighted ITS with 38 rules.
Used simplified encoding of division and modulo.
Filtered conditions with variables that do not depend on the variables on the lhs or rhs without taking transitive dependencies into account.
Filtered fields of type java.lang.Object.
Did no encode lower bounds for putfield and astore.

(26) Obligation:

IntTrs with 38 rules
Start term: main_Load_2(#0, #1, env, static)
Considered paths: all paths from start
Rules:
main_Load_2(i2, i3, env, static) -{0,0}> main_Load_3(i2, i3, env, static) :|: 0 >= 0
main_Load_3(i2, i3, env, static) -{0,0}> langle_clinit_rangle_ConstantStackPush_6(i2, i3, env, static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(i2, i3, env, static) -{1,1}> langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, i3, env, static) :|: iconst_0 = 0
langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, i3, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_13(a2, i2, i3, iconst_0, env, static) :|: a2 = 2 && iconst_0 = 0 && 0 < a2
langle_clinit_rangle_FieldAccess_13(a2, i2, i3, iconst_0, env, static) -{1,1}> langle_clinit_rangle_New_16(i2, i3, env, static') :|: 0 <= a2 && iconst_0 = 0 && static' <= static + a2 && 0 <= static && 0 < a2
langle_clinit_rangle_New_16(i2, i3, env, static) -{0,0}> langle_clinit_rangle_New_17(i2, i3, env, static) :|: 0 >= 0
langle_clinit_rangle_New_17(i2, i3, env, static) -{0,0}> langle_clinit_rangle_New_19(i2, i3, env, static) :|: 0 <= static
langle_clinit_rangle_New_19(i2, i3, env, static) -{1,1}> langle_clinit_rangle_Duplicate_20(o2, i2, i3, env, static) :|: 0 < o2 && o2 = 1
langle_clinit_rangle_Duplicate_20(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_ConstantStackPush_22(o2, i2, i3, env, static) :|: 0 < o2
langle_clinit_rangle_ConstantStackPush_22(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_InvokeMethod_23(o2, NULL, i2, i3, env, static) :|: NULL = 0 && 0 < o2
langle_clinit_rangle_InvokeMethod_23(o2, NULL, i2, i3, env, static) -{1,1}> langle_init_rangle_Load_24(o2, i2, i3, env, static) :|: NULL = 0 && 0 < o2
langle_init_rangle_Load_24(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_InvokeMethod_27(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_27(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Load_28(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Load_28(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_InvokeMethod_30(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_30(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Return_32(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Return_32(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Return_35(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Return_35(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_37(o2, i2, i3, env, static) :|: 0 < o2
langle_clinit_rangle_FieldAccess_37(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_Return_40(i2, i3, env, static') :|: 0 < o2 && 0 <= o2 && 0 <= static && static' <= static + o2
langle_clinit_rangle_Return_40(i2, i3, env, static) -{1,1}> main_Load_41(i2, i3, env, static) :|: 0 >= 0
main_Load_41(i2, i3, env, static) -{0,0}> main_Load_42(i2, i3, env, static) :|: 0 >= 0
main_Load_42(i2, i3, env, static) -{0,0}> main_Load_43(i2, i3, env, static) :|: 0 <= static
main_Load_43(i2, i3, env, static) -{0,0}> main_Load_45(i2, i3, env, static) :|: 0 >= 0
main_Load_45(i2, i3, env, static) -{0,0}> main_Load_47(i2, i3, env, static) :|: 0 >= 0
main_Load_47(i2, i3, env, static) -{1,1}> main_Load_50(i2, i3, env, static) :|: 0 >= 0
main_Load_50(i2, i3, env, static) -{1,1}> main_LE_55(i2, i3, env, static) :|: 0 >= 0
main_LE_55(i2, i3, env, static) -{0,0}> main_LE_59(i2, i3, env, static) :|: i3 < i2
main_LE_59(i2, i3, env, static) -{1,1}> main_Inc_62(i2, i3, env, static) :|: i3 < i2
main_Inc_62(i2, i3, env, static) -{1,1}> main_Inc_66(i2, i3, i7, env, static) :|: i2 + -1 = i7
main_Inc_66(i2, i3, i7, env, static) -{1,1}> main_JMP_69(i2, i3, i7, i8, env, static) :|: i3 + 1 = i8
main_JMP_69(i2, i3, i7, i8, env, static) -{0,0}> main_JMP_132(i2, i3, i7, i8, env, static) :|: 0 >= 0
main_JMP_132(i2, i3, i27, i32, env, static) -{1,1}> main_Load_134(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_Load_134(i2, i3, i27, i32, env, static) -{1,1}> main_Load_140(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_Load_140(i2, i3, i27, i32, env, static) -{1,1}> main_LE_144(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_LE_144(i2, i3, i27, i32, env, static) -{0,0}> main_LE_154(i2, i3, i27, i32, env, static) :|: i32 < i27
main_LE_154(i2, i3, i27, i32, env, static) -{1,1}> main_Inc_168(i2, i3, i27, i32, env, static) :|: i32 < i27
main_Inc_168(i2, i3, i27, i32, env, static) -{1,1}> main_Inc_180(i2, i3, i55, i32, env, static) :|: i27 + -1 = i55
main_Inc_180(i2, i3, i55, i32, env, static) -{1,1}> main_JMP_189(i2, i3, i55, i60, env, static) :|: i32 + 1 = i60
main_JMP_189(i2, i3, i55, i60, env, static) -{0,0}> main_JMP_132(i2, i3, i55, i60, env, static) :|: 0 >= 0

(27) StraightLineCodeCompressionProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)

obtained
main_Load_2(i2, i3, env, static) -{20,20}> main_JMP_132(i2, i3, i7', i8', env, static'1) :|: 0 >= 0 && static'1 <= static''' + 1 && i2 + -1 = i7' && 0 <= 2 && 0 <= static''' && static''' <= static + 2 && 0 < 1 && 0 <= 1 && 0 <= static && 0 <= static'1 && i3 < i2 && i3 + 1 = i8' && 0 < 2
by chaining
main_Load_2(i2, i3, env, static) -{0,0}> main_Load_3(i2, i3, env, static) :|: 0 >= 0
main_Load_3(i2, i3, env, static) -{0,0}> langle_clinit_rangle_ConstantStackPush_6(i2, i3, env, static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(i2, i3, env, static) -{1,1}> langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, i3, env, static) :|: iconst_0 = 0
langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, i3, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_13(a2, i2, i3, iconst_0, env, static) :|: a2 = 2 && iconst_0 = 0 && 0 < a2
langle_clinit_rangle_FieldAccess_13(a2, i2, i3, iconst_0, env, static) -{1,1}> langle_clinit_rangle_New_16(i2, i3, env, static') :|: 0 <= a2 && iconst_0 = 0 && static' <= static + a2 && 0 <= static && 0 < a2
langle_clinit_rangle_New_16(i2, i3, env, static) -{0,0}> langle_clinit_rangle_New_17(i2, i3, env, static) :|: 0 >= 0
langle_clinit_rangle_New_17(i2, i3, env, static) -{0,0}> langle_clinit_rangle_New_19(i2, i3, env, static) :|: 0 <= static
langle_clinit_rangle_New_19(i2, i3, env, static) -{1,1}> langle_clinit_rangle_Duplicate_20(o2, i2, i3, env, static) :|: 0 < o2 && o2 = 1
langle_clinit_rangle_Duplicate_20(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_ConstantStackPush_22(o2, i2, i3, env, static) :|: 0 < o2
langle_clinit_rangle_ConstantStackPush_22(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_InvokeMethod_23(o2, NULL, i2, i3, env, static) :|: NULL = 0 && 0 < o2
langle_clinit_rangle_InvokeMethod_23(o2, NULL, i2, i3, env, static) -{1,1}> langle_init_rangle_Load_24(o2, i2, i3, env, static) :|: NULL = 0 && 0 < o2
langle_init_rangle_Load_24(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_InvokeMethod_27(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_27(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Load_28(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Load_28(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_InvokeMethod_30(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_30(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Return_32(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Return_32(o2, i2, i3, env, static) -{1,1}> langle_init_rangle_Return_35(o2, i2, i3, env, static) :|: 0 < o2
langle_init_rangle_Return_35(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_37(o2, i2, i3, env, static) :|: 0 < o2
langle_clinit_rangle_FieldAccess_37(o2, i2, i3, env, static) -{1,1}> langle_clinit_rangle_Return_40(i2, i3, env, static') :|: 0 < o2 && 0 <= o2 && 0 <= static && static' <= static + o2
langle_clinit_rangle_Return_40(i2, i3, env, static) -{1,1}> main_Load_41(i2, i3, env, static) :|: 0 >= 0
main_Load_41(i2, i3, env, static) -{0,0}> main_Load_42(i2, i3, env, static) :|: 0 >= 0
main_Load_42(i2, i3, env, static) -{0,0}> main_Load_43(i2, i3, env, static) :|: 0 <= static
main_Load_43(i2, i3, env, static) -{0,0}> main_Load_45(i2, i3, env, static) :|: 0 >= 0
main_Load_45(i2, i3, env, static) -{0,0}> main_Load_47(i2, i3, env, static) :|: 0 >= 0
main_Load_47(i2, i3, env, static) -{1,1}> main_Load_50(i2, i3, env, static) :|: 0 >= 0
main_Load_50(i2, i3, env, static) -{1,1}> main_LE_55(i2, i3, env, static) :|: 0 >= 0
main_LE_55(i2, i3, env, static) -{0,0}> main_LE_59(i2, i3, env, static) :|: i3 < i2
main_LE_59(i2, i3, env, static) -{1,1}> main_Inc_62(i2, i3, env, static) :|: i3 < i2
main_Inc_62(i2, i3, env, static) -{1,1}> main_Inc_66(i2, i3, i7, env, static) :|: i2 + -1 = i7
main_Inc_66(i2, i3, i7, env, static) -{1,1}> main_JMP_69(i2, i3, i7, i8, env, static) :|: i3 + 1 = i8
main_JMP_69(i2, i3, i7, i8, env, static) -{0,0}> main_JMP_132(i2, i3, i7, i8, env, static) :|: 0 >= 0

obtained
main_JMP_132(i2, i3, i27, i32, env, static) -{6,6}> main_JMP_132(i2, i3, i55', i60', env, static) :|: 0 >= 0 && i32 < i27 && i27 + -1 = i55' && i32 + 1 = i60'
by chaining
main_JMP_132(i2, i3, i27, i32, env, static) -{1,1}> main_Load_134(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_Load_134(i2, i3, i27, i32, env, static) -{1,1}> main_Load_140(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_Load_140(i2, i3, i27, i32, env, static) -{1,1}> main_LE_144(i2, i3, i27, i32, env, static) :|: 0 >= 0
main_LE_144(i2, i3, i27, i32, env, static) -{0,0}> main_LE_154(i2, i3, i27, i32, env, static) :|: i32 < i27
main_LE_154(i2, i3, i27, i32, env, static) -{1,1}> main_Inc_168(i2, i3, i27, i32, env, static) :|: i32 < i27
main_Inc_168(i2, i3, i27, i32, env, static) -{1,1}> main_Inc_180(i2, i3, i55, i32, env, static) :|: i27 + -1 = i55
main_Inc_180(i2, i3, i55, i32, env, static) -{1,1}> main_JMP_189(i2, i3, i55, i60, env, static) :|: i32 + 1 = i60
main_JMP_189(i2, i3, i55, i60, env, static) -{0,0}> main_JMP_132(i2, i3, i55, i60, env, static) :|: 0 >= 0

(28) Obligation:

IntTrs with 2 rules
Start term: main_Load_2(#0, #1, env, static)
Considered paths: all paths from start
Rules:
main_Load_2(i2, i3, env, static) -{20,20}> main_JMP_132(i2, i3, i7', i8', env, static'1) :|: 0 >= 0 && static'1 <= static''' + 1 && i2 + -1 = i7' && 0 <= 2 && 0 <= static''' && static''' <= static + 2 && 0 < 1 && 0 <= 1 && 0 <= static && 0 <= static'1 && i3 < i2 && i3 + 1 = i8' && 0 < 2
main_JMP_132(i2, i3, i27, i32, env, static) -{6,6}> main_JMP_132(i2, i3, i55', i60', env, static) :|: 0 >= 0 && i32 < i27 && i27 + -1 = i55' && i32 + 1 = i60'

(29) WeightedIntTrsUnneededArgumentFilterProof (CONCRETE UPPER BOUND(ID) transformation)

Some arguments are removed because they cannot influence termination. We removed arguments according to the following replacements:

main_Load_2(x1, x2, x3, x4) → main_Load_2(x1, x2, x4)
main_JMP_132(x1, x2, x3, x4, x5, x6) → main_JMP_132(x3, x4)

(30) Obligation:

IntTrs with 2 rules
Start term: main_Load_2(#0, #1, static)
Considered paths: all paths from start
Rules:
main_Load_2(i2, i3, static) -{20,20}> main_JMP_132(i7', i8') :|: 0 >= 0 && static'1 <= static''' + 1 && i2 + -1 = i7' && 0 <= 2 && 0 <= static''' && static''' <= static + 2 && 0 < 1 && 0 <= 1 && 0 <= static && 0 <= static'1 && i3 < i2 && i3 + 1 = i8' && 0 < 2
main_JMP_132(i27, i32) -{6,6}> main_JMP_132(i55', i60') :|: 0 >= 0 && i32 < i27 && i27 + -1 = i55' && i32 + 1 = i60'

(31) MovedArithmeticFromConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)

Moved arithmethic from constraints to rhss.

main_Load_2(i2, i3, static) -{20,20}> main_JMP_132(i7', i8') :|: 0 >= 0 && static'1 <= static''' + 1 && i2 + -1 = i7' && 0 <= 2 && 0 <= static''' && static''' <= static + 2 && 0 < 1 && 0 <= 1 && 0 <= static && 0 <= static'1 && i3 < i2 && i3 + 1 = i8' && 0 < 2
was transformed to
main_Load_2(i2, i3, static) -{20,20}> main_JMP_132(i2 + -1, i3 + 1) :|: 0 >= 0 && static'1 <= static''' + 1 && i2 + -1 = i7' && 0 <= 2 && 0 <= static''' && static''' <= static + 2 && 0 < 1 && 0 <= 1 && 0 <= static && 0 <= static'1 && i3 < i2 && i3 + 1 = i8' && 0 < 2

main_JMP_132(i27, i32) -{6,6}> main_JMP_132(i55', i60') :|: 0 >= 0 && i32 < i27 && i27 + -1 = i55' && i32 + 1 = i60'
was transformed to
main_JMP_132(i27, i32) -{6,6}> main_JMP_132(i27 + -1, i32 + 1) :|: 0 >= 0 && i32 < i27 && i27 + -1 = i55' && i32 + 1 = i60'

(32) Obligation:

IntTrs with 2 rules
Start term: main_Load_2(#0, #1, static)
Considered paths: all paths from start
Rules:
main_Load_2(i2, i3, static) -{20,20}> main_JMP_132(i2 + -1, i3 + 1) :|: 0 >= 0 && static'1 <= static''' + 1 && i2 + -1 = i7' && 0 <= 2 && 0 <= static''' && static''' <= static + 2 && 0 < 1 && 0 <= 1 && 0 <= static && 0 <= static'1 && i3 < i2 && i3 + 1 = i8' && 0 < 2
main_JMP_132(i27, i32) -{6,6}> main_JMP_132(i27 + -1, i32 + 1) :|: 0 >= 0 && i32 < i27 && i27 + -1 = i55' && i32 + 1 = i60'

(33) ExpressionSimplificationProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)

Simplified expressions.

main_Load_2(i2, i3, static) -{20,20}> main_JMP_132(i2 + -1, i3 + 1) :|: 0 >= 0 && static'1 <= static''' + 1 && i2 + -1 = i7' && 0 <= 2 && 0 <= static''' && static''' <= static + 2 && 0 < 1 && 0 <= 1 && 0 <= static && 0 <= static'1 && i3 < i2 && i3 + 1 = i8' && 0 < 2
was transformed to
main_Load_2(i2, i3, static) -{20,20}> main_JMP_132(i2 - 1, i3 + 1) :|: static'1 <= static''' + 1 && i2 - 1 = i7' && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'1 && i3 < i2 && i3 + 1 = i8'

main_JMP_132(i27, i32) -{6,6}> main_JMP_132(i27 + -1, i32 + 1) :|: 0 >= 0 && i32 < i27 && i27 + -1 = i55' && i32 + 1 = i60'
was transformed to
main_JMP_132(i27, i32) -{6,6}> main_JMP_132(i27 - 1, i32 + 1) :|: i32 < i27 && i27 - 1 = i55' && i32 + 1 = i60'

(34) Obligation:

IntTrs with 2 rules
Start term: main_Load_2(#0, #1, static)
Considered paths: all paths from start
Rules:
main_JMP_132(i27, i32) -{6,6}> main_JMP_132(i27 - 1, i32 + 1) :|: i32 < i27 && i27 - 1 = i55' && i32 + 1 = i60'
main_Load_2(i2, i3, static) -{20,20}> main_JMP_132(i2 - 1, i3 + 1) :|: static'1 <= static''' + 1 && i2 - 1 = i7' && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'1 && i3 < i2 && i3 + 1 = i8'

(35) koat Proof (EQUIVALENT transformation)

YES(?, 6*ar_0 + 6*ar_1 + 20)

Initial complexity problem:
1: T:
(Comp: ?, Cost: 6) main_JMP_132(ar_0, ar_1, ar_2) -> Com_1(main_JMP_132(ar_0 - 1, ar_1 + 1, arityPad)) [ ar_1 < ar_0 /\ ar_0 - 1 = i55' /\ ar_1 + 1 = i60' ]
(Comp: ?, Cost: 20) main_Load_2(ar_0, ar_1, ar_2) -> Com_1(main_JMP_132(ar_0 - 1, ar_1 + 1, arityPad)) [ static'1 <= static''' + 1 /\ ar_0 - 1 = i7' /\ 0 <= static''' /\ static''' <= ar_2 + 2 /\ 0 <= ar_2 /\ 0 <= static'1 /\ ar_1 < ar_0 /\ ar_1 + 1 = i8' ]
(Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(main_Load_2(ar_0, ar_1, ar_2)) [ 0 <= 0 ]
start location: koat_start
leaf cost: 0

Repeatedly propagating knowledge in problem 1 produces the following problem:
2: T:
(Comp: ?, Cost: 6) main_JMP_132(ar_0, ar_1, ar_2) -> Com_1(main_JMP_132(ar_0 - 1, ar_1 + 1, arityPad)) [ ar_1 < ar_0 /\ ar_0 - 1 = i55' /\ ar_1 + 1 = i60' ]
(Comp: 1, Cost: 20) main_Load_2(ar_0, ar_1, ar_2) -> Com_1(main_JMP_132(ar_0 - 1, ar_1 + 1, arityPad)) [ static'1 <= static''' + 1 /\ ar_0 - 1 = i7' /\ 0 <= static''' /\ static''' <= ar_2 + 2 /\ 0 <= ar_2 /\ 0 <= static'1 /\ ar_1 < ar_0 /\ ar_1 + 1 = i8' ]
(Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(main_Load_2(ar_0, ar_1, ar_2)) [ 0 <= 0 ]
start location: koat_start
leaf cost: 0

A polynomial rank function with
Pol(main_JMP_132) = V_1 - V_2
Pol(main_Load_2) = V_1 - V_2
Pol(koat_start) = V_1 - V_2
orients all transitions weakly and the transition
main_JMP_132(ar_0, ar_1, ar_2) -> Com_1(main_JMP_132(ar_0 - 1, ar_1 + 1, arityPad)) [ ar_1 < ar_0 /\ ar_0 - 1 = i55' /\ ar_1 + 1 = i60' ]
strictly and produces the following problem:
3: T:
(Comp: ar_0 + ar_1, Cost: 6) main_JMP_132(ar_0, ar_1, ar_2) -> Com_1(main_JMP_132(ar_0 - 1, ar_1 + 1, arityPad)) [ ar_1 < ar_0 /\ ar_0 - 1 = i55' /\ ar_1 + 1 = i60' ]
(Comp: 1, Cost: 20) main_Load_2(ar_0, ar_1, ar_2) -> Com_1(main_JMP_132(ar_0 - 1, ar_1 + 1, arityPad)) [ static'1 <= static''' + 1 /\ ar_0 - 1 = i7' /\ 0 <= static''' /\ static''' <= ar_2 + 2 /\ 0 <= ar_2 /\ 0 <= static'1 /\ ar_1 < ar_0 /\ ar_1 + 1 = i8' ]
(Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(main_Load_2(ar_0, ar_1, ar_2)) [ 0 <= 0 ]
start location: koat_start
leaf cost: 0

Complexity upper bound 6*ar_0 + 6*ar_1 + 20

Time: 0.196 sec (SMT: 0.176 sec)

(36) BOUNDS(CONSTANT, 20 + 6 * |#0| + 6 * |#1|)