10.56/3.79 YES 10.56/3.80 proof of /export/starexec/sandbox2/benchmark/theBenchmark.jar 10.56/3.80 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 10.56/3.80 10.56/3.80 10.56/3.80 termination of the given Bare JBC problem could be proven: 10.56/3.80 10.56/3.80 (0) Bare JBC problem 10.56/3.80 (1) BareJBCToJBCProof [EQUIVALENT, 94 ms] 10.56/3.80 (2) JBC problem 10.56/3.80 (3) JBCToGraph [EQUIVALENT, 637 ms] 10.56/3.80 (4) JBCTerminationGraph 10.56/3.80 (5) TerminationGraphToSCCProof [SOUND, 0 ms] 10.56/3.80 (6) JBCTerminationSCC 10.56/3.80 (7) SCCToIRSProof [SOUND, 43 ms] 10.56/3.80 (8) IRSwT 10.56/3.80 (9) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 10.56/3.80 (10) IRSwT 10.56/3.80 (11) IRSwTTerminationDigraphProof [EQUIVALENT, 136 ms] 10.56/3.80 (12) IRSwT 10.56/3.80 (13) IntTRSCompressionProof [EQUIVALENT, 0 ms] 10.56/3.80 (14) IRSwT 10.56/3.80 (15) TempFilterProof [SOUND, 78 ms] 10.56/3.80 (16) IntTRS 10.56/3.80 (17) RankingReductionPairProof [EQUIVALENT, 25 ms] 10.56/3.80 (18) IntTRS 10.56/3.80 (19) RankingReductionPairProof [EQUIVALENT, 0 ms] 10.56/3.80 (20) YES 10.56/3.80 10.56/3.80 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (0) 10.56/3.80 Obligation: 10.56/3.80 need to prove termination of the following program: 10.56/3.80 class BubbleSort { 10.56/3.80 public static void main(String[] args) { 10.56/3.80 sort(new int[100]); 10.56/3.80 } 10.56/3.80 10.56/3.80 public static void sort(int[] x) { 10.56/3.80 int n = x.length; 10.56/3.80 for (int pass=1; pass < n; pass++) // count how many times 10.56/3.80 // This next loop becomes shorter and shorter 10.56/3.80 for (int i=0; i < n - pass; i++) 10.56/3.80 if (x[i] > x[i+1]) { 10.56/3.80 // exchange elements 10.56/3.80 int temp = x[i]; x[i] = x[i+1]; x[i+1] = temp; 10.56/3.80 } 10.56/3.80 } 10.56/3.80 } 10.56/3.80 10.56/3.80 10.56/3.80 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (1) BareJBCToJBCProof (EQUIVALENT) 10.56/3.80 initialized classpath 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (2) 10.56/3.80 Obligation: 10.56/3.80 need to prove termination of the following program: 10.56/3.80 class BubbleSort { 10.56/3.80 public static void main(String[] args) { 10.56/3.80 sort(new int[100]); 10.56/3.80 } 10.56/3.80 10.56/3.80 public static void sort(int[] x) { 10.56/3.80 int n = x.length; 10.56/3.80 for (int pass=1; pass < n; pass++) // count how many times 10.56/3.80 // This next loop becomes shorter and shorter 10.56/3.80 for (int i=0; i < n - pass; i++) 10.56/3.80 if (x[i] > x[i+1]) { 10.56/3.80 // exchange elements 10.56/3.80 int temp = x[i]; x[i] = x[i+1]; x[i+1] = temp; 10.56/3.80 } 10.56/3.80 } 10.56/3.80 } 10.56/3.80 10.56/3.80 10.56/3.80 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (3) JBCToGraph (EQUIVALENT) 10.56/3.80 Constructed TerminationGraph. 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (4) 10.56/3.80 Obligation: 10.56/3.80 Termination Graph based on JBC Program: 10.56/3.80 BubbleSort.main([Ljava/lang/String;)V: Graph of 169 nodes with 1 SCC. 10.56/3.80 10.56/3.80 10.56/3.80 10.56/3.80 10.56/3.80 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (5) TerminationGraphToSCCProof (SOUND) 10.56/3.80 Splitted TerminationGraph to 1 SCCs. 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (6) 10.56/3.80 Obligation: 10.56/3.80 SCC of termination graph based on JBC Program. 10.56/3.80 SCC contains nodes from the following methods: BubbleSort.main([Ljava/lang/String;)V 10.56/3.80 SCC calls the following helper methods: 10.56/3.80 Performed SCC analyses: 10.56/3.80 *Used field analysis yielded the following read fields: 10.56/3.80 10.56/3.80 *Marker field analysis yielded the following relations that could be markers: 10.56/3.80 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (7) SCCToIRSProof (SOUND) 10.56/3.80 Transformed FIGraph SCCs to intTRSs. Log: 10.56/3.80 Generated rules. Obtained 58 IRulesP rules: 10.56/3.80 f1716_0_sort_Load(EOS(STATIC_1716), java.lang.Object(ARRAY(matching1)), matching2, i106, i106) -> f1719_0_sort_GE(EOS(STATIC_1719), java.lang.Object(ARRAY(100)), 100, i106, i106, 100) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f1719_0_sort_GE(EOS(STATIC_1719), java.lang.Object(ARRAY(matching1)), matching2, i108, i108, matching3) -> f1727_0_sort_GE(EOS(STATIC_1727), java.lang.Object(ARRAY(100)), 100, i108, i108, 100) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f1727_0_sort_GE(EOS(STATIC_1727), java.lang.Object(ARRAY(matching1)), matching2, i108, i108, matching3) -> f1729_0_sort_ConstantStackPush(EOS(STATIC_1729), java.lang.Object(ARRAY(100)), 100, i108) :|: i108 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f1729_0_sort_ConstantStackPush(EOS(STATIC_1729), java.lang.Object(ARRAY(matching1)), matching2, i108) -> f1738_0_sort_Store(EOS(STATIC_1738), java.lang.Object(ARRAY(100)), 100, i108, 0) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f1738_0_sort_Store(EOS(STATIC_1738), java.lang.Object(ARRAY(matching1)), matching2, i108, matching3) -> f1740_0_sort_Load(EOS(STATIC_1740), java.lang.Object(ARRAY(100)), 100, i108, 0) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 0 10.56/3.80 f1740_0_sort_Load(EOS(STATIC_1740), java.lang.Object(ARRAY(matching1)), matching2, i108, matching3) -> f1817_0_sort_Load(EOS(STATIC_1817), java.lang.Object(ARRAY(100)), 100, i108, 0) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 0 10.56/3.80 f1817_0_sort_Load(EOS(STATIC_1817), java.lang.Object(ARRAY(matching1)), matching2, i108, i113) -> f1916_0_sort_Load(EOS(STATIC_1916), java.lang.Object(ARRAY(100)), 100, i108, i113) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f1916_0_sort_Load(EOS(STATIC_1916), java.lang.Object(ARRAY(matching1)), matching2, i108, i122) -> f2049_0_sort_Load(EOS(STATIC_2049), java.lang.Object(ARRAY(100)), 100, i108, i122) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f2049_0_sort_Load(EOS(STATIC_2049), java.lang.Object(ARRAY(matching1)), matching2, i108, i131) -> f2050_0_sort_Load(EOS(STATIC_2050), java.lang.Object(ARRAY(100)), 100, i108, i131, i131) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f2050_0_sort_Load(EOS(STATIC_2050), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131) -> f2051_0_sort_Load(EOS(STATIC_2051), java.lang.Object(ARRAY(100)), 100, i108, i131, i131, 100) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f2051_0_sort_Load(EOS(STATIC_2051), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, matching3) -> f2052_0_sort_IntArithmetic(EOS(STATIC_2052), java.lang.Object(ARRAY(100)), 100, i108, i131, i131, 100, i108) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2052_0_sort_IntArithmetic(EOS(STATIC_2052), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, matching3, i108) -> f2053_0_sort_GE(EOS(STATIC_2053), java.lang.Object(ARRAY(100)), 100, i108, i131, i131, 100 - i108) :|: i108 > 0 && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2053_0_sort_GE(EOS(STATIC_2053), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, i133) -> f2054_0_sort_GE(EOS(STATIC_2054), java.lang.Object(ARRAY(100)), 100, i108, i131, i131, i133) :|: i131 >= i133 && matching1 = 100 && matching2 = 100 10.56/3.80 f2053_0_sort_GE(EOS(STATIC_2053), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, i133) -> f2055_0_sort_GE(EOS(STATIC_2055), java.lang.Object(ARRAY(100)), 100, i108, i131, i131, i133) :|: i131 < i133 && matching1 = 100 && matching2 = 100 10.56/3.80 f2054_0_sort_GE(EOS(STATIC_2054), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, i133) -> f2056_0_sort_Inc(EOS(STATIC_2056), java.lang.Object(ARRAY(100)), 100, i108) :|: i131 >= i133 && matching1 = 100 && matching2 = 100 10.56/3.80 f2056_0_sort_Inc(EOS(STATIC_2056), java.lang.Object(ARRAY(matching1)), matching2, i108) -> f2058_0_sort_JMP(EOS(STATIC_2058), java.lang.Object(ARRAY(100)), 100, i108 + 1) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f2058_0_sort_JMP(EOS(STATIC_2058), java.lang.Object(ARRAY(matching1)), matching2, i134) -> f2063_0_sort_Load(EOS(STATIC_2063), java.lang.Object(ARRAY(100)), 100, i134) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f2063_0_sort_Load(EOS(STATIC_2063), java.lang.Object(ARRAY(matching1)), matching2, i134) -> f1715_0_sort_Load(EOS(STATIC_1715), java.lang.Object(ARRAY(100)), 100, i134) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f1715_0_sort_Load(EOS(STATIC_1715), java.lang.Object(ARRAY(matching1)), matching2, i106) -> f1716_0_sort_Load(EOS(STATIC_1716), java.lang.Object(ARRAY(100)), 100, i106, i106) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f2055_0_sort_GE(EOS(STATIC_2055), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, i133) -> f2057_0_sort_Load(EOS(STATIC_2057), java.lang.Object(ARRAY(100)), 100, i108, i131) :|: i131 < i133 && matching1 = 100 && matching2 = 100 10.56/3.80 f2057_0_sort_Load(EOS(STATIC_2057), java.lang.Object(ARRAY(matching1)), matching2, i108, i131) -> f2059_0_sort_Load(EOS(STATIC_2059), java.lang.Object(ARRAY(100)), 100, i108, i131, java.lang.Object(ARRAY(100))) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f2059_0_sort_Load(EOS(STATIC_2059), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, java.lang.Object(ARRAY(matching3))) -> f2065_0_sort_ArrayAccess(EOS(STATIC_2065), java.lang.Object(ARRAY(100)), 100, i108, i131, java.lang.Object(ARRAY(100)), i131) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2065_0_sort_ArrayAccess(EOS(STATIC_2065), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3)), i136) -> f2066_0_sort_ArrayAccess(EOS(STATIC_2066), java.lang.Object(ARRAY(100)), 100, i108, i136, java.lang.Object(ARRAY(100)), i136) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2066_0_sort_ArrayAccess(EOS(STATIC_2066), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3)), i136) -> f2069_0_sort_Load(EOS(STATIC_2069), java.lang.Object(ARRAY(100)), 100, i108, i136, i138) :|: i136 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2069_0_sort_Load(EOS(STATIC_2069), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138) -> f2096_0_sort_Load(EOS(STATIC_2096), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, java.lang.Object(ARRAY(100))) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f2096_0_sort_Load(EOS(STATIC_2096), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, java.lang.Object(ARRAY(matching3))) -> f2099_0_sort_ConstantStackPush(EOS(STATIC_2099), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, java.lang.Object(ARRAY(100)), i136) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2099_0_sort_ConstantStackPush(EOS(STATIC_2099), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, java.lang.Object(ARRAY(matching3)), i136) -> f2105_0_sort_IntArithmetic(EOS(STATIC_2105), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, java.lang.Object(ARRAY(100)), i136, 1) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2105_0_sort_IntArithmetic(EOS(STATIC_2105), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, java.lang.Object(ARRAY(matching3)), i136, matching4) -> f2108_0_sort_ArrayAccess(EOS(STATIC_2108), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, java.lang.Object(ARRAY(100)), i136 + 1) :|: i136 >= 0 && matching1 = 100 && matching2 = 100 && matching3 = 100 && matching4 = 1 10.56/3.80 f2108_0_sort_ArrayAccess(EOS(STATIC_2108), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, java.lang.Object(ARRAY(matching3)), i140) -> f2109_0_sort_ArrayAccess(EOS(STATIC_2109), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, java.lang.Object(ARRAY(100)), i140) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2109_0_sort_ArrayAccess(EOS(STATIC_2109), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, java.lang.Object(ARRAY(matching3)), i140) -> f2116_0_sort_LE(EOS(STATIC_2116), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, i141) :|: i140 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2116_0_sort_LE(EOS(STATIC_2116), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, i141) -> f2131_0_sort_LE(EOS(STATIC_2131), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, i141) :|: i138 <= i141 && matching1 = 100 && matching2 = 100 10.56/3.80 f2116_0_sort_LE(EOS(STATIC_2116), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, i141) -> f2132_0_sort_LE(EOS(STATIC_2132), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, i141) :|: i138 > i141 && matching1 = 100 && matching2 = 100 10.56/3.80 f2131_0_sort_LE(EOS(STATIC_2131), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, i141) -> f2141_0_sort_Inc(EOS(STATIC_2141), java.lang.Object(ARRAY(100)), 100, i108, i136) :|: i138 <= i141 && matching1 = 100 && matching2 = 100 10.56/3.80 f2141_0_sort_Inc(EOS(STATIC_2141), java.lang.Object(ARRAY(matching1)), matching2, i108, i136) -> f2153_0_sort_JMP(EOS(STATIC_2153), java.lang.Object(ARRAY(100)), 100, i108, i136 + 1) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f2153_0_sort_JMP(EOS(STATIC_2153), java.lang.Object(ARRAY(matching1)), matching2, i108, i142) -> f2178_0_sort_Load(EOS(STATIC_2178), java.lang.Object(ARRAY(100)), 100, i108, i142) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f2178_0_sort_Load(EOS(STATIC_2178), java.lang.Object(ARRAY(matching1)), matching2, i108, i142) -> f2049_0_sort_Load(EOS(STATIC_2049), java.lang.Object(ARRAY(100)), 100, i108, i142) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f2132_0_sort_LE(EOS(STATIC_2132), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, i141) -> f2143_0_sort_Load(EOS(STATIC_2143), java.lang.Object(ARRAY(100)), 100, i108, i136) :|: i138 > i141 && matching1 = 100 && matching2 = 100 10.56/3.80 f2143_0_sort_Load(EOS(STATIC_2143), java.lang.Object(ARRAY(matching1)), matching2, i108, i136) -> f2154_0_sort_Load(EOS(STATIC_2154), java.lang.Object(ARRAY(100)), 100, i108, i136, java.lang.Object(ARRAY(100))) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f2154_0_sort_Load(EOS(STATIC_2154), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3))) -> f2179_0_sort_ArrayAccess(EOS(STATIC_2179), java.lang.Object(ARRAY(100)), 100, i108, i136, java.lang.Object(ARRAY(100)), i136) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2179_0_sort_ArrayAccess(EOS(STATIC_2179), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3)), i136) -> f2180_0_sort_Store(EOS(STATIC_2180), java.lang.Object(ARRAY(100)), 100, i108, i136, i144) :|: i136 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2180_0_sort_Store(EOS(STATIC_2180), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144) -> f2189_0_sort_Load(EOS(STATIC_2189), java.lang.Object(ARRAY(100)), 100, i108, i136, i144) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f2189_0_sort_Load(EOS(STATIC_2189), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144) -> f2193_0_sort_Load(EOS(STATIC_2193), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100))) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f2193_0_sort_Load(EOS(STATIC_2193), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3))) -> f2194_0_sort_Load(EOS(STATIC_2194), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100)), i136) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2194_0_sort_Load(EOS(STATIC_2194), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136) -> f2205_0_sort_Load(EOS(STATIC_2205), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100)), i136, java.lang.Object(ARRAY(100))) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2205_0_sort_Load(EOS(STATIC_2205), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, java.lang.Object(ARRAY(matching4))) -> f2209_0_sort_ConstantStackPush(EOS(STATIC_2209), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100)), i136, java.lang.Object(ARRAY(100)), i136) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 && matching4 = 100 10.56/3.80 f2209_0_sort_ConstantStackPush(EOS(STATIC_2209), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, java.lang.Object(ARRAY(matching4)), i136) -> f2213_0_sort_IntArithmetic(EOS(STATIC_2213), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100)), i136, java.lang.Object(ARRAY(100)), i136, 1) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 && matching4 = 100 10.56/3.80 f2213_0_sort_IntArithmetic(EOS(STATIC_2213), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, java.lang.Object(ARRAY(matching4)), i136, matching5) -> f2221_0_sort_ArrayAccess(EOS(STATIC_2221), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100)), i136, java.lang.Object(ARRAY(100)), i136 + 1) :|: i136 >= 0 && matching1 = 100 && matching2 = 100 && matching3 = 100 && matching4 = 100 && matching5 = 1 10.56/3.80 f2221_0_sort_ArrayAccess(EOS(STATIC_2221), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, java.lang.Object(ARRAY(matching4)), i146) -> f2233_0_sort_ArrayAccess(EOS(STATIC_2233), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100)), i136, java.lang.Object(ARRAY(100)), i146) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 && matching4 = 100 10.56/3.80 f2233_0_sort_ArrayAccess(EOS(STATIC_2233), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, java.lang.Object(ARRAY(matching4)), i146) -> f2239_0_sort_ArrayAccess(EOS(STATIC_2239), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100)), i136, i147) :|: i146 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 && matching4 = 100 10.56/3.80 f2239_0_sort_ArrayAccess(EOS(STATIC_2239), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, i147) -> f2251_0_sort_Load(EOS(STATIC_2251), java.lang.Object(ARRAY(100)), 100, i108, i136, i144) :|: i136 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2251_0_sort_Load(EOS(STATIC_2251), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144) -> f2262_0_sort_Load(EOS(STATIC_2262), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100))) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 f2262_0_sort_Load(EOS(STATIC_2262), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3))) -> f2266_0_sort_ConstantStackPush(EOS(STATIC_2266), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100)), i136) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2266_0_sort_ConstantStackPush(EOS(STATIC_2266), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136) -> f2270_0_sort_IntArithmetic(EOS(STATIC_2270), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100)), i136, 1) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2270_0_sort_IntArithmetic(EOS(STATIC_2270), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, matching4) -> f2273_0_sort_Load(EOS(STATIC_2273), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100)), i136 + 1) :|: i136 >= 0 && matching1 = 100 && matching2 = 100 && matching3 = 100 && matching4 = 1 10.56/3.80 f2273_0_sort_Load(EOS(STATIC_2273), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i148) -> f2277_0_sort_ArrayAccess(EOS(STATIC_2277), java.lang.Object(ARRAY(100)), 100, i108, i136, java.lang.Object(ARRAY(100)), i148, i144) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2277_0_sort_ArrayAccess(EOS(STATIC_2277), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3)), i149, i144) -> f2281_0_sort_ArrayAccess(EOS(STATIC_2281), java.lang.Object(ARRAY(100)), 100, i108, i136, java.lang.Object(ARRAY(100)), i149, i144) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2281_0_sort_ArrayAccess(EOS(STATIC_2281), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3)), i149, i144) -> f2285_0_sort_Inc(EOS(STATIC_2285), java.lang.Object(ARRAY(100)), 100, i108, i136) :|: i149 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 10.56/3.80 f2285_0_sort_Inc(EOS(STATIC_2285), java.lang.Object(ARRAY(matching1)), matching2, i108, i136) -> f2141_0_sort_Inc(EOS(STATIC_2141), java.lang.Object(ARRAY(100)), 100, i108, i136) :|: TRUE && matching1 = 100 && matching2 = 100 10.56/3.80 Combined rules. Obtained 3 IRulesP rules: 10.56/3.80 f2053_0_sort_GE(EOS(STATIC_2053), java.lang.Object(ARRAY(100)), 100, i108:0, i131:0, i131:0, i133:0) -> f2053_0_sort_GE(EOS(STATIC_2053), java.lang.Object(ARRAY(100)), 100, i108:0, i131:0 + 1, i131:0 + 1, 100 - i108:0) :|: i133:0 > i131:0 && i131:0 < 100 && i131:0 > -1 && i131:0 < 99 && i141:0 < i138:0 && i108:0 > 0 10.56/3.80 f2053_0_sort_GE(EOS(STATIC_2053), java.lang.Object(ARRAY(100)), 100, i108:0, i131:0, i131:0, i133:0) -> f2053_0_sort_GE(EOS(STATIC_2053), java.lang.Object(ARRAY(100)), 100, i108:0, i131:0 + 1, i131:0 + 1, 100 - i108:0) :|: i133:0 > i131:0 && i131:0 < 100 && i131:0 > -1 && i131:0 < 99 && i141:0 >= i138:0 && i108:0 > 0 10.56/3.80 f2053_0_sort_GE(EOS(STATIC_2053), java.lang.Object(ARRAY(100)), 100, i108:0, i131:0, i131:0, i133:0) -> f2053_0_sort_GE(EOS(STATIC_2053), java.lang.Object(ARRAY(100)), 100, i108:0 + 1, 0, 0, 100 - (i108:0 + 1)) :|: i108:0 < 99 && i133:0 <= i131:0 && i108:0 > -1 10.56/3.80 Filtered constant ground arguments: 10.56/3.80 f2053_0_sort_GE(x1, x2, x3, x4, x5, x6, x7) -> f2053_0_sort_GE(x4, x5, x6, x7) 10.56/3.80 EOS(x1) -> EOS 10.56/3.80 java.lang.Object(x1) -> java.lang.Object 10.56/3.80 ARRAY(x1) -> ARRAY 10.56/3.80 Filtered duplicate arguments: 10.56/3.80 f2053_0_sort_GE(x1, x2, x3, x4) -> f2053_0_sort_GE(x1, x3, x4) 10.56/3.80 Finished conversion. Obtained 3 rules.P rules: 10.56/3.80 f2053_0_sort_GE(i108:0, i131:0, i133:0) -> f2053_0_sort_GE(i108:0, i131:0 + 1, 100 - i108:0) :|: i131:0 < 100 && i133:0 > i131:0 && i131:0 > -1 && i131:0 < 99 && i108:0 > 0 && i141:0 < i138:0 10.56/3.80 f2053_0_sort_GE(i108:0, i131:0, i133:0) -> f2053_0_sort_GE(i108:0, i131:0 + 1, 100 - i108:0) :|: i131:0 < 100 && i133:0 > i131:0 && i131:0 > -1 && i131:0 < 99 && i108:0 > 0 && i141:0 >= i138:0 10.56/3.80 f2053_0_sort_GE(i108:0, i131:0, i133:0) -> f2053_0_sort_GE(i108:0 + 1, 0, 100 - (i108:0 + 1)) :|: i133:0 <= i131:0 && i108:0 > -1 && i108:0 < 99 10.56/3.80 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (8) 10.56/3.80 Obligation: 10.56/3.80 Rules: 10.56/3.80 f2053_0_sort_GE(i108:0, i131:0, i133:0) -> f2053_0_sort_GE(i108:0, i131:0 + 1, 100 - i108:0) :|: i131:0 < 100 && i133:0 > i131:0 && i131:0 > -1 && i131:0 < 99 && i108:0 > 0 && i141:0 < i138:0 10.56/3.80 f2053_0_sort_GE(x, x1, x2) -> f2053_0_sort_GE(x, x1 + 1, 100 - x) :|: x1 < 100 && x2 > x1 && x1 > -1 && x1 < 99 && x > 0 && x3 >= x4 10.56/3.80 f2053_0_sort_GE(x5, x6, x7) -> f2053_0_sort_GE(x5 + 1, 0, 100 - (x5 + 1)) :|: x7 <= x6 && x5 > -1 && x5 < 99 10.56/3.80 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (9) IRSFormatTransformerProof (EQUIVALENT) 10.56/3.80 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (10) 10.56/3.80 Obligation: 10.56/3.80 Rules: 10.56/3.80 f2053_0_sort_GE(i108:0, i131:0, i133:0) -> f2053_0_sort_GE(i108:0, arith, arith1) :|: i131:0 < 100 && i133:0 > i131:0 && i131:0 > -1 && i131:0 < 99 && i108:0 > 0 && i141:0 < i138:0 && arith = i131:0 + 1 && arith1 = 100 - i108:0 10.56/3.80 f2053_0_sort_GE(x8, x9, x10) -> f2053_0_sort_GE(x8, x11, x12) :|: x9 < 100 && x10 > x9 && x9 > -1 && x9 < 99 && x8 > 0 && x13 >= x14 && x11 = x9 + 1 && x12 = 100 - x8 10.56/3.80 f2053_0_sort_GE(x15, x16, x17) -> f2053_0_sort_GE(x18, 0, x19) :|: x17 <= x16 && x15 > -1 && x15 < 99 && x18 = x15 + 1 && x19 = 100 - (x15 + 1) 10.56/3.80 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (11) IRSwTTerminationDigraphProof (EQUIVALENT) 10.56/3.80 Constructed termination digraph! 10.56/3.80 Nodes: 10.56/3.80 (1) f2053_0_sort_GE(i108:0, i131:0, i133:0) -> f2053_0_sort_GE(i108:0, arith, arith1) :|: i131:0 < 100 && i133:0 > i131:0 && i131:0 > -1 && i131:0 < 99 && i108:0 > 0 && i141:0 < i138:0 && arith = i131:0 + 1 && arith1 = 100 - i108:0 10.56/3.80 (2) f2053_0_sort_GE(x8, x9, x10) -> f2053_0_sort_GE(x8, x11, x12) :|: x9 < 100 && x10 > x9 && x9 > -1 && x9 < 99 && x8 > 0 && x13 >= x14 && x11 = x9 + 1 && x12 = 100 - x8 10.56/3.80 (3) f2053_0_sort_GE(x15, x16, x17) -> f2053_0_sort_GE(x18, 0, x19) :|: x17 <= x16 && x15 > -1 && x15 < 99 && x18 = x15 + 1 && x19 = 100 - (x15 + 1) 10.56/3.80 10.56/3.80 Arcs: 10.56/3.80 (1) -> (1), (2), (3) 10.56/3.80 (2) -> (1), (2), (3) 10.56/3.80 (3) -> (1), (2) 10.56/3.80 10.56/3.80 This digraph is fully evaluated! 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (12) 10.56/3.80 Obligation: 10.56/3.80 10.56/3.80 Termination digraph: 10.56/3.80 Nodes: 10.56/3.80 (1) f2053_0_sort_GE(i108:0, i131:0, i133:0) -> f2053_0_sort_GE(i108:0, arith, arith1) :|: i131:0 < 100 && i133:0 > i131:0 && i131:0 > -1 && i131:0 < 99 && i108:0 > 0 && i141:0 < i138:0 && arith = i131:0 + 1 && arith1 = 100 - i108:0 10.56/3.80 (2) f2053_0_sort_GE(x8, x9, x10) -> f2053_0_sort_GE(x8, x11, x12) :|: x9 < 100 && x10 > x9 && x9 > -1 && x9 < 99 && x8 > 0 && x13 >= x14 && x11 = x9 + 1 && x12 = 100 - x8 10.56/3.80 (3) f2053_0_sort_GE(x15, x16, x17) -> f2053_0_sort_GE(x18, 0, x19) :|: x17 <= x16 && x15 > -1 && x15 < 99 && x18 = x15 + 1 && x19 = 100 - (x15 + 1) 10.56/3.80 10.56/3.80 Arcs: 10.56/3.80 (1) -> (1), (2), (3) 10.56/3.80 (2) -> (1), (2), (3) 10.56/3.80 (3) -> (1), (2) 10.56/3.80 10.56/3.80 This digraph is fully evaluated! 10.56/3.80 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (13) IntTRSCompressionProof (EQUIVALENT) 10.56/3.80 Compressed rules. 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (14) 10.56/3.80 Obligation: 10.56/3.80 Rules: 10.56/3.80 f2053_0_sort_GE(x15:0, x16:0, x17:0) -> f2053_0_sort_GE(x15:0 + 1, 0, 100 - (x15:0 + 1)) :|: x17:0 <= x16:0 && x15:0 > -1 && x15:0 < 99 10.56/3.80 f2053_0_sort_GE(x8:0, x9:0, x10:0) -> f2053_0_sort_GE(x8:0, x9:0 + 1, 100 - x8:0) :|: x8:0 > 0 && x14:0 <= x13:0 && x9:0 < 99 && x9:0 > -1 && x9:0 < x10:0 && x9:0 < 100 10.56/3.80 f2053_0_sort_GE(i108:0:0, i131:0:0, i133:0:0) -> f2053_0_sort_GE(i108:0:0, i131:0:0 + 1, 100 - i108:0:0) :|: i108:0:0 > 0 && i141:0:0 < i138:0:0 && i131:0:0 < 99 && i131:0:0 > -1 && i133:0:0 > i131:0:0 && i131:0:0 < 100 10.56/3.80 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (15) TempFilterProof (SOUND) 10.56/3.80 Used the following sort dictionary for filtering: 10.56/3.80 f2053_0_sort_GE(INTEGER, VARIABLE, INTEGER) 10.56/3.80 Replaced non-predefined constructor symbols by 0. 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (16) 10.56/3.80 Obligation: 10.56/3.80 Rules: 10.56/3.80 f2053_0_sort_GE(x15:0, x16:0, x17:0) -> f2053_0_sort_GE(c, c1, c2) :|: c2 = 100 - (x15:0 + 1) && (c1 = 0 && c = x15:0 + 1) && (x17:0 <= x16:0 && x15:0 > -1 && x15:0 < 99) 10.56/3.80 f2053_0_sort_GE(x8:0, x9:0, x10:0) -> f2053_0_sort_GE(x8:0, c3, c4) :|: c4 = 100 - x8:0 && c3 = x9:0 + 1 && (x8:0 > 0 && x14:0 <= x13:0 && x9:0 < 99 && x9:0 > -1 && x9:0 < x10:0 && x9:0 < 100) 10.56/3.80 f2053_0_sort_GE(i108:0:0, i131:0:0, i133:0:0) -> f2053_0_sort_GE(i108:0:0, c5, c6) :|: c6 = 100 - i108:0:0 && c5 = i131:0:0 + 1 && (i108:0:0 > 0 && i141:0:0 < i138:0:0 && i131:0:0 < 99 && i131:0:0 > -1 && i133:0:0 > i131:0:0 && i131:0:0 < 100) 10.56/3.80 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (17) RankingReductionPairProof (EQUIVALENT) 10.56/3.80 Interpretation: 10.56/3.80 [ f2053_0_sort_GE ] = -1*f2053_0_sort_GE_1 10.56/3.80 10.56/3.80 The following rules are decreasing: 10.56/3.80 f2053_0_sort_GE(x15:0, x16:0, x17:0) -> f2053_0_sort_GE(c, c1, c2) :|: c2 = 100 - (x15:0 + 1) && (c1 = 0 && c = x15:0 + 1) && (x17:0 <= x16:0 && x15:0 > -1 && x15:0 < 99) 10.56/3.80 10.56/3.80 The following rules are bounded: 10.56/3.80 f2053_0_sort_GE(x15:0, x16:0, x17:0) -> f2053_0_sort_GE(c, c1, c2) :|: c2 = 100 - (x15:0 + 1) && (c1 = 0 && c = x15:0 + 1) && (x17:0 <= x16:0 && x15:0 > -1 && x15:0 < 99) 10.56/3.80 10.56/3.80 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (18) 10.56/3.80 Obligation: 10.56/3.80 Rules: 10.56/3.80 f2053_0_sort_GE(x8:0, x9:0, x10:0) -> f2053_0_sort_GE(x8:0, c3, c4) :|: c4 = 100 - x8:0 && c3 = x9:0 + 1 && (x8:0 > 0 && x14:0 <= x13:0 && x9:0 < 99 && x9:0 > -1 && x9:0 < x10:0 && x9:0 < 100) 10.56/3.80 f2053_0_sort_GE(i108:0:0, i131:0:0, i133:0:0) -> f2053_0_sort_GE(i108:0:0, c5, c6) :|: c6 = 100 - i108:0:0 && c5 = i131:0:0 + 1 && (i108:0:0 > 0 && i141:0:0 < i138:0:0 && i131:0:0 < 99 && i131:0:0 > -1 && i133:0:0 > i131:0:0 && i131:0:0 < 100) 10.56/3.80 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (19) RankingReductionPairProof (EQUIVALENT) 10.56/3.80 Interpretation: 10.56/3.80 [ f2053_0_sort_GE ] = -1*f2053_0_sort_GE_2 10.56/3.80 10.56/3.80 The following rules are decreasing: 10.56/3.80 f2053_0_sort_GE(x8:0, x9:0, x10:0) -> f2053_0_sort_GE(x8:0, c3, c4) :|: c4 = 100 - x8:0 && c3 = x9:0 + 1 && (x8:0 > 0 && x14:0 <= x13:0 && x9:0 < 99 && x9:0 > -1 && x9:0 < x10:0 && x9:0 < 100) 10.56/3.80 f2053_0_sort_GE(i108:0:0, i131:0:0, i133:0:0) -> f2053_0_sort_GE(i108:0:0, c5, c6) :|: c6 = 100 - i108:0:0 && c5 = i131:0:0 + 1 && (i108:0:0 > 0 && i141:0:0 < i138:0:0 && i131:0:0 < 99 && i131:0:0 > -1 && i133:0:0 > i131:0:0 && i131:0:0 < 100) 10.56/3.80 10.56/3.80 The following rules are bounded: 10.56/3.80 f2053_0_sort_GE(x8:0, x9:0, x10:0) -> f2053_0_sort_GE(x8:0, c3, c4) :|: c4 = 100 - x8:0 && c3 = x9:0 + 1 && (x8:0 > 0 && x14:0 <= x13:0 && x9:0 < 99 && x9:0 > -1 && x9:0 < x10:0 && x9:0 < 100) 10.56/3.80 f2053_0_sort_GE(i108:0:0, i131:0:0, i133:0:0) -> f2053_0_sort_GE(i108:0:0, c5, c6) :|: c6 = 100 - i108:0:0 && c5 = i131:0:0 + 1 && (i108:0:0 > 0 && i141:0:0 < i138:0:0 && i131:0:0 < 99 && i131:0:0 > -1 && i133:0:0 > i131:0:0 && i131:0:0 < 100) 10.56/3.80 10.56/3.80 10.56/3.80 ---------------------------------------- 10.56/3.80 10.56/3.80 (20) 10.56/3.80 YES 11.11/4.06 EOF