/export/starexec/sandbox/solver/bin/starexec_run_standard /export/starexec/sandbox/benchmark/theBenchmark.jar /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- YES proof of /export/starexec/sandbox/benchmark/theBenchmark.jar # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty termination of the given Bare JBC problem could be proven: (0) Bare JBC problem (1) BareJBCToJBCProof [EQUIVALENT, 97 ms] (2) JBC problem (3) JBCToGraph [EQUIVALENT, 767 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 5 ms] (6) JBCTerminationSCC (7) SCCToIRSProof [SOUND, 193 ms] (8) IRSwT (9) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (10) IRSwT (11) IRSwTTerminationDigraphProof [EQUIVALENT, 9 ms] (12) AND (13) IRSwT (14) IntTRSCompressionProof [EQUIVALENT, 3 ms] (15) IRSwT (16) TempFilterProof [SOUND, 14 ms] (17) IntTRS (18) RankingReductionPairProof [EQUIVALENT, 0 ms] (19) YES (20) IRSwT (21) IntTRSCompressionProof [EQUIVALENT, 0 ms] (22) IRSwT (23) TempFilterProof [SOUND, 56 ms] (24) IntTRS (25) PolynomialOrderProcessor [EQUIVALENT, 0 ms] (26) YES ---------------------------------------- (0) Obligation: need to prove termination of the following program: public class Et2 { public static void main(String[] args) { Random.args = args; int a = Random.random(); int b = Random.random(); loop(a,b); } public static void loop(int a, int b){ if (b > 0) { int r = Random.random(); b = a - 1 - r; a = a - 1 - r; loop(a,b); } } } public class Random { static String[] args; static int index = 0; public static int random() { if (index >= args.length) return 0; String string = args[index]; index++; return string.length(); } } ---------------------------------------- (1) BareJBCToJBCProof (EQUIVALENT) initialized classpath ---------------------------------------- (2) Obligation: need to prove termination of the following program: public class Et2 { public static void main(String[] args) { Random.args = args; int a = Random.random(); int b = Random.random(); loop(a,b); } public static void loop(int a, int b){ if (b > 0) { int r = Random.random(); b = a - 1 - r; a = a - 1 - r; loop(a,b); } } } public class Random { static String[] args; static int index = 0; public static int random() { if (index >= args.length) return 0; String string = args[index]; index++; return string.length(); } } ---------------------------------------- (3) JBCToGraph (EQUIVALENT) Constructed TerminationGraph. ---------------------------------------- (4) Obligation: Termination Graph based on JBC Program: Et2.main([Ljava/lang/String;)V: Graph of 237 nodes with 0 SCCs. Et2.loop(II)V: Graph of 140 nodes with 0 SCCs. ---------------------------------------- (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: Et2.loop(II)V SCC calls the following helper methods: Et2.loop(II)V Performed SCC analyses: *Used field analysis yielded the following read fields: *java.lang.String: [count] *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (7) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 70 IRulesP rules: f1483_0_loop_LE(EOS(STATIC_1483(java.lang.Object(o139sub), i103)), i287, i291, i287, i291) -> f1485_0_loop_LE(EOS(STATIC_1485(java.lang.Object(o139sub), i103)), i287, i291, i287, i291) :|: TRUE f1485_0_loop_LE(EOS(STATIC_1485(java.lang.Object(o139sub), i103)), i287, i291, i287, i291) -> f1488_0_loop_InvokeMethod(EOS(STATIC_1488(java.lang.Object(o139sub), i103)), i287, i291, i287) :|: i291 > 0 f1488_0_loop_InvokeMethod(EOS(STATIC_1488(java.lang.Object(o139sub), i103)), i287, i291, i287) -> f1491_0_random_FieldAccess(EOS(STATIC_1491(java.lang.Object(o139sub), i103)), i287, i291, i287) :|: TRUE f1491_0_random_FieldAccess(EOS(STATIC_1491(java.lang.Object(o139sub), i103)), i287, i291, i287) -> f1562_0_random_FieldAccess(EOS(STATIC_1562(java.lang.Object(o139sub), i103)), i287, i291, i287, i103) :|: TRUE f1562_0_random_FieldAccess(EOS(STATIC_1562(java.lang.Object(o139sub), i103)), i287, i291, i287, i103) -> f1565_0_random_ArrayLength(EOS(STATIC_1565(java.lang.Object(o139sub), i103)), i287, i291, i287, i103, java.lang.Object(o139sub)) :|: TRUE f1565_0_random_ArrayLength(EOS(STATIC_1565(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, i103, java.lang.Object(ARRAY(i323))) -> f1568_0_random_ArrayLength(EOS(STATIC_1568(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, i103, java.lang.Object(ARRAY(i323))) :|: i323 >= 0 f1568_0_random_ArrayLength(EOS(STATIC_1568(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, i103, java.lang.Object(ARRAY(i323))) -> f1570_0_random_LT(EOS(STATIC_1570(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, i103, i323) :|: i323 >= 0 f1570_0_random_LT(EOS(STATIC_1570(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, i103, i323) -> f1586_0_random_LT(EOS(STATIC_1586(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, i103, i323) :|: i103 < i323 f1570_0_random_LT(EOS(STATIC_1570(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, i103, i323) -> f1587_0_random_LT(EOS(STATIC_1587(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, i103, i323) :|: i103 >= i323 f1586_0_random_LT(EOS(STATIC_1586(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, i103, i323) -> f1594_0_random_FieldAccess(EOS(STATIC_1594(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287) :|: i103 < i323 f1594_0_random_FieldAccess(EOS(STATIC_1594(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287) -> f1599_0_random_FieldAccess(EOS(STATIC_1599(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, java.lang.Object(ARRAY(i323))) :|: TRUE f1599_0_random_FieldAccess(EOS(STATIC_1599(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, java.lang.Object(ARRAY(i323))) -> f1601_0_random_ArrayAccess(EOS(STATIC_1601(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, java.lang.Object(ARRAY(i323)), i103) :|: TRUE f1601_0_random_ArrayAccess(EOS(STATIC_1601(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, java.lang.Object(ARRAY(i323)), i103) -> f1603_0_random_ArrayAccess(EOS(STATIC_1603(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, java.lang.Object(ARRAY(i323)), i103) :|: TRUE f1603_0_random_ArrayAccess(EOS(STATIC_1603(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, java.lang.Object(ARRAY(i323)), i103) -> f1606_0_random_Store(EOS(STATIC_1606(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, o147) :|: TRUE f1606_0_random_Store(EOS(STATIC_1606(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, o147) -> f1614_0_random_FieldAccess(EOS(STATIC_1614(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, o147) :|: TRUE f1614_0_random_FieldAccess(EOS(STATIC_1614(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, o147) -> f1618_0_random_ConstantStackPush(EOS(STATIC_1618(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, o147, i103) :|: TRUE f1618_0_random_ConstantStackPush(EOS(STATIC_1618(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, o147, i103) -> f1621_0_random_IntArithmetic(EOS(STATIC_1621(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, o147, i103, 1) :|: TRUE f1621_0_random_IntArithmetic(EOS(STATIC_1621(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, o147, i103, matching1) -> f1628_0_random_FieldAccess(EOS(STATIC_1628(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, o147, i103 + 1) :|: i103 >= 0 && matching1 = 1 f1628_0_random_FieldAccess(EOS(STATIC_1628(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, o147, i329) -> f1634_0_random_Load(EOS(STATIC_1634(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, o147) :|: TRUE f1634_0_random_Load(EOS(STATIC_1634(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, o147) -> f1640_0_random_InvokeMethod(EOS(STATIC_1640(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, o147) :|: TRUE f1640_0_random_InvokeMethod(EOS(STATIC_1640(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, java.lang.Object(o149sub)) -> f1648_0_random_InvokeMethod(EOS(STATIC_1648(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, java.lang.Object(o149sub)) :|: TRUE f1648_0_random_InvokeMethod(EOS(STATIC_1648(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, java.lang.Object(o150sub)) -> f1655_0_random_InvokeMethod(EOS(STATIC_1655(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, java.lang.Object(o150sub)) :|: TRUE f1655_0_random_InvokeMethod(EOS(STATIC_1655(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, java.lang.Object(o150sub)) -> f1666_0_length_Load(EOS(STATIC_1666(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, java.lang.Object(o150sub)) :|: TRUE f1666_0_length_Load(EOS(STATIC_1666(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, java.lang.Object(o150sub)) -> f1674_0_length_FieldAccess(EOS(STATIC_1674(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, java.lang.Object(o150sub)) :|: TRUE f1674_0_length_FieldAccess(EOS(STATIC_1674(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, java.lang.Object(java.lang.String(EOC, i336))) -> f1678_0_length_FieldAccess(EOS(STATIC_1678(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, java.lang.Object(java.lang.String(EOC, i336))) :|: i336 >= 0 f1678_0_length_FieldAccess(EOS(STATIC_1678(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, java.lang.Object(java.lang.String(EOC, i336))) -> f1681_0_length_Return(EOS(STATIC_1681(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336) :|: TRUE f1681_0_length_Return(EOS(STATIC_1681(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336) -> f1690_0_random_Return(EOS(STATIC_1690(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336) :|: TRUE f1690_0_random_Return(EOS(STATIC_1690(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336) -> f1694_0_loop_Store(EOS(STATIC_1694(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336) :|: TRUE f1694_0_loop_Store(EOS(STATIC_1694(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336) -> f1705_0_loop_Load(EOS(STATIC_1705(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336) :|: TRUE f1705_0_loop_Load(EOS(STATIC_1705(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336) -> f1715_0_loop_ConstantStackPush(EOS(STATIC_1715(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336, i287) :|: TRUE f1715_0_loop_ConstantStackPush(EOS(STATIC_1715(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336, i287) -> f1724_0_loop_IntArithmetic(EOS(STATIC_1724(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336, i287, 1) :|: TRUE f1724_0_loop_IntArithmetic(EOS(STATIC_1724(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336, i287, matching1) -> f1784_0_loop_Load(EOS(STATIC_1784(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336, i287 - 1) :|: TRUE && matching1 = 1 f1784_0_loop_Load(EOS(STATIC_1784(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336, i360) -> f2751_0_loop_IntArithmetic(EOS(STATIC_2751(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336, i360, i336) :|: TRUE f2751_0_loop_IntArithmetic(EOS(STATIC_2751(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336, i360, i336) -> f2760_0_loop_Store(EOS(STATIC_2760(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336, i360 - i336) :|: i336 >= 0 f2760_0_loop_Store(EOS(STATIC_2760(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i336, i465) -> f2770_0_loop_Load(EOS(STATIC_2770(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i465, i336) :|: TRUE f2770_0_loop_Load(EOS(STATIC_2770(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i287, i465, i336) -> f2832_0_loop_ConstantStackPush(EOS(STATIC_2832(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i465, i336, i287) :|: TRUE f2832_0_loop_ConstantStackPush(EOS(STATIC_2832(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i465, i336, i287) -> f2922_0_loop_IntArithmetic(EOS(STATIC_2922(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i465, i336, i287, 1) :|: TRUE f2922_0_loop_IntArithmetic(EOS(STATIC_2922(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i465, i336, i287, matching1) -> f2931_0_loop_Load(EOS(STATIC_2931(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i465, i336, i287 - 1) :|: TRUE && matching1 = 1 f2931_0_loop_Load(EOS(STATIC_2931(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i465, i336, i533) -> f2941_0_loop_IntArithmetic(EOS(STATIC_2941(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i465, i533, i336) :|: TRUE f2941_0_loop_IntArithmetic(EOS(STATIC_2941(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i465, i533, i336) -> f2949_0_loop_Store(EOS(STATIC_2949(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i465, i533 - i336) :|: i336 >= 0 f2949_0_loop_Store(EOS(STATIC_2949(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i465, i535) -> f2952_0_loop_Load(EOS(STATIC_2952(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i535, i465) :|: TRUE f2952_0_loop_Load(EOS(STATIC_2952(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i535, i465) -> f2959_0_loop_Load(EOS(STATIC_2959(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i465, i535) :|: TRUE f2959_0_loop_Load(EOS(STATIC_2959(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i465, i535) -> f2991_0_loop_InvokeMethod(EOS(STATIC_2991(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i535, i465) :|: TRUE f2991_0_loop_InvokeMethod(EOS(STATIC_2991(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i535, i465) -> f3012_0_loop_Load(EOS(STATIC_3012(java.lang.Object(ARRAY(i323)), i329)), i535, i465, i535, i465) :|: i291 >= 1 && i329 >= 1 && i323 >= 1 && i329 <= i323 f2991_0_loop_InvokeMethod(EOS(STATIC_2991(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i535, i465) -> f3012_1_loop_Load(EOS(STATIC_3012(java.lang.Object(ARRAY(i323)), i329)), i287, i291, i535, i465) :|: i291 >= 1 && i329 >= 1 && i323 >= 1 && i329 <= i323 f3012_0_loop_Load(EOS(STATIC_3012(java.lang.Object(ARRAY(i323)), i329)), i535, i465, i535, i465) -> f3016_0_loop_Load(EOS(STATIC_3016(java.lang.Object(ARRAY(i323)), i329)), i535, i465, i535, i465) :|: TRUE f3016_0_loop_Load(EOS(STATIC_3016(java.lang.Object(ARRAY(i323)), i329)), i535, i465, i535, i465) -> f1482_0_loop_Load(EOS(STATIC_1482(java.lang.Object(ARRAY(i323)), i329)), i535, i465, i535, i465) :|: TRUE f1482_0_loop_Load(EOS(STATIC_1482(java.lang.Object(o139sub), i103)), i287, i288, i287, i288) -> f1483_0_loop_LE(EOS(STATIC_1483(java.lang.Object(o139sub), i103)), i287, i288, i287, i288) :|: TRUE f1587_0_random_LT(EOS(STATIC_1587(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, i103, i323) -> f1598_0_random_ConstantStackPush(EOS(STATIC_1598(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287) :|: i103 >= i323 f1598_0_random_ConstantStackPush(EOS(STATIC_1598(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287) -> f1600_0_random_Return(EOS(STATIC_1600(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, 0) :|: TRUE f1600_0_random_Return(EOS(STATIC_1600(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, matching1) -> f1602_0_loop_Store(EOS(STATIC_1602(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, 0) :|: TRUE && matching1 = 0 f1602_0_loop_Store(EOS(STATIC_1602(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, matching1) -> f1605_0_loop_Load(EOS(STATIC_1605(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, 0) :|: TRUE && matching1 = 0 f1605_0_loop_Load(EOS(STATIC_1605(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, matching1) -> f1611_0_loop_ConstantStackPush(EOS(STATIC_1611(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, 0, i287) :|: TRUE && matching1 = 0 f1611_0_loop_ConstantStackPush(EOS(STATIC_1611(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, matching1, i287) -> f1615_0_loop_IntArithmetic(EOS(STATIC_1615(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, 0, i287, 1) :|: TRUE && matching1 = 0 f1615_0_loop_IntArithmetic(EOS(STATIC_1615(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, matching1, i287, matching2) -> f1620_0_loop_Load(EOS(STATIC_1620(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, 0, i287 - 1) :|: TRUE && matching1 = 0 && matching2 = 1 f1620_0_loop_Load(EOS(STATIC_1620(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, matching1, i328) -> f1625_0_loop_IntArithmetic(EOS(STATIC_1625(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, 0, i328, 0) :|: TRUE && matching1 = 0 f1625_0_loop_IntArithmetic(EOS(STATIC_1625(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, matching1, i328, matching2) -> f1631_0_loop_Store(EOS(STATIC_1631(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, 0, i328 - 0) :|: TRUE && matching1 = 0 && matching2 = 0 f1631_0_loop_Store(EOS(STATIC_1631(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, matching1, i328) -> f1637_0_loop_Load(EOS(STATIC_1637(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, i328, 0) :|: TRUE && matching1 = 0 f1637_0_loop_Load(EOS(STATIC_1637(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i287, i328, matching1) -> f1645_0_loop_ConstantStackPush(EOS(STATIC_1645(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i328, 0, i287) :|: TRUE && matching1 = 0 f1645_0_loop_ConstantStackPush(EOS(STATIC_1645(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i328, matching1, i287) -> f1652_0_loop_IntArithmetic(EOS(STATIC_1652(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i328, 0, i287, 1) :|: TRUE && matching1 = 0 f1652_0_loop_IntArithmetic(EOS(STATIC_1652(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i328, matching1, i287, matching2) -> f1664_0_loop_Load(EOS(STATIC_1664(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i328, 0, i287 - 1) :|: TRUE && matching1 = 0 && matching2 = 1 f1664_0_loop_Load(EOS(STATIC_1664(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i328, matching1, i332) -> f1671_0_loop_IntArithmetic(EOS(STATIC_1671(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i328, i332, 0) :|: TRUE && matching1 = 0 f1671_0_loop_IntArithmetic(EOS(STATIC_1671(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i328, i332, matching1) -> f1673_0_loop_Store(EOS(STATIC_1673(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i328, i332 - 0) :|: TRUE && matching1 = 0 f1673_0_loop_Store(EOS(STATIC_1673(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i328, i332) -> f1677_0_loop_Load(EOS(STATIC_1677(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i332, i328) :|: TRUE f1677_0_loop_Load(EOS(STATIC_1677(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i332, i328) -> f1680_0_loop_Load(EOS(STATIC_1680(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i328, i332) :|: TRUE f1680_0_loop_Load(EOS(STATIC_1680(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i328, i332) -> f1687_0_loop_InvokeMethod(EOS(STATIC_1687(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i332, i328) :|: TRUE f1687_0_loop_InvokeMethod(EOS(STATIC_1687(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i332, i328) -> f1693_0_loop_Load(EOS(STATIC_1693(java.lang.Object(ARRAY(i323)), i103)), i332, i328, i332, i328) :|: i291 >= 1 && i103 >= i323 && i328 < i287 && i332 < i287 && i332 >= i328 f1687_0_loop_InvokeMethod(EOS(STATIC_1687(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i332, i328) -> f1693_1_loop_Load(EOS(STATIC_1693(java.lang.Object(ARRAY(i323)), i103)), i287, i291, i332, i328) :|: i291 >= 1 && i103 >= i323 && i328 < i287 && i332 < i287 && i332 >= i328 f1693_0_loop_Load(EOS(STATIC_1693(java.lang.Object(ARRAY(i323)), i103)), i332, i328, i332, i328) -> f1702_0_loop_Load(EOS(STATIC_1702(java.lang.Object(ARRAY(i323)), i103)), i332, i328, i332, i328) :|: TRUE f1702_0_loop_Load(EOS(STATIC_1702(java.lang.Object(ARRAY(i323)), i103)), i332, i328, i332, i328) -> f1482_0_loop_Load(EOS(STATIC_1482(java.lang.Object(ARRAY(i323)), i103)), i332, i328, i332, i328) :|: TRUE Combined rules. Obtained 4 IRulesP rules: f1483_0_loop_LE(EOS(STATIC_1483(java.lang.Object(ARRAY(i323:0)), i103:0)), i287:0, i291:0, i287:0, i291:0) -> f1483_0_loop_LE(EOS(STATIC_1483(java.lang.Object(ARRAY(i323:0)), i103:0 + 1)), i287:0 - 1 - i336:0, i287:0 - 1 - i336:0, i287:0 - 1 - i336:0, i287:0 - 1 - i336:0) :|: i323:0 > 0 && i291:0 > 0 && i323:0 > i103:0 && i103:0 > -1 && i336:0 > -1 && i323:0 >= i103:0 + 1 f1483_0_loop_LE(EOS(STATIC_1483(java.lang.Object(ARRAY(i323:0)), i103:0)), i287:0, i291:0, i287:0, i291:0) -> f1483_0_loop_LE(EOS(STATIC_1483(java.lang.Object(ARRAY(i323:0)), i103:0)), i287:0 - 1, i287:0 - 1, i287:0 - 1, i287:0 - 1) :|: i291:0 > 0 && i323:0 > -1 && i323:0 <= i103:0 && i287:0 - 1 < i287:0 Removed following non-SCC rules: f1483_0_loop_LE(EOS(STATIC_1483(java.lang.Object(ARRAY(i323:0)), i103:0)), i287:0, i291:0, i287:0, i291:0) -> f3012_1_loop_Load(EOS(STATIC_3012(java.lang.Object(ARRAY(i323:0)), i103:0 + 1)), i287:0, i291:0, i287:0 - 1 - i336:0, i287:0 - 1 - i336:0) :|: i323:0 > 0 && i291:0 > 0 && i323:0 > i103:0 && i103:0 > -1 && i336:0 > -1 && i323:0 >= i103:0 + 1 f1483_0_loop_LE(EOS(STATIC_1483(java.lang.Object(ARRAY(i323:0)), i103:0)), i287:0, i291:0, i287:0, i291:0) -> f1693_1_loop_Load(EOS(STATIC_1693(java.lang.Object(ARRAY(i323:0)), i103:0)), i287:0, i291:0, i287:0 - 1, i287:0 - 1) :|: i291:0 > 0 && i323:0 > -1 && i323:0 <= i103:0 && i287:0 - 1 < i287:0 Filtered duplicate arguments: f1483_0_loop_LE(x1, x2, x3, x4, x5) -> f1483_0_loop_LE(x1, x4, x5) Finished conversion. Obtained 2 rules.P rules: f1483_0_loop_LE(i287:0, i291:0, i323:0, i103:0) -> f1483_0_loop_LE(i287:0 - 1 - i336:0, i287:0 - 1 - i336:0, i323:0, i103:0 + 1) :|: i291:0 > 0 && i323:0 > 0 && i323:0 > i103:0 && i103:0 > -1 && i323:0 >= i103:0 + 1 && i336:0 > -1 f1483_0_loop_LE(i287:0, i291:0, i323:0, i103:0) -> f1483_0_loop_LE(i287:0 - 1, i287:0 - 1, i323:0, i103:0) :|: i323:0 > -1 && i291:0 > 0 && i287:0 - 1 < i287:0 && i323:0 <= i103:0 ---------------------------------------- (8) Obligation: Rules: f1483_0_loop_LE(i287:0, i291:0, i323:0, i103:0) -> f1483_0_loop_LE(i287:0 - 1 - i336:0, i287:0 - 1 - i336:0, i323:0, i103:0 + 1) :|: i291:0 > 0 && i323:0 > 0 && i323:0 > i103:0 && i103:0 > -1 && i323:0 >= i103:0 + 1 && i336:0 > -1 f1483_0_loop_LE(x, x1, x2, x3) -> f1483_0_loop_LE(x - 1, x - 1, x2, x3) :|: x2 > -1 && x1 > 0 && x - 1 < x && x2 <= x3 ---------------------------------------- (9) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (10) Obligation: Rules: f1483_0_loop_LE(i287:0, i291:0, i323:0, i103:0) -> f1483_0_loop_LE(arith, arith, i323:0, arith1) :|: i291:0 > 0 && i323:0 > 0 && i323:0 > i103:0 && i103:0 > -1 && i323:0 >= i103:0 + 1 && i336:0 > -1 && arith = i287:0 - 1 - i336:0 && arith = i287:0 - 1 - i336:0 && arith1 = i103:0 + 1 f1483_0_loop_LE(x4, x5, x6, x7) -> f1483_0_loop_LE(x8, x8, x6, x7) :|: x6 > -1 && x5 > 0 && x4 - 1 < x4 && x6 <= x7 && x8 = x4 - 1 && x8 = x4 - 1 ---------------------------------------- (11) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f1483_0_loop_LE(i287:0, i291:0, i323:0, i103:0) -> f1483_0_loop_LE(arith, arith, i323:0, arith1) :|: i291:0 > 0 && i323:0 > 0 && i323:0 > i103:0 && i103:0 > -1 && i323:0 >= i103:0 + 1 && i336:0 > -1 && arith = i287:0 - 1 - i336:0 && arith = i287:0 - 1 - i336:0 && arith1 = i103:0 + 1 (2) f1483_0_loop_LE(x4, x5, x6, x7) -> f1483_0_loop_LE(x8, x8, x6, x7) :|: x6 > -1 && x5 > 0 && x4 - 1 < x4 && x6 <= x7 && x8 = x4 - 1 && x8 = x4 - 1 Arcs: (1) -> (1), (2) (2) -> (2) This digraph is fully evaluated! ---------------------------------------- (12) Complex Obligation (AND) ---------------------------------------- (13) Obligation: Termination digraph: Nodes: (1) f1483_0_loop_LE(i287:0, i291:0, i323:0, i103:0) -> f1483_0_loop_LE(arith, arith, i323:0, arith1) :|: i291:0 > 0 && i323:0 > 0 && i323:0 > i103:0 && i103:0 > -1 && i323:0 >= i103:0 + 1 && i336:0 > -1 && arith = i287:0 - 1 - i336:0 && arith = i287:0 - 1 - i336:0 && arith1 = i103:0 + 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (14) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (15) Obligation: Rules: f1483_0_loop_LE(i287:0:0, i291:0:0, i323:0:0, i103:0:0) -> f1483_0_loop_LE(i287:0:0 - 1 - i336:0:0, i287:0:0 - 1 - i336:0:0, i323:0:0, i103:0:0 + 1) :|: i323:0:0 >= i103:0:0 + 1 && i336:0:0 > -1 && i103:0:0 > -1 && i323:0:0 > i103:0:0 && i323:0:0 > 0 && i291:0:0 > 0 ---------------------------------------- (16) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f1483_0_loop_LE(VARIABLE, INTEGER, INTEGER, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (17) Obligation: Rules: f1483_0_loop_LE(i287:0:0, i291:0:0, i323:0:0, i103:0:0) -> f1483_0_loop_LE(c, c1, i323:0:0, c2) :|: c2 = i103:0:0 + 1 && (c1 = i287:0:0 - 1 - i336:0:0 && c = i287:0:0 - 1 - i336:0:0) && (i323:0:0 >= i103:0:0 + 1 && i336:0:0 > -1 && i103:0:0 > -1 && i323:0:0 > i103:0:0 && i323:0:0 > 0 && i291:0:0 > 0) ---------------------------------------- (18) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f1483_0_loop_LE ] = f1483_0_loop_LE_3 + -1*f1483_0_loop_LE_4 The following rules are decreasing: f1483_0_loop_LE(i287:0:0, i291:0:0, i323:0:0, i103:0:0) -> f1483_0_loop_LE(c, c1, i323:0:0, c2) :|: c2 = i103:0:0 + 1 && (c1 = i287:0:0 - 1 - i336:0:0 && c = i287:0:0 - 1 - i336:0:0) && (i323:0:0 >= i103:0:0 + 1 && i336:0:0 > -1 && i103:0:0 > -1 && i323:0:0 > i103:0:0 && i323:0:0 > 0 && i291:0:0 > 0) The following rules are bounded: f1483_0_loop_LE(i287:0:0, i291:0:0, i323:0:0, i103:0:0) -> f1483_0_loop_LE(c, c1, i323:0:0, c2) :|: c2 = i103:0:0 + 1 && (c1 = i287:0:0 - 1 - i336:0:0 && c = i287:0:0 - 1 - i336:0:0) && (i323:0:0 >= i103:0:0 + 1 && i336:0:0 > -1 && i103:0:0 > -1 && i323:0:0 > i103:0:0 && i323:0:0 > 0 && i291:0:0 > 0) ---------------------------------------- (19) YES ---------------------------------------- (20) Obligation: Termination digraph: Nodes: (1) f1483_0_loop_LE(x4, x5, x6, x7) -> f1483_0_loop_LE(x8, x8, x6, x7) :|: x6 > -1 && x5 > 0 && x4 - 1 < x4 && x6 <= x7 && x8 = x4 - 1 && x8 = x4 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (21) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (22) Obligation: Rules: f1483_0_loop_LE(x4:0, x5:0, x6:0, x7:0) -> f1483_0_loop_LE(x4:0 - 1, x4:0 - 1, x6:0, x7:0) :|: x4:0 - 1 < x4:0 && x7:0 >= x6:0 && x5:0 > 0 && x6:0 > -1 ---------------------------------------- (23) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f1483_0_loop_LE(INTEGER, INTEGER, INTEGER, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (24) Obligation: Rules: f1483_0_loop_LE(x4:0, x5:0, x6:0, x7:0) -> f1483_0_loop_LE(c, c1, x6:0, x7:0) :|: c1 = x4:0 - 1 && c = x4:0 - 1 && (x4:0 - 1 < x4:0 && x7:0 >= x6:0 && x5:0 > 0 && x6:0 > -1) ---------------------------------------- (25) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f1483_0_loop_LE(x, x1, x2, x3)] = -2 + x^2 + 2*x1 The following rules are decreasing: f1483_0_loop_LE(x4:0, x5:0, x6:0, x7:0) -> f1483_0_loop_LE(c, c1, x6:0, x7:0) :|: c1 = x4:0 - 1 && c = x4:0 - 1 && (x4:0 - 1 < x4:0 && x7:0 >= x6:0 && x5:0 > 0 && x6:0 > -1) The following rules are bounded: f1483_0_loop_LE(x4:0, x5:0, x6:0, x7:0) -> f1483_0_loop_LE(c, c1, x6:0, x7:0) :|: c1 = x4:0 - 1 && c = x4:0 - 1 && (x4:0 - 1 < x4:0 && x7:0 >= x6:0 && x5:0 > 0 && x6:0 > -1) ---------------------------------------- (26) YES