(0) Obligation:
Need to prove time_complexity of the following program:
public class Log{
public static int half(int x) {
int res = 0;
while (x > 1) {
x = x-2;
res++;
}
return res;
}
public static int log(int x) {
int res = 0;
while (x > 1) {
x = half(x);
res++;
}
return res;
}
}
(1) JBCToGraph (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Constructed TerminationGraph.
(2) Obligation:
Termination Graph based on JBC Program:
Log.log(I)I: Graph of 72 nodes with 1 SCC.
(3) TerminationGraphToComplexityProof (BOTH CONCRETE BOUNDS(ID, ADD(3)) transformation)
Extracted set of 69 edges for the analysis of TIME complexity. Dropped leaves.
(4) Obligation:
Set of 69 edges based on JBC Program.
Performed SCC analyses:
- Used field analysis yielded the following read fields:
Considered paths: all paths from start
(5) JBCGraphEdgesToCpxIntTrsProof (CONCRETE UPPER BOUND(ID) transformation)
Transformed 69 jbc graph edges to a weighted ITS with 69 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.
(6) Obligation:
IntTrs with 69 rules
Start term: log_ConstantStackPush_2(#0, env, static)
Considered paths: all paths from start
Rules:
log_ConstantStackPush_2(i1, env, static) -{0,0}> log_ConstantStackPush_4(i1, env, static) :|: 0 >= 0
log_ConstantStackPush_4(i1, env, static) -{0,0}> langle_clinit_rangle_ConstantStackPush_6(i1, env, static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(i1, env, static) -{1,1}> langle_clinit_rangle_ArrayCreate_12(iconst_0, i1, env, static) :|: iconst_0 = 0
langle_clinit_rangle_ArrayCreate_12(iconst_0, i1, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_13(a2, i1, iconst_0, env, static) :|: a2 = 2 && iconst_0 = 0 && 0 < a2
langle_clinit_rangle_FieldAccess_13(a2, i1, iconst_0, env, static) -{1,1}> langle_clinit_rangle_New_15(i1, env, static') :|: 0 <= a2 && iconst_0 = 0 && static' <= static + a2 && 0 <= static && 0 < a2
langle_clinit_rangle_New_15(i1, env, static) -{0,0}> langle_clinit_rangle_New_17(i1, env, static) :|: 0 >= 0
langle_clinit_rangle_New_17(i1, env, static) -{0,0}> langle_clinit_rangle_New_19(i1, env, static) :|: 0 <= static
langle_clinit_rangle_New_19(i1, env, static) -{1,1}> langle_clinit_rangle_Duplicate_20(o2, i1, env, static) :|: 0 < o2 && o2 = 1
langle_clinit_rangle_Duplicate_20(o2, i1, env, static) -{1,1}> langle_clinit_rangle_ConstantStackPush_22(o2, i1, env, static) :|: 0 < o2
langle_clinit_rangle_ConstantStackPush_22(o2, i1, env, static) -{1,1}> langle_clinit_rangle_InvokeMethod_24(o2, NULL, i1, env, static) :|: NULL = 0 && 0 < o2
langle_clinit_rangle_InvokeMethod_24(o2, NULL, i1, env, static) -{1,1}> langle_init_rangle_Load_26(o2, i1, env, static) :|: NULL = 0 && 0 < o2
langle_init_rangle_Load_26(o2, i1, env, static) -{1,1}> langle_init_rangle_InvokeMethod_28(o2, i1, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_28(o2, i1, env, static) -{1,1}> langle_init_rangle_Load_29(o2, i1, env, static) :|: 0 < o2
langle_init_rangle_Load_29(o2, i1, env, static) -{1,1}> langle_init_rangle_InvokeMethod_32(o2, i1, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_32(o2, i1, env, static) -{1,1}> langle_init_rangle_Return_34(o2, i1, env, static) :|: 0 < o2
langle_init_rangle_Return_34(o2, i1, env, static) -{1,1}> langle_init_rangle_Return_36(o2, i1, env, static) :|: 0 < o2
langle_init_rangle_Return_36(o2, i1, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_39(o2, i1, env, static) :|: 0 < o2
langle_clinit_rangle_FieldAccess_39(o2, i1, env, static) -{1,1}> langle_clinit_rangle_Return_40(i1, env, static') :|: 0 < o2 && 0 <= o2 && 0 <= static && static' <= static + o2
langle_clinit_rangle_Return_40(i1, env, static) -{1,1}> log_ConstantStackPush_46(i1, env, static) :|: 0 >= 0
log_ConstantStackPush_46(i1, env, static) -{0,0}> log_ConstantStackPush_48(i1, env, static) :|: 0 >= 0
log_ConstantStackPush_48(i1, env, static) -{0,0}> log_ConstantStackPush_50(i1, env, static) :|: 0 <= static
log_ConstantStackPush_50(i1, env, static) -{0,0}> log_ConstantStackPush_51(i1, env, static) :|: 0 >= 0
log_ConstantStackPush_51(i1, env, static) -{0,0}> log_ConstantStackPush_52(i1, env, static) :|: 0 >= 0
log_ConstantStackPush_52(i1, env, static) -{1,1}> log_Store_53(i1, iconst_0, env, static) :|: iconst_0 = 0
log_Store_53(i1, iconst_0, env, static) -{1,1}> log_Load_54(i1, iconst_0, env, static) :|: iconst_0 = 0
log_Load_54(i1, iconst_0, env, static) -{1,1}> log_ConstantStackPush_55(i1, iconst_0, env, static) :|: iconst_0 = 0
log_ConstantStackPush_55(i1, iconst_0, env, static) -{1,1}> log_LE_58(i1, iconst_1, iconst_0, env, static) :|: iconst_1 = 1 && iconst_0 = 0
log_LE_58(i1, iconst_1, iconst_0, env, static) -{0,0}> log_LE_341(i1, i1, iconst_1, iconst_0, env, static) :|: 0 <= iconst_0 && iconst_0 <= 1 && iconst_1 = 1 && iconst_0 = 0
log_LE_341(i146, i147, iconst_1, i148, env, static) -{0,0}> log_LE_576(i146, i147, iconst_1, i148, env, static) :|: 0 <= i148 && i148 <= 1 && i148 <= 2 && iconst_1 = 1
log_LE_576(i146, i264, iconst_1, i265, env, static) -{0,0}> log_LE_846(i146, i264, iconst_1, i265, env, static) :|: i265 <= 2 && iconst_1 = 1 && 0 <= i265
log_LE_846(i146, i386, iconst_1, i381, env, static) -{0,0}> log_LE_854(i146, i386, iconst_1, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && 2 <= i386
log_LE_854(i146, i386, iconst_1, i381, env, static) -{1,1}> log_Load_865(i146, i386, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && 2 <= i386 && iconst_1 < i386
log_Load_865(i146, i386, i381, env, static) -{1,1}> log_InvokeMethod_868(i146, i386, i381, env, static) :|: 0 <= i381 && 2 <= i386
log_InvokeMethod_868(i146, i386, i381, env, static) -{1,1}> half_ConstantStackPush_871(i386, i146, i381, env, static) :|: 0 <= i381 && 2 <= i386
half_ConstantStackPush_871(i386, i146, i381, env, static) -{1,1}> half_Store_872(iconst_0, i386, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_Store_872(iconst_0, i386, i146, i381, env, static) -{1,1}> half_Load_873(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_Load_873(i386, iconst_0, i146, i381, env, static) -{1,1}> half_ConstantStackPush_874(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_ConstantStackPush_874(i386, iconst_0, i146, i381, env, static) -{1,1}> half_LE_876(i386, iconst_1, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && iconst_0 = 0 && 2 <= i386
half_LE_876(i386, iconst_1, iconst_0, i146, i381, env, static) -{1,1}> half_Load_882(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && iconst_0 = 0 && 2 <= i386 && iconst_1 < i386
half_Load_882(i386, iconst_0, i146, i381, env, static) -{1,1}> half_ConstantStackPush_884(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_ConstantStackPush_884(i386, iconst_0, i146, i381, env, static) -{1,1}> half_IntArithmetic_886(i386, iconst_2, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386 && iconst_2 = 2
half_IntArithmetic_886(i386, iconst_2, iconst_0, i146, i381, env, static) -{1,1}> half_Store_888(i388, iconst_0, i146, i381, env, static) :|: i386 - iconst_2 = i388 && 0 <= i381 && 0 <= i388 && iconst_0 = 0 && 2 <= i386 && iconst_2 = 2
half_Store_888(i388, iconst_0, i146, i381, env, static) -{1,1}> half_Inc_889(i388, iconst_0, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_0 = 0
half_Inc_889(i388, iconst_0, i146, i381, env, static) -{1,1}> half_JMP_890(i388, iconst_1, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_1 = 1 && iconst_0 = 0
half_JMP_890(i388, iconst_1, i146, i381, env, static) -{1,1}> half_Load_891(i388, iconst_1, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_1 = 1
half_Load_891(i388, iconst_1, i146, i381, env, static) -{0,0}> half_Load_940(i388, iconst_1, i146, i381, env, static) :|: iconst_1 <= 2 && 1 <= iconst_1 && 0 <= i381 && 0 <= i388 && iconst_1 = 1
half_Load_940(i410, i411, i146, i381, env, static) -{0,0}> half_Load_991(i410, i411, i146, i381, env, static) :|: i411 <= 3 && 0 <= i410 && 0 <= i381 && i411 <= 2 && 1 <= i411
half_Load_991(i439, i440, i146, i381, env, static) -{0,0}> half_Load_1046(i439, i440, i146, i381, env, static) :|: 0 <= i439 && 0 <= i381 && i440 <= 3 && 1 <= i440
half_Load_1046(i466, i467, i146, i381, env, static) -{1,1}> half_ConstantStackPush_1048(i466, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i466 && 0 <= i381
half_ConstantStackPush_1048(i466, i467, i146, i381, env, static) -{1,1}> half_LE_1055(i466, iconst_1, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i466 && 0 <= i381 && iconst_1 = 1
half_LE_1055(i479, iconst_1, i467, i146, i381, env, static) -{0,0}> half_LE_1056(i479, iconst_1, i467, i146, i381, env, static) :|: 0 <= i479 && 1 <= i467 && 0 <= i381 && iconst_1 = 1 && i479 <= 1
half_LE_1055(i480, iconst_1, i467, i146, i381, env, static) -{0,0}> half_LE_1057(i480, iconst_1, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i480 && 0 <= i381 && iconst_1 = 1 && 2 <= i480
half_LE_1056(i479, iconst_1, i467, i146, i381, env, static) -{1,1}> half_Load_1060(i467, i146, i381, env, static) :|: 0 <= i479 && 1 <= i467 && 0 <= i381 && iconst_1 = 1 && i479 <= iconst_1 && i479 <= 1
half_LE_1057(i480, iconst_1, i467, i146, i381, env, static) -{1,1}> half_Load_1063(i480, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && iconst_1 < i480 && iconst_1 = 1 && 2 <= i480
half_Load_1060(i467, i146, i381, env, static) -{1,1}> half_Return_1065(i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381
half_Load_1063(i480, i467, i146, i381, env, static) -{1,1}> half_ConstantStackPush_1068(i480, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && 2 <= i480
half_Return_1065(i467, i146, i381, env, static) -{1,1}> log_Store_1070(i146, i467, i381, env, static) :|: 1 <= i467 && 0 <= i381
half_ConstantStackPush_1068(i480, i467, i146, i381, env, static) -{1,1}> half_IntArithmetic_1072(i480, iconst_2, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && iconst_2 = 2 && 2 <= i480
log_Store_1070(i146, i467, i381, env, static) -{1,1}> log_Inc_1073(i146, i467, i381, env, static) :|: 1 <= i467 && 0 <= i381
half_IntArithmetic_1072(i480, iconst_2, i467, i146, i381, env, static) -{1,1}> half_Store_1074(i482, i467, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381 && i480 - iconst_2 = i482 && iconst_2 = 2 && 2 <= i480
log_Inc_1073(i146, i467, i381, env, static) -{1,1}> log_JMP_1076(i146, i467, i485, env, static) :|: 1 <= i467 && 0 <= i381 && 1 <= i485 && i381 + 1 = i485
half_Store_1074(i482, i467, i146, i381, env, static) -{1,1}> half_Inc_1079(i482, i467, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381
log_JMP_1076(i146, i467, i485, env, static) -{1,1}> log_Load_1081(i146, i467, i485, env, static) :|: 1 <= i467 && 1 <= i485
half_Inc_1079(i482, i467, i146, i381, env, static) -{1,1}> half_JMP_1084(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381 && i467 + 1 = i488 && 2 <= i488
log_Load_1081(i146, i467, i485, env, static) -{1,1}> log_ConstantStackPush_1087(i146, i467, i485, env, static) :|: 1 <= i467 && 1 <= i485
half_JMP_1084(i482, i488, i146, i381, env, static) -{1,1}> half_Load_1089(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 0 <= i381 && 2 <= i488
log_ConstantStackPush_1087(i146, i467, i485, env, static) -{1,1}> log_LE_1090(i146, i467, iconst_1, i485, env, static) :|: 1 <= i467 && iconst_1 = 1 && 1 <= i485
half_Load_1089(i482, i488, i146, i381, env, static) -{0,0}> half_Load_1046(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 0 <= i381 && 1 <= i488 && 2 <= i488
log_LE_1090(i146, i467, iconst_1, i485, env, static) -{0,0}> log_LE_846(i146, i467, iconst_1, i485, env, static) :|: 1 <= i467 && iconst_1 = 1 && 1 <= i485 && 0 <= i485
(7) StraightLineCodeCompressionProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
obtained
log_ConstantStackPush_2(
i1,
env,
static) -{19,19}>
log_LE_846(
i1,
i1,
1,
0,
env,
static'1) :|:
static'1 <=
static''' +
1 &&
0 <=
0 &&
0 <=
static''' &&
0 <=
2 &&
static''' <=
static +
2 &&
0 <
1 &&
0 <=
static &&
0 <=
1 &&
0 <=
static'1 &&
0 <
2 && 0 >= 0
by chaining
log_ConstantStackPush_2(
i1,
env,
static) -{0,0}>
log_ConstantStackPush_4(
i1,
env,
static) :|: 0 >= 0
log_ConstantStackPush_4(
i1,
env,
static) -{0,0}>
langle_clinit_rangle_ConstantStackPush_6(
i1,
env,
static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(
i1,
env,
static) -{1,1}>
langle_clinit_rangle_ArrayCreate_12(
iconst_0,
i1,
env,
static) :|:
iconst_0 =
0langle_clinit_rangle_ArrayCreate_12(
iconst_0,
i1,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_13(
a2,
i1,
iconst_0,
env,
static) :|:
a2 =
2 &&
iconst_0 =
0 &&
0 <
a2langle_clinit_rangle_FieldAccess_13(
a2,
i1,
iconst_0,
env,
static) -{1,1}>
langle_clinit_rangle_New_15(
i1,
env,
static') :|:
0 <=
a2 &&
iconst_0 =
0 &&
static' <=
static +
a2 &&
0 <=
static &&
0 <
a2langle_clinit_rangle_New_15(
i1,
env,
static) -{0,0}>
langle_clinit_rangle_New_17(
i1,
env,
static) :|: 0 >= 0
langle_clinit_rangle_New_17(
i1,
env,
static) -{0,0}>
langle_clinit_rangle_New_19(
i1,
env,
static) :|:
0 <=
staticlangle_clinit_rangle_New_19(
i1,
env,
static) -{1,1}>
langle_clinit_rangle_Duplicate_20(
o2,
i1,
env,
static) :|:
0 <
o2 &&
o2 =
1langle_clinit_rangle_Duplicate_20(
o2,
i1,
env,
static) -{1,1}>
langle_clinit_rangle_ConstantStackPush_22(
o2,
i1,
env,
static) :|:
0 <
o2langle_clinit_rangle_ConstantStackPush_22(
o2,
i1,
env,
static) -{1,1}>
langle_clinit_rangle_InvokeMethod_24(
o2,
NULL,
i1,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_clinit_rangle_InvokeMethod_24(
o2,
NULL,
i1,
env,
static) -{1,1}>
langle_init_rangle_Load_26(
o2,
i1,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_init_rangle_Load_26(
o2,
i1,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_28(
o2,
i1,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_28(
o2,
i1,
env,
static) -{1,1}>
langle_init_rangle_Load_29(
o2,
i1,
env,
static) :|:
0 <
o2langle_init_rangle_Load_29(
o2,
i1,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_32(
o2,
i1,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_32(
o2,
i1,
env,
static) -{1,1}>
langle_init_rangle_Return_34(
o2,
i1,
env,
static) :|:
0 <
o2langle_init_rangle_Return_34(
o2,
i1,
env,
static) -{1,1}>
langle_init_rangle_Return_36(
o2,
i1,
env,
static) :|:
0 <
o2langle_init_rangle_Return_36(
o2,
i1,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_39(
o2,
i1,
env,
static) :|:
0 <
o2langle_clinit_rangle_FieldAccess_39(
o2,
i1,
env,
static) -{1,1}>
langle_clinit_rangle_Return_40(
i1,
env,
static') :|:
0 <
o2 &&
0 <=
o2 &&
0 <=
static &&
static' <=
static +
o2langle_clinit_rangle_Return_40(
i1,
env,
static) -{1,1}>
log_ConstantStackPush_46(
i1,
env,
static) :|: 0 >= 0
log_ConstantStackPush_46(
i1,
env,
static) -{0,0}>
log_ConstantStackPush_48(
i1,
env,
static) :|: 0 >= 0
log_ConstantStackPush_48(
i1,
env,
static) -{0,0}>
log_ConstantStackPush_50(
i1,
env,
static) :|:
0 <=
staticlog_ConstantStackPush_50(
i1,
env,
static) -{0,0}>
log_ConstantStackPush_51(
i1,
env,
static) :|: 0 >= 0
log_ConstantStackPush_51(
i1,
env,
static) -{0,0}>
log_ConstantStackPush_52(
i1,
env,
static) :|: 0 >= 0
log_ConstantStackPush_52(
i1,
env,
static) -{1,1}>
log_Store_53(
i1,
iconst_0,
env,
static) :|:
iconst_0 =
0log_Store_53(
i1,
iconst_0,
env,
static) -{1,1}>
log_Load_54(
i1,
iconst_0,
env,
static) :|:
iconst_0 =
0log_Load_54(
i1,
iconst_0,
env,
static) -{1,1}>
log_ConstantStackPush_55(
i1,
iconst_0,
env,
static) :|:
iconst_0 =
0log_ConstantStackPush_55(
i1,
iconst_0,
env,
static) -{1,1}>
log_LE_58(
i1,
iconst_1,
iconst_0,
env,
static) :|:
iconst_1 =
1 &&
iconst_0 =
0log_LE_58(
i1,
iconst_1,
iconst_0,
env,
static) -{0,0}>
log_LE_341(
i1,
i1,
iconst_1,
iconst_0,
env,
static) :|:
0 <=
iconst_0 &&
iconst_0 <=
1 &&
iconst_1 =
1 &&
iconst_0 =
0log_LE_341(
i146,
i147,
iconst_1,
i148,
env,
static) -{0,0}>
log_LE_576(
i146,
i147,
iconst_1,
i148,
env,
static) :|:
0 <=
i148 &&
i148 <=
1 &&
i148 <=
2 &&
iconst_1 =
1log_LE_576(
i146,
i264,
iconst_1,
i265,
env,
static) -{0,0}>
log_LE_846(
i146,
i264,
iconst_1,
i265,
env,
static) :|:
i265 <=
2 &&
iconst_1 =
1 &&
0 <=
i265obtained
log_LE_846(i146, i386, 1, i381, env, static) -{14,14}> half_Load_1046(i388', 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2
by chaining
log_LE_846(i146, i386, iconst_1, i381, env, static) -{0,0}> log_LE_854(i146, i386, iconst_1, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && 2 <= i386
log_LE_854(i146, i386, iconst_1, i381, env, static) -{1,1}> log_Load_865(i146, i386, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && 2 <= i386 && iconst_1 < i386
log_Load_865(i146, i386, i381, env, static) -{1,1}> log_InvokeMethod_868(i146, i386, i381, env, static) :|: 0 <= i381 && 2 <= i386
log_InvokeMethod_868(i146, i386, i381, env, static) -{1,1}> half_ConstantStackPush_871(i386, i146, i381, env, static) :|: 0 <= i381 && 2 <= i386
half_ConstantStackPush_871(i386, i146, i381, env, static) -{1,1}> half_Store_872(iconst_0, i386, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_Store_872(iconst_0, i386, i146, i381, env, static) -{1,1}> half_Load_873(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_Load_873(i386, iconst_0, i146, i381, env, static) -{1,1}> half_ConstantStackPush_874(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_ConstantStackPush_874(i386, iconst_0, i146, i381, env, static) -{1,1}> half_LE_876(i386, iconst_1, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && iconst_0 = 0 && 2 <= i386
half_LE_876(i386, iconst_1, iconst_0, i146, i381, env, static) -{1,1}> half_Load_882(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && iconst_0 = 0 && 2 <= i386 && iconst_1 < i386
half_Load_882(i386, iconst_0, i146, i381, env, static) -{1,1}> half_ConstantStackPush_884(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_ConstantStackPush_884(i386, iconst_0, i146, i381, env, static) -{1,1}> half_IntArithmetic_886(i386, iconst_2, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386 && iconst_2 = 2
half_IntArithmetic_886(i386, iconst_2, iconst_0, i146, i381, env, static) -{1,1}> half_Store_888(i388, iconst_0, i146, i381, env, static) :|: i386 - iconst_2 = i388 && 0 <= i381 && 0 <= i388 && iconst_0 = 0 && 2 <= i386 && iconst_2 = 2
half_Store_888(i388, iconst_0, i146, i381, env, static) -{1,1}> half_Inc_889(i388, iconst_0, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_0 = 0
half_Inc_889(i388, iconst_0, i146, i381, env, static) -{1,1}> half_JMP_890(i388, iconst_1, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_1 = 1 && iconst_0 = 0
half_JMP_890(i388, iconst_1, i146, i381, env, static) -{1,1}> half_Load_891(i388, iconst_1, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_1 = 1
half_Load_891(i388, iconst_1, i146, i381, env, static) -{0,0}> half_Load_940(i388, iconst_1, i146, i381, env, static) :|: iconst_1 <= 2 && 1 <= iconst_1 && 0 <= i381 && 0 <= i388 && iconst_1 = 1
half_Load_940(i410, i411, i146, i381, env, static) -{0,0}> half_Load_991(i410, i411, i146, i381, env, static) :|: i411 <= 3 && 0 <= i410 && 0 <= i381 && i411 <= 2 && 1 <= i411
half_Load_991(i439, i440, i146, i381, env, static) -{0,0}> half_Load_1046(i439, i440, i146, i381, env, static) :|: 0 <= i439 && 0 <= i381 && i440 <= 3 && 1 <= i440
obtained
half_Load_1046(i466, i467, i146, i381, env, static) -{2,2}> half_LE_1055(i466, 1, i467, i146, i381, env, static) :|: 0 <= i381 && 1 <= i467 && 0 <= i466
by chaining
half_Load_1046(i466, i467, i146, i381, env, static) -{1,1}> half_ConstantStackPush_1048(i466, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i466 && 0 <= i381
half_ConstantStackPush_1048(i466, i467, i146, i381, env, static) -{1,1}> half_LE_1055(i466, iconst_1, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i466 && 0 <= i381 && iconst_1 = 1
obtained
half_LE_1055(i480, 1, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i482', i488', i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480
by chaining
half_LE_1055(i480, iconst_1, i467, i146, i381, env, static) -{0,0}> half_LE_1057(i480, iconst_1, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i480 && 0 <= i381 && iconst_1 = 1 && 2 <= i480
half_LE_1057(i480, iconst_1, i467, i146, i381, env, static) -{1,1}> half_Load_1063(i480, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && iconst_1 < i480 && iconst_1 = 1 && 2 <= i480
half_Load_1063(i480, i467, i146, i381, env, static) -{1,1}> half_ConstantStackPush_1068(i480, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && 2 <= i480
half_ConstantStackPush_1068(i480, i467, i146, i381, env, static) -{1,1}> half_IntArithmetic_1072(i480, iconst_2, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && iconst_2 = 2 && 2 <= i480
half_IntArithmetic_1072(i480, iconst_2, i467, i146, i381, env, static) -{1,1}> half_Store_1074(i482, i467, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381 && i480 - iconst_2 = i482 && iconst_2 = 2 && 2 <= i480
half_Store_1074(i482, i467, i146, i381, env, static) -{1,1}> half_Inc_1079(i482, i467, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381
half_Inc_1079(i482, i467, i146, i381, env, static) -{1,1}> half_JMP_1084(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381 && i467 + 1 = i488 && 2 <= i488
half_JMP_1084(i482, i488, i146, i381, env, static) -{1,1}> half_Load_1089(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 0 <= i381 && 2 <= i488
half_Load_1089(i482, i488, i146, i381, env, static) -{0,0}> half_Load_1046(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 0 <= i381 && 1 <= i488 && 2 <= i488
obtained
half_LE_1055(i479, 1, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i485', env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479
by chaining
half_LE_1055(i479, iconst_1, i467, i146, i381, env, static) -{0,0}> half_LE_1056(i479, iconst_1, i467, i146, i381, env, static) :|: 0 <= i479 && 1 <= i467 && 0 <= i381 && iconst_1 = 1 && i479 <= 1
half_LE_1056(i479, iconst_1, i467, i146, i381, env, static) -{1,1}> half_Load_1060(i467, i146, i381, env, static) :|: 0 <= i479 && 1 <= i467 && 0 <= i381 && iconst_1 = 1 && i479 <= iconst_1 && i479 <= 1
half_Load_1060(i467, i146, i381, env, static) -{1,1}> half_Return_1065(i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381
half_Return_1065(i467, i146, i381, env, static) -{1,1}> log_Store_1070(i146, i467, i381, env, static) :|: 1 <= i467 && 0 <= i381
log_Store_1070(i146, i467, i381, env, static) -{1,1}> log_Inc_1073(i146, i467, i381, env, static) :|: 1 <= i467 && 0 <= i381
log_Inc_1073(i146, i467, i381, env, static) -{1,1}> log_JMP_1076(i146, i467, i485, env, static) :|: 1 <= i467 && 0 <= i381 && 1 <= i485 && i381 + 1 = i485
log_JMP_1076(i146, i467, i485, env, static) -{1,1}> log_Load_1081(i146, i467, i485, env, static) :|: 1 <= i467 && 1 <= i485
log_Load_1081(i146, i467, i485, env, static) -{1,1}> log_ConstantStackPush_1087(i146, i467, i485, env, static) :|: 1 <= i467 && 1 <= i485
log_ConstantStackPush_1087(i146, i467, i485, env, static) -{1,1}> log_LE_1090(i146, i467, iconst_1, i485, env, static) :|: 1 <= i467 && iconst_1 = 1 && 1 <= i485
log_LE_1090(i146, i467, iconst_1, i485, env, static) -{0,0}> log_LE_846(i146, i467, iconst_1, i485, env, static) :|: 1 <= i467 && iconst_1 = 1 && 1 <= i485 && 0 <= i485
(8) Obligation:
IntTrs with 5 rules
Start term: log_ConstantStackPush_2(#0, env, static)
Considered paths: all paths from start
Rules:
log_ConstantStackPush_2(i1, env, static) -{19,19}> log_LE_846(i1, i1, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 0 && 0 <= static''' && 0 <= 2 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= 1 && 0 <= static'1 && 0 < 2 && 0 >= 0
log_LE_846(i146, i386, 1, i381, env, static) -{14,14}> half_Load_1046(i388', 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2
half_Load_1046(i466, i467, i146, i381, env, static) -{2,2}> half_LE_1055(i466, 1, i467, i146, i381, env, static) :|: 0 <= i381 && 1 <= i467 && 0 <= i466
half_LE_1055(i480, 1, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i482', i488', i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480
half_LE_1055(i479, 1, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i485', env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479
(9) WeightedIntTrsUnneededArgumentFilterProof (CONCRETE UPPER BOUND(ID) transformation)
Some arguments are removed because they cannot influence termination. We removed arguments according to the following replacements:
log_ConstantStackPush_2(x1, x2, x3) → log_ConstantStackPush_2(x1, x3)
log_LE_846(x1, x2, x3, x4, x5, x6) → log_LE_846(x2, x4)
half_Load_1046(x1, x2, x3, x4, x5, x6) → half_Load_1046(x1, x2, x4)
half_LE_1055(x1, x2, x3, x4, x5, x6, x7) → half_LE_1055(x1, x3, x5)
(10) Obligation:
IntTrs with 5 rules
Start term: log_ConstantStackPush_2(#0, static)
Considered paths: all paths from start
Rules:
log_ConstantStackPush_2(i1, static) -{19,19}> log_LE_846(i1, 0) :|: static'1 <= static''' + 1 && 0 <= 0 && 0 <= static''' && 0 <= 2 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= 1 && 0 <= static'1 && 0 < 2 && 0 >= 0
log_LE_846(i386, i381) -{14,14}> half_Load_1046(i388', 1, i381) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2
half_Load_1046(i466, i467, i381) -{2,2}> half_LE_1055(i466, i467, i381) :|: 0 <= i381 && 1 <= i467 && 0 <= i466
half_LE_1055(i480, i467, i381) -{7,7}> half_Load_1046(i482', i488', i381) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480
half_LE_1055(i479, i467, i381) -{8,8}> log_LE_846(i467, i485') :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479
(11) MovedArithmeticFromConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Moved arithmethic from constraints to rhss.
log_LE_846(i386, i381) -{14,14}> half_Load_1046(i388', 1, i381) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2
was transformed to
log_LE_846(i386, i381) -{14,14}> half_Load_1046(i386 - 2, 1, i381) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2
half_LE_1055(i479, i467, i381) -{8,8}> log_LE_846(i467, i485') :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479
was transformed to
half_LE_1055(i479, i467, i381) -{8,8}> log_LE_846(i467, i381 + 1) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479
half_LE_1055(i480, i467, i381) -{7,7}> half_Load_1046(i482', i488', i381) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480
was transformed to
half_LE_1055(i480, i467, i381) -{7,7}> half_Load_1046(i480 - 2, i467 + 1, i381) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480
(12) Obligation:
IntTrs with 5 rules
Start term: log_ConstantStackPush_2(#0, static)
Considered paths: all paths from start
Rules:
log_ConstantStackPush_2(i1, static) -{19,19}> log_LE_846(i1, 0) :|: static'1 <= static''' + 1 && 0 <= 0 && 0 <= static''' && 0 <= 2 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= 1 && 0 <= static'1 && 0 < 2 && 0 >= 0
log_LE_846(i386, i381) -{14,14}> half_Load_1046(i386 - 2, 1, i381) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2
half_Load_1046(i466, i467, i381) -{2,2}> half_LE_1055(i466, i467, i381) :|: 0 <= i381 && 1 <= i467 && 0 <= i466
half_LE_1055(i479, i467, i381) -{8,8}> log_LE_846(i467, i381 + 1) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479
half_LE_1055(i480, i467, i381) -{7,7}> half_Load_1046(i480 - 2, i467 + 1, i381) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480
(13) ExpressionSimplificationProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Simplified expressions.
log_ConstantStackPush_2(i1, static) -{19,19}> log_LE_846(i1, 0) :|: static'1 <= static''' + 1 && 0 <= 0 && 0 <= static''' && 0 <= 2 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= 1 && 0 <= static'1 && 0 < 2 && 0 >= 0
was transformed to
log_ConstantStackPush_2(i1, static) -{19,19}> log_LE_846(i1, 0) :|: static'1 <= static''' + 1 && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'1
log_LE_846(i386, i381) -{14,14}> half_Load_1046(i386 - 2, 1, i381) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2
was transformed to
log_LE_846(i386, i381) -{14,14}> half_Load_1046(i386 - 2, 1, i381) :|: 1 < i386 && 2 <= i386 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388'
(14) Obligation:
IntTrs with 5 rules
Start term: log_ConstantStackPush_2(#0, static)
Considered paths: all paths from start
Rules:
half_LE_1055(i479, i467, i381) -{8,8}> log_LE_846(i467, i381 + 1) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479
log_ConstantStackPush_2(i1, static) -{19,19}> log_LE_846(i1, 0) :|: static'1 <= static''' + 1 && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'1
half_LE_1055(i480, i467, i381) -{7,7}> half_Load_1046(i480 - 2, i467 + 1, i381) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480
half_Load_1046(i466, i467, i381) -{2,2}> half_LE_1055(i466, i467, i381) :|: 0 <= i381 && 1 <= i467 && 0 <= i466
log_LE_846(i386, i381) -{14,14}> half_Load_1046(i386 - 2, 1, i381) :|: 1 < i386 && 2 <= i386 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388'
(15) koat Proof (EQUIVALENT transformation)
YES(?, 93*ar_0 + 19)
Initial complexity problem:
1: T:
(Comp: ?, Cost: 8) half_LE_1055(ar_0, ar_1, ar_2) -> Com_1(log_LE_846(ar_1, ar_2 + 1, arityPad)) [ ar_2 + 1 = i485' /\ 0 <= i485' /\ ar_0 <= 1 /\ 1 <= i485' /\ 1 <= ar_1 /\ 0 <= ar_2 /\ 0 <= ar_0 ]
(Comp: ?, Cost: 19) log_ConstantStackPush_2(ar_0, ar_1, ar_2) -> Com_1(log_LE_846(ar_0, 0, arityPad)) [ static'1 <= static''' + 1 /\ 0 <= static''' /\ static''' <= ar_1 + 2 /\ 0 <= ar_1 /\ 0 <= static'1 ]
(Comp: ?, Cost: 7) half_LE_1055(ar_0, ar_1, ar_2) -> Com_1(half_Load_1046(ar_0 - 2, ar_1 + 1, ar_2)) [ 2 <= ar_0 /\ 2 <= i488' /\ 0 <= ar_0 /\ 1 <= i488' /\ ar_1 + 1 = i488' /\ 0 <= i482' /\ 0 <= ar_2 /\ ar_0 - 2 = i482' /\ 1 <= ar_1 /\ 1 < ar_0 ]
(Comp: ?, Cost: 2) half_Load_1046(ar_0, ar_1, ar_2) -> Com_1(half_LE_1055(ar_0, ar_1, ar_2)) [ 0 <= ar_2 /\ 1 <= ar_1 /\ 0 <= ar_0 ]
(Comp: ?, Cost: 14) log_LE_846(ar_0, ar_1, ar_2) -> Com_1(half_Load_1046(ar_0 - 2, 1, ar_1)) [ 1 < ar_0 /\ 2 <= ar_0 /\ 0 <= i388' /\ 0 <= ar_1 /\ ar_0 - 2 = i388' ]
(Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(log_ConstantStackPush_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: 8) half_LE_1055(ar_0, ar_1, ar_2) -> Com_1(log_LE_846(ar_1, ar_2 + 1, arityPad)) [ ar_2 + 1 = i485' /\ 0 <= i485' /\ ar_0 <= 1 /\ 1 <= i485' /\ 1 <= ar_1 /\ 0 <= ar_2 /\ 0 <= ar_0 ]
(Comp: 1, Cost: 19) log_ConstantStackPush_2(ar_0, ar_1, ar_2) -> Com_1(log_LE_846(ar_0, 0, arityPad)) [ static'1 <= static''' + 1 /\ 0 <= static''' /\ static''' <= ar_1 + 2 /\ 0 <= ar_1 /\ 0 <= static'1 ]
(Comp: ?, Cost: 7) half_LE_1055(ar_0, ar_1, ar_2) -> Com_1(half_Load_1046(ar_0 - 2, ar_1 + 1, ar_2)) [ 2 <= ar_0 /\ 2 <= i488' /\ 0 <= ar_0 /\ 1 <= i488' /\ ar_1 + 1 = i488' /\ 0 <= i482' /\ 0 <= ar_2 /\ ar_0 - 2 = i482' /\ 1 <= ar_1 /\ 1 < ar_0 ]
(Comp: ?, Cost: 2) half_Load_1046(ar_0, ar_1, ar_2) -> Com_1(half_LE_1055(ar_0, ar_1, ar_2)) [ 0 <= ar_2 /\ 1 <= ar_1 /\ 0 <= ar_0 ]
(Comp: ?, Cost: 14) log_LE_846(ar_0, ar_1, ar_2) -> Com_1(half_Load_1046(ar_0 - 2, 1, ar_1)) [ 1 < ar_0 /\ 2 <= ar_0 /\ 0 <= i388' /\ 0 <= ar_1 /\ ar_0 - 2 = i388' ]
(Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(log_ConstantStackPush_2(ar_0, ar_1, ar_2)) [ 0 <= 0 ]
start location: koat_start
leaf cost: 0
A polynomial rank function with
Pol(half_LE_1055) = 3*V_1 + 4*V_2 - 1
Pol(log_LE_846) = 3*V_1 - 1
Pol(log_ConstantStackPush_2) = 3*V_1
Pol(half_Load_1046) = 3*V_1 + 4*V_2
Pol(koat_start) = 3*V_1
orients all transitions weakly and the transitions
log_LE_846(ar_0, ar_1, ar_2) -> Com_1(half_Load_1046(ar_0 - 2, 1, ar_1)) [ 1 < ar_0 /\ 2 <= ar_0 /\ 0 <= i388' /\ 0 <= ar_1 /\ ar_0 - 2 = i388' ]
half_Load_1046(ar_0, ar_1, ar_2) -> Com_1(half_LE_1055(ar_0, ar_1, ar_2)) [ 0 <= ar_2 /\ 1 <= ar_1 /\ 0 <= ar_0 ]
half_LE_1055(ar_0, ar_1, ar_2) -> Com_1(log_LE_846(ar_1, ar_2 + 1, arityPad)) [ ar_2 + 1 = i485' /\ 0 <= i485' /\ ar_0 <= 1 /\ 1 <= i485' /\ 1 <= ar_1 /\ 0 <= ar_2 /\ 0 <= ar_0 ]
half_LE_1055(ar_0, ar_1, ar_2) -> Com_1(half_Load_1046(ar_0 - 2, ar_1 + 1, ar_2)) [ 2 <= ar_0 /\ 2 <= i488' /\ 0 <= ar_0 /\ 1 <= i488' /\ ar_1 + 1 = i488' /\ 0 <= i482' /\ 0 <= ar_2 /\ ar_0 - 2 = i482' /\ 1 <= ar_1 /\ 1 < ar_0 ]
strictly and produces the following problem:
3: T:
(Comp: 3*ar_0, Cost: 8) half_LE_1055(ar_0, ar_1, ar_2) -> Com_1(log_LE_846(ar_1, ar_2 + 1, arityPad)) [ ar_2 + 1 = i485' /\ 0 <= i485' /\ ar_0 <= 1 /\ 1 <= i485' /\ 1 <= ar_1 /\ 0 <= ar_2 /\ 0 <= ar_0 ]
(Comp: 1, Cost: 19) log_ConstantStackPush_2(ar_0, ar_1, ar_2) -> Com_1(log_LE_846(ar_0, 0, arityPad)) [ static'1 <= static''' + 1 /\ 0 <= static''' /\ static''' <= ar_1 + 2 /\ 0 <= ar_1 /\ 0 <= static'1 ]
(Comp: 3*ar_0, Cost: 7) half_LE_1055(ar_0, ar_1, ar_2) -> Com_1(half_Load_1046(ar_0 - 2, ar_1 + 1, ar_2)) [ 2 <= ar_0 /\ 2 <= i488' /\ 0 <= ar_0 /\ 1 <= i488' /\ ar_1 + 1 = i488' /\ 0 <= i482' /\ 0 <= ar_2 /\ ar_0 - 2 = i482' /\ 1 <= ar_1 /\ 1 < ar_0 ]
(Comp: 3*ar_0, Cost: 2) half_Load_1046(ar_0, ar_1, ar_2) -> Com_1(half_LE_1055(ar_0, ar_1, ar_2)) [ 0 <= ar_2 /\ 1 <= ar_1 /\ 0 <= ar_0 ]
(Comp: 3*ar_0, Cost: 14) log_LE_846(ar_0, ar_1, ar_2) -> Com_1(half_Load_1046(ar_0 - 2, 1, ar_1)) [ 1 < ar_0 /\ 2 <= ar_0 /\ 0 <= i388' /\ 0 <= ar_1 /\ ar_0 - 2 = i388' ]
(Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(log_ConstantStackPush_2(ar_0, ar_1, ar_2)) [ 0 <= 0 ]
start location: koat_start
leaf cost: 0
Complexity upper bound 93*ar_0 + 19
Time: 0.136 sec (SMT: 0.125 sec)
(16) BOUNDS(CONSTANT, 19 + 93 * |#0|)
(17) TerminationGraphToComplexityProof (BOTH CONCRETE BOUNDS(ID, ADD(3)) transformation)
Extracted set of 70 edges for the analysis of TIME complexity. Kept leaves.
(18) Obligation:
Set of 70 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
(19) JBCGraphEdgesToCpxIntTrsProof (CONCRETE UPPER BOUND(ID) transformation)
Transformed 70 jbc graph edges to a weighted ITS with 70 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.
(20) Obligation:
IntTrs with 70 rules
Start term: log_ConstantStackPush_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
log_ConstantStackPush_2(i1, env, static) -{0,0}> log_ConstantStackPush_4(i1, env, static) :|: 0 >= 0
log_ConstantStackPush_4(i1, env, static) -{0,0}> langle_clinit_rangle_ConstantStackPush_6(i1, env, static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(i1, env, static) -{1,1}> langle_clinit_rangle_ArrayCreate_12(iconst_0, i1, env, static) :|: iconst_0 = 0
langle_clinit_rangle_ArrayCreate_12(iconst_0, i1, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_13(a2, i1, iconst_0, env, static) :|: a2 = 2 && iconst_0 = 0 && 0 < a2
langle_clinit_rangle_FieldAccess_13(a2, i1, iconst_0, env, static) -{1,1}> langle_clinit_rangle_New_15(i1, env, static') :|: 0 <= a2 && iconst_0 = 0 && static' <= static + a2 && 0 <= static && 0 < a2
langle_clinit_rangle_New_15(i1, env, static) -{0,0}> langle_clinit_rangle_New_17(i1, env, static) :|: 0 >= 0
langle_clinit_rangle_New_17(i1, env, static) -{0,0}> langle_clinit_rangle_New_19(i1, env, static) :|: 0 <= static
langle_clinit_rangle_New_19(i1, env, static) -{1,1}> langle_clinit_rangle_Duplicate_20(o2, i1, env, static) :|: 0 < o2 && o2 = 1
langle_clinit_rangle_Duplicate_20(o2, i1, env, static) -{1,1}> langle_clinit_rangle_ConstantStackPush_22(o2, i1, env, static) :|: 0 < o2
langle_clinit_rangle_ConstantStackPush_22(o2, i1, env, static) -{1,1}> langle_clinit_rangle_InvokeMethod_24(o2, NULL, i1, env, static) :|: NULL = 0 && 0 < o2
langle_clinit_rangle_InvokeMethod_24(o2, NULL, i1, env, static) -{1,1}> langle_init_rangle_Load_26(o2, i1, env, static) :|: NULL = 0 && 0 < o2
langle_init_rangle_Load_26(o2, i1, env, static) -{1,1}> langle_init_rangle_InvokeMethod_28(o2, i1, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_28(o2, i1, env, static) -{1,1}> langle_init_rangle_Load_29(o2, i1, env, static) :|: 0 < o2
langle_init_rangle_Load_29(o2, i1, env, static) -{1,1}> langle_init_rangle_InvokeMethod_32(o2, i1, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_32(o2, i1, env, static) -{1,1}> langle_init_rangle_Return_34(o2, i1, env, static) :|: 0 < o2
langle_init_rangle_Return_34(o2, i1, env, static) -{1,1}> langle_init_rangle_Return_36(o2, i1, env, static) :|: 0 < o2
langle_init_rangle_Return_36(o2, i1, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_39(o2, i1, env, static) :|: 0 < o2
langle_clinit_rangle_FieldAccess_39(o2, i1, env, static) -{1,1}> langle_clinit_rangle_Return_40(i1, env, static') :|: 0 < o2 && 0 <= o2 && 0 <= static && static' <= static + o2
langle_clinit_rangle_Return_40(i1, env, static) -{1,1}> log_ConstantStackPush_46(i1, env, static) :|: 0 >= 0
log_ConstantStackPush_46(i1, env, static) -{0,0}> log_ConstantStackPush_48(i1, env, static) :|: 0 >= 0
log_ConstantStackPush_48(i1, env, static) -{0,0}> log_ConstantStackPush_50(i1, env, static) :|: 0 <= static
log_ConstantStackPush_50(i1, env, static) -{0,0}> log_ConstantStackPush_51(i1, env, static) :|: 0 >= 0
log_ConstantStackPush_51(i1, env, static) -{0,0}> log_ConstantStackPush_52(i1, env, static) :|: 0 >= 0
log_ConstantStackPush_52(i1, env, static) -{1,1}> log_Store_53(i1, iconst_0, env, static) :|: iconst_0 = 0
log_Store_53(i1, iconst_0, env, static) -{1,1}> log_Load_54(i1, iconst_0, env, static) :|: iconst_0 = 0
log_Load_54(i1, iconst_0, env, static) -{1,1}> log_ConstantStackPush_55(i1, iconst_0, env, static) :|: iconst_0 = 0
log_ConstantStackPush_55(i1, iconst_0, env, static) -{1,1}> log_LE_58(i1, iconst_1, iconst_0, env, static) :|: iconst_1 = 1 && iconst_0 = 0
log_LE_58(i1, iconst_1, iconst_0, env, static) -{0,0}> log_LE_341(i1, i1, iconst_1, iconst_0, env, static) :|: 0 <= iconst_0 && iconst_0 <= 1 && iconst_1 = 1 && iconst_0 = 0
log_LE_341(i146, i147, iconst_1, i148, env, static) -{0,0}> log_LE_576(i146, i147, iconst_1, i148, env, static) :|: 0 <= i148 && i148 <= 1 && i148 <= 2 && iconst_1 = 1
log_LE_576(i146, i264, iconst_1, i265, env, static) -{0,0}> log_LE_846(i146, i264, iconst_1, i265, env, static) :|: i265 <= 2 && iconst_1 = 1 && 0 <= i265
log_LE_846(i146, i385, iconst_1, i381, env, static) -{0,0}> log_LE_853(i146, i385, iconst_1, i381, env, static) :|: i385 <= 1 && 0 <= i381 && iconst_1 = 1
log_LE_846(i146, i386, iconst_1, i381, env, static) -{0,0}> log_LE_854(i146, i386, iconst_1, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && 2 <= i386
log_LE_854(i146, i386, iconst_1, i381, env, static) -{1,1}> log_Load_865(i146, i386, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && 2 <= i386 && iconst_1 < i386
log_Load_865(i146, i386, i381, env, static) -{1,1}> log_InvokeMethod_868(i146, i386, i381, env, static) :|: 0 <= i381 && 2 <= i386
log_InvokeMethod_868(i146, i386, i381, env, static) -{1,1}> half_ConstantStackPush_871(i386, i146, i381, env, static) :|: 0 <= i381 && 2 <= i386
half_ConstantStackPush_871(i386, i146, i381, env, static) -{1,1}> half_Store_872(iconst_0, i386, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_Store_872(iconst_0, i386, i146, i381, env, static) -{1,1}> half_Load_873(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_Load_873(i386, iconst_0, i146, i381, env, static) -{1,1}> half_ConstantStackPush_874(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_ConstantStackPush_874(i386, iconst_0, i146, i381, env, static) -{1,1}> half_LE_876(i386, iconst_1, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && iconst_0 = 0 && 2 <= i386
half_LE_876(i386, iconst_1, iconst_0, i146, i381, env, static) -{1,1}> half_Load_882(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && iconst_0 = 0 && 2 <= i386 && iconst_1 < i386
half_Load_882(i386, iconst_0, i146, i381, env, static) -{1,1}> half_ConstantStackPush_884(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_ConstantStackPush_884(i386, iconst_0, i146, i381, env, static) -{1,1}> half_IntArithmetic_886(i386, iconst_2, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386 && iconst_2 = 2
half_IntArithmetic_886(i386, iconst_2, iconst_0, i146, i381, env, static) -{1,1}> half_Store_888(i388, iconst_0, i146, i381, env, static) :|: i386 - iconst_2 = i388 && 0 <= i381 && 0 <= i388 && iconst_0 = 0 && 2 <= i386 && iconst_2 = 2
half_Store_888(i388, iconst_0, i146, i381, env, static) -{1,1}> half_Inc_889(i388, iconst_0, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_0 = 0
half_Inc_889(i388, iconst_0, i146, i381, env, static) -{1,1}> half_JMP_890(i388, iconst_1, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_1 = 1 && iconst_0 = 0
half_JMP_890(i388, iconst_1, i146, i381, env, static) -{1,1}> half_Load_891(i388, iconst_1, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_1 = 1
half_Load_891(i388, iconst_1, i146, i381, env, static) -{0,0}> half_Load_940(i388, iconst_1, i146, i381, env, static) :|: iconst_1 <= 2 && 1 <= iconst_1 && 0 <= i381 && 0 <= i388 && iconst_1 = 1
half_Load_940(i410, i411, i146, i381, env, static) -{0,0}> half_Load_991(i410, i411, i146, i381, env, static) :|: i411 <= 3 && 0 <= i410 && 0 <= i381 && i411 <= 2 && 1 <= i411
half_Load_991(i439, i440, i146, i381, env, static) -{0,0}> half_Load_1046(i439, i440, i146, i381, env, static) :|: 0 <= i439 && 0 <= i381 && i440 <= 3 && 1 <= i440
half_Load_1046(i466, i467, i146, i381, env, static) -{1,1}> half_ConstantStackPush_1048(i466, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i466 && 0 <= i381
half_ConstantStackPush_1048(i466, i467, i146, i381, env, static) -{1,1}> half_LE_1055(i466, iconst_1, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i466 && 0 <= i381 && iconst_1 = 1
half_LE_1055(i479, iconst_1, i467, i146, i381, env, static) -{0,0}> half_LE_1056(i479, iconst_1, i467, i146, i381, env, static) :|: 0 <= i479 && 1 <= i467 && 0 <= i381 && iconst_1 = 1 && i479 <= 1
half_LE_1055(i480, iconst_1, i467, i146, i381, env, static) -{0,0}> half_LE_1057(i480, iconst_1, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i480 && 0 <= i381 && iconst_1 = 1 && 2 <= i480
half_LE_1056(i479, iconst_1, i467, i146, i381, env, static) -{1,1}> half_Load_1060(i467, i146, i381, env, static) :|: 0 <= i479 && 1 <= i467 && 0 <= i381 && iconst_1 = 1 && i479 <= iconst_1 && i479 <= 1
half_LE_1057(i480, iconst_1, i467, i146, i381, env, static) -{1,1}> half_Load_1063(i480, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && iconst_1 < i480 && iconst_1 = 1 && 2 <= i480
half_Load_1060(i467, i146, i381, env, static) -{1,1}> half_Return_1065(i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381
half_Load_1063(i480, i467, i146, i381, env, static) -{1,1}> half_ConstantStackPush_1068(i480, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && 2 <= i480
half_Return_1065(i467, i146, i381, env, static) -{1,1}> log_Store_1070(i146, i467, i381, env, static) :|: 1 <= i467 && 0 <= i381
half_ConstantStackPush_1068(i480, i467, i146, i381, env, static) -{1,1}> half_IntArithmetic_1072(i480, iconst_2, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && iconst_2 = 2 && 2 <= i480
log_Store_1070(i146, i467, i381, env, static) -{1,1}> log_Inc_1073(i146, i467, i381, env, static) :|: 1 <= i467 && 0 <= i381
half_IntArithmetic_1072(i480, iconst_2, i467, i146, i381, env, static) -{1,1}> half_Store_1074(i482, i467, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381 && i480 - iconst_2 = i482 && iconst_2 = 2 && 2 <= i480
log_Inc_1073(i146, i467, i381, env, static) -{1,1}> log_JMP_1076(i146, i467, i485, env, static) :|: 1 <= i467 && 0 <= i381 && 1 <= i485 && i381 + 1 = i485
half_Store_1074(i482, i467, i146, i381, env, static) -{1,1}> half_Inc_1079(i482, i467, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381
log_JMP_1076(i146, i467, i485, env, static) -{1,1}> log_Load_1081(i146, i467, i485, env, static) :|: 1 <= i467 && 1 <= i485
half_Inc_1079(i482, i467, i146, i381, env, static) -{1,1}> half_JMP_1084(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381 && i467 + 1 = i488 && 2 <= i488
log_Load_1081(i146, i467, i485, env, static) -{1,1}> log_ConstantStackPush_1087(i146, i467, i485, env, static) :|: 1 <= i467 && 1 <= i485
half_JMP_1084(i482, i488, i146, i381, env, static) -{1,1}> half_Load_1089(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 0 <= i381 && 2 <= i488
log_ConstantStackPush_1087(i146, i467, i485, env, static) -{1,1}> log_LE_1090(i146, i467, iconst_1, i485, env, static) :|: 1 <= i467 && iconst_1 = 1 && 1 <= i485
half_Load_1089(i482, i488, i146, i381, env, static) -{0,0}> half_Load_1046(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 0 <= i381 && 1 <= i488 && 2 <= i488
log_LE_1090(i146, i467, iconst_1, i485, env, static) -{0,0}> log_LE_846(i146, i467, iconst_1, i485, env, static) :|: 1 <= i467 && iconst_1 = 1 && 1 <= i485 && 0 <= i485
(21) StraightLineCodeCompressionProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
obtained
log_ConstantStackPush_2(
i1,
env,
static) -{19,19}>
log_LE_846(
i1,
i1,
1,
0,
env,
static'1) :|:
static'1 <=
static''' +
1 &&
0 <=
0 &&
0 <=
static''' &&
0 <=
2 &&
static''' <=
static +
2 &&
0 <
1 &&
0 <=
static &&
0 <=
1 &&
0 <=
static'1 &&
0 <
2 && 0 >= 0
by chaining
log_ConstantStackPush_2(
i1,
env,
static) -{0,0}>
log_ConstantStackPush_4(
i1,
env,
static) :|: 0 >= 0
log_ConstantStackPush_4(
i1,
env,
static) -{0,0}>
langle_clinit_rangle_ConstantStackPush_6(
i1,
env,
static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(
i1,
env,
static) -{1,1}>
langle_clinit_rangle_ArrayCreate_12(
iconst_0,
i1,
env,
static) :|:
iconst_0 =
0langle_clinit_rangle_ArrayCreate_12(
iconst_0,
i1,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_13(
a2,
i1,
iconst_0,
env,
static) :|:
a2 =
2 &&
iconst_0 =
0 &&
0 <
a2langle_clinit_rangle_FieldAccess_13(
a2,
i1,
iconst_0,
env,
static) -{1,1}>
langle_clinit_rangle_New_15(
i1,
env,
static') :|:
0 <=
a2 &&
iconst_0 =
0 &&
static' <=
static +
a2 &&
0 <=
static &&
0 <
a2langle_clinit_rangle_New_15(
i1,
env,
static) -{0,0}>
langle_clinit_rangle_New_17(
i1,
env,
static) :|: 0 >= 0
langle_clinit_rangle_New_17(
i1,
env,
static) -{0,0}>
langle_clinit_rangle_New_19(
i1,
env,
static) :|:
0 <=
staticlangle_clinit_rangle_New_19(
i1,
env,
static) -{1,1}>
langle_clinit_rangle_Duplicate_20(
o2,
i1,
env,
static) :|:
0 <
o2 &&
o2 =
1langle_clinit_rangle_Duplicate_20(
o2,
i1,
env,
static) -{1,1}>
langle_clinit_rangle_ConstantStackPush_22(
o2,
i1,
env,
static) :|:
0 <
o2langle_clinit_rangle_ConstantStackPush_22(
o2,
i1,
env,
static) -{1,1}>
langle_clinit_rangle_InvokeMethod_24(
o2,
NULL,
i1,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_clinit_rangle_InvokeMethod_24(
o2,
NULL,
i1,
env,
static) -{1,1}>
langle_init_rangle_Load_26(
o2,
i1,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_init_rangle_Load_26(
o2,
i1,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_28(
o2,
i1,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_28(
o2,
i1,
env,
static) -{1,1}>
langle_init_rangle_Load_29(
o2,
i1,
env,
static) :|:
0 <
o2langle_init_rangle_Load_29(
o2,
i1,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_32(
o2,
i1,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_32(
o2,
i1,
env,
static) -{1,1}>
langle_init_rangle_Return_34(
o2,
i1,
env,
static) :|:
0 <
o2langle_init_rangle_Return_34(
o2,
i1,
env,
static) -{1,1}>
langle_init_rangle_Return_36(
o2,
i1,
env,
static) :|:
0 <
o2langle_init_rangle_Return_36(
o2,
i1,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_39(
o2,
i1,
env,
static) :|:
0 <
o2langle_clinit_rangle_FieldAccess_39(
o2,
i1,
env,
static) -{1,1}>
langle_clinit_rangle_Return_40(
i1,
env,
static') :|:
0 <
o2 &&
0 <=
o2 &&
0 <=
static &&
static' <=
static +
o2langle_clinit_rangle_Return_40(
i1,
env,
static) -{1,1}>
log_ConstantStackPush_46(
i1,
env,
static) :|: 0 >= 0
log_ConstantStackPush_46(
i1,
env,
static) -{0,0}>
log_ConstantStackPush_48(
i1,
env,
static) :|: 0 >= 0
log_ConstantStackPush_48(
i1,
env,
static) -{0,0}>
log_ConstantStackPush_50(
i1,
env,
static) :|:
0 <=
staticlog_ConstantStackPush_50(
i1,
env,
static) -{0,0}>
log_ConstantStackPush_51(
i1,
env,
static) :|: 0 >= 0
log_ConstantStackPush_51(
i1,
env,
static) -{0,0}>
log_ConstantStackPush_52(
i1,
env,
static) :|: 0 >= 0
log_ConstantStackPush_52(
i1,
env,
static) -{1,1}>
log_Store_53(
i1,
iconst_0,
env,
static) :|:
iconst_0 =
0log_Store_53(
i1,
iconst_0,
env,
static) -{1,1}>
log_Load_54(
i1,
iconst_0,
env,
static) :|:
iconst_0 =
0log_Load_54(
i1,
iconst_0,
env,
static) -{1,1}>
log_ConstantStackPush_55(
i1,
iconst_0,
env,
static) :|:
iconst_0 =
0log_ConstantStackPush_55(
i1,
iconst_0,
env,
static) -{1,1}>
log_LE_58(
i1,
iconst_1,
iconst_0,
env,
static) :|:
iconst_1 =
1 &&
iconst_0 =
0log_LE_58(
i1,
iconst_1,
iconst_0,
env,
static) -{0,0}>
log_LE_341(
i1,
i1,
iconst_1,
iconst_0,
env,
static) :|:
0 <=
iconst_0 &&
iconst_0 <=
1 &&
iconst_1 =
1 &&
iconst_0 =
0log_LE_341(
i146,
i147,
iconst_1,
i148,
env,
static) -{0,0}>
log_LE_576(
i146,
i147,
iconst_1,
i148,
env,
static) :|:
0 <=
i148 &&
i148 <=
1 &&
i148 <=
2 &&
iconst_1 =
1log_LE_576(
i146,
i264,
iconst_1,
i265,
env,
static) -{0,0}>
log_LE_846(
i146,
i264,
iconst_1,
i265,
env,
static) :|:
i265 <=
2 &&
iconst_1 =
1 &&
0 <=
i265obtained
log_LE_846(i146, i386, 1, i381, env, static) -{14,14}> half_Load_1046(i388', 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2
by chaining
log_LE_846(i146, i386, iconst_1, i381, env, static) -{0,0}> log_LE_854(i146, i386, iconst_1, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && 2 <= i386
log_LE_854(i146, i386, iconst_1, i381, env, static) -{1,1}> log_Load_865(i146, i386, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && 2 <= i386 && iconst_1 < i386
log_Load_865(i146, i386, i381, env, static) -{1,1}> log_InvokeMethod_868(i146, i386, i381, env, static) :|: 0 <= i381 && 2 <= i386
log_InvokeMethod_868(i146, i386, i381, env, static) -{1,1}> half_ConstantStackPush_871(i386, i146, i381, env, static) :|: 0 <= i381 && 2 <= i386
half_ConstantStackPush_871(i386, i146, i381, env, static) -{1,1}> half_Store_872(iconst_0, i386, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_Store_872(iconst_0, i386, i146, i381, env, static) -{1,1}> half_Load_873(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_Load_873(i386, iconst_0, i146, i381, env, static) -{1,1}> half_ConstantStackPush_874(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_ConstantStackPush_874(i386, iconst_0, i146, i381, env, static) -{1,1}> half_LE_876(i386, iconst_1, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && iconst_0 = 0 && 2 <= i386
half_LE_876(i386, iconst_1, iconst_0, i146, i381, env, static) -{1,1}> half_Load_882(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && iconst_0 = 0 && 2 <= i386 && iconst_1 < i386
half_Load_882(i386, iconst_0, i146, i381, env, static) -{1,1}> half_ConstantStackPush_884(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_ConstantStackPush_884(i386, iconst_0, i146, i381, env, static) -{1,1}> half_IntArithmetic_886(i386, iconst_2, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386 && iconst_2 = 2
half_IntArithmetic_886(i386, iconst_2, iconst_0, i146, i381, env, static) -{1,1}> half_Store_888(i388, iconst_0, i146, i381, env, static) :|: i386 - iconst_2 = i388 && 0 <= i381 && 0 <= i388 && iconst_0 = 0 && 2 <= i386 && iconst_2 = 2
half_Store_888(i388, iconst_0, i146, i381, env, static) -{1,1}> half_Inc_889(i388, iconst_0, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_0 = 0
half_Inc_889(i388, iconst_0, i146, i381, env, static) -{1,1}> half_JMP_890(i388, iconst_1, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_1 = 1 && iconst_0 = 0
half_JMP_890(i388, iconst_1, i146, i381, env, static) -{1,1}> half_Load_891(i388, iconst_1, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_1 = 1
half_Load_891(i388, iconst_1, i146, i381, env, static) -{0,0}> half_Load_940(i388, iconst_1, i146, i381, env, static) :|: iconst_1 <= 2 && 1 <= iconst_1 && 0 <= i381 && 0 <= i388 && iconst_1 = 1
half_Load_940(i410, i411, i146, i381, env, static) -{0,0}> half_Load_991(i410, i411, i146, i381, env, static) :|: i411 <= 3 && 0 <= i410 && 0 <= i381 && i411 <= 2 && 1 <= i411
half_Load_991(i439, i440, i146, i381, env, static) -{0,0}> half_Load_1046(i439, i440, i146, i381, env, static) :|: 0 <= i439 && 0 <= i381 && i440 <= 3 && 1 <= i440
obtained
half_Load_1046(i466, i467, i146, i381, env, static) -{2,2}> half_LE_1055(i466, 1, i467, i146, i381, env, static) :|: 0 <= i381 && 1 <= i467 && 0 <= i466
by chaining
half_Load_1046(i466, i467, i146, i381, env, static) -{1,1}> half_ConstantStackPush_1048(i466, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i466 && 0 <= i381
half_ConstantStackPush_1048(i466, i467, i146, i381, env, static) -{1,1}> half_LE_1055(i466, iconst_1, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i466 && 0 <= i381 && iconst_1 = 1
obtained
half_LE_1055(i480, 1, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i482', i488', i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480
by chaining
half_LE_1055(i480, iconst_1, i467, i146, i381, env, static) -{0,0}> half_LE_1057(i480, iconst_1, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i480 && 0 <= i381 && iconst_1 = 1 && 2 <= i480
half_LE_1057(i480, iconst_1, i467, i146, i381, env, static) -{1,1}> half_Load_1063(i480, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && iconst_1 < i480 && iconst_1 = 1 && 2 <= i480
half_Load_1063(i480, i467, i146, i381, env, static) -{1,1}> half_ConstantStackPush_1068(i480, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && 2 <= i480
half_ConstantStackPush_1068(i480, i467, i146, i381, env, static) -{1,1}> half_IntArithmetic_1072(i480, iconst_2, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && iconst_2 = 2 && 2 <= i480
half_IntArithmetic_1072(i480, iconst_2, i467, i146, i381, env, static) -{1,1}> half_Store_1074(i482, i467, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381 && i480 - iconst_2 = i482 && iconst_2 = 2 && 2 <= i480
half_Store_1074(i482, i467, i146, i381, env, static) -{1,1}> half_Inc_1079(i482, i467, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381
half_Inc_1079(i482, i467, i146, i381, env, static) -{1,1}> half_JMP_1084(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381 && i467 + 1 = i488 && 2 <= i488
half_JMP_1084(i482, i488, i146, i381, env, static) -{1,1}> half_Load_1089(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 0 <= i381 && 2 <= i488
half_Load_1089(i482, i488, i146, i381, env, static) -{0,0}> half_Load_1046(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 0 <= i381 && 1 <= i488 && 2 <= i488
obtained
half_LE_1055(i479, 1, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i485', env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479
by chaining
half_LE_1055(i479, iconst_1, i467, i146, i381, env, static) -{0,0}> half_LE_1056(i479, iconst_1, i467, i146, i381, env, static) :|: 0 <= i479 && 1 <= i467 && 0 <= i381 && iconst_1 = 1 && i479 <= 1
half_LE_1056(i479, iconst_1, i467, i146, i381, env, static) -{1,1}> half_Load_1060(i467, i146, i381, env, static) :|: 0 <= i479 && 1 <= i467 && 0 <= i381 && iconst_1 = 1 && i479 <= iconst_1 && i479 <= 1
half_Load_1060(i467, i146, i381, env, static) -{1,1}> half_Return_1065(i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381
half_Return_1065(i467, i146, i381, env, static) -{1,1}> log_Store_1070(i146, i467, i381, env, static) :|: 1 <= i467 && 0 <= i381
log_Store_1070(i146, i467, i381, env, static) -{1,1}> log_Inc_1073(i146, i467, i381, env, static) :|: 1 <= i467 && 0 <= i381
log_Inc_1073(i146, i467, i381, env, static) -{1,1}> log_JMP_1076(i146, i467, i485, env, static) :|: 1 <= i467 && 0 <= i381 && 1 <= i485 && i381 + 1 = i485
log_JMP_1076(i146, i467, i485, env, static) -{1,1}> log_Load_1081(i146, i467, i485, env, static) :|: 1 <= i467 && 1 <= i485
log_Load_1081(i146, i467, i485, env, static) -{1,1}> log_ConstantStackPush_1087(i146, i467, i485, env, static) :|: 1 <= i467 && 1 <= i485
log_ConstantStackPush_1087(i146, i467, i485, env, static) -{1,1}> log_LE_1090(i146, i467, iconst_1, i485, env, static) :|: 1 <= i467 && iconst_1 = 1 && 1 <= i485
log_LE_1090(i146, i467, iconst_1, i485, env, static) -{0,0}> log_LE_846(i146, i467, iconst_1, i485, env, static) :|: 1 <= i467 && iconst_1 = 1 && 1 <= i485 && 0 <= i485
(22) Obligation:
IntTrs with 6 rules
Start term: log_ConstantStackPush_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
log_ConstantStackPush_2(i1, env, static) -{19,19}> log_LE_846(i1, i1, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 0 && 0 <= static''' && 0 <= 2 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= 1 && 0 <= static'1 && 0 < 2 && 0 >= 0
log_LE_846(i146, i385, iconst_1, i381, env, static) -{0,0}> log_LE_853(i146, i385, iconst_1, i381, env, static) :|: i385 <= 1 && 0 <= i381 && iconst_1 = 1
log_LE_846(i146, i386, 1, i381, env, static) -{14,14}> half_Load_1046(i388', 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2
half_Load_1046(i466, i467, i146, i381, env, static) -{2,2}> half_LE_1055(i466, 1, i467, i146, i381, env, static) :|: 0 <= i381 && 1 <= i467 && 0 <= i466
half_LE_1055(i480, 1, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i482', i488', i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480
half_LE_1055(i479, 1, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i485', env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479
(23) MovedArithmeticToConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Moved arithmethic from lhss to constraints.
log_LE_846(i146, i386, 1, i381, env, static) -{14,14}> half_Load_1046(i388', 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2
was transformed to
log_LE_846(i146, i386, x, i381, env, static) -{14,14}> half_Load_1046(i388', 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2 && x = 1
half_LE_1055(i480, 1, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i482', i488', i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480
was transformed to
half_LE_1055(i480, x, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i482', i488', i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480 && x = 1
half_LE_1055(i479, 1, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i485', env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479
was transformed to
half_LE_1055(i479, x, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i485', env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479 && x = 1
(24) Obligation:
IntTrs with 6 rules
Start term: log_ConstantStackPush_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
half_Load_1046(i466, i467, i146, i381, env, static) -{2,2}> half_LE_1055(i466, 1, i467, i146, i381, env, static) :|: 0 <= i381 && 1 <= i467 && 0 <= i466
log_LE_846(i146, i386, x, i381, env, static) -{14,14}> half_Load_1046(i388', 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2 && x = 1
log_ConstantStackPush_2(i1, env, static) -{19,19}> log_LE_846(i1, i1, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 0 && 0 <= static''' && 0 <= 2 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= 1 && 0 <= static'1 && 0 < 2 && 0 >= 0
half_LE_1055(i480, x, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i482', i488', i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480 && x = 1
log_LE_846(i146, i385, iconst_1, i381, env, static) -{0,0}> log_LE_853(i146, i385, iconst_1, i381, env, static) :|: i385 <= 1 && 0 <= i381 && iconst_1 = 1
half_LE_1055(i479, x, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i485', env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479 && x = 1
(25) MovedArithmeticFromConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Moved arithmethic from constraints to rhss.
half_LE_1055(i479, x, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i485', env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479 && x = 1
was transformed to
half_LE_1055(i479, x, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i381 + 1, env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479 && x = 1
log_LE_846(i146, i385, iconst_1, i381, env, static) -{0,0}> log_LE_853(i146, i385, iconst_1, i381, env, static) :|: i385 <= 1 && 0 <= i381 && iconst_1 = 1
was transformed to
log_LE_846(i146, i385, iconst_1, i381, env, static) -{0,0}> log_LE_853(i146, i385, 1, i381, env, static) :|: i385 <= 1 && 0 <= i381 && iconst_1 = 1
half_LE_1055(i480, x, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i482', i488', i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480 && x = 1
was transformed to
half_LE_1055(i480, x, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i480 - 2, i467 + 1, i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480 && x = 1
log_LE_846(i146, i386, x, i381, env, static) -{14,14}> half_Load_1046(i388', 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2 && x = 1
was transformed to
log_LE_846(i146, i386, x, i381, env, static) -{14,14}> half_Load_1046(i386 - 2, 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2 && x = 1
(26) Obligation:
IntTrs with 6 rules
Start term: log_ConstantStackPush_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
half_Load_1046(i466, i467, i146, i381, env, static) -{2,2}> half_LE_1055(i466, 1, i467, i146, i381, env, static) :|: 0 <= i381 && 1 <= i467 && 0 <= i466
log_ConstantStackPush_2(i1, env, static) -{19,19}> log_LE_846(i1, i1, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 0 && 0 <= static''' && 0 <= 2 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= 1 && 0 <= static'1 && 0 < 2 && 0 >= 0
half_LE_1055(i479, x, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i381 + 1, env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479 && x = 1
log_LE_846(i146, i385, iconst_1, i381, env, static) -{0,0}> log_LE_853(i146, i385, 1, i381, env, static) :|: i385 <= 1 && 0 <= i381 && iconst_1 = 1
half_LE_1055(i480, x, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i480 - 2, i467 + 1, i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480 && x = 1
log_LE_846(i146, i386, x, i381, env, static) -{14,14}> half_Load_1046(i386 - 2, 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2 && x = 1
(27) ExpressionSimplificationProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Simplified expressions.
log_ConstantStackPush_2(i1, env, static) -{19,19}> log_LE_846(i1, i1, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 0 && 0 <= static''' && 0 <= 2 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= 1 && 0 <= static'1 && 0 < 2 && 0 >= 0
was transformed to
log_ConstantStackPush_2(i1, env, static) -{19,19}> log_LE_846(i1, i1, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'1
log_LE_846(i146, i386, x, i381, env, static) -{14,14}> half_Load_1046(i386 - 2, 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2 && x = 1
was transformed to
log_LE_846(i146, i386, x, i381, env, static) -{14,14}> half_Load_1046(i386 - 2, 1, i146, i381, env, static) :|: 1 < i386 && 2 <= i386 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && x = 1
(28) Obligation:
IntTrs with 6 rules
Start term: log_ConstantStackPush_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
half_Load_1046(i466, i467, i146, i381, env, static) -{2,2}> half_LE_1055(i466, 1, i467, i146, i381, env, static) :|: 0 <= i381 && 1 <= i467 && 0 <= i466
half_LE_1055(i479, x, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i381 + 1, env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479 && x = 1
half_LE_1055(i480, x, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i480 - 2, i467 + 1, i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480 && x = 1
log_ConstantStackPush_2(i1, env, static) -{19,19}> log_LE_846(i1, i1, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'1
log_LE_846(i146, i386, x, i381, env, static) -{14,14}> half_Load_1046(i386 - 2, 1, i146, i381, env, static) :|: 1 < i386 && 2 <= i386 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && x = 1
log_LE_846(i146, i385, iconst_1, i381, env, static) -{0,0}> log_LE_853(i146, i385, 1, i381, env, static) :|: i385 <= 1 && 0 <= i381 && iconst_1 = 1
(29) JBCGraphEdgesToCpxIntTrsProof (CONCRETE UPPER BOUND(ID) transformation)
Transformed 70 jbc graph edges to a weighted ITS with 70 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.
(30) Obligation:
IntTrs with 70 rules
Start term: log_ConstantStackPush_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
log_ConstantStackPush_2(i1, env, static) -{0,0}> log_ConstantStackPush_4(i1, env, static) :|: 0 >= 0
log_ConstantStackPush_4(i1, env, static) -{0,0}> langle_clinit_rangle_ConstantStackPush_6(i1, env, static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(i1, env, static) -{1,1}> langle_clinit_rangle_ArrayCreate_12(iconst_0, i1, env, static) :|: iconst_0 = 0
langle_clinit_rangle_ArrayCreate_12(iconst_0, i1, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_13(a2, i1, iconst_0, env, static) :|: a2 = 2 && iconst_0 = 0 && 0 < a2
langle_clinit_rangle_FieldAccess_13(a2, i1, iconst_0, env, static) -{1,1}> langle_clinit_rangle_New_15(i1, env, static') :|: 0 <= a2 && iconst_0 = 0 && static' <= static + a2 && 0 <= static && 0 < a2
langle_clinit_rangle_New_15(i1, env, static) -{0,0}> langle_clinit_rangle_New_17(i1, env, static) :|: 0 >= 0
langle_clinit_rangle_New_17(i1, env, static) -{0,0}> langle_clinit_rangle_New_19(i1, env, static) :|: 0 <= static
langle_clinit_rangle_New_19(i1, env, static) -{1,1}> langle_clinit_rangle_Duplicate_20(o2, i1, env, static) :|: 0 < o2 && o2 = 1
langle_clinit_rangle_Duplicate_20(o2, i1, env, static) -{1,1}> langle_clinit_rangle_ConstantStackPush_22(o2, i1, env, static) :|: 0 < o2
langle_clinit_rangle_ConstantStackPush_22(o2, i1, env, static) -{1,1}> langle_clinit_rangle_InvokeMethod_24(o2, NULL, i1, env, static) :|: NULL = 0 && 0 < o2
langle_clinit_rangle_InvokeMethod_24(o2, NULL, i1, env, static) -{1,1}> langle_init_rangle_Load_26(o2, i1, env, static) :|: NULL = 0 && 0 < o2
langle_init_rangle_Load_26(o2, i1, env, static) -{1,1}> langle_init_rangle_InvokeMethod_28(o2, i1, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_28(o2, i1, env, static) -{1,1}> langle_init_rangle_Load_29(o2, i1, env, static) :|: 0 < o2
langle_init_rangle_Load_29(o2, i1, env, static) -{1,1}> langle_init_rangle_InvokeMethod_32(o2, i1, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_32(o2, i1, env, static) -{1,1}> langle_init_rangle_Return_34(o2, i1, env, static) :|: 0 < o2
langle_init_rangle_Return_34(o2, i1, env, static) -{1,1}> langle_init_rangle_Return_36(o2, i1, env, static) :|: 0 < o2
langle_init_rangle_Return_36(o2, i1, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_39(o2, i1, env, static) :|: 0 < o2
langle_clinit_rangle_FieldAccess_39(o2, i1, env, static) -{1,1}> langle_clinit_rangle_Return_40(i1, env, static') :|: 0 < o2 && 0 <= o2 && 0 <= static && static' <= static + o2
langle_clinit_rangle_Return_40(i1, env, static) -{1,1}> log_ConstantStackPush_46(i1, env, static) :|: 0 >= 0
log_ConstantStackPush_46(i1, env, static) -{0,0}> log_ConstantStackPush_48(i1, env, static) :|: 0 >= 0
log_ConstantStackPush_48(i1, env, static) -{0,0}> log_ConstantStackPush_50(i1, env, static) :|: 0 <= static
log_ConstantStackPush_50(i1, env, static) -{0,0}> log_ConstantStackPush_51(i1, env, static) :|: 0 >= 0
log_ConstantStackPush_51(i1, env, static) -{0,0}> log_ConstantStackPush_52(i1, env, static) :|: 0 >= 0
log_ConstantStackPush_52(i1, env, static) -{1,1}> log_Store_53(i1, iconst_0, env, static) :|: iconst_0 = 0
log_Store_53(i1, iconst_0, env, static) -{1,1}> log_Load_54(i1, iconst_0, env, static) :|: iconst_0 = 0
log_Load_54(i1, iconst_0, env, static) -{1,1}> log_ConstantStackPush_55(i1, iconst_0, env, static) :|: iconst_0 = 0
log_ConstantStackPush_55(i1, iconst_0, env, static) -{1,1}> log_LE_58(i1, iconst_1, iconst_0, env, static) :|: iconst_1 = 1 && iconst_0 = 0
log_LE_58(i1, iconst_1, iconst_0, env, static) -{0,0}> log_LE_341(i1, i1, iconst_1, iconst_0, env, static) :|: 0 <= iconst_0 && iconst_0 <= 1 && iconst_1 = 1 && iconst_0 = 0
log_LE_341(i146, i147, iconst_1, i148, env, static) -{0,0}> log_LE_576(i146, i147, iconst_1, i148, env, static) :|: 0 <= i148 && i148 <= 1 && i148 <= 2 && iconst_1 = 1
log_LE_576(i146, i264, iconst_1, i265, env, static) -{0,0}> log_LE_846(i146, i264, iconst_1, i265, env, static) :|: i265 <= 2 && iconst_1 = 1 && 0 <= i265
log_LE_846(i146, i385, iconst_1, i381, env, static) -{0,0}> log_LE_853(i146, i385, iconst_1, i381, env, static) :|: i385 <= 1 && 0 <= i381 && iconst_1 = 1
log_LE_846(i146, i386, iconst_1, i381, env, static) -{0,0}> log_LE_854(i146, i386, iconst_1, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && 2 <= i386
log_LE_854(i146, i386, iconst_1, i381, env, static) -{1,1}> log_Load_865(i146, i386, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && 2 <= i386 && iconst_1 < i386
log_Load_865(i146, i386, i381, env, static) -{1,1}> log_InvokeMethod_868(i146, i386, i381, env, static) :|: 0 <= i381 && 2 <= i386
log_InvokeMethod_868(i146, i386, i381, env, static) -{1,1}> half_ConstantStackPush_871(i386, i146, i381, env, static) :|: 0 <= i381 && 2 <= i386
half_ConstantStackPush_871(i386, i146, i381, env, static) -{1,1}> half_Store_872(iconst_0, i386, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_Store_872(iconst_0, i386, i146, i381, env, static) -{1,1}> half_Load_873(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_Load_873(i386, iconst_0, i146, i381, env, static) -{1,1}> half_ConstantStackPush_874(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_ConstantStackPush_874(i386, iconst_0, i146, i381, env, static) -{1,1}> half_LE_876(i386, iconst_1, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && iconst_0 = 0 && 2 <= i386
half_LE_876(i386, iconst_1, iconst_0, i146, i381, env, static) -{1,1}> half_Load_882(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && iconst_0 = 0 && 2 <= i386 && iconst_1 < i386
half_Load_882(i386, iconst_0, i146, i381, env, static) -{1,1}> half_ConstantStackPush_884(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_ConstantStackPush_884(i386, iconst_0, i146, i381, env, static) -{1,1}> half_IntArithmetic_886(i386, iconst_2, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386 && iconst_2 = 2
half_IntArithmetic_886(i386, iconst_2, iconst_0, i146, i381, env, static) -{1,1}> half_Store_888(i388, iconst_0, i146, i381, env, static) :|: i386 - iconst_2 = i388 && 0 <= i381 && 0 <= i388 && iconst_0 = 0 && 2 <= i386 && iconst_2 = 2
half_Store_888(i388, iconst_0, i146, i381, env, static) -{1,1}> half_Inc_889(i388, iconst_0, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_0 = 0
half_Inc_889(i388, iconst_0, i146, i381, env, static) -{1,1}> half_JMP_890(i388, iconst_1, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_1 = 1 && iconst_0 = 0
half_JMP_890(i388, iconst_1, i146, i381, env, static) -{1,1}> half_Load_891(i388, iconst_1, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_1 = 1
half_Load_891(i388, iconst_1, i146, i381, env, static) -{0,0}> half_Load_940(i388, iconst_1, i146, i381, env, static) :|: iconst_1 <= 2 && 1 <= iconst_1 && 0 <= i381 && 0 <= i388 && iconst_1 = 1
half_Load_940(i410, i411, i146, i381, env, static) -{0,0}> half_Load_991(i410, i411, i146, i381, env, static) :|: i411 <= 3 && 0 <= i410 && 0 <= i381 && i411 <= 2 && 1 <= i411
half_Load_991(i439, i440, i146, i381, env, static) -{0,0}> half_Load_1046(i439, i440, i146, i381, env, static) :|: 0 <= i439 && 0 <= i381 && i440 <= 3 && 1 <= i440
half_Load_1046(i466, i467, i146, i381, env, static) -{1,1}> half_ConstantStackPush_1048(i466, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i466 && 0 <= i381
half_ConstantStackPush_1048(i466, i467, i146, i381, env, static) -{1,1}> half_LE_1055(i466, iconst_1, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i466 && 0 <= i381 && iconst_1 = 1
half_LE_1055(i479, iconst_1, i467, i146, i381, env, static) -{0,0}> half_LE_1056(i479, iconst_1, i467, i146, i381, env, static) :|: 0 <= i479 && 1 <= i467 && 0 <= i381 && iconst_1 = 1 && i479 <= 1
half_LE_1055(i480, iconst_1, i467, i146, i381, env, static) -{0,0}> half_LE_1057(i480, iconst_1, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i480 && 0 <= i381 && iconst_1 = 1 && 2 <= i480
half_LE_1056(i479, iconst_1, i467, i146, i381, env, static) -{1,1}> half_Load_1060(i467, i146, i381, env, static) :|: 0 <= i479 && 1 <= i467 && 0 <= i381 && iconst_1 = 1 && i479 <= iconst_1 && i479 <= 1
half_LE_1057(i480, iconst_1, i467, i146, i381, env, static) -{1,1}> half_Load_1063(i480, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && iconst_1 < i480 && iconst_1 = 1 && 2 <= i480
half_Load_1060(i467, i146, i381, env, static) -{1,1}> half_Return_1065(i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381
half_Load_1063(i480, i467, i146, i381, env, static) -{1,1}> half_ConstantStackPush_1068(i480, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && 2 <= i480
half_Return_1065(i467, i146, i381, env, static) -{1,1}> log_Store_1070(i146, i467, i381, env, static) :|: 1 <= i467 && 0 <= i381
half_ConstantStackPush_1068(i480, i467, i146, i381, env, static) -{1,1}> half_IntArithmetic_1072(i480, iconst_2, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && iconst_2 = 2 && 2 <= i480
log_Store_1070(i146, i467, i381, env, static) -{1,1}> log_Inc_1073(i146, i467, i381, env, static) :|: 1 <= i467 && 0 <= i381
half_IntArithmetic_1072(i480, iconst_2, i467, i146, i381, env, static) -{1,1}> half_Store_1074(i482, i467, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381 && i480 - iconst_2 = i482 && iconst_2 = 2 && 2 <= i480
log_Inc_1073(i146, i467, i381, env, static) -{1,1}> log_JMP_1076(i146, i467, i485, env, static) :|: 1 <= i467 && 0 <= i381 && 1 <= i485 && i381 + 1 = i485
half_Store_1074(i482, i467, i146, i381, env, static) -{1,1}> half_Inc_1079(i482, i467, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381
log_JMP_1076(i146, i467, i485, env, static) -{1,1}> log_Load_1081(i146, i467, i485, env, static) :|: 1 <= i467 && 1 <= i485
half_Inc_1079(i482, i467, i146, i381, env, static) -{1,1}> half_JMP_1084(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381 && i467 + 1 = i488 && 2 <= i488
log_Load_1081(i146, i467, i485, env, static) -{1,1}> log_ConstantStackPush_1087(i146, i467, i485, env, static) :|: 1 <= i467 && 1 <= i485
half_JMP_1084(i482, i488, i146, i381, env, static) -{1,1}> half_Load_1089(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 0 <= i381 && 2 <= i488
log_ConstantStackPush_1087(i146, i467, i485, env, static) -{1,1}> log_LE_1090(i146, i467, iconst_1, i485, env, static) :|: 1 <= i467 && iconst_1 = 1 && 1 <= i485
half_Load_1089(i482, i488, i146, i381, env, static) -{0,0}> half_Load_1046(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 0 <= i381 && 1 <= i488 && 2 <= i488
log_LE_1090(i146, i467, iconst_1, i485, env, static) -{0,0}> log_LE_846(i146, i467, iconst_1, i485, env, static) :|: 1 <= i467 && iconst_1 = 1 && 1 <= i485 && 0 <= i485
(31) StraightLineCodeCompressionProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
obtained
log_ConstantStackPush_2(
i1,
env,
static) -{19,19}>
log_LE_846(
i1,
i1,
1,
0,
env,
static'1) :|:
static'1 <=
static''' +
1 &&
0 <=
0 &&
0 <=
static''' &&
0 <=
2 &&
static''' <=
static +
2 &&
0 <
1 &&
0 <=
static &&
0 <=
1 &&
0 <=
static'1 &&
0 <
2 && 0 >= 0
by chaining
log_ConstantStackPush_2(
i1,
env,
static) -{0,0}>
log_ConstantStackPush_4(
i1,
env,
static) :|: 0 >= 0
log_ConstantStackPush_4(
i1,
env,
static) -{0,0}>
langle_clinit_rangle_ConstantStackPush_6(
i1,
env,
static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(
i1,
env,
static) -{1,1}>
langle_clinit_rangle_ArrayCreate_12(
iconst_0,
i1,
env,
static) :|:
iconst_0 =
0langle_clinit_rangle_ArrayCreate_12(
iconst_0,
i1,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_13(
a2,
i1,
iconst_0,
env,
static) :|:
a2 =
2 &&
iconst_0 =
0 &&
0 <
a2langle_clinit_rangle_FieldAccess_13(
a2,
i1,
iconst_0,
env,
static) -{1,1}>
langle_clinit_rangle_New_15(
i1,
env,
static') :|:
0 <=
a2 &&
iconst_0 =
0 &&
static' <=
static +
a2 &&
0 <=
static &&
0 <
a2langle_clinit_rangle_New_15(
i1,
env,
static) -{0,0}>
langle_clinit_rangle_New_17(
i1,
env,
static) :|: 0 >= 0
langle_clinit_rangle_New_17(
i1,
env,
static) -{0,0}>
langle_clinit_rangle_New_19(
i1,
env,
static) :|:
0 <=
staticlangle_clinit_rangle_New_19(
i1,
env,
static) -{1,1}>
langle_clinit_rangle_Duplicate_20(
o2,
i1,
env,
static) :|:
0 <
o2 &&
o2 =
1langle_clinit_rangle_Duplicate_20(
o2,
i1,
env,
static) -{1,1}>
langle_clinit_rangle_ConstantStackPush_22(
o2,
i1,
env,
static) :|:
0 <
o2langle_clinit_rangle_ConstantStackPush_22(
o2,
i1,
env,
static) -{1,1}>
langle_clinit_rangle_InvokeMethod_24(
o2,
NULL,
i1,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_clinit_rangle_InvokeMethod_24(
o2,
NULL,
i1,
env,
static) -{1,1}>
langle_init_rangle_Load_26(
o2,
i1,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_init_rangle_Load_26(
o2,
i1,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_28(
o2,
i1,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_28(
o2,
i1,
env,
static) -{1,1}>
langle_init_rangle_Load_29(
o2,
i1,
env,
static) :|:
0 <
o2langle_init_rangle_Load_29(
o2,
i1,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_32(
o2,
i1,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_32(
o2,
i1,
env,
static) -{1,1}>
langle_init_rangle_Return_34(
o2,
i1,
env,
static) :|:
0 <
o2langle_init_rangle_Return_34(
o2,
i1,
env,
static) -{1,1}>
langle_init_rangle_Return_36(
o2,
i1,
env,
static) :|:
0 <
o2langle_init_rangle_Return_36(
o2,
i1,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_39(
o2,
i1,
env,
static) :|:
0 <
o2langle_clinit_rangle_FieldAccess_39(
o2,
i1,
env,
static) -{1,1}>
langle_clinit_rangle_Return_40(
i1,
env,
static') :|:
0 <
o2 &&
0 <=
o2 &&
0 <=
static &&
static' <=
static +
o2langle_clinit_rangle_Return_40(
i1,
env,
static) -{1,1}>
log_ConstantStackPush_46(
i1,
env,
static) :|: 0 >= 0
log_ConstantStackPush_46(
i1,
env,
static) -{0,0}>
log_ConstantStackPush_48(
i1,
env,
static) :|: 0 >= 0
log_ConstantStackPush_48(
i1,
env,
static) -{0,0}>
log_ConstantStackPush_50(
i1,
env,
static) :|:
0 <=
staticlog_ConstantStackPush_50(
i1,
env,
static) -{0,0}>
log_ConstantStackPush_51(
i1,
env,
static) :|: 0 >= 0
log_ConstantStackPush_51(
i1,
env,
static) -{0,0}>
log_ConstantStackPush_52(
i1,
env,
static) :|: 0 >= 0
log_ConstantStackPush_52(
i1,
env,
static) -{1,1}>
log_Store_53(
i1,
iconst_0,
env,
static) :|:
iconst_0 =
0log_Store_53(
i1,
iconst_0,
env,
static) -{1,1}>
log_Load_54(
i1,
iconst_0,
env,
static) :|:
iconst_0 =
0log_Load_54(
i1,
iconst_0,
env,
static) -{1,1}>
log_ConstantStackPush_55(
i1,
iconst_0,
env,
static) :|:
iconst_0 =
0log_ConstantStackPush_55(
i1,
iconst_0,
env,
static) -{1,1}>
log_LE_58(
i1,
iconst_1,
iconst_0,
env,
static) :|:
iconst_1 =
1 &&
iconst_0 =
0log_LE_58(
i1,
iconst_1,
iconst_0,
env,
static) -{0,0}>
log_LE_341(
i1,
i1,
iconst_1,
iconst_0,
env,
static) :|:
0 <=
iconst_0 &&
iconst_0 <=
1 &&
iconst_1 =
1 &&
iconst_0 =
0log_LE_341(
i146,
i147,
iconst_1,
i148,
env,
static) -{0,0}>
log_LE_576(
i146,
i147,
iconst_1,
i148,
env,
static) :|:
0 <=
i148 &&
i148 <=
1 &&
i148 <=
2 &&
iconst_1 =
1log_LE_576(
i146,
i264,
iconst_1,
i265,
env,
static) -{0,0}>
log_LE_846(
i146,
i264,
iconst_1,
i265,
env,
static) :|:
i265 <=
2 &&
iconst_1 =
1 &&
0 <=
i265obtained
log_LE_846(i146, i386, 1, i381, env, static) -{14,14}> half_Load_1046(i388', 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2
by chaining
log_LE_846(i146, i386, iconst_1, i381, env, static) -{0,0}> log_LE_854(i146, i386, iconst_1, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && 2 <= i386
log_LE_854(i146, i386, iconst_1, i381, env, static) -{1,1}> log_Load_865(i146, i386, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && 2 <= i386 && iconst_1 < i386
log_Load_865(i146, i386, i381, env, static) -{1,1}> log_InvokeMethod_868(i146, i386, i381, env, static) :|: 0 <= i381 && 2 <= i386
log_InvokeMethod_868(i146, i386, i381, env, static) -{1,1}> half_ConstantStackPush_871(i386, i146, i381, env, static) :|: 0 <= i381 && 2 <= i386
half_ConstantStackPush_871(i386, i146, i381, env, static) -{1,1}> half_Store_872(iconst_0, i386, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_Store_872(iconst_0, i386, i146, i381, env, static) -{1,1}> half_Load_873(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_Load_873(i386, iconst_0, i146, i381, env, static) -{1,1}> half_ConstantStackPush_874(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_ConstantStackPush_874(i386, iconst_0, i146, i381, env, static) -{1,1}> half_LE_876(i386, iconst_1, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && iconst_0 = 0 && 2 <= i386
half_LE_876(i386, iconst_1, iconst_0, i146, i381, env, static) -{1,1}> half_Load_882(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_1 = 1 && iconst_0 = 0 && 2 <= i386 && iconst_1 < i386
half_Load_882(i386, iconst_0, i146, i381, env, static) -{1,1}> half_ConstantStackPush_884(i386, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386
half_ConstantStackPush_884(i386, iconst_0, i146, i381, env, static) -{1,1}> half_IntArithmetic_886(i386, iconst_2, iconst_0, i146, i381, env, static) :|: 0 <= i381 && iconst_0 = 0 && 2 <= i386 && iconst_2 = 2
half_IntArithmetic_886(i386, iconst_2, iconst_0, i146, i381, env, static) -{1,1}> half_Store_888(i388, iconst_0, i146, i381, env, static) :|: i386 - iconst_2 = i388 && 0 <= i381 && 0 <= i388 && iconst_0 = 0 && 2 <= i386 && iconst_2 = 2
half_Store_888(i388, iconst_0, i146, i381, env, static) -{1,1}> half_Inc_889(i388, iconst_0, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_0 = 0
half_Inc_889(i388, iconst_0, i146, i381, env, static) -{1,1}> half_JMP_890(i388, iconst_1, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_1 = 1 && iconst_0 = 0
half_JMP_890(i388, iconst_1, i146, i381, env, static) -{1,1}> half_Load_891(i388, iconst_1, i146, i381, env, static) :|: 0 <= i381 && 0 <= i388 && iconst_1 = 1
half_Load_891(i388, iconst_1, i146, i381, env, static) -{0,0}> half_Load_940(i388, iconst_1, i146, i381, env, static) :|: iconst_1 <= 2 && 1 <= iconst_1 && 0 <= i381 && 0 <= i388 && iconst_1 = 1
half_Load_940(i410, i411, i146, i381, env, static) -{0,0}> half_Load_991(i410, i411, i146, i381, env, static) :|: i411 <= 3 && 0 <= i410 && 0 <= i381 && i411 <= 2 && 1 <= i411
half_Load_991(i439, i440, i146, i381, env, static) -{0,0}> half_Load_1046(i439, i440, i146, i381, env, static) :|: 0 <= i439 && 0 <= i381 && i440 <= 3 && 1 <= i440
obtained
half_Load_1046(i466, i467, i146, i381, env, static) -{2,2}> half_LE_1055(i466, 1, i467, i146, i381, env, static) :|: 0 <= i381 && 1 <= i467 && 0 <= i466
by chaining
half_Load_1046(i466, i467, i146, i381, env, static) -{1,1}> half_ConstantStackPush_1048(i466, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i466 && 0 <= i381
half_ConstantStackPush_1048(i466, i467, i146, i381, env, static) -{1,1}> half_LE_1055(i466, iconst_1, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i466 && 0 <= i381 && iconst_1 = 1
obtained
half_LE_1055(i480, 1, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i482', i488', i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480
by chaining
half_LE_1055(i480, iconst_1, i467, i146, i381, env, static) -{0,0}> half_LE_1057(i480, iconst_1, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i480 && 0 <= i381 && iconst_1 = 1 && 2 <= i480
half_LE_1057(i480, iconst_1, i467, i146, i381, env, static) -{1,1}> half_Load_1063(i480, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && iconst_1 < i480 && iconst_1 = 1 && 2 <= i480
half_Load_1063(i480, i467, i146, i381, env, static) -{1,1}> half_ConstantStackPush_1068(i480, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && 2 <= i480
half_ConstantStackPush_1068(i480, i467, i146, i381, env, static) -{1,1}> half_IntArithmetic_1072(i480, iconst_2, i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381 && iconst_2 = 2 && 2 <= i480
half_IntArithmetic_1072(i480, iconst_2, i467, i146, i381, env, static) -{1,1}> half_Store_1074(i482, i467, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381 && i480 - iconst_2 = i482 && iconst_2 = 2 && 2 <= i480
half_Store_1074(i482, i467, i146, i381, env, static) -{1,1}> half_Inc_1079(i482, i467, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381
half_Inc_1079(i482, i467, i146, i381, env, static) -{1,1}> half_JMP_1084(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 1 <= i467 && 0 <= i381 && i467 + 1 = i488 && 2 <= i488
half_JMP_1084(i482, i488, i146, i381, env, static) -{1,1}> half_Load_1089(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 0 <= i381 && 2 <= i488
half_Load_1089(i482, i488, i146, i381, env, static) -{0,0}> half_Load_1046(i482, i488, i146, i381, env, static) :|: 0 <= i482 && 0 <= i381 && 1 <= i488 && 2 <= i488
obtained
half_LE_1055(i479, 1, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i485', env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479
by chaining
half_LE_1055(i479, iconst_1, i467, i146, i381, env, static) -{0,0}> half_LE_1056(i479, iconst_1, i467, i146, i381, env, static) :|: 0 <= i479 && 1 <= i467 && 0 <= i381 && iconst_1 = 1 && i479 <= 1
half_LE_1056(i479, iconst_1, i467, i146, i381, env, static) -{1,1}> half_Load_1060(i467, i146, i381, env, static) :|: 0 <= i479 && 1 <= i467 && 0 <= i381 && iconst_1 = 1 && i479 <= iconst_1 && i479 <= 1
half_Load_1060(i467, i146, i381, env, static) -{1,1}> half_Return_1065(i467, i146, i381, env, static) :|: 1 <= i467 && 0 <= i381
half_Return_1065(i467, i146, i381, env, static) -{1,1}> log_Store_1070(i146, i467, i381, env, static) :|: 1 <= i467 && 0 <= i381
log_Store_1070(i146, i467, i381, env, static) -{1,1}> log_Inc_1073(i146, i467, i381, env, static) :|: 1 <= i467 && 0 <= i381
log_Inc_1073(i146, i467, i381, env, static) -{1,1}> log_JMP_1076(i146, i467, i485, env, static) :|: 1 <= i467 && 0 <= i381 && 1 <= i485 && i381 + 1 = i485
log_JMP_1076(i146, i467, i485, env, static) -{1,1}> log_Load_1081(i146, i467, i485, env, static) :|: 1 <= i467 && 1 <= i485
log_Load_1081(i146, i467, i485, env, static) -{1,1}> log_ConstantStackPush_1087(i146, i467, i485, env, static) :|: 1 <= i467 && 1 <= i485
log_ConstantStackPush_1087(i146, i467, i485, env, static) -{1,1}> log_LE_1090(i146, i467, iconst_1, i485, env, static) :|: 1 <= i467 && iconst_1 = 1 && 1 <= i485
log_LE_1090(i146, i467, iconst_1, i485, env, static) -{0,0}> log_LE_846(i146, i467, iconst_1, i485, env, static) :|: 1 <= i467 && iconst_1 = 1 && 1 <= i485 && 0 <= i485
(32) Obligation:
IntTrs with 6 rules
Start term: log_ConstantStackPush_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
log_ConstantStackPush_2(i1, env, static) -{19,19}> log_LE_846(i1, i1, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 0 && 0 <= static''' && 0 <= 2 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= 1 && 0 <= static'1 && 0 < 2 && 0 >= 0
log_LE_846(i146, i385, iconst_1, i381, env, static) -{0,0}> log_LE_853(i146, i385, iconst_1, i381, env, static) :|: i385 <= 1 && 0 <= i381 && iconst_1 = 1
log_LE_846(i146, i386, 1, i381, env, static) -{14,14}> half_Load_1046(i388', 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2
half_Load_1046(i466, i467, i146, i381, env, static) -{2,2}> half_LE_1055(i466, 1, i467, i146, i381, env, static) :|: 0 <= i381 && 1 <= i467 && 0 <= i466
half_LE_1055(i480, 1, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i482', i488', i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480
half_LE_1055(i479, 1, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i485', env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479
(33) MovedArithmeticToConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Moved arithmethic from lhss to constraints.
log_LE_846(i146, i386, 1, i381, env, static) -{14,14}> half_Load_1046(i388', 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2
was transformed to
log_LE_846(i146, i386, x, i381, env, static) -{14,14}> half_Load_1046(i388', 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2 && x = 1
half_LE_1055(i480, 1, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i482', i488', i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480
was transformed to
half_LE_1055(i480, x, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i482', i488', i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480 && x = 1
half_LE_1055(i479, 1, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i485', env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479
was transformed to
half_LE_1055(i479, x, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i485', env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479 && x = 1
(34) Obligation:
IntTrs with 6 rules
Start term: log_ConstantStackPush_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
half_Load_1046(i466, i467, i146, i381, env, static) -{2,2}> half_LE_1055(i466, 1, i467, i146, i381, env, static) :|: 0 <= i381 && 1 <= i467 && 0 <= i466
log_LE_846(i146, i386, x, i381, env, static) -{14,14}> half_Load_1046(i388', 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2 && x = 1
log_ConstantStackPush_2(i1, env, static) -{19,19}> log_LE_846(i1, i1, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 0 && 0 <= static''' && 0 <= 2 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= 1 && 0 <= static'1 && 0 < 2 && 0 >= 0
half_LE_1055(i480, x, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i482', i488', i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480 && x = 1
log_LE_846(i146, i385, iconst_1, i381, env, static) -{0,0}> log_LE_853(i146, i385, iconst_1, i381, env, static) :|: i385 <= 1 && 0 <= i381 && iconst_1 = 1
half_LE_1055(i479, x, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i485', env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479 && x = 1
(35) MovedArithmeticFromConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Moved arithmethic from constraints to rhss.
half_LE_1055(i479, x, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i485', env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479 && x = 1
was transformed to
half_LE_1055(i479, x, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i381 + 1, env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479 && x = 1
log_LE_846(i146, i385, iconst_1, i381, env, static) -{0,0}> log_LE_853(i146, i385, iconst_1, i381, env, static) :|: i385 <= 1 && 0 <= i381 && iconst_1 = 1
was transformed to
log_LE_846(i146, i385, iconst_1, i381, env, static) -{0,0}> log_LE_853(i146, i385, 1, i381, env, static) :|: i385 <= 1 && 0 <= i381 && iconst_1 = 1
half_LE_1055(i480, x, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i482', i488', i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480 && x = 1
was transformed to
half_LE_1055(i480, x, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i480 - 2, i467 + 1, i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480 && x = 1
log_LE_846(i146, i386, x, i381, env, static) -{14,14}> half_Load_1046(i388', 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2 && x = 1
was transformed to
log_LE_846(i146, i386, x, i381, env, static) -{14,14}> half_Load_1046(i386 - 2, 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2 && x = 1
(36) Obligation:
IntTrs with 6 rules
Start term: log_ConstantStackPush_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
half_Load_1046(i466, i467, i146, i381, env, static) -{2,2}> half_LE_1055(i466, 1, i467, i146, i381, env, static) :|: 0 <= i381 && 1 <= i467 && 0 <= i466
log_ConstantStackPush_2(i1, env, static) -{19,19}> log_LE_846(i1, i1, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 0 && 0 <= static''' && 0 <= 2 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= 1 && 0 <= static'1 && 0 < 2 && 0 >= 0
half_LE_1055(i479, x, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i381 + 1, env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479 && x = 1
log_LE_846(i146, i385, iconst_1, i381, env, static) -{0,0}> log_LE_853(i146, i385, 1, i381, env, static) :|: i385 <= 1 && 0 <= i381 && iconst_1 = 1
half_LE_1055(i480, x, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i480 - 2, i467 + 1, i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480 && x = 1
log_LE_846(i146, i386, x, i381, env, static) -{14,14}> half_Load_1046(i386 - 2, 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2 && x = 1
(37) ExpressionSimplificationProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Simplified expressions.
log_ConstantStackPush_2(i1, env, static) -{19,19}> log_LE_846(i1, i1, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 0 && 0 <= static''' && 0 <= 2 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= 1 && 0 <= static'1 && 0 < 2 && 0 >= 0
was transformed to
log_ConstantStackPush_2(i1, env, static) -{19,19}> log_LE_846(i1, i1, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'1
log_LE_846(i146, i386, x, i381, env, static) -{14,14}> half_Load_1046(i386 - 2, 1, i146, i381, env, static) :|: 1 < i386 && 1 <= 1 && 2 <= i386 && 1 <= 3 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && 1 <= 2 && x = 1
was transformed to
log_LE_846(i146, i386, x, i381, env, static) -{14,14}> half_Load_1046(i386 - 2, 1, i146, i381, env, static) :|: 1 < i386 && 2 <= i386 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && x = 1
(38) Obligation:
IntTrs with 6 rules
Start term: log_ConstantStackPush_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
half_Load_1046(i466, i467, i146, i381, env, static) -{2,2}> half_LE_1055(i466, 1, i467, i146, i381, env, static) :|: 0 <= i381 && 1 <= i467 && 0 <= i466
half_LE_1055(i479, x, i467, i146, i381, env, static) -{8,8}> log_LE_846(i146, i467, 1, i381 + 1, env, static) :|: i381 + 1 = i485' && 0 <= i485' && i479 <= 1 && 1 <= i485' && 1 <= i467 && 0 <= i381 && 0 <= i479 && x = 1
half_LE_1055(i480, x, i467, i146, i381, env, static) -{7,7}> half_Load_1046(i480 - 2, i467 + 1, i146, i381, env, static) :|: 2 <= i480 && 2 <= i488' && 0 <= i480 && 1 <= i488' && i467 + 1 = i488' && 0 <= i482' && 0 <= i381 && i480 - 2 = i482' && 1 <= i467 && 1 < i480 && x = 1
log_ConstantStackPush_2(i1, env, static) -{19,19}> log_LE_846(i1, i1, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'1
log_LE_846(i146, i386, x, i381, env, static) -{14,14}> half_Load_1046(i386 - 2, 1, i146, i381, env, static) :|: 1 < i386 && 2 <= i386 && 0 <= i388' && 0 <= i381 && i386 - 2 = i388' && x = 1
log_LE_846(i146, i385, iconst_1, i381, env, static) -{0,0}> log_LE_853(i146, i385, 1, i381, env, static) :|: i385 <= 1 && 0 <= i381 && iconst_1 = 1