(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 PastaB8 {
public static void main(int x) {
if (x > 0) {
while (x != 0) {
if (x % 2 == 0) {
x = x/2;
} else {
x--;
}
}
}
}
}
(1) JBCToGraph (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Constructed TerminationGraph.
(2) Obligation:
Termination Graph based on JBC Program:
PastaB8.main(I)V: Graph of 51 nodes with 1 SCC.
(3) TerminationGraphToComplexityProof (BOTH CONCRETE BOUNDS(ID, ADD(4)) transformation)
Extracted set of 48 edges for the analysis of TIME complexity. Kept leaves.
(4) Obligation:
Set of 48 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 48 jbc graph edges to a weighted ITS with 48 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 48 rules
Start term: main_Load_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_Load_2(i2, env, static) -{0,0}> main_Load_4(i2, env, static) :|: 0 >= 0
main_Load_4(i2, env, static) -{0,0}> langle_clinit_rangle_ConstantStackPush_5(i2, env, static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_5(i2, env, static) -{1,1}> langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, env, static) :|: iconst_0 = 0
langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_14(a2, i2, iconst_0, env, static) :|: a2 = 2 && iconst_0 = 0 && 0 < a2
langle_clinit_rangle_FieldAccess_14(a2, i2, iconst_0, env, static) -{1,1}> langle_clinit_rangle_New_16(i2, env, static') :|: 0 <= a2 && iconst_0 = 0 && static' <= static + a2 && 0 <= static && 0 < a2
langle_clinit_rangle_New_16(i2, env, static) -{0,0}> langle_clinit_rangle_New_18(i2, env, static) :|: 0 >= 0
langle_clinit_rangle_New_18(i2, env, static) -{0,0}> langle_clinit_rangle_New_19(i2, env, static) :|: 0 <= static
langle_clinit_rangle_New_19(i2, env, static) -{1,1}> langle_clinit_rangle_Duplicate_21(o2, i2, env, static) :|: 0 < o2 && o2 = 1
langle_clinit_rangle_Duplicate_21(o2, i2, env, static) -{1,1}> langle_clinit_rangle_ConstantStackPush_22(o2, i2, env, static) :|: 0 < o2
langle_clinit_rangle_ConstantStackPush_22(o2, i2, env, static) -{1,1}> langle_clinit_rangle_InvokeMethod_24(o2, NULL, i2, env, static) :|: NULL = 0 && 0 < o2
langle_clinit_rangle_InvokeMethod_24(o2, NULL, i2, env, static) -{1,1}> langle_init_rangle_Load_25(o2, i2, env, static) :|: NULL = 0 && 0 < o2
langle_init_rangle_Load_25(o2, i2, env, static) -{1,1}> langle_init_rangle_InvokeMethod_28(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_28(o2, i2, env, static) -{1,1}> langle_init_rangle_Load_29(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Load_29(o2, i2, env, static) -{1,1}> langle_init_rangle_InvokeMethod_32(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_32(o2, i2, env, static) -{1,1}> langle_init_rangle_Return_34(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Return_34(o2, i2, env, static) -{1,1}> langle_init_rangle_Return_37(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Return_37(o2, i2, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_39(o2, i2, env, static) :|: 0 < o2
langle_clinit_rangle_FieldAccess_39(o2, i2, env, static) -{1,1}> langle_clinit_rangle_Return_40(i2, env, static') :|: 0 < o2 && 0 <= o2 && 0 <= static && static' <= static + o2
langle_clinit_rangle_Return_40(i2, env, static) -{1,1}> main_Load_45(i2, env, static) :|: 0 >= 0
main_Load_45(i2, env, static) -{0,0}> main_Load_46(i2, env, static) :|: 0 >= 0
main_Load_46(i2, env, static) -{0,0}> main_Load_48(i2, env, static) :|: 0 <= static
main_Load_48(i2, env, static) -{0,0}> main_Load_50(i2, env, static) :|: 0 >= 0
main_Load_50(i2, env, static) -{0,0}> main_Load_51(i2, env, static) :|: 0 >= 0
main_Load_51(i2, env, static) -{1,1}> main_LE_52(i2, env, static) :|: 0 >= 0
main_LE_52(i9, env, static) -{0,0}> main_LE_54(i9, env, static) :|: i9 <= 0
main_LE_52(i10, env, static) -{0,0}> main_LE_55(i10, env, static) :|: 1 <= i10
main_LE_55(i10, env, static) -{1,1}> main_Load_59(i10, env, static) :|: 1 <= i10 && 0 < i10
main_Load_59(i10, env, static) -{0,0}> main_Load_416(i10, i10, env, static) :|: 0 <= i10 && 1 <= i10
main_Load_416(i10, i78, env, static) -{1,1}> main_EQ_417(i10, i78, env, static) :|: 1 <= i10 && 0 <= i78
main_EQ_417(i10, i94, env, static) -{0,0}> main_EQ_423(i10, i94, env, static) :|: 0 <= i94 && 1 <= i94 && 1 <= i10
main_EQ_417(i10, iconst_0, env, static) -{0,0}> main_EQ_424(i10, iconst_0, env, static) :|: 1 <= i10 && 0 <= iconst_0 && iconst_0 = 0
main_EQ_423(i10, i94, env, static) -{1,1}> main_Load_426(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10 && 0 < i94
main_Load_426(i10, i94, env, static) -{1,1}> main_ConstantStackPush_432(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10
main_ConstantStackPush_432(i10, i94, env, static) -{1,1}> main_IntArithmetic_437(i10, i94, iconst_2, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_2 = 2
main_IntArithmetic_437(i10, i94, iconst_2, env, static) -{1,1}> main_NE_441(i10, i98, i94, env, static) :|: 1 <= i94 && i98 <= 1 && 0 <= i98 && 1 <= i10 && i98 < iconst_2 && iconst_2 = 2
main_NE_441(i10, iconst_1, i94, env, static) -{0,0}> main_NE_443(i10, iconst_1, i94, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_1 <= 1 && 0 <= iconst_1 && iconst_1 = 1
main_NE_441(i10, iconst_0, i94, env, static) -{0,0}> main_NE_444(i10, iconst_0, i94, env, static) :|: 1 <= i94 && 1 <= i10 && 0 <= iconst_0 && iconst_0 <= 1 && iconst_0 = 0
main_NE_443(i10, iconst_1, i94, env, static) -{1,1}> main_Inc_446(i10, i94, env, static) :|: 0 < iconst_1 && 1 <= i94 && 1 <= i10 && iconst_1 = 1
main_NE_444(i10, iconst_0, i94, env, static) -{1,1}> main_Load_448(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_0 = 0
main_Inc_446(i10, i94, env, static) -{1,1}> main_JMP_450(i10, i102, env, static) :|: 0 <= i102 && 1 <= i94 && 1 <= i10 && i94 + -1 = i102
main_Load_448(i10, i94, env, static) -{1,1}> main_ConstantStackPush_451(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10
main_JMP_450(i10, i102, env, static) -{1,1}> main_Load_457(i10, i102, env, static) :|: 0 <= i102 && 1 <= i10
main_ConstantStackPush_451(i10, i94, env, static) -{1,1}> main_IntArithmetic_463(i10, i94, iconst_2, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_2 = 2
main_Load_457(i10, i102, env, static) -{0,0}> main_Load_416(i10, i102, env, static) :|: 0 <= i102 && 1 <= i10
main_IntArithmetic_463(i10, i94, iconst_2, env, static) -{1,1}> main_Store_464(i10, i107, env, static) :|: 1 <= i94 && i107 < i94 && 1 <= i10 && iconst_2 = 2 && 0 <= i107
main_Store_464(i10, i107, env, static) -{1,1}> main_JMP_470(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
main_JMP_470(i10, i107, env, static) -{1,1}> main_Load_481(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
main_Load_481(i10, i107, env, static) -{0,0}> main_Load_416(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
(7) StraightLineCodeCompressionProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
obtained
main_Load_2(
i2,
env,
static) -{16,16}>
main_LE_52(
i2,
env,
static'1) :|: 0 >= 0 &&
static'1 <=
static''' +
1 &&
0 <=
2 &&
0 <=
static''' &&
static''' <=
static +
2 &&
0 <
1 &&
0 <=
1 &&
0 <=
static &&
0 <=
static'1 &&
0 <
2by chaining
main_Load_2(
i2,
env,
static) -{0,0}>
main_Load_4(
i2,
env,
static) :|: 0 >= 0
main_Load_4(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_ConstantStackPush_5(
i2,
env,
static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_5(
i2,
env,
static) -{1,1}>
langle_clinit_rangle_ArrayCreate_12(
iconst_0,
i2,
env,
static) :|:
iconst_0 =
0langle_clinit_rangle_ArrayCreate_12(
iconst_0,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_14(
a2,
i2,
iconst_0,
env,
static) :|:
a2 =
2 &&
iconst_0 =
0 &&
0 <
a2langle_clinit_rangle_FieldAccess_14(
a2,
i2,
iconst_0,
env,
static) -{1,1}>
langle_clinit_rangle_New_16(
i2,
env,
static') :|:
0 <=
a2 &&
iconst_0 =
0 &&
static' <=
static +
a2 &&
0 <=
static &&
0 <
a2langle_clinit_rangle_New_16(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_New_18(
i2,
env,
static) :|: 0 >= 0
langle_clinit_rangle_New_18(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_New_19(
i2,
env,
static) :|:
0 <=
staticlangle_clinit_rangle_New_19(
i2,
env,
static) -{1,1}>
langle_clinit_rangle_Duplicate_21(
o2,
i2,
env,
static) :|:
0 <
o2 &&
o2 =
1langle_clinit_rangle_Duplicate_21(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_ConstantStackPush_22(
o2,
i2,
env,
static) :|:
0 <
o2langle_clinit_rangle_ConstantStackPush_22(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_InvokeMethod_24(
o2,
NULL,
i2,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_clinit_rangle_InvokeMethod_24(
o2,
NULL,
i2,
env,
static) -{1,1}>
langle_init_rangle_Load_25(
o2,
i2,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_init_rangle_Load_25(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_28(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_28(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Load_29(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Load_29(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_32(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_32(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Return_34(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Return_34(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Return_37(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Return_37(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_39(
o2,
i2,
env,
static) :|:
0 <
o2langle_clinit_rangle_FieldAccess_39(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_Return_40(
i2,
env,
static') :|:
0 <
o2 &&
0 <=
o2 &&
0 <=
static &&
static' <=
static +
o2langle_clinit_rangle_Return_40(
i2,
env,
static) -{1,1}>
main_Load_45(
i2,
env,
static) :|: 0 >= 0
main_Load_45(
i2,
env,
static) -{0,0}>
main_Load_46(
i2,
env,
static) :|: 0 >= 0
main_Load_46(
i2,
env,
static) -{0,0}>
main_Load_48(
i2,
env,
static) :|:
0 <=
staticmain_Load_48(
i2,
env,
static) -{0,0}>
main_Load_50(
i2,
env,
static) :|: 0 >= 0
main_Load_50(
i2,
env,
static) -{0,0}>
main_Load_51(
i2,
env,
static) :|: 0 >= 0
main_Load_51(
i2,
env,
static) -{1,1}>
main_LE_52(
i2,
env,
static) :|: 0 >= 0
obtained
main_LE_52(i10, env, static) -{1,1}> main_Load_416(i10, i10, env, static) :|: 1 <= i10 && 0 < i10 && 0 <= i10
by chaining
main_LE_52(i10, env, static) -{0,0}> main_LE_55(i10, env, static) :|: 1 <= i10
main_LE_55(i10, env, static) -{1,1}> main_Load_59(i10, env, static) :|: 1 <= i10 && 0 < i10
main_Load_59(i10, env, static) -{0,0}> main_Load_416(i10, i10, env, static) :|: 0 <= i10 && 1 <= i10
obtained
main_EQ_417(i10, i94, env, static) -{4,4}> main_NE_441(i10, i98', i94, env, static) :|: 1 <= i10 && 1 <= i94 && i98' < 2 && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
by chaining
main_EQ_417(i10, i94, env, static) -{0,0}> main_EQ_423(i10, i94, env, static) :|: 0 <= i94 && 1 <= i94 && 1 <= i10
main_EQ_423(i10, i94, env, static) -{1,1}> main_Load_426(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10 && 0 < i94
main_Load_426(i10, i94, env, static) -{1,1}> main_ConstantStackPush_432(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10
main_ConstantStackPush_432(i10, i94, env, static) -{1,1}> main_IntArithmetic_437(i10, i94, iconst_2, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_2 = 2
main_IntArithmetic_437(i10, i94, iconst_2, env, static) -{1,1}> main_NE_441(i10, i98, i94, env, static) :|: 1 <= i94 && i98 <= 1 && 0 <= i98 && 1 <= i10 && i98 < iconst_2 && iconst_2 = 2
obtained
main_NE_441(i10, 0, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0
by chaining
main_NE_441(i10, iconst_0, i94, env, static) -{0,0}> main_NE_444(i10, iconst_0, i94, env, static) :|: 1 <= i94 && 1 <= i10 && 0 <= iconst_0 && iconst_0 <= 1 && iconst_0 = 0
main_NE_444(i10, iconst_0, i94, env, static) -{1,1}> main_Load_448(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_0 = 0
main_Load_448(i10, i94, env, static) -{1,1}> main_ConstantStackPush_451(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10
main_ConstantStackPush_451(i10, i94, env, static) -{1,1}> main_IntArithmetic_463(i10, i94, iconst_2, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_2 = 2
main_IntArithmetic_463(i10, i94, iconst_2, env, static) -{1,1}> main_Store_464(i10, i107, env, static) :|: 1 <= i94 && i107 < i94 && 1 <= i10 && iconst_2 = 2 && 0 <= i107
main_Store_464(i10, i107, env, static) -{1,1}> main_JMP_470(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
main_JMP_470(i10, i107, env, static) -{1,1}> main_Load_481(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
main_Load_481(i10, i107, env, static) -{0,0}> main_Load_416(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
obtained
main_NE_441(i10, 1, i94, env, static) -{3,3}> main_Load_416(i10, i102', env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1
by chaining
main_NE_441(i10, iconst_1, i94, env, static) -{0,0}> main_NE_443(i10, iconst_1, i94, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_1 <= 1 && 0 <= iconst_1 && iconst_1 = 1
main_NE_443(i10, iconst_1, i94, env, static) -{1,1}> main_Inc_446(i10, i94, env, static) :|: 0 < iconst_1 && 1 <= i94 && 1 <= i10 && iconst_1 = 1
main_Inc_446(i10, i94, env, static) -{1,1}> main_JMP_450(i10, i102, env, static) :|: 0 <= i102 && 1 <= i94 && 1 <= i10 && i94 + -1 = i102
main_JMP_450(i10, i102, env, static) -{1,1}> main_Load_457(i10, i102, env, static) :|: 0 <= i102 && 1 <= i10
main_Load_457(i10, i102, env, static) -{0,0}> main_Load_416(i10, i102, env, static) :|: 0 <= i102 && 1 <= i10
(8) Obligation:
IntTrs with 8 rules
Start term: main_Load_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_Load_2(i2, env, static) -{16,16}> main_LE_52(i2, env, static'1) :|: 0 >= 0 && static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && static''' <= static + 2 && 0 < 1 && 0 <= 1 && 0 <= static && 0 <= static'1 && 0 < 2
main_LE_52(i9, env, static) -{0,0}> main_LE_54(i9, env, static) :|: i9 <= 0
main_LE_52(i10, env, static) -{1,1}> main_Load_416(i10, i10, env, static) :|: 1 <= i10 && 0 < i10 && 0 <= i10
main_Load_416(i10, i78, env, static) -{1,1}> main_EQ_417(i10, i78, env, static) :|: 1 <= i10 && 0 <= i78
main_EQ_417(i10, iconst_0, env, static) -{0,0}> main_EQ_424(i10, iconst_0, env, static) :|: 1 <= i10 && 0 <= iconst_0 && iconst_0 = 0
main_EQ_417(i10, i94, env, static) -{4,4}> main_NE_441(i10, i98', i94, env, static) :|: 1 <= i10 && 1 <= i94 && i98' < 2 && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
main_NE_441(i10, 0, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0
main_NE_441(i10, 1, i94, env, static) -{3,3}> main_Load_416(i10, i102', env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1
(9) MovedArithmeticToConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Moved arithmethic from lhss to constraints.
main_NE_441(i10, 1, i94, env, static) -{3,3}> main_Load_416(i10, i102', env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1
was transformed to
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i102', env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
main_NE_441(i10, 0, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0
was transformed to
main_NE_441(i10, x, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
(10) Obligation:
IntTrs with 8 rules
Start term: main_Load_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i102', env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
main_EQ_417(i10, i94, env, static) -{4,4}> main_NE_441(i10, i98', i94, env, static) :|: 1 <= i10 && 1 <= i94 && i98' < 2 && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
main_LE_52(i10, env, static) -{1,1}> main_Load_416(i10, i10, env, static) :|: 1 <= i10 && 0 < i10 && 0 <= i10
main_EQ_417(i10, iconst_0, env, static) -{0,0}> main_EQ_424(i10, iconst_0, env, static) :|: 1 <= i10 && 0 <= iconst_0 && iconst_0 = 0
main_Load_416(i10, i78, env, static) -{1,1}> main_EQ_417(i10, i78, env, static) :|: 1 <= i10 && 0 <= i78
main_NE_441(i10, x, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
main_LE_52(i9, env, static) -{0,0}> main_LE_54(i9, env, static) :|: i9 <= 0
main_Load_2(i2, env, static) -{16,16}> main_LE_52(i2, env, static'1) :|: 0 >= 0 && static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && static''' <= static + 2 && 0 < 1 && 0 <= 1 && 0 <= static && 0 <= static'1 && 0 < 2
(11) MovedArithmeticFromConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Moved arithmethic from constraints to rhss.
main_EQ_417(i10, iconst_0, env, static) -{0,0}> main_EQ_424(i10, iconst_0, env, static) :|: 1 <= i10 && 0 <= iconst_0 && iconst_0 = 0
was transformed to
main_EQ_417(i10, iconst_0, env, static) -{0,0}> main_EQ_424(i10, 0, env, static) :|: 1 <= i10 && 0 <= iconst_0 && iconst_0 = 0
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i102', env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
was transformed to
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i94 + -1, env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
(12) Obligation:
IntTrs with 8 rules
Start term: main_Load_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_LE_52(i10, env, static) -{1,1}> main_Load_416(i10, i10, env, static) :|: 1 <= i10 && 0 < i10 && 0 <= i10
main_EQ_417(i10, i94, env, static) -{4,4}> main_NE_441(i10, i98', i94, env, static) :|: 1 <= i10 && 1 <= i94 && i98' < 2 && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
main_Load_416(i10, i78, env, static) -{1,1}> main_EQ_417(i10, i78, env, static) :|: 1 <= i10 && 0 <= i78
main_EQ_417(i10, iconst_0, env, static) -{0,0}> main_EQ_424(i10, 0, env, static) :|: 1 <= i10 && 0 <= iconst_0 && iconst_0 = 0
main_NE_441(i10, x, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
main_Load_2(i2, env, static) -{16,16}> main_LE_52(i2, env, static'1) :|: 0 >= 0 && static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && static''' <= static + 2 && 0 < 1 && 0 <= 1 && 0 <= static && 0 <= static'1 && 0 < 2
main_LE_52(i9, env, static) -{0,0}> main_LE_54(i9, env, static) :|: i9 <= 0
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i94 + -1, env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
(13) ExpressionSimplificationProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Simplified expressions.
main_EQ_417(i10, i94, env, static) -{4,4}> main_NE_441(i10, i98', i94, env, static) :|: 1 <= i10 && 1 <= i94 && i98' < 2 && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
was transformed to
main_EQ_417(i10, i94, env, static) -{4,4}> main_NE_441(i10, i98', i94, env, static) :|: 1 <= i10 && 1 <= i94 && i98' < 2 && 0 < i94 && 0 <= i98' && i98' <= 1
main_LE_52(i10, env, static) -{1,1}> main_Load_416(i10, i10, env, static) :|: 1 <= i10 && 0 < i10 && 0 <= i10
was transformed to
main_LE_52(i10, env, static) -{1,1}> main_Load_416(i10, i10, env, static) :|: 1 <= i10 && 0 < i10
main_NE_441(i10, x, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
was transformed to
main_NE_441(i10, x, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 1 <= i94 && x = 0
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i94 + -1, env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
was transformed to
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i94 - 1, env, static) :|: i94 - 1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && x = 1
main_Load_2(i2, env, static) -{16,16}> main_LE_52(i2, env, static'1) :|: 0 >= 0 && static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && static''' <= static + 2 && 0 < 1 && 0 <= 1 && 0 <= static && 0 <= static'1 && 0 < 2
was transformed to
main_Load_2(i2, env, static) -{16,16}> main_LE_52(i2, env, static'1) :|: static'1 <= static''' + 1 && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'1
(14) Obligation:
IntTrs with 8 rules
Start term: main_Load_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_EQ_417(i10, iconst_0, env, static) -{0,0}> main_EQ_424(i10, 0, env, static) :|: 1 <= i10 && 0 <= iconst_0 && iconst_0 = 0
main_NE_441(i10, x, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 1 <= i94 && x = 0
main_EQ_417(i10, i94, env, static) -{4,4}> main_NE_441(i10, i98', i94, env, static) :|: 1 <= i10 && 1 <= i94 && i98' < 2 && 0 < i94 && 0 <= i98' && i98' <= 1
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i94 - 1, env, static) :|: i94 - 1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && x = 1
main_Load_416(i10, i78, env, static) -{1,1}> main_EQ_417(i10, i78, env, static) :|: 1 <= i10 && 0 <= i78
main_Load_2(i2, env, static) -{16,16}> main_LE_52(i2, env, static'1) :|: static'1 <= static''' + 1 && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'1
main_LE_52(i10, env, static) -{1,1}> main_Load_416(i10, i10, env, static) :|: 1 <= i10 && 0 < i10
main_LE_52(i9, env, static) -{0,0}> main_LE_54(i9, env, static) :|: i9 <= 0
(15) JBCGraphEdgesToCpxIntTrsProof (CONCRETE UPPER BOUND(ID) transformation)
Transformed 48 jbc graph edges to a weighted ITS with 48 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.
(16) Obligation:
IntTrs with 48 rules
Start term: main_Load_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_Load_2(i2, env, static) -{0,0}> main_Load_4(i2, env, static) :|: 0 >= 0
main_Load_4(i2, env, static) -{0,0}> langle_clinit_rangle_ConstantStackPush_5(i2, env, static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_5(i2, env, static) -{1,1}> langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, env, static) :|: iconst_0 = 0
langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_14(a2, i2, iconst_0, env, static) :|: a2 = 2 && iconst_0 = 0 && 0 < a2
langle_clinit_rangle_FieldAccess_14(a2, i2, iconst_0, env, static) -{1,1}> langle_clinit_rangle_New_16(i2, env, static') :|: 0 <= a2 && iconst_0 = 0 && static' <= static + a2 && 0 <= static && 0 < a2
langle_clinit_rangle_New_16(i2, env, static) -{0,0}> langle_clinit_rangle_New_18(i2, env, static) :|: 0 >= 0
langle_clinit_rangle_New_18(i2, env, static) -{0,0}> langle_clinit_rangle_New_19(i2, env, static) :|: 0 <= static
langle_clinit_rangle_New_19(i2, env, static) -{1,1}> langle_clinit_rangle_Duplicate_21(o2, i2, env, static) :|: 0 < o2 && o2 = 1
langle_clinit_rangle_Duplicate_21(o2, i2, env, static) -{1,1}> langle_clinit_rangle_ConstantStackPush_22(o2, i2, env, static) :|: 0 < o2
langle_clinit_rangle_ConstantStackPush_22(o2, i2, env, static) -{1,1}> langle_clinit_rangle_InvokeMethod_24(o2, NULL, i2, env, static) :|: NULL = 0 && 0 < o2
langle_clinit_rangle_InvokeMethod_24(o2, NULL, i2, env, static) -{1,1}> langle_init_rangle_Load_25(o2, i2, env, static) :|: NULL = 0 && 0 < o2
langle_init_rangle_Load_25(o2, i2, env, static) -{1,1}> langle_init_rangle_InvokeMethod_28(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_28(o2, i2, env, static) -{1,1}> langle_init_rangle_Load_29(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Load_29(o2, i2, env, static) -{1,1}> langle_init_rangle_InvokeMethod_32(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_32(o2, i2, env, static) -{1,1}> langle_init_rangle_Return_34(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Return_34(o2, i2, env, static) -{1,1}> langle_init_rangle_Return_37(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Return_37(o2, i2, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_39(o2, i2, env, static) :|: 0 < o2
langle_clinit_rangle_FieldAccess_39(o2, i2, env, static) -{1,1}> langle_clinit_rangle_Return_40(i2, env, static') :|: 0 < o2 && 0 <= o2 && 0 <= static && static' <= static + o2
langle_clinit_rangle_Return_40(i2, env, static) -{1,1}> main_Load_45(i2, env, static) :|: 0 >= 0
main_Load_45(i2, env, static) -{0,0}> main_Load_46(i2, env, static) :|: 0 >= 0
main_Load_46(i2, env, static) -{0,0}> main_Load_48(i2, env, static) :|: 0 <= static
main_Load_48(i2, env, static) -{0,0}> main_Load_50(i2, env, static) :|: 0 >= 0
main_Load_50(i2, env, static) -{0,0}> main_Load_51(i2, env, static) :|: 0 >= 0
main_Load_51(i2, env, static) -{1,1}> main_LE_52(i2, env, static) :|: 0 >= 0
main_LE_52(i9, env, static) -{0,0}> main_LE_54(i9, env, static) :|: i9 <= 0
main_LE_52(i10, env, static) -{0,0}> main_LE_55(i10, env, static) :|: 1 <= i10
main_LE_55(i10, env, static) -{1,1}> main_Load_59(i10, env, static) :|: 1 <= i10 && 0 < i10
main_Load_59(i10, env, static) -{0,0}> main_Load_416(i10, i10, env, static) :|: 0 <= i10 && 1 <= i10
main_Load_416(i10, i78, env, static) -{1,1}> main_EQ_417(i10, i78, env, static) :|: 1 <= i10 && 0 <= i78
main_EQ_417(i10, i94, env, static) -{0,0}> main_EQ_423(i10, i94, env, static) :|: 0 <= i94 && 1 <= i94 && 1 <= i10
main_EQ_417(i10, iconst_0, env, static) -{0,0}> main_EQ_424(i10, iconst_0, env, static) :|: 1 <= i10 && 0 <= iconst_0 && iconst_0 = 0
main_EQ_423(i10, i94, env, static) -{1,1}> main_Load_426(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10 && 0 < i94
main_Load_426(i10, i94, env, static) -{1,1}> main_ConstantStackPush_432(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10
main_ConstantStackPush_432(i10, i94, env, static) -{1,1}> main_IntArithmetic_437(i10, i94, iconst_2, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_2 = 2
main_IntArithmetic_437(i10, i94, iconst_2, env, static) -{1,1}> main_NE_441(i10, i98, i94, env, static) :|: 1 <= i94 && i98 <= 1 && 0 <= i98 && 1 <= i10 && i94 % iconst_2 = i98 && iconst_2 = 2
main_NE_441(i10, iconst_1, i94, env, static) -{0,0}> main_NE_443(i10, iconst_1, i94, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_1 <= 1 && 0 <= iconst_1 && iconst_1 = 1
main_NE_441(i10, iconst_0, i94, env, static) -{0,0}> main_NE_444(i10, iconst_0, i94, env, static) :|: 1 <= i94 && 1 <= i10 && 0 <= iconst_0 && iconst_0 <= 1 && iconst_0 = 0
main_NE_443(i10, iconst_1, i94, env, static) -{1,1}> main_Inc_446(i10, i94, env, static) :|: 0 < iconst_1 && 1 <= i94 && 1 <= i10 && iconst_1 = 1
main_NE_444(i10, iconst_0, i94, env, static) -{1,1}> main_Load_448(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_0 = 0
main_Inc_446(i10, i94, env, static) -{1,1}> main_JMP_450(i10, i102, env, static) :|: 0 <= i102 && 1 <= i94 && 1 <= i10 && i94 + -1 = i102
main_Load_448(i10, i94, env, static) -{1,1}> main_ConstantStackPush_451(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10
main_JMP_450(i10, i102, env, static) -{1,1}> main_Load_457(i10, i102, env, static) :|: 0 <= i102 && 1 <= i10
main_ConstantStackPush_451(i10, i94, env, static) -{1,1}> main_IntArithmetic_463(i10, i94, iconst_2, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_2 = 2
main_Load_457(i10, i102, env, static) -{0,0}> main_Load_416(i10, i102, env, static) :|: 0 <= i102 && 1 <= i10
main_IntArithmetic_463(i10, i94, iconst_2, env, static) -{1,1}> main_Store_464(i10, i107, env, static) :|: 1 <= i94 && 1 <= i10 && i94 / iconst_2 = i107 && iconst_2 = 2 && 0 <= i107
main_Store_464(i10, i107, env, static) -{1,1}> main_JMP_470(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
main_JMP_470(i10, i107, env, static) -{1,1}> main_Load_481(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
main_Load_481(i10, i107, env, static) -{0,0}> main_Load_416(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
(17) StraightLineCodeCompressionProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
obtained
main_Load_2(
i2,
env,
static) -{16,16}>
main_LE_52(
i2,
env,
static'1) :|: 0 >= 0 &&
static'1 <=
static''' +
1 &&
0 <=
2 &&
0 <=
static''' &&
static''' <=
static +
2 &&
0 <
1 &&
0 <=
1 &&
0 <=
static &&
0 <=
static'1 &&
0 <
2by chaining
main_Load_2(
i2,
env,
static) -{0,0}>
main_Load_4(
i2,
env,
static) :|: 0 >= 0
main_Load_4(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_ConstantStackPush_5(
i2,
env,
static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_5(
i2,
env,
static) -{1,1}>
langle_clinit_rangle_ArrayCreate_12(
iconst_0,
i2,
env,
static) :|:
iconst_0 =
0langle_clinit_rangle_ArrayCreate_12(
iconst_0,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_14(
a2,
i2,
iconst_0,
env,
static) :|:
a2 =
2 &&
iconst_0 =
0 &&
0 <
a2langle_clinit_rangle_FieldAccess_14(
a2,
i2,
iconst_0,
env,
static) -{1,1}>
langle_clinit_rangle_New_16(
i2,
env,
static') :|:
0 <=
a2 &&
iconst_0 =
0 &&
static' <=
static +
a2 &&
0 <=
static &&
0 <
a2langle_clinit_rangle_New_16(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_New_18(
i2,
env,
static) :|: 0 >= 0
langle_clinit_rangle_New_18(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_New_19(
i2,
env,
static) :|:
0 <=
staticlangle_clinit_rangle_New_19(
i2,
env,
static) -{1,1}>
langle_clinit_rangle_Duplicate_21(
o2,
i2,
env,
static) :|:
0 <
o2 &&
o2 =
1langle_clinit_rangle_Duplicate_21(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_ConstantStackPush_22(
o2,
i2,
env,
static) :|:
0 <
o2langle_clinit_rangle_ConstantStackPush_22(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_InvokeMethod_24(
o2,
NULL,
i2,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_clinit_rangle_InvokeMethod_24(
o2,
NULL,
i2,
env,
static) -{1,1}>
langle_init_rangle_Load_25(
o2,
i2,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_init_rangle_Load_25(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_28(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_28(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Load_29(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Load_29(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_32(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_32(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Return_34(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Return_34(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Return_37(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Return_37(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_39(
o2,
i2,
env,
static) :|:
0 <
o2langle_clinit_rangle_FieldAccess_39(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_Return_40(
i2,
env,
static') :|:
0 <
o2 &&
0 <=
o2 &&
0 <=
static &&
static' <=
static +
o2langle_clinit_rangle_Return_40(
i2,
env,
static) -{1,1}>
main_Load_45(
i2,
env,
static) :|: 0 >= 0
main_Load_45(
i2,
env,
static) -{0,0}>
main_Load_46(
i2,
env,
static) :|: 0 >= 0
main_Load_46(
i2,
env,
static) -{0,0}>
main_Load_48(
i2,
env,
static) :|:
0 <=
staticmain_Load_48(
i2,
env,
static) -{0,0}>
main_Load_50(
i2,
env,
static) :|: 0 >= 0
main_Load_50(
i2,
env,
static) -{0,0}>
main_Load_51(
i2,
env,
static) :|: 0 >= 0
main_Load_51(
i2,
env,
static) -{1,1}>
main_LE_52(
i2,
env,
static) :|: 0 >= 0
obtained
main_LE_52(i10, env, static) -{1,1}> main_Load_416(i10, i10, env, static) :|: 1 <= i10 && 0 < i10 && 0 <= i10
by chaining
main_LE_52(i10, env, static) -{0,0}> main_LE_55(i10, env, static) :|: 1 <= i10
main_LE_55(i10, env, static) -{1,1}> main_Load_59(i10, env, static) :|: 1 <= i10 && 0 < i10
main_Load_59(i10, env, static) -{0,0}> main_Load_416(i10, i10, env, static) :|: 0 <= i10 && 1 <= i10
obtained
main_EQ_417(i10, i94, env, static) -{4,4}> main_NE_441(i10, i98', i94, env, static) :|: 1 <= i10 && 1 <= i94 && i94 % 2 = i98' && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
by chaining
main_EQ_417(i10, i94, env, static) -{0,0}> main_EQ_423(i10, i94, env, static) :|: 0 <= i94 && 1 <= i94 && 1 <= i10
main_EQ_423(i10, i94, env, static) -{1,1}> main_Load_426(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10 && 0 < i94
main_Load_426(i10, i94, env, static) -{1,1}> main_ConstantStackPush_432(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10
main_ConstantStackPush_432(i10, i94, env, static) -{1,1}> main_IntArithmetic_437(i10, i94, iconst_2, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_2 = 2
main_IntArithmetic_437(i10, i94, iconst_2, env, static) -{1,1}> main_NE_441(i10, i98, i94, env, static) :|: 1 <= i94 && i98 <= 1 && 0 <= i98 && 1 <= i10 && i94 % iconst_2 = i98 && iconst_2 = 2
obtained
main_NE_441(i10, 0, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i94 / 2 = i107' && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0
by chaining
main_NE_441(i10, iconst_0, i94, env, static) -{0,0}> main_NE_444(i10, iconst_0, i94, env, static) :|: 1 <= i94 && 1 <= i10 && 0 <= iconst_0 && iconst_0 <= 1 && iconst_0 = 0
main_NE_444(i10, iconst_0, i94, env, static) -{1,1}> main_Load_448(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_0 = 0
main_Load_448(i10, i94, env, static) -{1,1}> main_ConstantStackPush_451(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10
main_ConstantStackPush_451(i10, i94, env, static) -{1,1}> main_IntArithmetic_463(i10, i94, iconst_2, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_2 = 2
main_IntArithmetic_463(i10, i94, iconst_2, env, static) -{1,1}> main_Store_464(i10, i107, env, static) :|: 1 <= i94 && 1 <= i10 && i94 / iconst_2 = i107 && iconst_2 = 2 && 0 <= i107
main_Store_464(i10, i107, env, static) -{1,1}> main_JMP_470(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
main_JMP_470(i10, i107, env, static) -{1,1}> main_Load_481(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
main_Load_481(i10, i107, env, static) -{0,0}> main_Load_416(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
obtained
main_NE_441(i10, 1, i94, env, static) -{3,3}> main_Load_416(i10, i102', env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1
by chaining
main_NE_441(i10, iconst_1, i94, env, static) -{0,0}> main_NE_443(i10, iconst_1, i94, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_1 <= 1 && 0 <= iconst_1 && iconst_1 = 1
main_NE_443(i10, iconst_1, i94, env, static) -{1,1}> main_Inc_446(i10, i94, env, static) :|: 0 < iconst_1 && 1 <= i94 && 1 <= i10 && iconst_1 = 1
main_Inc_446(i10, i94, env, static) -{1,1}> main_JMP_450(i10, i102, env, static) :|: 0 <= i102 && 1 <= i94 && 1 <= i10 && i94 + -1 = i102
main_JMP_450(i10, i102, env, static) -{1,1}> main_Load_457(i10, i102, env, static) :|: 0 <= i102 && 1 <= i10
main_Load_457(i10, i102, env, static) -{0,0}> main_Load_416(i10, i102, env, static) :|: 0 <= i102 && 1 <= i10
(18) Obligation:
IntTrs with 8 rules
Start term: main_Load_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_Load_2(i2, env, static) -{16,16}> main_LE_52(i2, env, static'1) :|: 0 >= 0 && static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && static''' <= static + 2 && 0 < 1 && 0 <= 1 && 0 <= static && 0 <= static'1 && 0 < 2
main_LE_52(i9, env, static) -{0,0}> main_LE_54(i9, env, static) :|: i9 <= 0
main_LE_52(i10, env, static) -{1,1}> main_Load_416(i10, i10, env, static) :|: 1 <= i10 && 0 < i10 && 0 <= i10
main_Load_416(i10, i78, env, static) -{1,1}> main_EQ_417(i10, i78, env, static) :|: 1 <= i10 && 0 <= i78
main_EQ_417(i10, iconst_0, env, static) -{0,0}> main_EQ_424(i10, iconst_0, env, static) :|: 1 <= i10 && 0 <= iconst_0 && iconst_0 = 0
main_EQ_417(i10, i94, env, static) -{4,4}> main_NE_441(i10, i98', i94, env, static) :|: 1 <= i10 && 1 <= i94 && i94 % 2 = i98' && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
main_NE_441(i10, 0, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i94 / 2 = i107' && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0
main_NE_441(i10, 1, i94, env, static) -{3,3}> main_Load_416(i10, i102', env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1
(19) MovedArithmeticToConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Moved arithmethic from lhss to constraints.
main_NE_441(i10, 1, i94, env, static) -{3,3}> main_Load_416(i10, i102', env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1
was transformed to
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i102', env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
main_NE_441(i10, 0, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i94 / 2 = i107' && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0
was transformed to
main_NE_441(i10, x, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i94 / 2 = i107' && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
(20) Obligation:
IntTrs with 8 rules
Start term: main_Load_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i102', env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
main_EQ_417(i10, i94, env, static) -{4,4}> main_NE_441(i10, i98', i94, env, static) :|: 1 <= i10 && 1 <= i94 && i94 % 2 = i98' && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
main_LE_52(i10, env, static) -{1,1}> main_Load_416(i10, i10, env, static) :|: 1 <= i10 && 0 < i10 && 0 <= i10
main_EQ_417(i10, iconst_0, env, static) -{0,0}> main_EQ_424(i10, iconst_0, env, static) :|: 1 <= i10 && 0 <= iconst_0 && iconst_0 = 0
main_Load_416(i10, i78, env, static) -{1,1}> main_EQ_417(i10, i78, env, static) :|: 1 <= i10 && 0 <= i78
main_NE_441(i10, x, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i94 / 2 = i107' && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
main_LE_52(i9, env, static) -{0,0}> main_LE_54(i9, env, static) :|: i9 <= 0
main_Load_2(i2, env, static) -{16,16}> main_LE_52(i2, env, static'1) :|: 0 >= 0 && static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && static''' <= static + 2 && 0 < 1 && 0 <= 1 && 0 <= static && 0 <= static'1 && 0 < 2
(21) RemoveDivModProof (CONCRETE UPPER BOUND(ID) transformation)
Removed div and mod.
main_NE_441(i10, x, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i94 / 2 = i107' && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
was transformed to
main_NE_441(i10, x, i94, env, static) -{6,6}> main_NE_441'(i10, x, i94, env, static) :|: div = i107' && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
main_NE_441'(i10, x, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i94 - 2 * div < 2 && i94 - 2 * div + 2 > 0 && div = i107' && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
main_EQ_417(i10, i94, env, static) -{4,4}> main_NE_441(i10, i98', i94, env, static) :|: 1 <= i10 && 1 <= i94 && i94 % 2 = i98' && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
was transformed to
main_EQ_417(i10, i94, env, static) -{4,4}> main_EQ_417'(i10, i94, env, static) :|: 1 <= i10 && 1 <= i94 && i94 - 2 * div = i98' && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
main_EQ_417'(i10, i94, env, static) -{4,4}> main_NE_441(i10, i98', i94, env, static) :|: i94 - 2 * div < 2 && i94 - 2 * div + 2 > 0 && 1 <= i10 && 1 <= i94 && i94 - 2 * div = i98' && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
(22) Obligation:
IntTrs with 10 rules
Start term: main_Load_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_EQ_417(i10, i94, env, static) -{4,4}> main_EQ_417'(i10, i94, env, static) :|: 1 <= i10 && 1 <= i94 && i94 - 2 * div = i98' && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
main_LE_52(i10, env, static) -{1,1}> main_Load_416(i10, i10, env, static) :|: 1 <= i10 && 0 < i10 && 0 <= i10
main_EQ_417'(i10, i94, env, static) -{4,4}> main_NE_441(i10, i98', i94, env, static) :|: i94 - 2 * div < 2 && i94 - 2 * div + 2 > 0 && 1 <= i10 && 1 <= i94 && i94 - 2 * div = i98' && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
main_Load_416(i10, i78, env, static) -{1,1}> main_EQ_417(i10, i78, env, static) :|: 1 <= i10 && 0 <= i78
main_EQ_417(i10, iconst_0, env, static) -{0,0}> main_EQ_424(i10, iconst_0, env, static) :|: 1 <= i10 && 0 <= iconst_0 && iconst_0 = 0
main_NE_441(i10, x, i94, env, static) -{6,6}> main_NE_441'(i10, x, i94, env, static) :|: div = i107' && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
main_Load_2(i2, env, static) -{16,16}> main_LE_52(i2, env, static'1) :|: 0 >= 0 && static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && static''' <= static + 2 && 0 < 1 && 0 <= 1 && 0 <= static && 0 <= static'1 && 0 < 2
main_LE_52(i9, env, static) -{0,0}> main_LE_54(i9, env, static) :|: i9 <= 0
main_NE_441'(i10, x, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i94 - 2 * div < 2 && i94 - 2 * div + 2 > 0 && div = i107' && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i102', env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
(23) MovedArithmeticFromConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Moved arithmethic from constraints to rhss.
main_EQ_417'(i10, i94, env, static) -{4,4}> main_NE_441(i10, i98', i94, env, static) :|: i94 - 2 * div < 2 && i94 - 2 * div + 2 > 0 && 1 <= i10 && 1 <= i94 && i94 - 2 * div = i98' && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
was transformed to
main_EQ_417'(i10, i94, env, static) -{4,4}> main_NE_441(i10, i94 - 2 * div, i94, env, static) :|: i94 - 2 * div < 2 && i94 - 2 * div + 2 > 0 && 1 <= i10 && 1 <= i94 && i94 - 2 * div = i98' && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
main_EQ_417(i10, iconst_0, env, static) -{0,0}> main_EQ_424(i10, iconst_0, env, static) :|: 1 <= i10 && 0 <= iconst_0 && iconst_0 = 0
was transformed to
main_EQ_417(i10, iconst_0, env, static) -{0,0}> main_EQ_424(i10, 0, env, static) :|: 1 <= i10 && 0 <= iconst_0 && iconst_0 = 0
main_NE_441(i10, x, i94, env, static) -{6,6}> main_NE_441'(i10, x, i94, env, static) :|: div = i107' && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
was transformed to
main_NE_441(i10, x, i94, env, static) -{6,6}> main_NE_441'(i10, 0, i94, env, static) :|: div = i107' && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i102', env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
was transformed to
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i94 + -1, env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
(24) Obligation:
IntTrs with 10 rules
Start term: main_Load_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_EQ_417(i10, i94, env, static) -{4,4}> main_EQ_417'(i10, i94, env, static) :|: 1 <= i10 && 1 <= i94 && i94 - 2 * div = i98' && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
main_LE_52(i10, env, static) -{1,1}> main_Load_416(i10, i10, env, static) :|: 1 <= i10 && 0 < i10 && 0 <= i10
main_EQ_417'(i10, i94, env, static) -{4,4}> main_NE_441(i10, i94 - 2 * div, i94, env, static) :|: i94 - 2 * div < 2 && i94 - 2 * div + 2 > 0 && 1 <= i10 && 1 <= i94 && i94 - 2 * div = i98' && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
main_EQ_417(i10, iconst_0, env, static) -{0,0}> main_EQ_424(i10, 0, env, static) :|: 1 <= i10 && 0 <= iconst_0 && iconst_0 = 0
main_Load_416(i10, i78, env, static) -{1,1}> main_EQ_417(i10, i78, env, static) :|: 1 <= i10 && 0 <= i78
main_NE_441(i10, x, i94, env, static) -{6,6}> main_NE_441'(i10, 0, i94, env, static) :|: div = i107' && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
main_LE_52(i9, env, static) -{0,0}> main_LE_54(i9, env, static) :|: i9 <= 0
main_Load_2(i2, env, static) -{16,16}> main_LE_52(i2, env, static'1) :|: 0 >= 0 && static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && static''' <= static + 2 && 0 < 1 && 0 <= 1 && 0 <= static && 0 <= static'1 && 0 < 2
main_NE_441'(i10, x, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i94 - 2 * div < 2 && i94 - 2 * div + 2 > 0 && div = i107' && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i94 + -1, env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
(25) ExpressionSimplificationProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Simplified expressions.
main_EQ_417'(i10, i94, env, static) -{4,4}> main_NE_441(i10, i94 - 2 * div, i94, env, static) :|: i94 - 2 * div < 2 && i94 - 2 * div + 2 > 0 && 1 <= i10 && 1 <= i94 && i94 - 2 * div = i98' && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
was transformed to
main_EQ_417'(i10, i94, env, static) -{4,4}> main_NE_441(i10, i94 + -2 * div, i94, env, static) :|: i94 + -2 * div < 2 && 0 < i94 + -2 * div + 2 && 1 <= i10 && 1 <= i94 && i94 + -2 * div = i98' && 0 < i94 && 0 <= i98' && i98' <= 1
main_NE_441(i10, x, i94, env, static) -{6,6}> main_NE_441'(i10, 0, i94, env, static) :|: div = i107' && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
was transformed to
main_NE_441(i10, x, i94, env, static) -{6,6}> main_NE_441'(i10, 0, i94, env, static) :|: div = i107' && 1 <= i10 && 0 <= i107' && 1 <= i94 && x = 0
main_EQ_417(i10, i94, env, static) -{4,4}> main_EQ_417'(i10, i94, env, static) :|: 1 <= i10 && 1 <= i94 && i94 - 2 * div = i98' && 0 < i94 && 0 <= i94 && 0 <= i98' && i98' <= 1
was transformed to
main_EQ_417(i10, i94, env, static) -{4,4}> main_EQ_417'(i10, i94, env, static) :|: 1 <= i10 && 1 <= i94 && i94 + -2 * div = i98' && 0 < i94 && 0 <= i98' && i98' <= 1
main_LE_52(i10, env, static) -{1,1}> main_Load_416(i10, i10, env, static) :|: 1 <= i10 && 0 < i10 && 0 <= i10
was transformed to
main_LE_52(i10, env, static) -{1,1}> main_Load_416(i10, i10, env, static) :|: 1 <= i10 && 0 < i10
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i94 + -1, env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
was transformed to
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i94 - 1, env, static) :|: i94 - 1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && x = 1
main_Load_2(i2, env, static) -{16,16}> main_LE_52(i2, env, static'1) :|: 0 >= 0 && static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && static''' <= static + 2 && 0 < 1 && 0 <= 1 && 0 <= static && 0 <= static'1 && 0 < 2
was transformed to
main_Load_2(i2, env, static) -{16,16}> main_LE_52(i2, env, static'1) :|: static'1 <= static''' + 1 && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'1
main_NE_441'(i10, x, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i94 - 2 * div < 2 && i94 - 2 * div + 2 > 0 && div = i107' && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
was transformed to
main_NE_441'(i10, x, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i94 + -2 * div < 2 && 0 < i94 + -2 * div + 2 && div = i107' && 1 <= i10 && 0 <= i107' && 1 <= i94 && x = 0
(26) Obligation:
IntTrs with 10 rules
Start term: main_Load_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
main_EQ_417(i10, i94, env, static) -{4,4}> main_EQ_417'(i10, i94, env, static) :|: 1 <= i10 && 1 <= i94 && i94 + -2 * div = i98' && 0 < i94 && 0 <= i98' && i98' <= 1
main_EQ_417(i10, iconst_0, env, static) -{0,0}> main_EQ_424(i10, 0, env, static) :|: 1 <= i10 && 0 <= iconst_0 && iconst_0 = 0
main_NE_441'(i10, x, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i94 + -2 * div < 2 && 0 < i94 + -2 * div + 2 && div = i107' && 1 <= i10 && 0 <= i107' && 1 <= i94 && x = 0
main_NE_441(i10, x, i94, env, static) -{3,3}> main_Load_416(i10, i94 - 1, env, static) :|: i94 - 1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && x = 1
main_Load_416(i10, i78, env, static) -{1,1}> main_EQ_417(i10, i78, env, static) :|: 1 <= i10 && 0 <= i78
main_Load_2(i2, env, static) -{16,16}> main_LE_52(i2, env, static'1) :|: static'1 <= static''' + 1 && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'1
main_LE_52(i10, env, static) -{1,1}> main_Load_416(i10, i10, env, static) :|: 1 <= i10 && 0 < i10
main_LE_52(i9, env, static) -{0,0}> main_LE_54(i9, env, static) :|: i9 <= 0
main_EQ_417'(i10, i94, env, static) -{4,4}> main_NE_441(i10, i94 + -2 * div, i94, env, static) :|: i94 + -2 * div < 2 && 0 < i94 + -2 * div + 2 && 1 <= i10 && 1 <= i94 && i94 + -2 * div = i98' && 0 < i94 && 0 <= i98' && i98' <= 1
main_NE_441(i10, x, i94, env, static) -{6,6}> main_NE_441'(i10, 0, i94, env, static) :|: div = i107' && 1 <= i10 && 0 <= i107' && 1 <= i94 && x = 0
(27) TerminationGraphToComplexityProof (BOTH CONCRETE BOUNDS(ID, ADD(4)) transformation)
Extracted set of 46 edges for the analysis of TIME complexity. Dropped leaves.
(28) Obligation:
Set of 46 edges based on JBC Program.
Performed SCC analyses:
- Used field analysis yielded the following read fields:
Considered paths: all paths from start
(29) JBCGraphEdgesToCpxIntTrsProof (CONCRETE UPPER BOUND(ID) transformation)
Transformed 46 jbc graph edges to a weighted ITS with 46 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.
(30) Obligation:
IntTrs with 46 rules
Start term: main_Load_2(#0, env, static)
Considered paths: all paths from start
Rules:
main_Load_2(i2, env, static) -{0,0}> main_Load_4(i2, env, static) :|: 0 >= 0
main_Load_4(i2, env, static) -{0,0}> langle_clinit_rangle_ConstantStackPush_5(i2, env, static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_5(i2, env, static) -{1,1}> langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, env, static) :|: iconst_0 = 0
langle_clinit_rangle_ArrayCreate_12(iconst_0, i2, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_14(a2, i2, iconst_0, env, static) :|: a2 = 2 && iconst_0 = 0 && 0 < a2
langle_clinit_rangle_FieldAccess_14(a2, i2, iconst_0, env, static) -{1,1}> langle_clinit_rangle_New_16(i2, env, static') :|: 0 <= a2 && iconst_0 = 0 && static' <= static + a2 && 0 <= static && 0 < a2
langle_clinit_rangle_New_16(i2, env, static) -{0,0}> langle_clinit_rangle_New_18(i2, env, static) :|: 0 >= 0
langle_clinit_rangle_New_18(i2, env, static) -{0,0}> langle_clinit_rangle_New_19(i2, env, static) :|: 0 <= static
langle_clinit_rangle_New_19(i2, env, static) -{1,1}> langle_clinit_rangle_Duplicate_21(o2, i2, env, static) :|: 0 < o2 && o2 = 1
langle_clinit_rangle_Duplicate_21(o2, i2, env, static) -{1,1}> langle_clinit_rangle_ConstantStackPush_22(o2, i2, env, static) :|: 0 < o2
langle_clinit_rangle_ConstantStackPush_22(o2, i2, env, static) -{1,1}> langle_clinit_rangle_InvokeMethod_24(o2, NULL, i2, env, static) :|: NULL = 0 && 0 < o2
langle_clinit_rangle_InvokeMethod_24(o2, NULL, i2, env, static) -{1,1}> langle_init_rangle_Load_25(o2, i2, env, static) :|: NULL = 0 && 0 < o2
langle_init_rangle_Load_25(o2, i2, env, static) -{1,1}> langle_init_rangle_InvokeMethod_28(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_28(o2, i2, env, static) -{1,1}> langle_init_rangle_Load_29(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Load_29(o2, i2, env, static) -{1,1}> langle_init_rangle_InvokeMethod_32(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_32(o2, i2, env, static) -{1,1}> langle_init_rangle_Return_34(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Return_34(o2, i2, env, static) -{1,1}> langle_init_rangle_Return_37(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Return_37(o2, i2, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_39(o2, i2, env, static) :|: 0 < o2
langle_clinit_rangle_FieldAccess_39(o2, i2, env, static) -{1,1}> langle_clinit_rangle_Return_40(i2, env, static') :|: 0 < o2 && 0 <= o2 && 0 <= static && static' <= static + o2
langle_clinit_rangle_Return_40(i2, env, static) -{1,1}> main_Load_45(i2, env, static) :|: 0 >= 0
main_Load_45(i2, env, static) -{0,0}> main_Load_46(i2, env, static) :|: 0 >= 0
main_Load_46(i2, env, static) -{0,0}> main_Load_48(i2, env, static) :|: 0 <= static
main_Load_48(i2, env, static) -{0,0}> main_Load_50(i2, env, static) :|: 0 >= 0
main_Load_50(i2, env, static) -{0,0}> main_Load_51(i2, env, static) :|: 0 >= 0
main_Load_51(i2, env, static) -{1,1}> main_LE_52(i2, env, static) :|: 0 >= 0
main_LE_52(i10, env, static) -{0,0}> main_LE_55(i10, env, static) :|: 1 <= i10
main_LE_55(i10, env, static) -{1,1}> main_Load_59(i10, env, static) :|: 1 <= i10 && 0 < i10
main_Load_59(i10, env, static) -{0,0}> main_Load_416(i10, i10, env, static) :|: 0 <= i10 && 1 <= i10
main_Load_416(i10, i78, env, static) -{1,1}> main_EQ_417(i10, i78, env, static) :|: 1 <= i10 && 0 <= i78
main_EQ_417(i10, i94, env, static) -{0,0}> main_EQ_423(i10, i94, env, static) :|: 0 <= i94 && 1 <= i94 && 1 <= i10
main_EQ_423(i10, i94, env, static) -{1,1}> main_Load_426(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10 && 0 < i94
main_Load_426(i10, i94, env, static) -{1,1}> main_ConstantStackPush_432(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10
main_ConstantStackPush_432(i10, i94, env, static) -{1,1}> main_IntArithmetic_437(i10, i94, iconst_2, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_2 = 2
main_IntArithmetic_437(i10, i94, iconst_2, env, static) -{1,1}> main_NE_441(i10, i98, i94, env, static) :|: 1 <= i94 && i98 <= 1 && 0 <= i98 && 1 <= i10 && i98 < iconst_2 && iconst_2 = 2
main_NE_441(i10, iconst_1, i94, env, static) -{0,0}> main_NE_443(i10, iconst_1, i94, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_1 <= 1 && 0 <= iconst_1 && iconst_1 = 1
main_NE_441(i10, iconst_0, i94, env, static) -{0,0}> main_NE_444(i10, iconst_0, i94, env, static) :|: 1 <= i94 && 1 <= i10 && 0 <= iconst_0 && iconst_0 <= 1 && iconst_0 = 0
main_NE_443(i10, iconst_1, i94, env, static) -{1,1}> main_Inc_446(i10, i94, env, static) :|: 0 < iconst_1 && 1 <= i94 && 1 <= i10 && iconst_1 = 1
main_NE_444(i10, iconst_0, i94, env, static) -{1,1}> main_Load_448(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_0 = 0
main_Inc_446(i10, i94, env, static) -{1,1}> main_JMP_450(i10, i102, env, static) :|: 0 <= i102 && 1 <= i94 && 1 <= i10 && i94 + -1 = i102
main_Load_448(i10, i94, env, static) -{1,1}> main_ConstantStackPush_451(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10
main_JMP_450(i10, i102, env, static) -{1,1}> main_Load_457(i10, i102, env, static) :|: 0 <= i102 && 1 <= i10
main_ConstantStackPush_451(i10, i94, env, static) -{1,1}> main_IntArithmetic_463(i10, i94, iconst_2, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_2 = 2
main_Load_457(i10, i102, env, static) -{0,0}> main_Load_416(i10, i102, env, static) :|: 0 <= i102 && 1 <= i10
main_IntArithmetic_463(i10, i94, iconst_2, env, static) -{1,1}> main_Store_464(i10, i107, env, static) :|: 1 <= i94 && i107 < i94 && 1 <= i10 && iconst_2 = 2 && 0 <= i107
main_Store_464(i10, i107, env, static) -{1,1}> main_JMP_470(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
main_JMP_470(i10, i107, env, static) -{1,1}> main_Load_481(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
main_Load_481(i10, i107, env, static) -{0,0}> main_Load_416(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
(31) StraightLineCodeCompressionProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
obtained
main_Load_2(
i2,
env,
static) -{17,17}>
main_Load_416(
i2,
i2,
env,
static'1) :|:
0 <
2 &&
0 <=
i2 &&
1 <=
i2 &&
0 <=
static'1 &&
0 <=
static &&
0 <=
1 &&
0 <
1 &&
static''' <=
static +
2 &&
0 <=
static''' &&
0 <=
2 && 0 >= 0 &&
0 <
i2 &&
static'1 <=
static''' +
1by chaining
main_Load_2(
i2,
env,
static) -{0,0}>
main_Load_4(
i2,
env,
static) :|: 0 >= 0
main_Load_4(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_ConstantStackPush_5(
i2,
env,
static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_5(
i2,
env,
static) -{1,1}>
langle_clinit_rangle_ArrayCreate_12(
iconst_0,
i2,
env,
static) :|:
iconst_0 =
0langle_clinit_rangle_ArrayCreate_12(
iconst_0,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_14(
a2,
i2,
iconst_0,
env,
static) :|:
a2 =
2 &&
iconst_0 =
0 &&
0 <
a2langle_clinit_rangle_FieldAccess_14(
a2,
i2,
iconst_0,
env,
static) -{1,1}>
langle_clinit_rangle_New_16(
i2,
env,
static') :|:
0 <=
a2 &&
iconst_0 =
0 &&
static' <=
static +
a2 &&
0 <=
static &&
0 <
a2langle_clinit_rangle_New_16(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_New_18(
i2,
env,
static) :|: 0 >= 0
langle_clinit_rangle_New_18(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_New_19(
i2,
env,
static) :|:
0 <=
staticlangle_clinit_rangle_New_19(
i2,
env,
static) -{1,1}>
langle_clinit_rangle_Duplicate_21(
o2,
i2,
env,
static) :|:
0 <
o2 &&
o2 =
1langle_clinit_rangle_Duplicate_21(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_ConstantStackPush_22(
o2,
i2,
env,
static) :|:
0 <
o2langle_clinit_rangle_ConstantStackPush_22(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_InvokeMethod_24(
o2,
NULL,
i2,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_clinit_rangle_InvokeMethod_24(
o2,
NULL,
i2,
env,
static) -{1,1}>
langle_init_rangle_Load_25(
o2,
i2,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_init_rangle_Load_25(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_28(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_28(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Load_29(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Load_29(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_32(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_32(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Return_34(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Return_34(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Return_37(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Return_37(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_39(
o2,
i2,
env,
static) :|:
0 <
o2langle_clinit_rangle_FieldAccess_39(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_Return_40(
i2,
env,
static') :|:
0 <
o2 &&
0 <=
o2 &&
0 <=
static &&
static' <=
static +
o2langle_clinit_rangle_Return_40(
i2,
env,
static) -{1,1}>
main_Load_45(
i2,
env,
static) :|: 0 >= 0
main_Load_45(
i2,
env,
static) -{0,0}>
main_Load_46(
i2,
env,
static) :|: 0 >= 0
main_Load_46(
i2,
env,
static) -{0,0}>
main_Load_48(
i2,
env,
static) :|:
0 <=
staticmain_Load_48(
i2,
env,
static) -{0,0}>
main_Load_50(
i2,
env,
static) :|: 0 >= 0
main_Load_50(
i2,
env,
static) -{0,0}>
main_Load_51(
i2,
env,
static) :|: 0 >= 0
main_Load_51(
i2,
env,
static) -{1,1}>
main_LE_52(
i2,
env,
static) :|: 0 >= 0
main_LE_52(
i10,
env,
static) -{0,0}>
main_LE_55(
i10,
env,
static) :|:
1 <=
i10main_LE_55(
i10,
env,
static) -{1,1}>
main_Load_59(
i10,
env,
static) :|:
1 <=
i10 &&
0 <
i10main_Load_59(
i10,
env,
static) -{0,0}>
main_Load_416(
i10,
i10,
env,
static) :|:
0 <=
i10 &&
1 <=
i10obtained
main_Load_416(i10, i78, env, static) -{5,5}> main_NE_441(i10, i98', i78, env, static) :|: 0 <= i78 && 1 <= i78 && i98' < 2 && 0 < i78 && 1 <= i10 && 0 <= i98' && i98' <= 1
by chaining
main_Load_416(i10, i78, env, static) -{1,1}> main_EQ_417(i10, i78, env, static) :|: 1 <= i10 && 0 <= i78
main_EQ_417(i10, i94, env, static) -{0,0}> main_EQ_423(i10, i94, env, static) :|: 0 <= i94 && 1 <= i94 && 1 <= i10
main_EQ_423(i10, i94, env, static) -{1,1}> main_Load_426(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10 && 0 < i94
main_Load_426(i10, i94, env, static) -{1,1}> main_ConstantStackPush_432(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10
main_ConstantStackPush_432(i10, i94, env, static) -{1,1}> main_IntArithmetic_437(i10, i94, iconst_2, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_2 = 2
main_IntArithmetic_437(i10, i94, iconst_2, env, static) -{1,1}> main_NE_441(i10, i98, i94, env, static) :|: 1 <= i94 && i98 <= 1 && 0 <= i98 && 1 <= i10 && i98 < iconst_2 && iconst_2 = 2
obtained
main_NE_441(i10, 0, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0
by chaining
main_NE_441(i10, iconst_0, i94, env, static) -{0,0}> main_NE_444(i10, iconst_0, i94, env, static) :|: 1 <= i94 && 1 <= i10 && 0 <= iconst_0 && iconst_0 <= 1 && iconst_0 = 0
main_NE_444(i10, iconst_0, i94, env, static) -{1,1}> main_Load_448(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_0 = 0
main_Load_448(i10, i94, env, static) -{1,1}> main_ConstantStackPush_451(i10, i94, env, static) :|: 1 <= i94 && 1 <= i10
main_ConstantStackPush_451(i10, i94, env, static) -{1,1}> main_IntArithmetic_463(i10, i94, iconst_2, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_2 = 2
main_IntArithmetic_463(i10, i94, iconst_2, env, static) -{1,1}> main_Store_464(i10, i107, env, static) :|: 1 <= i94 && i107 < i94 && 1 <= i10 && iconst_2 = 2 && 0 <= i107
main_Store_464(i10, i107, env, static) -{1,1}> main_JMP_470(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
main_JMP_470(i10, i107, env, static) -{1,1}> main_Load_481(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
main_Load_481(i10, i107, env, static) -{0,0}> main_Load_416(i10, i107, env, static) :|: 1 <= i10 && 0 <= i107
obtained
main_NE_441(i10, 1, i94, env, static) -{3,3}> main_Load_416(i10, i102', env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1
by chaining
main_NE_441(i10, iconst_1, i94, env, static) -{0,0}> main_NE_443(i10, iconst_1, i94, env, static) :|: 1 <= i94 && 1 <= i10 && iconst_1 <= 1 && 0 <= iconst_1 && iconst_1 = 1
main_NE_443(i10, iconst_1, i94, env, static) -{1,1}> main_Inc_446(i10, i94, env, static) :|: 0 < iconst_1 && 1 <= i94 && 1 <= i10 && iconst_1 = 1
main_Inc_446(i10, i94, env, static) -{1,1}> main_JMP_450(i10, i102, env, static) :|: 0 <= i102 && 1 <= i94 && 1 <= i10 && i94 + -1 = i102
main_JMP_450(i10, i102, env, static) -{1,1}> main_Load_457(i10, i102, env, static) :|: 0 <= i102 && 1 <= i10
main_Load_457(i10, i102, env, static) -{0,0}> main_Load_416(i10, i102, env, static) :|: 0 <= i102 && 1 <= i10
(32) Obligation:
IntTrs with 4 rules
Start term: main_Load_2(#0, env, static)
Considered paths: all paths from start
Rules:
main_Load_2(i2, env, static) -{17,17}> main_Load_416(i2, i2, env, static'1) :|: 0 < 2 && 0 <= i2 && 1 <= i2 && 0 <= static'1 && 0 <= static && 0 <= 1 && 0 < 1 && static''' <= static + 2 && 0 <= static''' && 0 <= 2 && 0 >= 0 && 0 < i2 && static'1 <= static''' + 1
main_Load_416(i10, i78, env, static) -{5,5}> main_NE_441(i10, i98', i78, env, static) :|: 0 <= i78 && 1 <= i78 && i98' < 2 && 0 < i78 && 1 <= i10 && 0 <= i98' && i98' <= 1
main_NE_441(i10, 0, i94, env, static) -{6,6}> main_Load_416(i10, i107', env, static) :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0
main_NE_441(i10, 1, i94, env, static) -{3,3}> main_Load_416(i10, i102', env, static) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1
(33) 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) → main_Load_2(x1, x3)
main_Load_416(x1, x2, x3, x4) → main_Load_416(x1, x2)
main_NE_441(x1, x2, x3, x4, x5) → main_NE_441(x1, x2, x3)
(34) Obligation:
IntTrs with 4 rules
Start term: main_Load_2(#0, static)
Considered paths: all paths from start
Rules:
main_Load_2(i2, static) -{17,17}> main_Load_416(i2, i2) :|: 0 < 2 && 0 <= i2 && 1 <= i2 && 0 <= static'1 && 0 <= static && 0 <= 1 && 0 < 1 && static''' <= static + 2 && 0 <= static''' && 0 <= 2 && 0 >= 0 && 0 < i2 && static'1 <= static''' + 1
main_Load_416(i10, i78) -{5,5}> main_NE_441(i10, i98', i78) :|: 0 <= i78 && 1 <= i78 && i98' < 2 && 0 < i78 && 1 <= i10 && 0 <= i98' && i98' <= 1
main_NE_441(i10, 0, i94) -{6,6}> main_Load_416(i10, i107') :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0
main_NE_441(i10, 1, i94) -{3,3}> main_Load_416(i10, i102') :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1
(35) MovedArithmeticToConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Moved arithmethic from lhss to constraints.
main_NE_441(i10, 0, i94) -{6,6}> main_Load_416(i10, i107') :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0
was transformed to
main_NE_441(i10, x, i94) -{6,6}> main_Load_416(i10, i107') :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
main_NE_441(i10, 1, i94) -{3,3}> main_Load_416(i10, i102') :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1
was transformed to
main_NE_441(i10, x, i94) -{3,3}> main_Load_416(i10, i102') :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
(36) Obligation:
IntTrs with 4 rules
Start term: main_Load_2(#0, static)
Considered paths: all paths from start
Rules:
main_NE_441(i10, x, i94) -{6,6}> main_Load_416(i10, i107') :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
main_NE_441(i10, x, i94) -{3,3}> main_Load_416(i10, i102') :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
main_Load_2(i2, static) -{17,17}> main_Load_416(i2, i2) :|: 0 < 2 && 0 <= i2 && 1 <= i2 && 0 <= static'1 && 0 <= static && 0 <= 1 && 0 < 1 && static''' <= static + 2 && 0 <= static''' && 0 <= 2 && 0 >= 0 && 0 < i2 && static'1 <= static''' + 1
main_Load_416(i10, i78) -{5,5}> main_NE_441(i10, i98', i78) :|: 0 <= i78 && 1 <= i78 && i98' < 2 && 0 < i78 && 1 <= i10 && 0 <= i98' && i98' <= 1
(37) MovedArithmeticFromConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Moved arithmethic from constraints to rhss.
main_NE_441(i10, x, i94) -{3,3}> main_Load_416(i10, i102') :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
was transformed to
main_NE_441(i10, x, i94) -{3,3}> main_Load_416(i10, i94 + -1) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
(38) Obligation:
IntTrs with 4 rules
Start term: main_Load_2(#0, static)
Considered paths: all paths from start
Rules:
main_Load_2(i2, static) -{17,17}> main_Load_416(i2, i2) :|: 0 < 2 && 0 <= i2 && 1 <= i2 && 0 <= static'1 && 0 <= static && 0 <= 1 && 0 < 1 && static''' <= static + 2 && 0 <= static''' && 0 <= 2 && 0 >= 0 && 0 < i2 && static'1 <= static''' + 1
main_Load_416(i10, i78) -{5,5}> main_NE_441(i10, i98', i78) :|: 0 <= i78 && 1 <= i78 && i98' < 2 && 0 < i78 && 1 <= i10 && 0 <= i98' && i98' <= 1
main_NE_441(i10, x, i94) -{3,3}> main_Load_416(i10, i94 + -1) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
main_NE_441(i10, x, i94) -{6,6}> main_Load_416(i10, i107') :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
(39) ExpressionSimplificationProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Simplified expressions.
main_NE_441(i10, x, i94) -{3,3}> main_Load_416(i10, i94 + -1) :|: i94 + -1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && 0 < 1 && 1 <= 1 && 0 <= 1 && x = 1
was transformed to
main_NE_441(i10, x, i94) -{3,3}> main_Load_416(i10, i94 - 1) :|: i94 - 1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && x = 1
main_Load_2(i2, static) -{17,17}> main_Load_416(i2, i2) :|: 0 < 2 && 0 <= i2 && 1 <= i2 && 0 <= static'1 && 0 <= static && 0 <= 1 && 0 < 1 && static''' <= static + 2 && 0 <= static''' && 0 <= 2 && 0 >= 0 && 0 < i2 && static'1 <= static''' + 1
was transformed to
main_Load_2(i2, static) -{17,17}> main_Load_416(i2, i2) :|: 1 <= i2 && 0 <= static'1 && 0 <= static && static''' <= static + 2 && 0 <= static''' && 0 < i2 && static'1 <= static''' + 1
main_Load_416(i10, i78) -{5,5}> main_NE_441(i10, i98', i78) :|: 0 <= i78 && 1 <= i78 && i98' < 2 && 0 < i78 && 1 <= i10 && 0 <= i98' && i98' <= 1
was transformed to
main_Load_416(i10, i78) -{5,5}> main_NE_441(i10, i98', i78) :|: 1 <= i78 && i98' < 2 && 0 < i78 && 1 <= i10 && 0 <= i98' && i98' <= 1
main_NE_441(i10, x, i94) -{6,6}> main_Load_416(i10, i107') :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 0 <= 1 && 1 <= i94 && 0 <= 0 && x = 0
was transformed to
main_NE_441(i10, x, i94) -{6,6}> main_Load_416(i10, i107') :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 1 <= i94 && x = 0
(40) Obligation:
IntTrs with 4 rules
Start term: main_Load_2(#0, static)
Considered paths: all paths from start
Rules:
main_Load_2(i2, static) -{17,17}> main_Load_416(i2, i2) :|: 1 <= i2 && 0 <= static'1 && 0 <= static && static''' <= static + 2 && 0 <= static''' && 0 < i2 && static'1 <= static''' + 1
main_NE_441(i10, x, i94) -{6,6}> main_Load_416(i10, i107') :|: i107' < i94 && 1 <= i10 && 0 <= i107' && 1 <= i94 && x = 0
main_NE_441(i10, x, i94) -{3,3}> main_Load_416(i10, i94 - 1) :|: i94 - 1 = i102' && 0 <= i102' && 1 <= i10 && 1 <= i94 && x = 1
main_Load_416(i10, i78) -{5,5}> main_NE_441(i10, i98', i78) :|: 1 <= i78 && i98' < 2 && 0 < i78 && 1 <= i10 && 0 <= i98' && i98' <= 1
(41) koat Proof (EQUIVALENT transformation)
YES(?, 28*ar_0 + 17)
Initial complexity problem:
1: T:
(Comp: ?, Cost: 17) main_Load_2(ar_0, ar_1, ar_2) -> Com_1(main_Load_416(ar_0, ar_0, arityPad)) [ 1 <= ar_0 /\ 0 <= static'1 /\ 0 <= ar_1 /\ static''' <= ar_1 + 2 /\ 0 <= static''' /\ 0 < ar_0 /\ static'1 <= static''' + 1 ]
(Comp: ?, Cost: 6) main_NE_441(ar_0, ar_1, ar_2) -> Com_1(main_Load_416(ar_0, i107', arityPad)) [ i107' < ar_2 /\ 1 <= ar_0 /\ 0 <= i107' /\ 1 <= ar_2 /\ ar_1 = 0 ]
(Comp: ?, Cost: 3) main_NE_441(ar_0, ar_1, ar_2) -> Com_1(main_Load_416(ar_0, ar_2 - 1, arityPad)) [ ar_2 - 1 = i102' /\ 0 <= i102' /\ 1 <= ar_0 /\ 1 <= ar_2 /\ ar_1 = 1 ]
(Comp: ?, Cost: 5) main_Load_416(ar_0, ar_1, ar_2) -> Com_1(main_NE_441(ar_0, i98', ar_1)) [ 1 <= ar_1 /\ i98' < 2 /\ 0 < ar_1 /\ 1 <= ar_0 /\ 0 <= i98' /\ i98' <= 1 ]
(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: 1, Cost: 17) main_Load_2(ar_0, ar_1, ar_2) -> Com_1(main_Load_416(ar_0, ar_0, arityPad)) [ 1 <= ar_0 /\ 0 <= static'1 /\ 0 <= ar_1 /\ static''' <= ar_1 + 2 /\ 0 <= static''' /\ 0 < ar_0 /\ static'1 <= static''' + 1 ]
(Comp: ?, Cost: 6) main_NE_441(ar_0, ar_1, ar_2) -> Com_1(main_Load_416(ar_0, i107', arityPad)) [ i107' < ar_2 /\ 1 <= ar_0 /\ 0 <= i107' /\ 1 <= ar_2 /\ ar_1 = 0 ]
(Comp: ?, Cost: 3) main_NE_441(ar_0, ar_1, ar_2) -> Com_1(main_Load_416(ar_0, ar_2 - 1, arityPad)) [ ar_2 - 1 = i102' /\ 0 <= i102' /\ 1 <= ar_0 /\ 1 <= ar_2 /\ ar_1 = 1 ]
(Comp: ?, Cost: 5) main_Load_416(ar_0, ar_1, ar_2) -> Com_1(main_NE_441(ar_0, i98', ar_1)) [ 1 <= ar_1 /\ i98' < 2 /\ 0 < ar_1 /\ 1 <= ar_0 /\ 0 <= i98' /\ i98' <= 1 ]
(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_Load_2) = 2*V_1
Pol(main_Load_416) = 2*V_2
Pol(main_NE_441) = 2*V_3 - 1
Pol(koat_start) = 2*V_1
orients all transitions weakly and the transitions
main_NE_441(ar_0, ar_1, ar_2) -> Com_1(main_Load_416(ar_0, i107', arityPad)) [ i107' < ar_2 /\ 1 <= ar_0 /\ 0 <= i107' /\ 1 <= ar_2 /\ ar_1 = 0 ]
main_NE_441(ar_0, ar_1, ar_2) -> Com_1(main_Load_416(ar_0, ar_2 - 1, arityPad)) [ ar_2 - 1 = i102' /\ 0 <= i102' /\ 1 <= ar_0 /\ 1 <= ar_2 /\ ar_1 = 1 ]
main_Load_416(ar_0, ar_1, ar_2) -> Com_1(main_NE_441(ar_0, i98', ar_1)) [ 1 <= ar_1 /\ i98' < 2 /\ 0 < ar_1 /\ 1 <= ar_0 /\ 0 <= i98' /\ i98' <= 1 ]
strictly and produces the following problem:
3: T:
(Comp: 1, Cost: 17) main_Load_2(ar_0, ar_1, ar_2) -> Com_1(main_Load_416(ar_0, ar_0, arityPad)) [ 1 <= ar_0 /\ 0 <= static'1 /\ 0 <= ar_1 /\ static''' <= ar_1 + 2 /\ 0 <= static''' /\ 0 < ar_0 /\ static'1 <= static''' + 1 ]
(Comp: 2*ar_0, Cost: 6) main_NE_441(ar_0, ar_1, ar_2) -> Com_1(main_Load_416(ar_0, i107', arityPad)) [ i107' < ar_2 /\ 1 <= ar_0 /\ 0 <= i107' /\ 1 <= ar_2 /\ ar_1 = 0 ]
(Comp: 2*ar_0, Cost: 3) main_NE_441(ar_0, ar_1, ar_2) -> Com_1(main_Load_416(ar_0, ar_2 - 1, arityPad)) [ ar_2 - 1 = i102' /\ 0 <= i102' /\ 1 <= ar_0 /\ 1 <= ar_2 /\ ar_1 = 1 ]
(Comp: 2*ar_0, Cost: 5) main_Load_416(ar_0, ar_1, ar_2) -> Com_1(main_NE_441(ar_0, i98', ar_1)) [ 1 <= ar_1 /\ i98' < 2 /\ 0 < ar_1 /\ 1 <= ar_0 /\ 0 <= i98' /\ i98' <= 1 ]
(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 28*ar_0 + 17
Time: 0.181 sec (SMT: 0.172 sec)
(42) BOUNDS(CONSTANT, 17 + 28 * |#0|)