(0) Obligation:
Need to prove time_complexity of the following program:
public class LogAG{
// adapted from Arts&Giesl, 2001
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-2)+1;
res++;
}
return res;
}
}
(1) JBCToGraph (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Constructed TerminationGraph.
(2) Obligation:
Termination Graph based on JBC Program:
LogAG.log(I)I: Graph of 65 nodes with 1 SCC.
(3) TerminationGraphToComplexityProof (BOTH CONCRETE BOUNDS(ID, ADD(3)) transformation)
Extracted set of 62 edges for the analysis of TIME complexity. Dropped leaves.
(4) Obligation:
Set of 62 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 62 jbc graph edges to a weighted ITS with 62 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 62 rules
Start term: log_ConstantStackPush_2(#0, env, static)
Considered paths: all paths from start
Rules:
log_ConstantStackPush_2(i2, env, static) -{0,0}> log_ConstantStackPush_4(i2, env, static) :|: 0 >= 0
log_ConstantStackPush_4(i2, env, static) -{0,0}> langle_clinit_rangle_ConstantStackPush_6(i2, env, static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(i2, env, static) -{1,1}> langle_clinit_rangle_ArrayCreate_21(iconst_0, i2, env, static) :|: iconst_0 = 0
langle_clinit_rangle_ArrayCreate_21(iconst_0, i2, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_26(a2, i2, iconst_0, env, static) :|: a2 = 2 && iconst_0 = 0 && 0 < a2
langle_clinit_rangle_FieldAccess_26(a2, i2, iconst_0, env, static) -{1,1}> langle_clinit_rangle_New_29(i2, env, static') :|: 0 <= a2 && iconst_0 = 0 && static' <= static + a2 && 0 <= static && 0 < a2
langle_clinit_rangle_New_29(i2, env, static) -{0,0}> langle_clinit_rangle_New_31(i2, env, static) :|: 0 >= 0
langle_clinit_rangle_New_31(i2, env, static) -{0,0}> langle_clinit_rangle_New_33(i2, env, static) :|: 0 <= static
langle_clinit_rangle_New_33(i2, env, static) -{1,1}> langle_clinit_rangle_Duplicate_35(o2, i2, env, static) :|: 0 < o2 && o2 = 1
langle_clinit_rangle_Duplicate_35(o2, i2, env, static) -{1,1}> langle_clinit_rangle_ConstantStackPush_38(o2, i2, env, static) :|: 0 < o2
langle_clinit_rangle_ConstantStackPush_38(o2, i2, env, static) -{1,1}> langle_clinit_rangle_InvokeMethod_39(o2, NULL, i2, env, static) :|: NULL = 0 && 0 < o2
langle_clinit_rangle_InvokeMethod_39(o2, NULL, i2, env, static) -{1,1}> langle_init_rangle_Load_40(o2, i2, env, static) :|: NULL = 0 && 0 < o2
langle_init_rangle_Load_40(o2, i2, env, static) -{1,1}> langle_init_rangle_InvokeMethod_41(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_41(o2, i2, env, static) -{1,1}> langle_init_rangle_Load_42(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Load_42(o2, i2, env, static) -{1,1}> langle_init_rangle_InvokeMethod_43(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_43(o2, i2, env, static) -{1,1}> langle_init_rangle_Return_44(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Return_44(o2, i2, env, static) -{1,1}> langle_init_rangle_Return_45(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Return_45(o2, i2, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_46(o2, i2, env, static) :|: 0 < o2
langle_clinit_rangle_FieldAccess_46(o2, i2, env, static) -{1,1}> langle_clinit_rangle_Return_47(i2, env, static') :|: 0 < o2 && 0 <= o2 && 0 <= static && static' <= static + o2
langle_clinit_rangle_Return_47(i2, env, static) -{1,1}> log_ConstantStackPush_48(i2, env, static) :|: 0 >= 0
log_ConstantStackPush_48(i2, env, static) -{0,0}> log_ConstantStackPush_49(i2, env, static) :|: 0 >= 0
log_ConstantStackPush_49(i2, env, static) -{0,0}> log_ConstantStackPush_50(i2, env, static) :|: 0 <= static
log_ConstantStackPush_50(i2, env, static) -{0,0}> log_ConstantStackPush_51(i2, env, static) :|: 0 >= 0
log_ConstantStackPush_51(i2, env, static) -{0,0}> log_ConstantStackPush_52(i2, env, static) :|: 0 >= 0
log_ConstantStackPush_52(i2, env, static) -{1,1}> log_Store_53(i2, iconst_0, env, static) :|: iconst_0 = 0
log_Store_53(i2, iconst_0, env, static) -{1,1}> log_Load_54(i2, iconst_0, env, static) :|: iconst_0 = 0
log_Load_54(i2, iconst_0, env, static) -{1,1}> log_ConstantStackPush_55(i2, iconst_0, env, static) :|: iconst_0 = 0
log_ConstantStackPush_55(i2, iconst_0, env, static) -{1,1}> log_LE_58(i2, iconst_1, iconst_0, env, static) :|: iconst_1 = 1 && iconst_0 = 0
log_LE_58(i2, iconst_1, iconst_0, env, static) -{0,0}> log_LE_153(i2, i2, iconst_1, iconst_0, env, static) :|: 0 <= iconst_0 && iconst_0 <= 1 && iconst_1 = 1 && iconst_0 = 0
log_LE_153(i42, i43, iconst_1, i44, env, static) -{0,0}> log_LE_226(i42, i43, iconst_1, i44, env, static) :|: i44 <= 2 && iconst_1 = 1 && i44 <= 1 && 0 <= i44
log_LE_226(i42, i79, iconst_1, i80, env, static) -{0,0}> log_LE_317(i42, i79, iconst_1, i80, env, static) :|: 0 <= i80 && iconst_1 = 1 && i80 <= 2
log_LE_317(i42, i118, iconst_1, i112, env, static) -{0,0}> log_LE_325(i42, i118, iconst_1, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_1 = 1
log_LE_325(i42, i118, iconst_1, i112, env, static) -{1,1}> log_Load_340(i42, i118, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_1 = 1 && iconst_1 < i118
log_Load_340(i42, i118, i112, env, static) -{1,1}> log_ConstantStackPush_342(i42, i118, i112, env, static) :|: 0 <= i112 && 2 <= i118
log_ConstantStackPush_342(i42, i118, i112, env, static) -{1,1}> log_IntArithmetic_345(i42, i118, iconst_2, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_2 = 2
log_IntArithmetic_345(i42, i118, iconst_2, i112, env, static) -{1,1}> log_InvokeMethod_347(i42, i121, i112, env, static) :|: 0 <= i112 && i118 - iconst_2 = i121 && 2 <= i118 && 0 <= i121 && iconst_2 = 2
log_InvokeMethod_347(i42, i121, i112, env, static) -{1,1}> half_ConstantStackPush_348(i121, i42, i112, env, static) :|: 0 <= i112 && 0 <= i121
half_ConstantStackPush_348(i121, i42, i112, env, static) -{1,1}> half_Store_349(iconst_0, i121, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
half_Store_349(iconst_0, i121, i42, i112, env, static) -{1,1}> half_Load_350(i121, iconst_0, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
half_Load_350(i121, iconst_0, i42, i112, env, static) -{0,0}> half_Load_644(i121, iconst_0, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
half_Load_644(i270, i271, i42, i112, env, static) -{1,1}> half_ConstantStackPush_648(i270, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
half_ConstantStackPush_648(i270, i271, i42, i112, env, static) -{1,1}> half_LE_655(i270, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270 && iconst_1 = 1
half_LE_655(i279, iconst_1, i271, i42, i112, env, static) -{0,0}> half_LE_656(i279, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && i279 <= 1 && 0 <= i279 && iconst_1 = 1
half_LE_655(i280, iconst_1, i271, i42, i112, env, static) -{0,0}> half_LE_657(i280, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i280 && iconst_1 = 1 && 2 <= i280
half_LE_656(i279, iconst_1, i271, i42, i112, env, static) -{1,1}> half_Load_659(i271, i42, i112, env, static) :|: 0 <= i112 && i279 <= 1 && 0 <= i279 && i279 <= iconst_1 && iconst_1 = 1
half_LE_657(i280, iconst_1, i271, i42, i112, env, static) -{1,1}> half_Load_660(i280, i271, i42, i112, env, static) :|: 0 <= i112 && iconst_1 < i280 && iconst_1 = 1 && 2 <= i280
half_Load_659(i271, i42, i112, env, static) -{1,1}> half_Return_661(i271, i42, i112, env, static) :|: 0 <= i112
half_Load_660(i280, i271, i42, i112, env, static) -{1,1}> half_ConstantStackPush_662(i280, i271, i42, i112, env, static) :|: 0 <= i112 && 2 <= i280
half_Return_661(i271, i42, i112, env, static) -{1,1}> log_ConstantStackPush_664(i42, i271, i112, env, static) :|: 0 <= i112
half_ConstantStackPush_662(i280, i271, i42, i112, env, static) -{1,1}> half_IntArithmetic_666(i280, iconst_2, i271, i42, i112, env, static) :|: 0 <= i112 && 2 <= i280 && iconst_2 = 2
log_ConstantStackPush_664(i42, i271, i112, env, static) -{1,1}> log_IntArithmetic_668(i42, i271, iconst_1, i112, env, static) :|: 0 <= i112 && iconst_1 = 1
half_IntArithmetic_666(i280, iconst_2, i271, i42, i112, env, static) -{1,1}> half_Store_670(i281, i271, i42, i112, env, static) :|: i280 - iconst_2 = i281 && 0 <= i112 && 0 <= i281 && 2 <= i280 && iconst_2 = 2
log_IntArithmetic_668(i42, i271, iconst_1, i112, env, static) -{1,1}> log_Store_673(i42, i282, i112, env, static) :|: i271 + iconst_1 = i282 && 0 <= i112 && iconst_1 = 1
half_Store_670(i281, i271, i42, i112, env, static) -{1,1}> half_Inc_674(i281, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
log_Store_673(i42, i282, i112, env, static) -{1,1}> log_Inc_676(i42, i282, i112, env, static) :|: 0 <= i112
half_Inc_674(i281, i271, i42, i112, env, static) -{1,1}> half_JMP_678(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281 && i271 + 1 = i283
log_Inc_676(i42, i282, i112, env, static) -{1,1}> log_JMP_679(i42, i282, i284, env, static) :|: 0 <= i112 && i112 + 1 = i284 && 1 <= i284
half_JMP_678(i281, i283, i42, i112, env, static) -{1,1}> half_Load_680(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
log_JMP_679(i42, i282, i284, env, static) -{1,1}> log_Load_684(i42, i282, i284, env, static) :|: 1 <= i284
half_Load_680(i281, i283, i42, i112, env, static) -{0,0}> half_Load_644(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
log_Load_684(i42, i282, i284, env, static) -{1,1}> log_ConstantStackPush_685(i42, i282, i284, env, static) :|: 1 <= i284
log_ConstantStackPush_685(i42, i282, i284, env, static) -{1,1}> log_LE_686(i42, i282, iconst_1, i284, env, static) :|: iconst_1 = 1 && 1 <= i284
log_LE_686(i42, i282, iconst_1, i284, env, static) -{0,0}> log_LE_317(i42, i282, iconst_1, i284, env, static) :|: 0 <= i284 && iconst_1 = 1 && 1 <= i284
(7) StraightLineCodeCompressionProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
obtained
log_ConstantStackPush_2(
i2,
env,
static) -{19,19}>
log_LE_317(
i2,
i2,
1,
0,
env,
static'1) :|:
static'1 <=
static''' +
1 &&
0 <=
2 &&
0 <=
static''' &&
0 <=
0 &&
static''' <=
static +
2 &&
0 <
1 &&
0 <=
static &&
0 <=
static'1 &&
0 <=
1 && 0 >= 0 &&
0 <
2by chaining
log_ConstantStackPush_2(
i2,
env,
static) -{0,0}>
log_ConstantStackPush_4(
i2,
env,
static) :|: 0 >= 0
log_ConstantStackPush_4(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_ConstantStackPush_6(
i2,
env,
static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(
i2,
env,
static) -{1,1}>
langle_clinit_rangle_ArrayCreate_21(
iconst_0,
i2,
env,
static) :|:
iconst_0 =
0langle_clinit_rangle_ArrayCreate_21(
iconst_0,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_26(
a2,
i2,
iconst_0,
env,
static) :|:
a2 =
2 &&
iconst_0 =
0 &&
0 <
a2langle_clinit_rangle_FieldAccess_26(
a2,
i2,
iconst_0,
env,
static) -{1,1}>
langle_clinit_rangle_New_29(
i2,
env,
static') :|:
0 <=
a2 &&
iconst_0 =
0 &&
static' <=
static +
a2 &&
0 <=
static &&
0 <
a2langle_clinit_rangle_New_29(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_New_31(
i2,
env,
static) :|: 0 >= 0
langle_clinit_rangle_New_31(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_New_33(
i2,
env,
static) :|:
0 <=
staticlangle_clinit_rangle_New_33(
i2,
env,
static) -{1,1}>
langle_clinit_rangle_Duplicate_35(
o2,
i2,
env,
static) :|:
0 <
o2 &&
o2 =
1langle_clinit_rangle_Duplicate_35(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_ConstantStackPush_38(
o2,
i2,
env,
static) :|:
0 <
o2langle_clinit_rangle_ConstantStackPush_38(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_InvokeMethod_39(
o2,
NULL,
i2,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_clinit_rangle_InvokeMethod_39(
o2,
NULL,
i2,
env,
static) -{1,1}>
langle_init_rangle_Load_40(
o2,
i2,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_init_rangle_Load_40(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_41(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_41(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Load_42(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Load_42(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_43(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_43(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Return_44(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Return_44(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Return_45(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Return_45(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_46(
o2,
i2,
env,
static) :|:
0 <
o2langle_clinit_rangle_FieldAccess_46(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_Return_47(
i2,
env,
static') :|:
0 <
o2 &&
0 <=
o2 &&
0 <=
static &&
static' <=
static +
o2langle_clinit_rangle_Return_47(
i2,
env,
static) -{1,1}>
log_ConstantStackPush_48(
i2,
env,
static) :|: 0 >= 0
log_ConstantStackPush_48(
i2,
env,
static) -{0,0}>
log_ConstantStackPush_49(
i2,
env,
static) :|: 0 >= 0
log_ConstantStackPush_49(
i2,
env,
static) -{0,0}>
log_ConstantStackPush_50(
i2,
env,
static) :|:
0 <=
staticlog_ConstantStackPush_50(
i2,
env,
static) -{0,0}>
log_ConstantStackPush_51(
i2,
env,
static) :|: 0 >= 0
log_ConstantStackPush_51(
i2,
env,
static) -{0,0}>
log_ConstantStackPush_52(
i2,
env,
static) :|: 0 >= 0
log_ConstantStackPush_52(
i2,
env,
static) -{1,1}>
log_Store_53(
i2,
iconst_0,
env,
static) :|:
iconst_0 =
0log_Store_53(
i2,
iconst_0,
env,
static) -{1,1}>
log_Load_54(
i2,
iconst_0,
env,
static) :|:
iconst_0 =
0log_Load_54(
i2,
iconst_0,
env,
static) -{1,1}>
log_ConstantStackPush_55(
i2,
iconst_0,
env,
static) :|:
iconst_0 =
0log_ConstantStackPush_55(
i2,
iconst_0,
env,
static) -{1,1}>
log_LE_58(
i2,
iconst_1,
iconst_0,
env,
static) :|:
iconst_1 =
1 &&
iconst_0 =
0log_LE_58(
i2,
iconst_1,
iconst_0,
env,
static) -{0,0}>
log_LE_153(
i2,
i2,
iconst_1,
iconst_0,
env,
static) :|:
0 <=
iconst_0 &&
iconst_0 <=
1 &&
iconst_1 =
1 &&
iconst_0 =
0log_LE_153(
i42,
i43,
iconst_1,
i44,
env,
static) -{0,0}>
log_LE_226(
i42,
i43,
iconst_1,
i44,
env,
static) :|:
i44 <=
2 &&
iconst_1 =
1 &&
i44 <=
1 &&
0 <=
i44log_LE_226(
i42,
i79,
iconst_1,
i80,
env,
static) -{0,0}>
log_LE_317(
i42,
i79,
iconst_1,
i80,
env,
static) :|:
0 <=
i80 &&
iconst_1 =
1 &&
i80 <=
2obtained
log_LE_317(i42, i118, 1, i112, env, static) -{7,7}> half_Load_644(i121', 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121'
by chaining
log_LE_317(i42, i118, iconst_1, i112, env, static) -{0,0}> log_LE_325(i42, i118, iconst_1, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_1 = 1
log_LE_325(i42, i118, iconst_1, i112, env, static) -{1,1}> log_Load_340(i42, i118, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_1 = 1 && iconst_1 < i118
log_Load_340(i42, i118, i112, env, static) -{1,1}> log_ConstantStackPush_342(i42, i118, i112, env, static) :|: 0 <= i112 && 2 <= i118
log_ConstantStackPush_342(i42, i118, i112, env, static) -{1,1}> log_IntArithmetic_345(i42, i118, iconst_2, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_2 = 2
log_IntArithmetic_345(i42, i118, iconst_2, i112, env, static) -{1,1}> log_InvokeMethod_347(i42, i121, i112, env, static) :|: 0 <= i112 && i118 - iconst_2 = i121 && 2 <= i118 && 0 <= i121 && iconst_2 = 2
log_InvokeMethod_347(i42, i121, i112, env, static) -{1,1}> half_ConstantStackPush_348(i121, i42, i112, env, static) :|: 0 <= i112 && 0 <= i121
half_ConstantStackPush_348(i121, i42, i112, env, static) -{1,1}> half_Store_349(iconst_0, i121, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
half_Store_349(iconst_0, i121, i42, i112, env, static) -{1,1}> half_Load_350(i121, iconst_0, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
half_Load_350(i121, iconst_0, i42, i112, env, static) -{0,0}> half_Load_644(i121, iconst_0, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
obtained
half_Load_644(i270, i271, i42, i112, env, static) -{2,2}> half_LE_655(i270, 1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
by chaining
half_Load_644(i270, i271, i42, i112, env, static) -{1,1}> half_ConstantStackPush_648(i270, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
half_ConstantStackPush_648(i270, i271, i42, i112, env, static) -{1,1}> half_LE_655(i270, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270 && iconst_1 = 1
obtained
half_LE_655(i280, 1, i271, i42, i112, env, static) -{7,7}> half_Load_644(i281', i283', i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281'
by chaining
half_LE_655(i280, iconst_1, i271, i42, i112, env, static) -{0,0}> half_LE_657(i280, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i280 && iconst_1 = 1 && 2 <= i280
half_LE_657(i280, iconst_1, i271, i42, i112, env, static) -{1,1}> half_Load_660(i280, i271, i42, i112, env, static) :|: 0 <= i112 && iconst_1 < i280 && iconst_1 = 1 && 2 <= i280
half_Load_660(i280, i271, i42, i112, env, static) -{1,1}> half_ConstantStackPush_662(i280, i271, i42, i112, env, static) :|: 0 <= i112 && 2 <= i280
half_ConstantStackPush_662(i280, i271, i42, i112, env, static) -{1,1}> half_IntArithmetic_666(i280, iconst_2, i271, i42, i112, env, static) :|: 0 <= i112 && 2 <= i280 && iconst_2 = 2
half_IntArithmetic_666(i280, iconst_2, i271, i42, i112, env, static) -{1,1}> half_Store_670(i281, i271, i42, i112, env, static) :|: i280 - iconst_2 = i281 && 0 <= i112 && 0 <= i281 && 2 <= i280 && iconst_2 = 2
half_Store_670(i281, i271, i42, i112, env, static) -{1,1}> half_Inc_674(i281, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
half_Inc_674(i281, i271, i42, i112, env, static) -{1,1}> half_JMP_678(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281 && i271 + 1 = i283
half_JMP_678(i281, i283, i42, i112, env, static) -{1,1}> half_Load_680(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
half_Load_680(i281, i283, i42, i112, env, static) -{0,0}> half_Load_644(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
obtained
half_LE_655(i279, 1, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i282', 1, i284', env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282'
by chaining
half_LE_655(i279, iconst_1, i271, i42, i112, env, static) -{0,0}> half_LE_656(i279, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && i279 <= 1 && 0 <= i279 && iconst_1 = 1
half_LE_656(i279, iconst_1, i271, i42, i112, env, static) -{1,1}> half_Load_659(i271, i42, i112, env, static) :|: 0 <= i112 && i279 <= 1 && 0 <= i279 && i279 <= iconst_1 && iconst_1 = 1
half_Load_659(i271, i42, i112, env, static) -{1,1}> half_Return_661(i271, i42, i112, env, static) :|: 0 <= i112
half_Return_661(i271, i42, i112, env, static) -{1,1}> log_ConstantStackPush_664(i42, i271, i112, env, static) :|: 0 <= i112
log_ConstantStackPush_664(i42, i271, i112, env, static) -{1,1}> log_IntArithmetic_668(i42, i271, iconst_1, i112, env, static) :|: 0 <= i112 && iconst_1 = 1
log_IntArithmetic_668(i42, i271, iconst_1, i112, env, static) -{1,1}> log_Store_673(i42, i282, i112, env, static) :|: i271 + iconst_1 = i282 && 0 <= i112 && iconst_1 = 1
log_Store_673(i42, i282, i112, env, static) -{1,1}> log_Inc_676(i42, i282, i112, env, static) :|: 0 <= i112
log_Inc_676(i42, i282, i112, env, static) -{1,1}> log_JMP_679(i42, i282, i284, env, static) :|: 0 <= i112 && i112 + 1 = i284 && 1 <= i284
log_JMP_679(i42, i282, i284, env, static) -{1,1}> log_Load_684(i42, i282, i284, env, static) :|: 1 <= i284
log_Load_684(i42, i282, i284, env, static) -{1,1}> log_ConstantStackPush_685(i42, i282, i284, env, static) :|: 1 <= i284
log_ConstantStackPush_685(i42, i282, i284, env, static) -{1,1}> log_LE_686(i42, i282, iconst_1, i284, env, static) :|: iconst_1 = 1 && 1 <= i284
log_LE_686(i42, i282, iconst_1, i284, env, static) -{0,0}> log_LE_317(i42, i282, iconst_1, i284, env, static) :|: 0 <= i284 && iconst_1 = 1 && 1 <= i284
(8) Obligation:
IntTrs with 5 rules
Start term: log_ConstantStackPush_2(#0, env, static)
Considered paths: all paths from start
Rules:
log_ConstantStackPush_2(i2, env, static) -{19,19}> log_LE_317(i2, i2, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && 0 <= 0 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= static'1 && 0 <= 1 && 0 >= 0 && 0 < 2
log_LE_317(i42, i118, 1, i112, env, static) -{7,7}> half_Load_644(i121', 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121'
half_Load_644(i270, i271, i42, i112, env, static) -{2,2}> half_LE_655(i270, 1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
half_LE_655(i280, 1, i271, i42, i112, env, static) -{7,7}> half_Load_644(i281', i283', i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281'
half_LE_655(i279, 1, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i282', 1, i284', env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282'
(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_317(x1, x2, x3, x4, x5, x6) → log_LE_317(x2, x4)
half_Load_644(x1, x2, x3, x4, x5, x6) → half_Load_644(x1, x2, x4)
half_LE_655(x1, x2, x3, x4, x5, x6, x7) → half_LE_655(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(i2, static) -{19,19}> log_LE_317(i2, 0) :|: static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && 0 <= 0 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= static'1 && 0 <= 1 && 0 >= 0 && 0 < 2
log_LE_317(i118, i112) -{7,7}> half_Load_644(i121', 0, i112) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121'
half_Load_644(i270, i271, i112) -{2,2}> half_LE_655(i270, i271, i112) :|: 0 <= i112 && 0 <= i270
half_LE_655(i280, i271, i112) -{7,7}> half_Load_644(i281', i283', i112) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281'
half_LE_655(i279, i271, i112) -{10,10}> log_LE_317(i282', i284') :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282'
(11) MovedArithmeticFromConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Moved arithmethic from constraints to rhss.
log_LE_317(i118, i112) -{7,7}> half_Load_644(i121', 0, i112) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121'
was transformed to
log_LE_317(i118, i112) -{7,7}> half_Load_644(i118 - 2, 0, i112) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121'
half_LE_655(i280, i271, i112) -{7,7}> half_Load_644(i281', i283', i112) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281'
was transformed to
half_LE_655(i280, i271, i112) -{7,7}> half_Load_644(i280 - 2, i271 + 1, i112) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281'
half_LE_655(i279, i271, i112) -{10,10}> log_LE_317(i282', i284') :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282'
was transformed to
half_LE_655(i279, i271, i112) -{10,10}> log_LE_317(i271 + 1, i112 + 1) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282'
(12) Obligation:
IntTrs with 5 rules
Start term: log_ConstantStackPush_2(#0, static)
Considered paths: all paths from start
Rules:
log_LE_317(i118, i112) -{7,7}> half_Load_644(i118 - 2, 0, i112) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121'
half_Load_644(i270, i271, i112) -{2,2}> half_LE_655(i270, i271, i112) :|: 0 <= i112 && 0 <= i270
half_LE_655(i280, i271, i112) -{7,7}> half_Load_644(i280 - 2, i271 + 1, i112) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281'
half_LE_655(i279, i271, i112) -{10,10}> log_LE_317(i271 + 1, i112 + 1) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282'
log_ConstantStackPush_2(i2, static) -{19,19}> log_LE_317(i2, 0) :|: static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && 0 <= 0 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= static'1 && 0 <= 1 && 0 >= 0 && 0 < 2
(13) ExpressionSimplificationProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Simplified expressions.
log_ConstantStackPush_2(i2, static) -{19,19}> log_LE_317(i2, 0) :|: static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && 0 <= 0 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= static'1 && 0 <= 1 && 0 >= 0 && 0 < 2
was transformed to
log_ConstantStackPush_2(i2, static) -{19,19}> log_LE_317(i2, 0) :|: static'1 <= static''' + 1 && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'1
(14) Obligation:
IntTrs with 5 rules
Start term: log_ConstantStackPush_2(#0, static)
Considered paths: all paths from start
Rules:
half_Load_644(i270, i271, i112) -{2,2}> half_LE_655(i270, i271, i112) :|: 0 <= i112 && 0 <= i270
half_LE_655(i279, i271, i112) -{10,10}> log_LE_317(i271 + 1, i112 + 1) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282'
log_LE_317(i118, i112) -{7,7}> half_Load_644(i118 - 2, 0, i112) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121'
log_ConstantStackPush_2(i2, static) -{19,19}> log_LE_317(i2, 0) :|: static'1 <= static''' + 1 && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'1
half_LE_655(i280, i271, i112) -{7,7}> half_Load_644(i280 - 2, i271 + 1, i112) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281'
(15) TerminationGraphToComplexityProof (BOTH CONCRETE BOUNDS(ID, ADD(3)) transformation)
Extracted set of 63 edges for the analysis of TIME complexity. Kept leaves.
(16) Obligation:
Set of 63 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
(17) JBCGraphEdgesToCpxIntTrsProof (CONCRETE UPPER BOUND(ID) transformation)
Transformed 63 jbc graph edges to a weighted ITS with 63 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.
(18) Obligation:
IntTrs with 63 rules
Start term: log_ConstantStackPush_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
log_ConstantStackPush_2(i2, env, static) -{0,0}> log_ConstantStackPush_4(i2, env, static) :|: 0 >= 0
log_ConstantStackPush_4(i2, env, static) -{0,0}> langle_clinit_rangle_ConstantStackPush_6(i2, env, static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(i2, env, static) -{1,1}> langle_clinit_rangle_ArrayCreate_21(iconst_0, i2, env, static) :|: iconst_0 = 0
langle_clinit_rangle_ArrayCreate_21(iconst_0, i2, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_26(a2, i2, iconst_0, env, static) :|: a2 = 2 && iconst_0 = 0 && 0 < a2
langle_clinit_rangle_FieldAccess_26(a2, i2, iconst_0, env, static) -{1,1}> langle_clinit_rangle_New_29(i2, env, static') :|: 0 <= a2 && iconst_0 = 0 && static' <= static + a2 && 0 <= static && 0 < a2
langle_clinit_rangle_New_29(i2, env, static) -{0,0}> langle_clinit_rangle_New_31(i2, env, static) :|: 0 >= 0
langle_clinit_rangle_New_31(i2, env, static) -{0,0}> langle_clinit_rangle_New_33(i2, env, static) :|: 0 <= static
langle_clinit_rangle_New_33(i2, env, static) -{1,1}> langle_clinit_rangle_Duplicate_35(o2, i2, env, static) :|: 0 < o2 && o2 = 1
langle_clinit_rangle_Duplicate_35(o2, i2, env, static) -{1,1}> langle_clinit_rangle_ConstantStackPush_38(o2, i2, env, static) :|: 0 < o2
langle_clinit_rangle_ConstantStackPush_38(o2, i2, env, static) -{1,1}> langle_clinit_rangle_InvokeMethod_39(o2, NULL, i2, env, static) :|: NULL = 0 && 0 < o2
langle_clinit_rangle_InvokeMethod_39(o2, NULL, i2, env, static) -{1,1}> langle_init_rangle_Load_40(o2, i2, env, static) :|: NULL = 0 && 0 < o2
langle_init_rangle_Load_40(o2, i2, env, static) -{1,1}> langle_init_rangle_InvokeMethod_41(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_41(o2, i2, env, static) -{1,1}> langle_init_rangle_Load_42(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Load_42(o2, i2, env, static) -{1,1}> langle_init_rangle_InvokeMethod_43(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_43(o2, i2, env, static) -{1,1}> langle_init_rangle_Return_44(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Return_44(o2, i2, env, static) -{1,1}> langle_init_rangle_Return_45(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Return_45(o2, i2, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_46(o2, i2, env, static) :|: 0 < o2
langle_clinit_rangle_FieldAccess_46(o2, i2, env, static) -{1,1}> langle_clinit_rangle_Return_47(i2, env, static') :|: 0 < o2 && 0 <= o2 && 0 <= static && static' <= static + o2
langle_clinit_rangle_Return_47(i2, env, static) -{1,1}> log_ConstantStackPush_48(i2, env, static) :|: 0 >= 0
log_ConstantStackPush_48(i2, env, static) -{0,0}> log_ConstantStackPush_49(i2, env, static) :|: 0 >= 0
log_ConstantStackPush_49(i2, env, static) -{0,0}> log_ConstantStackPush_50(i2, env, static) :|: 0 <= static
log_ConstantStackPush_50(i2, env, static) -{0,0}> log_ConstantStackPush_51(i2, env, static) :|: 0 >= 0
log_ConstantStackPush_51(i2, env, static) -{0,0}> log_ConstantStackPush_52(i2, env, static) :|: 0 >= 0
log_ConstantStackPush_52(i2, env, static) -{1,1}> log_Store_53(i2, iconst_0, env, static) :|: iconst_0 = 0
log_Store_53(i2, iconst_0, env, static) -{1,1}> log_Load_54(i2, iconst_0, env, static) :|: iconst_0 = 0
log_Load_54(i2, iconst_0, env, static) -{1,1}> log_ConstantStackPush_55(i2, iconst_0, env, static) :|: iconst_0 = 0
log_ConstantStackPush_55(i2, iconst_0, env, static) -{1,1}> log_LE_58(i2, iconst_1, iconst_0, env, static) :|: iconst_1 = 1 && iconst_0 = 0
log_LE_58(i2, iconst_1, iconst_0, env, static) -{0,0}> log_LE_153(i2, i2, iconst_1, iconst_0, env, static) :|: 0 <= iconst_0 && iconst_0 <= 1 && iconst_1 = 1 && iconst_0 = 0
log_LE_153(i42, i43, iconst_1, i44, env, static) -{0,0}> log_LE_226(i42, i43, iconst_1, i44, env, static) :|: i44 <= 2 && iconst_1 = 1 && i44 <= 1 && 0 <= i44
log_LE_226(i42, i79, iconst_1, i80, env, static) -{0,0}> log_LE_317(i42, i79, iconst_1, i80, env, static) :|: 0 <= i80 && iconst_1 = 1 && i80 <= 2
log_LE_317(i42, i117, iconst_1, i112, env, static) -{0,0}> log_LE_324(i42, i117, iconst_1, i112, env, static) :|: 0 <= i112 && i117 <= 1 && iconst_1 = 1
log_LE_317(i42, i118, iconst_1, i112, env, static) -{0,0}> log_LE_325(i42, i118, iconst_1, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_1 = 1
log_LE_325(i42, i118, iconst_1, i112, env, static) -{1,1}> log_Load_340(i42, i118, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_1 = 1 && iconst_1 < i118
log_Load_340(i42, i118, i112, env, static) -{1,1}> log_ConstantStackPush_342(i42, i118, i112, env, static) :|: 0 <= i112 && 2 <= i118
log_ConstantStackPush_342(i42, i118, i112, env, static) -{1,1}> log_IntArithmetic_345(i42, i118, iconst_2, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_2 = 2
log_IntArithmetic_345(i42, i118, iconst_2, i112, env, static) -{1,1}> log_InvokeMethod_347(i42, i121, i112, env, static) :|: 0 <= i112 && i118 - iconst_2 = i121 && 2 <= i118 && 0 <= i121 && iconst_2 = 2
log_InvokeMethod_347(i42, i121, i112, env, static) -{1,1}> half_ConstantStackPush_348(i121, i42, i112, env, static) :|: 0 <= i112 && 0 <= i121
half_ConstantStackPush_348(i121, i42, i112, env, static) -{1,1}> half_Store_349(iconst_0, i121, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
half_Store_349(iconst_0, i121, i42, i112, env, static) -{1,1}> half_Load_350(i121, iconst_0, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
half_Load_350(i121, iconst_0, i42, i112, env, static) -{0,0}> half_Load_644(i121, iconst_0, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
half_Load_644(i270, i271, i42, i112, env, static) -{1,1}> half_ConstantStackPush_648(i270, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
half_ConstantStackPush_648(i270, i271, i42, i112, env, static) -{1,1}> half_LE_655(i270, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270 && iconst_1 = 1
half_LE_655(i279, iconst_1, i271, i42, i112, env, static) -{0,0}> half_LE_656(i279, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && i279 <= 1 && 0 <= i279 && iconst_1 = 1
half_LE_655(i280, iconst_1, i271, i42, i112, env, static) -{0,0}> half_LE_657(i280, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i280 && iconst_1 = 1 && 2 <= i280
half_LE_656(i279, iconst_1, i271, i42, i112, env, static) -{1,1}> half_Load_659(i271, i42, i112, env, static) :|: 0 <= i112 && i279 <= 1 && 0 <= i279 && i279 <= iconst_1 && iconst_1 = 1
half_LE_657(i280, iconst_1, i271, i42, i112, env, static) -{1,1}> half_Load_660(i280, i271, i42, i112, env, static) :|: 0 <= i112 && iconst_1 < i280 && iconst_1 = 1 && 2 <= i280
half_Load_659(i271, i42, i112, env, static) -{1,1}> half_Return_661(i271, i42, i112, env, static) :|: 0 <= i112
half_Load_660(i280, i271, i42, i112, env, static) -{1,1}> half_ConstantStackPush_662(i280, i271, i42, i112, env, static) :|: 0 <= i112 && 2 <= i280
half_Return_661(i271, i42, i112, env, static) -{1,1}> log_ConstantStackPush_664(i42, i271, i112, env, static) :|: 0 <= i112
half_ConstantStackPush_662(i280, i271, i42, i112, env, static) -{1,1}> half_IntArithmetic_666(i280, iconst_2, i271, i42, i112, env, static) :|: 0 <= i112 && 2 <= i280 && iconst_2 = 2
log_ConstantStackPush_664(i42, i271, i112, env, static) -{1,1}> log_IntArithmetic_668(i42, i271, iconst_1, i112, env, static) :|: 0 <= i112 && iconst_1 = 1
half_IntArithmetic_666(i280, iconst_2, i271, i42, i112, env, static) -{1,1}> half_Store_670(i281, i271, i42, i112, env, static) :|: i280 - iconst_2 = i281 && 0 <= i112 && 0 <= i281 && 2 <= i280 && iconst_2 = 2
log_IntArithmetic_668(i42, i271, iconst_1, i112, env, static) -{1,1}> log_Store_673(i42, i282, i112, env, static) :|: i271 + iconst_1 = i282 && 0 <= i112 && iconst_1 = 1
half_Store_670(i281, i271, i42, i112, env, static) -{1,1}> half_Inc_674(i281, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
log_Store_673(i42, i282, i112, env, static) -{1,1}> log_Inc_676(i42, i282, i112, env, static) :|: 0 <= i112
half_Inc_674(i281, i271, i42, i112, env, static) -{1,1}> half_JMP_678(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281 && i271 + 1 = i283
log_Inc_676(i42, i282, i112, env, static) -{1,1}> log_JMP_679(i42, i282, i284, env, static) :|: 0 <= i112 && i112 + 1 = i284 && 1 <= i284
half_JMP_678(i281, i283, i42, i112, env, static) -{1,1}> half_Load_680(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
log_JMP_679(i42, i282, i284, env, static) -{1,1}> log_Load_684(i42, i282, i284, env, static) :|: 1 <= i284
half_Load_680(i281, i283, i42, i112, env, static) -{0,0}> half_Load_644(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
log_Load_684(i42, i282, i284, env, static) -{1,1}> log_ConstantStackPush_685(i42, i282, i284, env, static) :|: 1 <= i284
log_ConstantStackPush_685(i42, i282, i284, env, static) -{1,1}> log_LE_686(i42, i282, iconst_1, i284, env, static) :|: iconst_1 = 1 && 1 <= i284
log_LE_686(i42, i282, iconst_1, i284, env, static) -{0,0}> log_LE_317(i42, i282, iconst_1, i284, env, static) :|: 0 <= i284 && iconst_1 = 1 && 1 <= i284
(19) StraightLineCodeCompressionProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
obtained
log_ConstantStackPush_2(
i2,
env,
static) -{19,19}>
log_LE_317(
i2,
i2,
1,
0,
env,
static'1) :|:
static'1 <=
static''' +
1 &&
0 <=
2 &&
0 <=
static''' &&
0 <=
0 &&
static''' <=
static +
2 &&
0 <
1 &&
0 <=
static &&
0 <=
static'1 &&
0 <=
1 && 0 >= 0 &&
0 <
2by chaining
log_ConstantStackPush_2(
i2,
env,
static) -{0,0}>
log_ConstantStackPush_4(
i2,
env,
static) :|: 0 >= 0
log_ConstantStackPush_4(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_ConstantStackPush_6(
i2,
env,
static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(
i2,
env,
static) -{1,1}>
langle_clinit_rangle_ArrayCreate_21(
iconst_0,
i2,
env,
static) :|:
iconst_0 =
0langle_clinit_rangle_ArrayCreate_21(
iconst_0,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_26(
a2,
i2,
iconst_0,
env,
static) :|:
a2 =
2 &&
iconst_0 =
0 &&
0 <
a2langle_clinit_rangle_FieldAccess_26(
a2,
i2,
iconst_0,
env,
static) -{1,1}>
langle_clinit_rangle_New_29(
i2,
env,
static') :|:
0 <=
a2 &&
iconst_0 =
0 &&
static' <=
static +
a2 &&
0 <=
static &&
0 <
a2langle_clinit_rangle_New_29(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_New_31(
i2,
env,
static) :|: 0 >= 0
langle_clinit_rangle_New_31(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_New_33(
i2,
env,
static) :|:
0 <=
staticlangle_clinit_rangle_New_33(
i2,
env,
static) -{1,1}>
langle_clinit_rangle_Duplicate_35(
o2,
i2,
env,
static) :|:
0 <
o2 &&
o2 =
1langle_clinit_rangle_Duplicate_35(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_ConstantStackPush_38(
o2,
i2,
env,
static) :|:
0 <
o2langle_clinit_rangle_ConstantStackPush_38(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_InvokeMethod_39(
o2,
NULL,
i2,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_clinit_rangle_InvokeMethod_39(
o2,
NULL,
i2,
env,
static) -{1,1}>
langle_init_rangle_Load_40(
o2,
i2,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_init_rangle_Load_40(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_41(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_41(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Load_42(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Load_42(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_43(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_43(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Return_44(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Return_44(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Return_45(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Return_45(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_46(
o2,
i2,
env,
static) :|:
0 <
o2langle_clinit_rangle_FieldAccess_46(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_Return_47(
i2,
env,
static') :|:
0 <
o2 &&
0 <=
o2 &&
0 <=
static &&
static' <=
static +
o2langle_clinit_rangle_Return_47(
i2,
env,
static) -{1,1}>
log_ConstantStackPush_48(
i2,
env,
static) :|: 0 >= 0
log_ConstantStackPush_48(
i2,
env,
static) -{0,0}>
log_ConstantStackPush_49(
i2,
env,
static) :|: 0 >= 0
log_ConstantStackPush_49(
i2,
env,
static) -{0,0}>
log_ConstantStackPush_50(
i2,
env,
static) :|:
0 <=
staticlog_ConstantStackPush_50(
i2,
env,
static) -{0,0}>
log_ConstantStackPush_51(
i2,
env,
static) :|: 0 >= 0
log_ConstantStackPush_51(
i2,
env,
static) -{0,0}>
log_ConstantStackPush_52(
i2,
env,
static) :|: 0 >= 0
log_ConstantStackPush_52(
i2,
env,
static) -{1,1}>
log_Store_53(
i2,
iconst_0,
env,
static) :|:
iconst_0 =
0log_Store_53(
i2,
iconst_0,
env,
static) -{1,1}>
log_Load_54(
i2,
iconst_0,
env,
static) :|:
iconst_0 =
0log_Load_54(
i2,
iconst_0,
env,
static) -{1,1}>
log_ConstantStackPush_55(
i2,
iconst_0,
env,
static) :|:
iconst_0 =
0log_ConstantStackPush_55(
i2,
iconst_0,
env,
static) -{1,1}>
log_LE_58(
i2,
iconst_1,
iconst_0,
env,
static) :|:
iconst_1 =
1 &&
iconst_0 =
0log_LE_58(
i2,
iconst_1,
iconst_0,
env,
static) -{0,0}>
log_LE_153(
i2,
i2,
iconst_1,
iconst_0,
env,
static) :|:
0 <=
iconst_0 &&
iconst_0 <=
1 &&
iconst_1 =
1 &&
iconst_0 =
0log_LE_153(
i42,
i43,
iconst_1,
i44,
env,
static) -{0,0}>
log_LE_226(
i42,
i43,
iconst_1,
i44,
env,
static) :|:
i44 <=
2 &&
iconst_1 =
1 &&
i44 <=
1 &&
0 <=
i44log_LE_226(
i42,
i79,
iconst_1,
i80,
env,
static) -{0,0}>
log_LE_317(
i42,
i79,
iconst_1,
i80,
env,
static) :|:
0 <=
i80 &&
iconst_1 =
1 &&
i80 <=
2obtained
log_LE_317(i42, i118, 1, i112, env, static) -{7,7}> half_Load_644(i121', 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121'
by chaining
log_LE_317(i42, i118, iconst_1, i112, env, static) -{0,0}> log_LE_325(i42, i118, iconst_1, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_1 = 1
log_LE_325(i42, i118, iconst_1, i112, env, static) -{1,1}> log_Load_340(i42, i118, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_1 = 1 && iconst_1 < i118
log_Load_340(i42, i118, i112, env, static) -{1,1}> log_ConstantStackPush_342(i42, i118, i112, env, static) :|: 0 <= i112 && 2 <= i118
log_ConstantStackPush_342(i42, i118, i112, env, static) -{1,1}> log_IntArithmetic_345(i42, i118, iconst_2, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_2 = 2
log_IntArithmetic_345(i42, i118, iconst_2, i112, env, static) -{1,1}> log_InvokeMethod_347(i42, i121, i112, env, static) :|: 0 <= i112 && i118 - iconst_2 = i121 && 2 <= i118 && 0 <= i121 && iconst_2 = 2
log_InvokeMethod_347(i42, i121, i112, env, static) -{1,1}> half_ConstantStackPush_348(i121, i42, i112, env, static) :|: 0 <= i112 && 0 <= i121
half_ConstantStackPush_348(i121, i42, i112, env, static) -{1,1}> half_Store_349(iconst_0, i121, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
half_Store_349(iconst_0, i121, i42, i112, env, static) -{1,1}> half_Load_350(i121, iconst_0, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
half_Load_350(i121, iconst_0, i42, i112, env, static) -{0,0}> half_Load_644(i121, iconst_0, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
obtained
half_Load_644(i270, i271, i42, i112, env, static) -{2,2}> half_LE_655(i270, 1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
by chaining
half_Load_644(i270, i271, i42, i112, env, static) -{1,1}> half_ConstantStackPush_648(i270, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
half_ConstantStackPush_648(i270, i271, i42, i112, env, static) -{1,1}> half_LE_655(i270, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270 && iconst_1 = 1
obtained
half_LE_655(i280, 1, i271, i42, i112, env, static) -{7,7}> half_Load_644(i281', i283', i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281'
by chaining
half_LE_655(i280, iconst_1, i271, i42, i112, env, static) -{0,0}> half_LE_657(i280, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i280 && iconst_1 = 1 && 2 <= i280
half_LE_657(i280, iconst_1, i271, i42, i112, env, static) -{1,1}> half_Load_660(i280, i271, i42, i112, env, static) :|: 0 <= i112 && iconst_1 < i280 && iconst_1 = 1 && 2 <= i280
half_Load_660(i280, i271, i42, i112, env, static) -{1,1}> half_ConstantStackPush_662(i280, i271, i42, i112, env, static) :|: 0 <= i112 && 2 <= i280
half_ConstantStackPush_662(i280, i271, i42, i112, env, static) -{1,1}> half_IntArithmetic_666(i280, iconst_2, i271, i42, i112, env, static) :|: 0 <= i112 && 2 <= i280 && iconst_2 = 2
half_IntArithmetic_666(i280, iconst_2, i271, i42, i112, env, static) -{1,1}> half_Store_670(i281, i271, i42, i112, env, static) :|: i280 - iconst_2 = i281 && 0 <= i112 && 0 <= i281 && 2 <= i280 && iconst_2 = 2
half_Store_670(i281, i271, i42, i112, env, static) -{1,1}> half_Inc_674(i281, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
half_Inc_674(i281, i271, i42, i112, env, static) -{1,1}> half_JMP_678(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281 && i271 + 1 = i283
half_JMP_678(i281, i283, i42, i112, env, static) -{1,1}> half_Load_680(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
half_Load_680(i281, i283, i42, i112, env, static) -{0,0}> half_Load_644(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
obtained
half_LE_655(i279, 1, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i282', 1, i284', env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282'
by chaining
half_LE_655(i279, iconst_1, i271, i42, i112, env, static) -{0,0}> half_LE_656(i279, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && i279 <= 1 && 0 <= i279 && iconst_1 = 1
half_LE_656(i279, iconst_1, i271, i42, i112, env, static) -{1,1}> half_Load_659(i271, i42, i112, env, static) :|: 0 <= i112 && i279 <= 1 && 0 <= i279 && i279 <= iconst_1 && iconst_1 = 1
half_Load_659(i271, i42, i112, env, static) -{1,1}> half_Return_661(i271, i42, i112, env, static) :|: 0 <= i112
half_Return_661(i271, i42, i112, env, static) -{1,1}> log_ConstantStackPush_664(i42, i271, i112, env, static) :|: 0 <= i112
log_ConstantStackPush_664(i42, i271, i112, env, static) -{1,1}> log_IntArithmetic_668(i42, i271, iconst_1, i112, env, static) :|: 0 <= i112 && iconst_1 = 1
log_IntArithmetic_668(i42, i271, iconst_1, i112, env, static) -{1,1}> log_Store_673(i42, i282, i112, env, static) :|: i271 + iconst_1 = i282 && 0 <= i112 && iconst_1 = 1
log_Store_673(i42, i282, i112, env, static) -{1,1}> log_Inc_676(i42, i282, i112, env, static) :|: 0 <= i112
log_Inc_676(i42, i282, i112, env, static) -{1,1}> log_JMP_679(i42, i282, i284, env, static) :|: 0 <= i112 && i112 + 1 = i284 && 1 <= i284
log_JMP_679(i42, i282, i284, env, static) -{1,1}> log_Load_684(i42, i282, i284, env, static) :|: 1 <= i284
log_Load_684(i42, i282, i284, env, static) -{1,1}> log_ConstantStackPush_685(i42, i282, i284, env, static) :|: 1 <= i284
log_ConstantStackPush_685(i42, i282, i284, env, static) -{1,1}> log_LE_686(i42, i282, iconst_1, i284, env, static) :|: iconst_1 = 1 && 1 <= i284
log_LE_686(i42, i282, iconst_1, i284, env, static) -{0,0}> log_LE_317(i42, i282, iconst_1, i284, env, static) :|: 0 <= i284 && iconst_1 = 1 && 1 <= i284
(20) 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(i2, env, static) -{19,19}> log_LE_317(i2, i2, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && 0 <= 0 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= static'1 && 0 <= 1 && 0 >= 0 && 0 < 2
log_LE_317(i42, i117, iconst_1, i112, env, static) -{0,0}> log_LE_324(i42, i117, iconst_1, i112, env, static) :|: 0 <= i112 && i117 <= 1 && iconst_1 = 1
log_LE_317(i42, i118, 1, i112, env, static) -{7,7}> half_Load_644(i121', 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121'
half_Load_644(i270, i271, i42, i112, env, static) -{2,2}> half_LE_655(i270, 1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
half_LE_655(i280, 1, i271, i42, i112, env, static) -{7,7}> half_Load_644(i281', i283', i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281'
half_LE_655(i279, 1, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i282', 1, i284', env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282'
(21) MovedArithmeticToConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Moved arithmethic from lhss to constraints.
half_LE_655(i280, 1, i271, i42, i112, env, static) -{7,7}> half_Load_644(i281', i283', i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281'
was transformed to
half_LE_655(i280, x, i271, i42, i112, env, static) -{7,7}> half_Load_644(i281', i283', i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281' && x = 1
half_LE_655(i279, 1, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i282', 1, i284', env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282'
was transformed to
half_LE_655(i279, x, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i282', 1, i284', env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282' && x = 1
log_LE_317(i42, i118, 1, i112, env, static) -{7,7}> half_Load_644(i121', 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121'
was transformed to
log_LE_317(i42, i118, x, i112, env, static) -{7,7}> half_Load_644(i121', 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121' && x = 1
(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:
half_LE_655(i280, x, i271, i42, i112, env, static) -{7,7}> half_Load_644(i281', i283', i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281' && x = 1
log_ConstantStackPush_2(i2, env, static) -{19,19}> log_LE_317(i2, i2, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && 0 <= 0 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= static'1 && 0 <= 1 && 0 >= 0 && 0 < 2
log_LE_317(i42, i117, iconst_1, i112, env, static) -{0,0}> log_LE_324(i42, i117, iconst_1, i112, env, static) :|: 0 <= i112 && i117 <= 1 && iconst_1 = 1
half_Load_644(i270, i271, i42, i112, env, static) -{2,2}> half_LE_655(i270, 1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
half_LE_655(i279, x, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i282', 1, i284', env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282' && x = 1
log_LE_317(i42, i118, x, i112, env, static) -{7,7}> half_Load_644(i121', 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121' && x = 1
(23) MovedArithmeticFromConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Moved arithmethic from constraints to rhss.
log_LE_317(i42, i118, x, i112, env, static) -{7,7}> half_Load_644(i121', 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121' && x = 1
was transformed to
log_LE_317(i42, i118, x, i112, env, static) -{7,7}> half_Load_644(i118 - 2, 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121' && x = 1
log_LE_317(i42, i117, iconst_1, i112, env, static) -{0,0}> log_LE_324(i42, i117, iconst_1, i112, env, static) :|: 0 <= i112 && i117 <= 1 && iconst_1 = 1
was transformed to
log_LE_317(i42, i117, iconst_1, i112, env, static) -{0,0}> log_LE_324(i42, i117, 1, i112, env, static) :|: 0 <= i112 && i117 <= 1 && iconst_1 = 1
half_LE_655(i280, x, i271, i42, i112, env, static) -{7,7}> half_Load_644(i281', i283', i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281' && x = 1
was transformed to
half_LE_655(i280, x, i271, i42, i112, env, static) -{7,7}> half_Load_644(i280 - 2, i271 + 1, i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281' && x = 1
half_LE_655(i279, x, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i282', 1, i284', env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282' && x = 1
was transformed to
half_LE_655(i279, x, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i271 + 1, 1, i112 + 1, env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282' && 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:
log_LE_317(i42, i118, x, i112, env, static) -{7,7}> half_Load_644(i118 - 2, 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121' && x = 1
log_ConstantStackPush_2(i2, env, static) -{19,19}> log_LE_317(i2, i2, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && 0 <= 0 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= static'1 && 0 <= 1 && 0 >= 0 && 0 < 2
log_LE_317(i42, i117, iconst_1, i112, env, static) -{0,0}> log_LE_324(i42, i117, 1, i112, env, static) :|: 0 <= i112 && i117 <= 1 && iconst_1 = 1
half_Load_644(i270, i271, i42, i112, env, static) -{2,2}> half_LE_655(i270, 1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
half_LE_655(i280, x, i271, i42, i112, env, static) -{7,7}> half_Load_644(i280 - 2, i271 + 1, i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281' && x = 1
half_LE_655(i279, x, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i271 + 1, 1, i112 + 1, env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282' && x = 1
(25) ExpressionSimplificationProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Simplified expressions.
log_ConstantStackPush_2(i2, env, static) -{19,19}> log_LE_317(i2, i2, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && 0 <= 0 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= static'1 && 0 <= 1 && 0 >= 0 && 0 < 2
was transformed to
log_ConstantStackPush_2(i2, env, static) -{19,19}> log_LE_317(i2, i2, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'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:
log_LE_317(i42, i117, iconst_1, i112, env, static) -{0,0}> log_LE_324(i42, i117, 1, i112, env, static) :|: 0 <= i112 && i117 <= 1 && iconst_1 = 1
half_Load_644(i270, i271, i42, i112, env, static) -{2,2}> half_LE_655(i270, 1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
log_LE_317(i42, i118, x, i112, env, static) -{7,7}> half_Load_644(i118 - 2, 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121' && x = 1
half_LE_655(i280, x, i271, i42, i112, env, static) -{7,7}> half_Load_644(i280 - 2, i271 + 1, i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281' && x = 1
half_LE_655(i279, x, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i271 + 1, 1, i112 + 1, env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282' && x = 1
log_ConstantStackPush_2(i2, env, static) -{19,19}> log_LE_317(i2, i2, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'1
(27) CESProof (EQUIVALENT transformation)
proved upper bound max(38, 19 * #0) using cofloco
(28) BOUNDS(CONSTANT, max(38, 19 * #0))
(29) JBCGraphEdgesToCpxIntTrsProof (CONCRETE UPPER BOUND(ID) transformation)
Transformed 63 jbc graph edges to a weighted ITS with 63 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 63 rules
Start term: log_ConstantStackPush_2(#0, env, static)
Considered paths: nonterm paths and paths from start to sinks
Rules:
log_ConstantStackPush_2(i2, env, static) -{0,0}> log_ConstantStackPush_4(i2, env, static) :|: 0 >= 0
log_ConstantStackPush_4(i2, env, static) -{0,0}> langle_clinit_rangle_ConstantStackPush_6(i2, env, static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(i2, env, static) -{1,1}> langle_clinit_rangle_ArrayCreate_21(iconst_0, i2, env, static) :|: iconst_0 = 0
langle_clinit_rangle_ArrayCreate_21(iconst_0, i2, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_26(a2, i2, iconst_0, env, static) :|: a2 = 2 && iconst_0 = 0 && 0 < a2
langle_clinit_rangle_FieldAccess_26(a2, i2, iconst_0, env, static) -{1,1}> langle_clinit_rangle_New_29(i2, env, static') :|: 0 <= a2 && iconst_0 = 0 && static' <= static + a2 && 0 <= static && 0 < a2
langle_clinit_rangle_New_29(i2, env, static) -{0,0}> langle_clinit_rangle_New_31(i2, env, static) :|: 0 >= 0
langle_clinit_rangle_New_31(i2, env, static) -{0,0}> langle_clinit_rangle_New_33(i2, env, static) :|: 0 <= static
langle_clinit_rangle_New_33(i2, env, static) -{1,1}> langle_clinit_rangle_Duplicate_35(o2, i2, env, static) :|: 0 < o2 && o2 = 1
langle_clinit_rangle_Duplicate_35(o2, i2, env, static) -{1,1}> langle_clinit_rangle_ConstantStackPush_38(o2, i2, env, static) :|: 0 < o2
langle_clinit_rangle_ConstantStackPush_38(o2, i2, env, static) -{1,1}> langle_clinit_rangle_InvokeMethod_39(o2, NULL, i2, env, static) :|: NULL = 0 && 0 < o2
langle_clinit_rangle_InvokeMethod_39(o2, NULL, i2, env, static) -{1,1}> langle_init_rangle_Load_40(o2, i2, env, static) :|: NULL = 0 && 0 < o2
langle_init_rangle_Load_40(o2, i2, env, static) -{1,1}> langle_init_rangle_InvokeMethod_41(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_41(o2, i2, env, static) -{1,1}> langle_init_rangle_Load_42(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Load_42(o2, i2, env, static) -{1,1}> langle_init_rangle_InvokeMethod_43(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_InvokeMethod_43(o2, i2, env, static) -{1,1}> langle_init_rangle_Return_44(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Return_44(o2, i2, env, static) -{1,1}> langle_init_rangle_Return_45(o2, i2, env, static) :|: 0 < o2
langle_init_rangle_Return_45(o2, i2, env, static) -{1,1}> langle_clinit_rangle_FieldAccess_46(o2, i2, env, static) :|: 0 < o2
langle_clinit_rangle_FieldAccess_46(o2, i2, env, static) -{1,1}> langle_clinit_rangle_Return_47(i2, env, static') :|: 0 < o2 && 0 <= o2 && 0 <= static && static' <= static + o2
langle_clinit_rangle_Return_47(i2, env, static) -{1,1}> log_ConstantStackPush_48(i2, env, static) :|: 0 >= 0
log_ConstantStackPush_48(i2, env, static) -{0,0}> log_ConstantStackPush_49(i2, env, static) :|: 0 >= 0
log_ConstantStackPush_49(i2, env, static) -{0,0}> log_ConstantStackPush_50(i2, env, static) :|: 0 <= static
log_ConstantStackPush_50(i2, env, static) -{0,0}> log_ConstantStackPush_51(i2, env, static) :|: 0 >= 0
log_ConstantStackPush_51(i2, env, static) -{0,0}> log_ConstantStackPush_52(i2, env, static) :|: 0 >= 0
log_ConstantStackPush_52(i2, env, static) -{1,1}> log_Store_53(i2, iconst_0, env, static) :|: iconst_0 = 0
log_Store_53(i2, iconst_0, env, static) -{1,1}> log_Load_54(i2, iconst_0, env, static) :|: iconst_0 = 0
log_Load_54(i2, iconst_0, env, static) -{1,1}> log_ConstantStackPush_55(i2, iconst_0, env, static) :|: iconst_0 = 0
log_ConstantStackPush_55(i2, iconst_0, env, static) -{1,1}> log_LE_58(i2, iconst_1, iconst_0, env, static) :|: iconst_1 = 1 && iconst_0 = 0
log_LE_58(i2, iconst_1, iconst_0, env, static) -{0,0}> log_LE_153(i2, i2, iconst_1, iconst_0, env, static) :|: 0 <= iconst_0 && iconst_0 <= 1 && iconst_1 = 1 && iconst_0 = 0
log_LE_153(i42, i43, iconst_1, i44, env, static) -{0,0}> log_LE_226(i42, i43, iconst_1, i44, env, static) :|: i44 <= 2 && iconst_1 = 1 && i44 <= 1 && 0 <= i44
log_LE_226(i42, i79, iconst_1, i80, env, static) -{0,0}> log_LE_317(i42, i79, iconst_1, i80, env, static) :|: 0 <= i80 && iconst_1 = 1 && i80 <= 2
log_LE_317(i42, i117, iconst_1, i112, env, static) -{0,0}> log_LE_324(i42, i117, iconst_1, i112, env, static) :|: 0 <= i112 && i117 <= 1 && iconst_1 = 1
log_LE_317(i42, i118, iconst_1, i112, env, static) -{0,0}> log_LE_325(i42, i118, iconst_1, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_1 = 1
log_LE_325(i42, i118, iconst_1, i112, env, static) -{1,1}> log_Load_340(i42, i118, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_1 = 1 && iconst_1 < i118
log_Load_340(i42, i118, i112, env, static) -{1,1}> log_ConstantStackPush_342(i42, i118, i112, env, static) :|: 0 <= i112 && 2 <= i118
log_ConstantStackPush_342(i42, i118, i112, env, static) -{1,1}> log_IntArithmetic_345(i42, i118, iconst_2, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_2 = 2
log_IntArithmetic_345(i42, i118, iconst_2, i112, env, static) -{1,1}> log_InvokeMethod_347(i42, i121, i112, env, static) :|: 0 <= i112 && i118 - iconst_2 = i121 && 2 <= i118 && 0 <= i121 && iconst_2 = 2
log_InvokeMethod_347(i42, i121, i112, env, static) -{1,1}> half_ConstantStackPush_348(i121, i42, i112, env, static) :|: 0 <= i112 && 0 <= i121
half_ConstantStackPush_348(i121, i42, i112, env, static) -{1,1}> half_Store_349(iconst_0, i121, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
half_Store_349(iconst_0, i121, i42, i112, env, static) -{1,1}> half_Load_350(i121, iconst_0, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
half_Load_350(i121, iconst_0, i42, i112, env, static) -{0,0}> half_Load_644(i121, iconst_0, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
half_Load_644(i270, i271, i42, i112, env, static) -{1,1}> half_ConstantStackPush_648(i270, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
half_ConstantStackPush_648(i270, i271, i42, i112, env, static) -{1,1}> half_LE_655(i270, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270 && iconst_1 = 1
half_LE_655(i279, iconst_1, i271, i42, i112, env, static) -{0,0}> half_LE_656(i279, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && i279 <= 1 && 0 <= i279 && iconst_1 = 1
half_LE_655(i280, iconst_1, i271, i42, i112, env, static) -{0,0}> half_LE_657(i280, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i280 && iconst_1 = 1 && 2 <= i280
half_LE_656(i279, iconst_1, i271, i42, i112, env, static) -{1,1}> half_Load_659(i271, i42, i112, env, static) :|: 0 <= i112 && i279 <= 1 && 0 <= i279 && i279 <= iconst_1 && iconst_1 = 1
half_LE_657(i280, iconst_1, i271, i42, i112, env, static) -{1,1}> half_Load_660(i280, i271, i42, i112, env, static) :|: 0 <= i112 && iconst_1 < i280 && iconst_1 = 1 && 2 <= i280
half_Load_659(i271, i42, i112, env, static) -{1,1}> half_Return_661(i271, i42, i112, env, static) :|: 0 <= i112
half_Load_660(i280, i271, i42, i112, env, static) -{1,1}> half_ConstantStackPush_662(i280, i271, i42, i112, env, static) :|: 0 <= i112 && 2 <= i280
half_Return_661(i271, i42, i112, env, static) -{1,1}> log_ConstantStackPush_664(i42, i271, i112, env, static) :|: 0 <= i112
half_ConstantStackPush_662(i280, i271, i42, i112, env, static) -{1,1}> half_IntArithmetic_666(i280, iconst_2, i271, i42, i112, env, static) :|: 0 <= i112 && 2 <= i280 && iconst_2 = 2
log_ConstantStackPush_664(i42, i271, i112, env, static) -{1,1}> log_IntArithmetic_668(i42, i271, iconst_1, i112, env, static) :|: 0 <= i112 && iconst_1 = 1
half_IntArithmetic_666(i280, iconst_2, i271, i42, i112, env, static) -{1,1}> half_Store_670(i281, i271, i42, i112, env, static) :|: i280 - iconst_2 = i281 && 0 <= i112 && 0 <= i281 && 2 <= i280 && iconst_2 = 2
log_IntArithmetic_668(i42, i271, iconst_1, i112, env, static) -{1,1}> log_Store_673(i42, i282, i112, env, static) :|: i271 + iconst_1 = i282 && 0 <= i112 && iconst_1 = 1
half_Store_670(i281, i271, i42, i112, env, static) -{1,1}> half_Inc_674(i281, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
log_Store_673(i42, i282, i112, env, static) -{1,1}> log_Inc_676(i42, i282, i112, env, static) :|: 0 <= i112
half_Inc_674(i281, i271, i42, i112, env, static) -{1,1}> half_JMP_678(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281 && i271 + 1 = i283
log_Inc_676(i42, i282, i112, env, static) -{1,1}> log_JMP_679(i42, i282, i284, env, static) :|: 0 <= i112 && i112 + 1 = i284 && 1 <= i284
half_JMP_678(i281, i283, i42, i112, env, static) -{1,1}> half_Load_680(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
log_JMP_679(i42, i282, i284, env, static) -{1,1}> log_Load_684(i42, i282, i284, env, static) :|: 1 <= i284
half_Load_680(i281, i283, i42, i112, env, static) -{0,0}> half_Load_644(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
log_Load_684(i42, i282, i284, env, static) -{1,1}> log_ConstantStackPush_685(i42, i282, i284, env, static) :|: 1 <= i284
log_ConstantStackPush_685(i42, i282, i284, env, static) -{1,1}> log_LE_686(i42, i282, iconst_1, i284, env, static) :|: iconst_1 = 1 && 1 <= i284
log_LE_686(i42, i282, iconst_1, i284, env, static) -{0,0}> log_LE_317(i42, i282, iconst_1, i284, env, static) :|: 0 <= i284 && iconst_1 = 1 && 1 <= i284
(31) StraightLineCodeCompressionProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
obtained
log_ConstantStackPush_2(
i2,
env,
static) -{19,19}>
log_LE_317(
i2,
i2,
1,
0,
env,
static'1) :|:
static'1 <=
static''' +
1 &&
0 <=
2 &&
0 <=
static''' &&
0 <=
0 &&
static''' <=
static +
2 &&
0 <
1 &&
0 <=
static &&
0 <=
static'1 &&
0 <=
1 && 0 >= 0 &&
0 <
2by chaining
log_ConstantStackPush_2(
i2,
env,
static) -{0,0}>
log_ConstantStackPush_4(
i2,
env,
static) :|: 0 >= 0
log_ConstantStackPush_4(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_ConstantStackPush_6(
i2,
env,
static) :|: 0 >= 0
langle_clinit_rangle_ConstantStackPush_6(
i2,
env,
static) -{1,1}>
langle_clinit_rangle_ArrayCreate_21(
iconst_0,
i2,
env,
static) :|:
iconst_0 =
0langle_clinit_rangle_ArrayCreate_21(
iconst_0,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_26(
a2,
i2,
iconst_0,
env,
static) :|:
a2 =
2 &&
iconst_0 =
0 &&
0 <
a2langle_clinit_rangle_FieldAccess_26(
a2,
i2,
iconst_0,
env,
static) -{1,1}>
langle_clinit_rangle_New_29(
i2,
env,
static') :|:
0 <=
a2 &&
iconst_0 =
0 &&
static' <=
static +
a2 &&
0 <=
static &&
0 <
a2langle_clinit_rangle_New_29(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_New_31(
i2,
env,
static) :|: 0 >= 0
langle_clinit_rangle_New_31(
i2,
env,
static) -{0,0}>
langle_clinit_rangle_New_33(
i2,
env,
static) :|:
0 <=
staticlangle_clinit_rangle_New_33(
i2,
env,
static) -{1,1}>
langle_clinit_rangle_Duplicate_35(
o2,
i2,
env,
static) :|:
0 <
o2 &&
o2 =
1langle_clinit_rangle_Duplicate_35(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_ConstantStackPush_38(
o2,
i2,
env,
static) :|:
0 <
o2langle_clinit_rangle_ConstantStackPush_38(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_InvokeMethod_39(
o2,
NULL,
i2,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_clinit_rangle_InvokeMethod_39(
o2,
NULL,
i2,
env,
static) -{1,1}>
langle_init_rangle_Load_40(
o2,
i2,
env,
static) :|:
NULL =
0 &&
0 <
o2langle_init_rangle_Load_40(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_41(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_41(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Load_42(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Load_42(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_InvokeMethod_43(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_InvokeMethod_43(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Return_44(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Return_44(
o2,
i2,
env,
static) -{1,1}>
langle_init_rangle_Return_45(
o2,
i2,
env,
static) :|:
0 <
o2langle_init_rangle_Return_45(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_FieldAccess_46(
o2,
i2,
env,
static) :|:
0 <
o2langle_clinit_rangle_FieldAccess_46(
o2,
i2,
env,
static) -{1,1}>
langle_clinit_rangle_Return_47(
i2,
env,
static') :|:
0 <
o2 &&
0 <=
o2 &&
0 <=
static &&
static' <=
static +
o2langle_clinit_rangle_Return_47(
i2,
env,
static) -{1,1}>
log_ConstantStackPush_48(
i2,
env,
static) :|: 0 >= 0
log_ConstantStackPush_48(
i2,
env,
static) -{0,0}>
log_ConstantStackPush_49(
i2,
env,
static) :|: 0 >= 0
log_ConstantStackPush_49(
i2,
env,
static) -{0,0}>
log_ConstantStackPush_50(
i2,
env,
static) :|:
0 <=
staticlog_ConstantStackPush_50(
i2,
env,
static) -{0,0}>
log_ConstantStackPush_51(
i2,
env,
static) :|: 0 >= 0
log_ConstantStackPush_51(
i2,
env,
static) -{0,0}>
log_ConstantStackPush_52(
i2,
env,
static) :|: 0 >= 0
log_ConstantStackPush_52(
i2,
env,
static) -{1,1}>
log_Store_53(
i2,
iconst_0,
env,
static) :|:
iconst_0 =
0log_Store_53(
i2,
iconst_0,
env,
static) -{1,1}>
log_Load_54(
i2,
iconst_0,
env,
static) :|:
iconst_0 =
0log_Load_54(
i2,
iconst_0,
env,
static) -{1,1}>
log_ConstantStackPush_55(
i2,
iconst_0,
env,
static) :|:
iconst_0 =
0log_ConstantStackPush_55(
i2,
iconst_0,
env,
static) -{1,1}>
log_LE_58(
i2,
iconst_1,
iconst_0,
env,
static) :|:
iconst_1 =
1 &&
iconst_0 =
0log_LE_58(
i2,
iconst_1,
iconst_0,
env,
static) -{0,0}>
log_LE_153(
i2,
i2,
iconst_1,
iconst_0,
env,
static) :|:
0 <=
iconst_0 &&
iconst_0 <=
1 &&
iconst_1 =
1 &&
iconst_0 =
0log_LE_153(
i42,
i43,
iconst_1,
i44,
env,
static) -{0,0}>
log_LE_226(
i42,
i43,
iconst_1,
i44,
env,
static) :|:
i44 <=
2 &&
iconst_1 =
1 &&
i44 <=
1 &&
0 <=
i44log_LE_226(
i42,
i79,
iconst_1,
i80,
env,
static) -{0,0}>
log_LE_317(
i42,
i79,
iconst_1,
i80,
env,
static) :|:
0 <=
i80 &&
iconst_1 =
1 &&
i80 <=
2obtained
log_LE_317(i42, i118, 1, i112, env, static) -{7,7}> half_Load_644(i121', 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121'
by chaining
log_LE_317(i42, i118, iconst_1, i112, env, static) -{0,0}> log_LE_325(i42, i118, iconst_1, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_1 = 1
log_LE_325(i42, i118, iconst_1, i112, env, static) -{1,1}> log_Load_340(i42, i118, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_1 = 1 && iconst_1 < i118
log_Load_340(i42, i118, i112, env, static) -{1,1}> log_ConstantStackPush_342(i42, i118, i112, env, static) :|: 0 <= i112 && 2 <= i118
log_ConstantStackPush_342(i42, i118, i112, env, static) -{1,1}> log_IntArithmetic_345(i42, i118, iconst_2, i112, env, static) :|: 0 <= i112 && 2 <= i118 && iconst_2 = 2
log_IntArithmetic_345(i42, i118, iconst_2, i112, env, static) -{1,1}> log_InvokeMethod_347(i42, i121, i112, env, static) :|: 0 <= i112 && i118 - iconst_2 = i121 && 2 <= i118 && 0 <= i121 && iconst_2 = 2
log_InvokeMethod_347(i42, i121, i112, env, static) -{1,1}> half_ConstantStackPush_348(i121, i42, i112, env, static) :|: 0 <= i112 && 0 <= i121
half_ConstantStackPush_348(i121, i42, i112, env, static) -{1,1}> half_Store_349(iconst_0, i121, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
half_Store_349(iconst_0, i121, i42, i112, env, static) -{1,1}> half_Load_350(i121, iconst_0, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
half_Load_350(i121, iconst_0, i42, i112, env, static) -{0,0}> half_Load_644(i121, iconst_0, i42, i112, env, static) :|: 0 <= i112 && iconst_0 = 0 && 0 <= i121
obtained
half_Load_644(i270, i271, i42, i112, env, static) -{2,2}> half_LE_655(i270, 1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
by chaining
half_Load_644(i270, i271, i42, i112, env, static) -{1,1}> half_ConstantStackPush_648(i270, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
half_ConstantStackPush_648(i270, i271, i42, i112, env, static) -{1,1}> half_LE_655(i270, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270 && iconst_1 = 1
obtained
half_LE_655(i280, 1, i271, i42, i112, env, static) -{7,7}> half_Load_644(i281', i283', i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281'
by chaining
half_LE_655(i280, iconst_1, i271, i42, i112, env, static) -{0,0}> half_LE_657(i280, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i280 && iconst_1 = 1 && 2 <= i280
half_LE_657(i280, iconst_1, i271, i42, i112, env, static) -{1,1}> half_Load_660(i280, i271, i42, i112, env, static) :|: 0 <= i112 && iconst_1 < i280 && iconst_1 = 1 && 2 <= i280
half_Load_660(i280, i271, i42, i112, env, static) -{1,1}> half_ConstantStackPush_662(i280, i271, i42, i112, env, static) :|: 0 <= i112 && 2 <= i280
half_ConstantStackPush_662(i280, i271, i42, i112, env, static) -{1,1}> half_IntArithmetic_666(i280, iconst_2, i271, i42, i112, env, static) :|: 0 <= i112 && 2 <= i280 && iconst_2 = 2
half_IntArithmetic_666(i280, iconst_2, i271, i42, i112, env, static) -{1,1}> half_Store_670(i281, i271, i42, i112, env, static) :|: i280 - iconst_2 = i281 && 0 <= i112 && 0 <= i281 && 2 <= i280 && iconst_2 = 2
half_Store_670(i281, i271, i42, i112, env, static) -{1,1}> half_Inc_674(i281, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
half_Inc_674(i281, i271, i42, i112, env, static) -{1,1}> half_JMP_678(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281 && i271 + 1 = i283
half_JMP_678(i281, i283, i42, i112, env, static) -{1,1}> half_Load_680(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
half_Load_680(i281, i283, i42, i112, env, static) -{0,0}> half_Load_644(i281, i283, i42, i112, env, static) :|: 0 <= i112 && 0 <= i281
obtained
half_LE_655(i279, 1, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i282', 1, i284', env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282'
by chaining
half_LE_655(i279, iconst_1, i271, i42, i112, env, static) -{0,0}> half_LE_656(i279, iconst_1, i271, i42, i112, env, static) :|: 0 <= i112 && i279 <= 1 && 0 <= i279 && iconst_1 = 1
half_LE_656(i279, iconst_1, i271, i42, i112, env, static) -{1,1}> half_Load_659(i271, i42, i112, env, static) :|: 0 <= i112 && i279 <= 1 && 0 <= i279 && i279 <= iconst_1 && iconst_1 = 1
half_Load_659(i271, i42, i112, env, static) -{1,1}> half_Return_661(i271, i42, i112, env, static) :|: 0 <= i112
half_Return_661(i271, i42, i112, env, static) -{1,1}> log_ConstantStackPush_664(i42, i271, i112, env, static) :|: 0 <= i112
log_ConstantStackPush_664(i42, i271, i112, env, static) -{1,1}> log_IntArithmetic_668(i42, i271, iconst_1, i112, env, static) :|: 0 <= i112 && iconst_1 = 1
log_IntArithmetic_668(i42, i271, iconst_1, i112, env, static) -{1,1}> log_Store_673(i42, i282, i112, env, static) :|: i271 + iconst_1 = i282 && 0 <= i112 && iconst_1 = 1
log_Store_673(i42, i282, i112, env, static) -{1,1}> log_Inc_676(i42, i282, i112, env, static) :|: 0 <= i112
log_Inc_676(i42, i282, i112, env, static) -{1,1}> log_JMP_679(i42, i282, i284, env, static) :|: 0 <= i112 && i112 + 1 = i284 && 1 <= i284
log_JMP_679(i42, i282, i284, env, static) -{1,1}> log_Load_684(i42, i282, i284, env, static) :|: 1 <= i284
log_Load_684(i42, i282, i284, env, static) -{1,1}> log_ConstantStackPush_685(i42, i282, i284, env, static) :|: 1 <= i284
log_ConstantStackPush_685(i42, i282, i284, env, static) -{1,1}> log_LE_686(i42, i282, iconst_1, i284, env, static) :|: iconst_1 = 1 && 1 <= i284
log_LE_686(i42, i282, iconst_1, i284, env, static) -{0,0}> log_LE_317(i42, i282, iconst_1, i284, env, static) :|: 0 <= i284 && iconst_1 = 1 && 1 <= i284
(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(i2, env, static) -{19,19}> log_LE_317(i2, i2, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && 0 <= 0 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= static'1 && 0 <= 1 && 0 >= 0 && 0 < 2
log_LE_317(i42, i117, iconst_1, i112, env, static) -{0,0}> log_LE_324(i42, i117, iconst_1, i112, env, static) :|: 0 <= i112 && i117 <= 1 && iconst_1 = 1
log_LE_317(i42, i118, 1, i112, env, static) -{7,7}> half_Load_644(i121', 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121'
half_Load_644(i270, i271, i42, i112, env, static) -{2,2}> half_LE_655(i270, 1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
half_LE_655(i280, 1, i271, i42, i112, env, static) -{7,7}> half_Load_644(i281', i283', i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281'
half_LE_655(i279, 1, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i282', 1, i284', env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282'
(33) MovedArithmeticToConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Moved arithmethic from lhss to constraints.
half_LE_655(i280, 1, i271, i42, i112, env, static) -{7,7}> half_Load_644(i281', i283', i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281'
was transformed to
half_LE_655(i280, x, i271, i42, i112, env, static) -{7,7}> half_Load_644(i281', i283', i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281' && x = 1
half_LE_655(i279, 1, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i282', 1, i284', env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282'
was transformed to
half_LE_655(i279, x, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i282', 1, i284', env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282' && x = 1
log_LE_317(i42, i118, 1, i112, env, static) -{7,7}> half_Load_644(i121', 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121'
was transformed to
log_LE_317(i42, i118, x, i112, env, static) -{7,7}> half_Load_644(i121', 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121' && 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_LE_655(i280, x, i271, i42, i112, env, static) -{7,7}> half_Load_644(i281', i283', i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281' && x = 1
log_ConstantStackPush_2(i2, env, static) -{19,19}> log_LE_317(i2, i2, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && 0 <= 0 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= static'1 && 0 <= 1 && 0 >= 0 && 0 < 2
log_LE_317(i42, i117, iconst_1, i112, env, static) -{0,0}> log_LE_324(i42, i117, iconst_1, i112, env, static) :|: 0 <= i112 && i117 <= 1 && iconst_1 = 1
half_Load_644(i270, i271, i42, i112, env, static) -{2,2}> half_LE_655(i270, 1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
half_LE_655(i279, x, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i282', 1, i284', env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282' && x = 1
log_LE_317(i42, i118, x, i112, env, static) -{7,7}> half_Load_644(i121', 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121' && x = 1
(35) MovedArithmeticFromConstraintsProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Moved arithmethic from constraints to rhss.
log_LE_317(i42, i118, x, i112, env, static) -{7,7}> half_Load_644(i121', 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121' && x = 1
was transformed to
log_LE_317(i42, i118, x, i112, env, static) -{7,7}> half_Load_644(i118 - 2, 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121' && x = 1
log_LE_317(i42, i117, iconst_1, i112, env, static) -{0,0}> log_LE_324(i42, i117, iconst_1, i112, env, static) :|: 0 <= i112 && i117 <= 1 && iconst_1 = 1
was transformed to
log_LE_317(i42, i117, iconst_1, i112, env, static) -{0,0}> log_LE_324(i42, i117, 1, i112, env, static) :|: 0 <= i112 && i117 <= 1 && iconst_1 = 1
half_LE_655(i280, x, i271, i42, i112, env, static) -{7,7}> half_Load_644(i281', i283', i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281' && x = 1
was transformed to
half_LE_655(i280, x, i271, i42, i112, env, static) -{7,7}> half_Load_644(i280 - 2, i271 + 1, i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281' && x = 1
half_LE_655(i279, x, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i282', 1, i284', env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282' && x = 1
was transformed to
half_LE_655(i279, x, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i271 + 1, 1, i112 + 1, env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282' && 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:
log_LE_317(i42, i118, x, i112, env, static) -{7,7}> half_Load_644(i118 - 2, 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121' && x = 1
log_ConstantStackPush_2(i2, env, static) -{19,19}> log_LE_317(i2, i2, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && 0 <= 0 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= static'1 && 0 <= 1 && 0 >= 0 && 0 < 2
log_LE_317(i42, i117, iconst_1, i112, env, static) -{0,0}> log_LE_324(i42, i117, 1, i112, env, static) :|: 0 <= i112 && i117 <= 1 && iconst_1 = 1
half_Load_644(i270, i271, i42, i112, env, static) -{2,2}> half_LE_655(i270, 1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
half_LE_655(i280, x, i271, i42, i112, env, static) -{7,7}> half_Load_644(i280 - 2, i271 + 1, i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281' && x = 1
half_LE_655(i279, x, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i271 + 1, 1, i112 + 1, env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282' && x = 1
(37) ExpressionSimplificationProof (BOTH CONCRETE BOUNDS(ID, ID) transformation)
Simplified expressions.
log_ConstantStackPush_2(i2, env, static) -{19,19}> log_LE_317(i2, i2, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= 2 && 0 <= static''' && 0 <= 0 && static''' <= static + 2 && 0 < 1 && 0 <= static && 0 <= static'1 && 0 <= 1 && 0 >= 0 && 0 < 2
was transformed to
log_ConstantStackPush_2(i2, env, static) -{19,19}> log_LE_317(i2, i2, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'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:
log_LE_317(i42, i117, iconst_1, i112, env, static) -{0,0}> log_LE_324(i42, i117, 1, i112, env, static) :|: 0 <= i112 && i117 <= 1 && iconst_1 = 1
half_Load_644(i270, i271, i42, i112, env, static) -{2,2}> half_LE_655(i270, 1, i271, i42, i112, env, static) :|: 0 <= i112 && 0 <= i270
log_LE_317(i42, i118, x, i112, env, static) -{7,7}> half_Load_644(i118 - 2, 0, i42, i112, env, static) :|: 1 < i118 && 0 <= i121' && 2 <= i118 && 0 <= i112 && i118 - 2 = i121' && x = 1
half_LE_655(i280, x, i271, i42, i112, env, static) -{7,7}> half_Load_644(i280 - 2, i271 + 1, i42, i112, env, static) :|: i271 + 1 = i283' && 0 <= i112 && 0 <= i281' && 1 < i280 && 2 <= i280 && 0 <= i280 && i280 - 2 = i281' && x = 1
half_LE_655(i279, x, i271, i42, i112, env, static) -{10,10}> log_LE_317(i42, i271 + 1, 1, i112 + 1, env, static) :|: i279 <= 1 && 1 <= i284' && 0 <= i279 && 0 <= i284' && 0 <= i112 && i112 + 1 = i284' && i271 + 1 = i282' && x = 1
log_ConstantStackPush_2(i2, env, static) -{19,19}> log_LE_317(i2, i2, 1, 0, env, static'1) :|: static'1 <= static''' + 1 && 0 <= static''' && static''' <= static + 2 && 0 <= static && 0 <= static'1