/export/starexec/sandbox2/solver/bin/starexec_run_standard /export/starexec/sandbox2/benchmark/theBenchmark.jar /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- YES proof of /export/starexec/sandbox2/benchmark/theBenchmark.jar # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty termination of the given Bare JBC problem could be proven: (0) Bare JBC problem (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] (2) JBC problem (3) JBCToGraph [EQUIVALENT, 453 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 1 ms] (6) JBCTerminationSCC (7) SCCToIRSProof [SOUND, 178 ms] (8) IRSwT (9) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (10) IRSwT (11) IRSwTTerminationDigraphProof [EQUIVALENT, 121 ms] (12) IRSwT (13) IntTRSCompressionProof [EQUIVALENT, 0 ms] (14) IRSwT (15) TempFilterProof [SOUND, 81 ms] (16) IntTRS (17) PolynomialOrderProcessor [EQUIVALENT, 0 ms] (18) IntTRS (19) PolynomialOrderProcessor [EQUIVALENT, 5 ms] (20) IntTRS (21) PolynomialOrderProcessor [EQUIVALENT, 0 ms] (22) YES ---------------------------------------- (0) Obligation: need to prove termination of the following program: public class Test2 { public static void main(String[] args) { iter(args.length, args.length % 5, args.length % 4); } private static void iter(int x, int y, int z) { while (x + y + 3 * z >= 0) { if (x > y) x--; else if (y > z) { x++; y -= 2; } else if (y <= z) { x = add(x, 1); y = add(y, 1); z = z - 1; } } } private static int add(int v, int w) { return v + w; } } ---------------------------------------- (1) BareJBCToJBCProof (EQUIVALENT) initialized classpath ---------------------------------------- (2) Obligation: need to prove termination of the following program: public class Test2 { public static void main(String[] args) { iter(args.length, args.length % 5, args.length % 4); } private static void iter(int x, int y, int z) { while (x + y + 3 * z >= 0) { if (x > y) x--; else if (y > z) { x++; y -= 2; } else if (y <= z) { x = add(x, 1); y = add(y, 1); z = z - 1; } } } private static int add(int v, int w) { return v + w; } } ---------------------------------------- (3) JBCToGraph (EQUIVALENT) Constructed TerminationGraph. ---------------------------------------- (4) Obligation: Termination Graph based on JBC Program: Test2.main([Ljava/lang/String;)V: Graph of 76 nodes with 1 SCC. ---------------------------------------- (5) TerminationGraphToSCCProof (SOUND) Splitted TerminationGraph to 1 SCCs. ---------------------------------------- (6) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: Test2.main([Ljava/lang/String;)V SCC calls the following helper methods: Performed SCC analyses: *Used field analysis yielded the following read fields: *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (7) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 54 IRulesP rules: f1077_0_iter_Load(EOS(STATIC_1077), i292, i293, i294, i292) -> f1078_0_iter_IntArithmetic(EOS(STATIC_1078), i292, i293, i294, i292, i293) :|: TRUE f1078_0_iter_IntArithmetic(EOS(STATIC_1078), i292, i293, i294, i292, i293) -> f1079_0_iter_ConstantStackPush(EOS(STATIC_1079), i292, i293, i294, i292 + i293) :|: TRUE f1079_0_iter_ConstantStackPush(EOS(STATIC_1079), i292, i293, i294, i300) -> f1080_0_iter_Load(EOS(STATIC_1080), i292, i293, i294, i300, 3) :|: TRUE f1080_0_iter_Load(EOS(STATIC_1080), i292, i293, i294, i300, matching1) -> f1081_0_iter_IntArithmetic(EOS(STATIC_1081), i292, i293, i294, i300, 3, i294) :|: TRUE && matching1 = 3 f1081_0_iter_IntArithmetic(EOS(STATIC_1081), i292, i293, i294, i300, matching1, i294) -> f1082_0_iter_IntArithmetic(EOS(STATIC_1082), i292, i293, i294, i300, 3 * i294) :|: TRUE && matching1 = 3 f1082_0_iter_IntArithmetic(EOS(STATIC_1082), i292, i293, i294, i300, i301) -> f1084_0_iter_LT(EOS(STATIC_1084), i292, i293, i294, i300 + i301) :|: TRUE f1084_0_iter_LT(EOS(STATIC_1084), i292, i293, i294, i304) -> f1086_0_iter_LT(EOS(STATIC_1086), i292, i293, i294, i304) :|: TRUE f1086_0_iter_LT(EOS(STATIC_1086), i292, i293, i294, i304) -> f1089_0_iter_Load(EOS(STATIC_1089), i292, i293, i294) :|: i304 >= 0 f1089_0_iter_Load(EOS(STATIC_1089), i292, i293, i294) -> f1093_0_iter_Load(EOS(STATIC_1093), i292, i293, i294, i292) :|: TRUE f1093_0_iter_Load(EOS(STATIC_1093), i292, i293, i294, i292) -> f1096_0_iter_LE(EOS(STATIC_1096), i292, i293, i294, i292, i293) :|: TRUE f1096_0_iter_LE(EOS(STATIC_1096), i292, i293, i294, i292, i293) -> f1103_0_iter_LE(EOS(STATIC_1103), i292, i293, i294, i292, i293) :|: i292 <= i293 f1096_0_iter_LE(EOS(STATIC_1096), i292, i293, i294, i292, i293) -> f1104_0_iter_LE(EOS(STATIC_1104), i292, i293, i294, i292, i293) :|: i292 > i293 f1103_0_iter_LE(EOS(STATIC_1103), i292, i293, i294, i292, i293) -> f1107_0_iter_Load(EOS(STATIC_1107), i292, i293, i294) :|: i292 <= i293 f1107_0_iter_Load(EOS(STATIC_1107), i292, i293, i294) -> f1113_0_iter_Load(EOS(STATIC_1113), i292, i293, i294, i293) :|: TRUE f1113_0_iter_Load(EOS(STATIC_1113), i292, i293, i294, i293) -> f1116_0_iter_LE(EOS(STATIC_1116), i292, i293, i294, i293, i294) :|: TRUE f1116_0_iter_LE(EOS(STATIC_1116), i292, i293, i294, i293, i294) -> f1123_0_iter_LE(EOS(STATIC_1123), i292, i293, i294, i293, i294) :|: i293 <= i294 f1116_0_iter_LE(EOS(STATIC_1116), i292, i293, i294, i293, i294) -> f1124_0_iter_LE(EOS(STATIC_1124), i292, i293, i294, i293, i294) :|: i293 > i294 f1123_0_iter_LE(EOS(STATIC_1123), i292, i293, i294, i293, i294) -> f1126_0_iter_Load(EOS(STATIC_1126), i292, i293, i294) :|: i293 <= i294 f1126_0_iter_Load(EOS(STATIC_1126), i292, i293, i294) -> f1132_0_iter_Load(EOS(STATIC_1132), i292, i293, i294, i293) :|: TRUE f1132_0_iter_Load(EOS(STATIC_1132), i292, i293, i294, i293) -> f1136_0_iter_GT(EOS(STATIC_1136), i292, i293, i294, i293, i294) :|: TRUE f1136_0_iter_GT(EOS(STATIC_1136), i292, i293, i294, i293, i294) -> f1140_0_iter_GT(EOS(STATIC_1140), i292, i293, i294, i293, i294) :|: i293 <= i294 f1140_0_iter_GT(EOS(STATIC_1140), i292, i293, i294, i293, i294) -> f1145_0_iter_Load(EOS(STATIC_1145), i292, i293, i294) :|: i293 <= i294 f1145_0_iter_Load(EOS(STATIC_1145), i292, i293, i294) -> f1146_0_iter_ConstantStackPush(EOS(STATIC_1146), i293, i294, i292) :|: TRUE f1146_0_iter_ConstantStackPush(EOS(STATIC_1146), i293, i294, i292) -> f1147_0_iter_InvokeMethod(EOS(STATIC_1147), i293, i294, i292, 1) :|: TRUE f1147_0_iter_InvokeMethod(EOS(STATIC_1147), i293, i294, i292, matching1) -> f1148_0_add_Load(EOS(STATIC_1148), i293, i294, i292, 1) :|: TRUE && matching1 = 1 f1148_0_add_Load(EOS(STATIC_1148), i293, i294, i292, matching1) -> f1150_0_add_Load(EOS(STATIC_1150), i293, i294, 1, i292) :|: TRUE && matching1 = 1 f1150_0_add_Load(EOS(STATIC_1150), i293, i294, matching1, i292) -> f1153_0_add_IntArithmetic(EOS(STATIC_1153), i293, i294, i292, 1) :|: TRUE && matching1 = 1 f1153_0_add_IntArithmetic(EOS(STATIC_1153), i293, i294, i292, matching1) -> f1155_0_add_Return(EOS(STATIC_1155), i293, i294, i292 + 1) :|: TRUE && matching1 = 1 f1155_0_add_Return(EOS(STATIC_1155), i293, i294, i320) -> f1157_0_iter_Store(EOS(STATIC_1157), i293, i294, i320) :|: TRUE f1157_0_iter_Store(EOS(STATIC_1157), i293, i294, i320) -> f1159_0_iter_Load(EOS(STATIC_1159), i320, i293, i294) :|: TRUE f1159_0_iter_Load(EOS(STATIC_1159), i320, i293, i294) -> f1161_0_iter_ConstantStackPush(EOS(STATIC_1161), i320, i294, i293) :|: TRUE f1161_0_iter_ConstantStackPush(EOS(STATIC_1161), i320, i294, i293) -> f1163_0_iter_InvokeMethod(EOS(STATIC_1163), i320, i294, i293, 1) :|: TRUE f1163_0_iter_InvokeMethod(EOS(STATIC_1163), i320, i294, i293, matching1) -> f1165_0_add_Load(EOS(STATIC_1165), i320, i294, i293, 1) :|: TRUE && matching1 = 1 f1165_0_add_Load(EOS(STATIC_1165), i320, i294, i293, matching1) -> f1168_0_add_Load(EOS(STATIC_1168), i320, i294, 1, i293) :|: TRUE && matching1 = 1 f1168_0_add_Load(EOS(STATIC_1168), i320, i294, matching1, i293) -> f1169_0_add_IntArithmetic(EOS(STATIC_1169), i320, i294, i293, 1) :|: TRUE && matching1 = 1 f1169_0_add_IntArithmetic(EOS(STATIC_1169), i320, i294, i293, matching1) -> f1170_0_add_Return(EOS(STATIC_1170), i320, i294, i293 + 1) :|: TRUE && matching1 = 1 f1170_0_add_Return(EOS(STATIC_1170), i320, i294, i325) -> f1171_0_iter_Store(EOS(STATIC_1171), i320, i294, i325) :|: TRUE f1171_0_iter_Store(EOS(STATIC_1171), i320, i294, i325) -> f1172_0_iter_Load(EOS(STATIC_1172), i320, i325, i294) :|: TRUE f1172_0_iter_Load(EOS(STATIC_1172), i320, i325, i294) -> f1173_0_iter_ConstantStackPush(EOS(STATIC_1173), i320, i325, i294) :|: TRUE f1173_0_iter_ConstantStackPush(EOS(STATIC_1173), i320, i325, i294) -> f1174_0_iter_IntArithmetic(EOS(STATIC_1174), i320, i325, i294, 1) :|: TRUE f1174_0_iter_IntArithmetic(EOS(STATIC_1174), i320, i325, i294, matching1) -> f1177_0_iter_Store(EOS(STATIC_1177), i320, i325, i294 - 1) :|: TRUE && matching1 = 1 f1177_0_iter_Store(EOS(STATIC_1177), i320, i325, i327) -> f1179_0_iter_JMP(EOS(STATIC_1179), i320, i325, i327) :|: TRUE f1179_0_iter_JMP(EOS(STATIC_1179), i320, i325, i327) -> f1185_0_iter_Load(EOS(STATIC_1185), i320, i325, i327) :|: TRUE f1185_0_iter_Load(EOS(STATIC_1185), i320, i325, i327) -> f1073_0_iter_Load(EOS(STATIC_1073), i320, i325, i327) :|: TRUE f1073_0_iter_Load(EOS(STATIC_1073), i292, i293, i294) -> f1077_0_iter_Load(EOS(STATIC_1077), i292, i293, i294, i292) :|: TRUE f1124_0_iter_LE(EOS(STATIC_1124), i292, i293, i294, i293, i294) -> f1130_0_iter_Inc(EOS(STATIC_1130), i292, i293, i294) :|: i293 > i294 f1130_0_iter_Inc(EOS(STATIC_1130), i292, i293, i294) -> f1134_0_iter_Inc(EOS(STATIC_1134), i292 + 1, i293, i294) :|: TRUE f1134_0_iter_Inc(EOS(STATIC_1134), i314, i293, i294) -> f1138_0_iter_JMP(EOS(STATIC_1138), i314, i293 + -2, i294) :|: TRUE f1138_0_iter_JMP(EOS(STATIC_1138), i314, i316, i294) -> f1143_0_iter_Load(EOS(STATIC_1143), i314, i316, i294) :|: TRUE f1143_0_iter_Load(EOS(STATIC_1143), i314, i316, i294) -> f1073_0_iter_Load(EOS(STATIC_1073), i314, i316, i294) :|: TRUE f1104_0_iter_LE(EOS(STATIC_1104), i292, i293, i294, i292, i293) -> f1111_0_iter_Inc(EOS(STATIC_1111), i292, i293, i294) :|: i292 > i293 f1111_0_iter_Inc(EOS(STATIC_1111), i292, i293, i294) -> f1115_0_iter_JMP(EOS(STATIC_1115), i292 + -1, i293, i294) :|: TRUE f1115_0_iter_JMP(EOS(STATIC_1115), i309, i293, i294) -> f1117_0_iter_Load(EOS(STATIC_1117), i309, i293, i294) :|: TRUE f1117_0_iter_Load(EOS(STATIC_1117), i309, i293, i294) -> f1073_0_iter_Load(EOS(STATIC_1073), i309, i293, i294) :|: TRUE Combined rules. Obtained 3 IRulesP rules: f1077_0_iter_Load(EOS(STATIC_1077), i292:0, i293:0, i294:0, i292:0) -> f1077_0_iter_Load(EOS(STATIC_1077), i292:0 + 1, i293:0 + 1, i294:0 - 1, i292:0 + 1) :|: i292:0 + i293:0 + 3 * i294:0 >= 0 && i293:0 >= i292:0 && i294:0 >= i293:0 f1077_0_iter_Load(EOS(STATIC_1077), i292:0, i293:0, i294:0, i292:0) -> f1077_0_iter_Load(EOS(STATIC_1077), i292:0 - 1, i293:0, i294:0, i292:0 - 1) :|: i292:0 + i293:0 + 3 * i294:0 >= 0 && i293:0 < i292:0 f1077_0_iter_Load(EOS(STATIC_1077), i292:0, i293:0, i294:0, i292:0) -> f1077_0_iter_Load(EOS(STATIC_1077), i292:0 + 1, i293:0 - 2, i294:0, i292:0 + 1) :|: i292:0 + i293:0 + 3 * i294:0 >= 0 && i293:0 >= i292:0 && i294:0 < i293:0 Filtered constant ground arguments: f1077_0_iter_Load(x1, x2, x3, x4, x5) -> f1077_0_iter_Load(x2, x3, x4, x5) EOS(x1) -> EOS Filtered duplicate arguments: f1077_0_iter_Load(x1, x2, x3, x4) -> f1077_0_iter_Load(x2, x3, x4) Finished conversion. Obtained 3 rules.P rules: f1077_0_iter_Load(i293:0, i294:0, i292:0) -> f1077_0_iter_Load(i293:0 + 1, i294:0 - 1, i292:0 + 1) :|: i293:0 >= i292:0 && i294:0 >= i293:0 && i292:0 + i293:0 + 3 * i294:0 >= 0 f1077_0_iter_Load(i293:0, i294:0, i292:0) -> f1077_0_iter_Load(i293:0, i294:0, i292:0 - 1) :|: i292:0 + i293:0 + 3 * i294:0 >= 0 && i293:0 < i292:0 f1077_0_iter_Load(i293:0, i294:0, i292:0) -> f1077_0_iter_Load(i293:0 - 2, i294:0, i292:0 + 1) :|: i293:0 >= i292:0 && i294:0 < i293:0 && i292:0 + i293:0 + 3 * i294:0 >= 0 ---------------------------------------- (8) Obligation: Rules: f1077_0_iter_Load(i293:0, i294:0, i292:0) -> f1077_0_iter_Load(i293:0 + 1, i294:0 - 1, i292:0 + 1) :|: i293:0 >= i292:0 && i294:0 >= i293:0 && i292:0 + i293:0 + 3 * i294:0 >= 0 f1077_0_iter_Load(x, x1, x2) -> f1077_0_iter_Load(x, x1, x2 - 1) :|: x2 + x + 3 * x1 >= 0 && x < x2 f1077_0_iter_Load(x3, x4, x5) -> f1077_0_iter_Load(x3 - 2, x4, x5 + 1) :|: x3 >= x5 && x4 < x3 && x5 + x3 + 3 * x4 >= 0 ---------------------------------------- (9) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (10) Obligation: Rules: f1077_0_iter_Load(i293:0, i294:0, i292:0) -> f1077_0_iter_Load(arith, arith1, arith2) :|: i293:0 >= i292:0 && i294:0 >= i293:0 && i292:0 + i293:0 + 3 * i294:0 >= 0 && arith = i293:0 + 1 && arith1 = i294:0 - 1 && arith2 = i292:0 + 1 f1077_0_iter_Load(x6, x7, x8) -> f1077_0_iter_Load(x6, x7, x9) :|: x8 + x6 + 3 * x7 >= 0 && x6 < x8 && x9 = x8 - 1 f1077_0_iter_Load(x10, x11, x12) -> f1077_0_iter_Load(x13, x11, x14) :|: x10 >= x12 && x11 < x10 && x12 + x10 + 3 * x11 >= 0 && x13 = x10 - 2 && x14 = x12 + 1 ---------------------------------------- (11) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f1077_0_iter_Load(i293:0, i294:0, i292:0) -> f1077_0_iter_Load(arith, arith1, arith2) :|: i293:0 >= i292:0 && i294:0 >= i293:0 && i292:0 + i293:0 + 3 * i294:0 >= 0 && arith = i293:0 + 1 && arith1 = i294:0 - 1 && arith2 = i292:0 + 1 (2) f1077_0_iter_Load(x6, x7, x8) -> f1077_0_iter_Load(x6, x7, x9) :|: x8 + x6 + 3 * x7 >= 0 && x6 < x8 && x9 = x8 - 1 (3) f1077_0_iter_Load(x10, x11, x12) -> f1077_0_iter_Load(x13, x11, x14) :|: x10 >= x12 && x11 < x10 && x12 + x10 + 3 * x11 >= 0 && x13 = x10 - 2 && x14 = x12 + 1 Arcs: (1) -> (1), (3) (2) -> (1), (2), (3) (3) -> (1), (2), (3) This digraph is fully evaluated! ---------------------------------------- (12) Obligation: Termination digraph: Nodes: (1) f1077_0_iter_Load(i293:0, i294:0, i292:0) -> f1077_0_iter_Load(arith, arith1, arith2) :|: i293:0 >= i292:0 && i294:0 >= i293:0 && i292:0 + i293:0 + 3 * i294:0 >= 0 && arith = i293:0 + 1 && arith1 = i294:0 - 1 && arith2 = i292:0 + 1 (2) f1077_0_iter_Load(x6, x7, x8) -> f1077_0_iter_Load(x6, x7, x9) :|: x8 + x6 + 3 * x7 >= 0 && x6 < x8 && x9 = x8 - 1 (3) f1077_0_iter_Load(x10, x11, x12) -> f1077_0_iter_Load(x13, x11, x14) :|: x10 >= x12 && x11 < x10 && x12 + x10 + 3 * x11 >= 0 && x13 = x10 - 2 && x14 = x12 + 1 Arcs: (1) -> (1), (3) (2) -> (1), (2), (3) (3) -> (1), (2), (3) This digraph is fully evaluated! ---------------------------------------- (13) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (14) Obligation: Rules: f1077_0_iter_Load(x10:0, x11:0, x12:0) -> f1077_0_iter_Load(x10:0 - 2, x11:0, x12:0 + 1) :|: x12:0 <= x10:0 && x11:0 < x10:0 && x12:0 + x10:0 + 3 * x11:0 >= 0 f1077_0_iter_Load(i293:0:0, i294:0:0, i292:0:0) -> f1077_0_iter_Load(i293:0:0 + 1, i294:0:0 - 1, i292:0:0 + 1) :|: i293:0:0 >= i292:0:0 && i294:0:0 >= i293:0:0 && i292:0:0 + i293:0:0 + 3 * i294:0:0 >= 0 f1077_0_iter_Load(x6:0, x7:0, x8:0) -> f1077_0_iter_Load(x6:0, x7:0, x8:0 - 1) :|: x8:0 + x6:0 + 3 * x7:0 >= 0 && x8:0 > x6:0 ---------------------------------------- (15) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f1077_0_iter_Load(INTEGER, INTEGER, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (16) Obligation: Rules: f1077_0_iter_Load(x10:0, x11:0, x12:0) -> f1077_0_iter_Load(c, x11:0, c1) :|: c1 = x12:0 + 1 && c = x10:0 - 2 && (x12:0 <= x10:0 && x11:0 < x10:0 && x12:0 + x10:0 + 3 * x11:0 >= 0) f1077_0_iter_Load(i293:0:0, i294:0:0, i292:0:0) -> f1077_0_iter_Load(c2, c3, c4) :|: c4 = i292:0:0 + 1 && (c3 = i294:0:0 - 1 && c2 = i293:0:0 + 1) && (i293:0:0 >= i292:0:0 && i294:0:0 >= i293:0:0 && i292:0:0 + i293:0:0 + 3 * i294:0:0 >= 0) f1077_0_iter_Load(x6:0, x7:0, x8:0) -> f1077_0_iter_Load(x6:0, x7:0, c5) :|: c5 = x8:0 - 1 && (x8:0 + x6:0 + 3 * x7:0 >= 0 && x8:0 > x6:0) ---------------------------------------- (17) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f1077_0_iter_Load(x, x1, x2)] = x + 3*x1 + x2 The following rules are decreasing: f1077_0_iter_Load(x10:0, x11:0, x12:0) -> f1077_0_iter_Load(c, x11:0, c1) :|: c1 = x12:0 + 1 && c = x10:0 - 2 && (x12:0 <= x10:0 && x11:0 < x10:0 && x12:0 + x10:0 + 3 * x11:0 >= 0) f1077_0_iter_Load(i293:0:0, i294:0:0, i292:0:0) -> f1077_0_iter_Load(c2, c3, c4) :|: c4 = i292:0:0 + 1 && (c3 = i294:0:0 - 1 && c2 = i293:0:0 + 1) && (i293:0:0 >= i292:0:0 && i294:0:0 >= i293:0:0 && i292:0:0 + i293:0:0 + 3 * i294:0:0 >= 0) f1077_0_iter_Load(x6:0, x7:0, x8:0) -> f1077_0_iter_Load(x6:0, x7:0, c5) :|: c5 = x8:0 - 1 && (x8:0 + x6:0 + 3 * x7:0 >= 0 && x8:0 > x6:0) The following rules are bounded: f1077_0_iter_Load(i293:0:0, i294:0:0, i292:0:0) -> f1077_0_iter_Load(c2, c3, c4) :|: c4 = i292:0:0 + 1 && (c3 = i294:0:0 - 1 && c2 = i293:0:0 + 1) && (i293:0:0 >= i292:0:0 && i294:0:0 >= i293:0:0 && i292:0:0 + i293:0:0 + 3 * i294:0:0 >= 0) ---------------------------------------- (18) Obligation: Rules: f1077_0_iter_Load(x10:0, x11:0, x12:0) -> f1077_0_iter_Load(c, x11:0, c1) :|: c1 = x12:0 + 1 && c = x10:0 - 2 && (x12:0 <= x10:0 && x11:0 < x10:0 && x12:0 + x10:0 + 3 * x11:0 >= 0) f1077_0_iter_Load(x6:0, x7:0, x8:0) -> f1077_0_iter_Load(x6:0, x7:0, c5) :|: c5 = x8:0 - 1 && (x8:0 + x6:0 + 3 * x7:0 >= 0 && x8:0 > x6:0) ---------------------------------------- (19) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f1077_0_iter_Load(x, x1, x2)] = -1 + x - x1 The following rules are decreasing: f1077_0_iter_Load(x10:0, x11:0, x12:0) -> f1077_0_iter_Load(c, x11:0, c1) :|: c1 = x12:0 + 1 && c = x10:0 - 2 && (x12:0 <= x10:0 && x11:0 < x10:0 && x12:0 + x10:0 + 3 * x11:0 >= 0) The following rules are bounded: f1077_0_iter_Load(x10:0, x11:0, x12:0) -> f1077_0_iter_Load(c, x11:0, c1) :|: c1 = x12:0 + 1 && c = x10:0 - 2 && (x12:0 <= x10:0 && x11:0 < x10:0 && x12:0 + x10:0 + 3 * x11:0 >= 0) ---------------------------------------- (20) Obligation: Rules: f1077_0_iter_Load(x6:0, x7:0, x8:0) -> f1077_0_iter_Load(x6:0, x7:0, c5) :|: c5 = x8:0 - 1 && (x8:0 + x6:0 + 3 * x7:0 >= 0 && x8:0 > x6:0) ---------------------------------------- (21) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f1077_0_iter_Load(x, x1, x2)] = -x + x2 The following rules are decreasing: f1077_0_iter_Load(x6:0, x7:0, x8:0) -> f1077_0_iter_Load(x6:0, x7:0, c5) :|: c5 = x8:0 - 1 && (x8:0 + x6:0 + 3 * x7:0 >= 0 && x8:0 > x6:0) The following rules are bounded: f1077_0_iter_Load(x6:0, x7:0, x8:0) -> f1077_0_iter_Load(x6:0, x7:0, c5) :|: c5 = x8:0 - 1 && (x8:0 + x6:0 + 3 * x7:0 >= 0 && x8:0 > x6:0) ---------------------------------------- (22) YES