/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, 660 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 0 ms] (6) JBCTerminationSCC (7) SCCToIRSProof [SOUND, 230 ms] (8) IRSwT (9) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (10) IRSwT (11) IRSwTTerminationDigraphProof [EQUIVALENT, 177 ms] (12) IRSwT (13) IntTRSCompressionProof [EQUIVALENT, 0 ms] (14) IRSwT (15) TempFilterProof [SOUND, 89 ms] (16) IntTRS (17) RankingReductionPairProof [EQUIVALENT, 0 ms] (18) IntTRS (19) RankingReductionPairProof [EQUIVALENT, 8 ms] (20) YES ---------------------------------------- (0) Obligation: need to prove termination of the following program: class BubbleSort { public static void main(String[] args) { sort(new int[100]); } public static void sort(int[] x) { int n = x.length; for (int pass=1; pass < n; pass++) // count how many times // This next loop becomes shorter and shorter for (int i=0; i < n - pass; i++) if (x[i] > x[i+1]) { // exchange elements int temp = x[i]; x[i] = x[i+1]; x[i+1] = temp; } } } ---------------------------------------- (1) BareJBCToJBCProof (EQUIVALENT) initialized classpath ---------------------------------------- (2) Obligation: need to prove termination of the following program: class BubbleSort { public static void main(String[] args) { sort(new int[100]); } public static void sort(int[] x) { int n = x.length; for (int pass=1; pass < n; pass++) // count how many times // This next loop becomes shorter and shorter for (int i=0; i < n - pass; i++) if (x[i] > x[i+1]) { // exchange elements int temp = x[i]; x[i] = x[i+1]; x[i+1] = temp; } } } ---------------------------------------- (3) JBCToGraph (EQUIVALENT) Constructed TerminationGraph. ---------------------------------------- (4) Obligation: Termination Graph based on JBC Program: BubbleSort.main([Ljava/lang/String;)V: Graph of 169 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: BubbleSort.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 58 IRulesP rules: f1806_0_sort_Load(EOS(STATIC_1806), java.lang.Object(ARRAY(matching1)), matching2, i106, i106) -> f1807_0_sort_GE(EOS(STATIC_1807), java.lang.Object(ARRAY(100)), 100, i106, i106, 100) :|: TRUE && matching1 = 100 && matching2 = 100 f1807_0_sort_GE(EOS(STATIC_1807), java.lang.Object(ARRAY(matching1)), matching2, i108, i108, matching3) -> f1808_0_sort_GE(EOS(STATIC_1808), java.lang.Object(ARRAY(100)), 100, i108, i108, 100) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f1808_0_sort_GE(EOS(STATIC_1808), java.lang.Object(ARRAY(matching1)), matching2, i108, i108, matching3) -> f1810_0_sort_ConstantStackPush(EOS(STATIC_1810), java.lang.Object(ARRAY(100)), 100, i108) :|: i108 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 f1810_0_sort_ConstantStackPush(EOS(STATIC_1810), java.lang.Object(ARRAY(matching1)), matching2, i108) -> f1818_0_sort_Store(EOS(STATIC_1818), java.lang.Object(ARRAY(100)), 100, i108, 0) :|: TRUE && matching1 = 100 && matching2 = 100 f1818_0_sort_Store(EOS(STATIC_1818), java.lang.Object(ARRAY(matching1)), matching2, i108, matching3) -> f1822_0_sort_Load(EOS(STATIC_1822), java.lang.Object(ARRAY(100)), 100, i108, 0) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 0 f1822_0_sort_Load(EOS(STATIC_1822), java.lang.Object(ARRAY(matching1)), matching2, i108, matching3) -> f1864_0_sort_Load(EOS(STATIC_1864), java.lang.Object(ARRAY(100)), 100, i108, 0) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 0 f1864_0_sort_Load(EOS(STATIC_1864), java.lang.Object(ARRAY(matching1)), matching2, i108, i113) -> f1957_0_sort_Load(EOS(STATIC_1957), java.lang.Object(ARRAY(100)), 100, i108, i113) :|: TRUE && matching1 = 100 && matching2 = 100 f1957_0_sort_Load(EOS(STATIC_1957), java.lang.Object(ARRAY(matching1)), matching2, i108, i122) -> f2015_0_sort_Load(EOS(STATIC_2015), java.lang.Object(ARRAY(100)), 100, i108, i122) :|: TRUE && matching1 = 100 && matching2 = 100 f2015_0_sort_Load(EOS(STATIC_2015), java.lang.Object(ARRAY(matching1)), matching2, i108, i131) -> f2016_0_sort_Load(EOS(STATIC_2016), java.lang.Object(ARRAY(100)), 100, i108, i131, i131) :|: TRUE && matching1 = 100 && matching2 = 100 f2016_0_sort_Load(EOS(STATIC_2016), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131) -> f2017_0_sort_Load(EOS(STATIC_2017), java.lang.Object(ARRAY(100)), 100, i108, i131, i131, 100) :|: TRUE && matching1 = 100 && matching2 = 100 f2017_0_sort_Load(EOS(STATIC_2017), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, matching3) -> f2018_0_sort_IntArithmetic(EOS(STATIC_2018), java.lang.Object(ARRAY(100)), 100, i108, i131, i131, 100, i108) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2018_0_sort_IntArithmetic(EOS(STATIC_2018), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, matching3, i108) -> f2019_0_sort_GE(EOS(STATIC_2019), java.lang.Object(ARRAY(100)), 100, i108, i131, i131, 100 - i108) :|: i108 > 0 && matching1 = 100 && matching2 = 100 && matching3 = 100 f2019_0_sort_GE(EOS(STATIC_2019), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, i133) -> f2020_0_sort_GE(EOS(STATIC_2020), java.lang.Object(ARRAY(100)), 100, i108, i131, i131, i133) :|: i131 >= i133 && matching1 = 100 && matching2 = 100 f2019_0_sort_GE(EOS(STATIC_2019), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, i133) -> f2021_0_sort_GE(EOS(STATIC_2021), java.lang.Object(ARRAY(100)), 100, i108, i131, i131, i133) :|: i131 < i133 && matching1 = 100 && matching2 = 100 f2020_0_sort_GE(EOS(STATIC_2020), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, i133) -> f2025_0_sort_Inc(EOS(STATIC_2025), java.lang.Object(ARRAY(100)), 100, i108) :|: i131 >= i133 && matching1 = 100 && matching2 = 100 f2025_0_sort_Inc(EOS(STATIC_2025), java.lang.Object(ARRAY(matching1)), matching2, i108) -> f2031_0_sort_JMP(EOS(STATIC_2031), java.lang.Object(ARRAY(100)), 100, i108 + 1) :|: TRUE && matching1 = 100 && matching2 = 100 f2031_0_sort_JMP(EOS(STATIC_2031), java.lang.Object(ARRAY(matching1)), matching2, i134) -> f2044_0_sort_Load(EOS(STATIC_2044), java.lang.Object(ARRAY(100)), 100, i134) :|: TRUE && matching1 = 100 && matching2 = 100 f2044_0_sort_Load(EOS(STATIC_2044), java.lang.Object(ARRAY(matching1)), matching2, i134) -> f1805_0_sort_Load(EOS(STATIC_1805), java.lang.Object(ARRAY(100)), 100, i134) :|: TRUE && matching1 = 100 && matching2 = 100 f1805_0_sort_Load(EOS(STATIC_1805), java.lang.Object(ARRAY(matching1)), matching2, i106) -> f1806_0_sort_Load(EOS(STATIC_1806), java.lang.Object(ARRAY(100)), 100, i106, i106) :|: TRUE && matching1 = 100 && matching2 = 100 f2021_0_sort_GE(EOS(STATIC_2021), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, i133) -> f2030_0_sort_Load(EOS(STATIC_2030), java.lang.Object(ARRAY(100)), 100, i108, i131) :|: i131 < i133 && matching1 = 100 && matching2 = 100 f2030_0_sort_Load(EOS(STATIC_2030), java.lang.Object(ARRAY(matching1)), matching2, i108, i131) -> f2033_0_sort_Load(EOS(STATIC_2033), java.lang.Object(ARRAY(100)), 100, i108, i131, java.lang.Object(ARRAY(100))) :|: TRUE && matching1 = 100 && matching2 = 100 f2033_0_sort_Load(EOS(STATIC_2033), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, java.lang.Object(ARRAY(matching3))) -> f2047_0_sort_ArrayAccess(EOS(STATIC_2047), java.lang.Object(ARRAY(100)), 100, i108, i131, java.lang.Object(ARRAY(100)), i131) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2047_0_sort_ArrayAccess(EOS(STATIC_2047), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3)), i136) -> f2050_0_sort_ArrayAccess(EOS(STATIC_2050), java.lang.Object(ARRAY(100)), 100, i108, i136, java.lang.Object(ARRAY(100)), i136) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2050_0_sort_ArrayAccess(EOS(STATIC_2050), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3)), i136) -> f2053_0_sort_Load(EOS(STATIC_2053), java.lang.Object(ARRAY(100)), 100, i108, i136, i138) :|: i136 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 f2053_0_sort_Load(EOS(STATIC_2053), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138) -> f2055_0_sort_Load(EOS(STATIC_2055), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, java.lang.Object(ARRAY(100))) :|: TRUE && matching1 = 100 && matching2 = 100 f2055_0_sort_Load(EOS(STATIC_2055), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, java.lang.Object(ARRAY(matching3))) -> f2058_0_sort_ConstantStackPush(EOS(STATIC_2058), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, java.lang.Object(ARRAY(100)), i136) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2058_0_sort_ConstantStackPush(EOS(STATIC_2058), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, java.lang.Object(ARRAY(matching3)), i136) -> f2064_0_sort_IntArithmetic(EOS(STATIC_2064), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, java.lang.Object(ARRAY(100)), i136, 1) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2064_0_sort_IntArithmetic(EOS(STATIC_2064), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, java.lang.Object(ARRAY(matching3)), i136, matching4) -> f2068_0_sort_ArrayAccess(EOS(STATIC_2068), 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 f2068_0_sort_ArrayAccess(EOS(STATIC_2068), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, java.lang.Object(ARRAY(matching3)), i140) -> f2070_0_sort_ArrayAccess(EOS(STATIC_2070), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, java.lang.Object(ARRAY(100)), i140) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2070_0_sort_ArrayAccess(EOS(STATIC_2070), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, java.lang.Object(ARRAY(matching3)), i140) -> f2073_0_sort_LE(EOS(STATIC_2073), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, i141) :|: i140 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 f2073_0_sort_LE(EOS(STATIC_2073), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, i141) -> f2084_0_sort_LE(EOS(STATIC_2084), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, i141) :|: i138 <= i141 && matching1 = 100 && matching2 = 100 f2073_0_sort_LE(EOS(STATIC_2073), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, i141) -> f2085_0_sort_LE(EOS(STATIC_2085), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, i141) :|: i138 > i141 && matching1 = 100 && matching2 = 100 f2084_0_sort_LE(EOS(STATIC_2084), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, i141) -> f2088_0_sort_Inc(EOS(STATIC_2088), java.lang.Object(ARRAY(100)), 100, i108, i136) :|: i138 <= i141 && matching1 = 100 && matching2 = 100 f2088_0_sort_Inc(EOS(STATIC_2088), java.lang.Object(ARRAY(matching1)), matching2, i108, i136) -> f2092_0_sort_JMP(EOS(STATIC_2092), java.lang.Object(ARRAY(100)), 100, i108, i136 + 1) :|: TRUE && matching1 = 100 && matching2 = 100 f2092_0_sort_JMP(EOS(STATIC_2092), java.lang.Object(ARRAY(matching1)), matching2, i108, i142) -> f2096_0_sort_Load(EOS(STATIC_2096), java.lang.Object(ARRAY(100)), 100, i108, i142) :|: TRUE && matching1 = 100 && matching2 = 100 f2096_0_sort_Load(EOS(STATIC_2096), java.lang.Object(ARRAY(matching1)), matching2, i108, i142) -> f2015_0_sort_Load(EOS(STATIC_2015), java.lang.Object(ARRAY(100)), 100, i108, i142) :|: TRUE && matching1 = 100 && matching2 = 100 f2085_0_sort_LE(EOS(STATIC_2085), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, i141) -> f2089_0_sort_Load(EOS(STATIC_2089), java.lang.Object(ARRAY(100)), 100, i108, i136) :|: i138 > i141 && matching1 = 100 && matching2 = 100 f2089_0_sort_Load(EOS(STATIC_2089), java.lang.Object(ARRAY(matching1)), matching2, i108, i136) -> f2093_0_sort_Load(EOS(STATIC_2093), java.lang.Object(ARRAY(100)), 100, i108, i136, java.lang.Object(ARRAY(100))) :|: TRUE && matching1 = 100 && matching2 = 100 f2093_0_sort_Load(EOS(STATIC_2093), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3))) -> f2097_0_sort_ArrayAccess(EOS(STATIC_2097), java.lang.Object(ARRAY(100)), 100, i108, i136, java.lang.Object(ARRAY(100)), i136) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2097_0_sort_ArrayAccess(EOS(STATIC_2097), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3)), i136) -> f2098_0_sort_Store(EOS(STATIC_2098), java.lang.Object(ARRAY(100)), 100, i108, i136, i144) :|: i136 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 f2098_0_sort_Store(EOS(STATIC_2098), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144) -> f2101_0_sort_Load(EOS(STATIC_2101), java.lang.Object(ARRAY(100)), 100, i108, i136, i144) :|: TRUE && matching1 = 100 && matching2 = 100 f2101_0_sort_Load(EOS(STATIC_2101), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144) -> f2104_0_sort_Load(EOS(STATIC_2104), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100))) :|: TRUE && matching1 = 100 && matching2 = 100 f2104_0_sort_Load(EOS(STATIC_2104), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3))) -> f2105_0_sort_Load(EOS(STATIC_2105), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100)), i136) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2105_0_sort_Load(EOS(STATIC_2105), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136) -> f2108_0_sort_Load(EOS(STATIC_2108), 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 f2108_0_sort_Load(EOS(STATIC_2108), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, java.lang.Object(ARRAY(matching4))) -> f2111_0_sort_ConstantStackPush(EOS(STATIC_2111), 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 f2111_0_sort_ConstantStackPush(EOS(STATIC_2111), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, java.lang.Object(ARRAY(matching4)), i136) -> f2113_0_sort_IntArithmetic(EOS(STATIC_2113), 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 f2113_0_sort_IntArithmetic(EOS(STATIC_2113), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, java.lang.Object(ARRAY(matching4)), i136, matching5) -> f2116_0_sort_ArrayAccess(EOS(STATIC_2116), 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 f2116_0_sort_ArrayAccess(EOS(STATIC_2116), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, java.lang.Object(ARRAY(matching4)), i146) -> f2125_0_sort_ArrayAccess(EOS(STATIC_2125), 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 f2125_0_sort_ArrayAccess(EOS(STATIC_2125), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, java.lang.Object(ARRAY(matching4)), i146) -> f2128_0_sort_ArrayAccess(EOS(STATIC_2128), 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 f2128_0_sort_ArrayAccess(EOS(STATIC_2128), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, i147) -> f2139_0_sort_Load(EOS(STATIC_2139), java.lang.Object(ARRAY(100)), 100, i108, i136, i144) :|: i136 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 f2139_0_sort_Load(EOS(STATIC_2139), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144) -> f2146_0_sort_Load(EOS(STATIC_2146), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100))) :|: TRUE && matching1 = 100 && matching2 = 100 f2146_0_sort_Load(EOS(STATIC_2146), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3))) -> f2156_0_sort_ConstantStackPush(EOS(STATIC_2156), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100)), i136) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2156_0_sort_ConstantStackPush(EOS(STATIC_2156), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136) -> f2166_0_sort_IntArithmetic(EOS(STATIC_2166), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100)), i136, 1) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2166_0_sort_IntArithmetic(EOS(STATIC_2166), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, matching4) -> f2178_0_sort_Load(EOS(STATIC_2178), 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 f2178_0_sort_Load(EOS(STATIC_2178), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i148) -> f2189_0_sort_ArrayAccess(EOS(STATIC_2189), java.lang.Object(ARRAY(100)), 100, i108, i136, java.lang.Object(ARRAY(100)), i148, i144) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2189_0_sort_ArrayAccess(EOS(STATIC_2189), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3)), i149, i144) -> f2195_0_sort_ArrayAccess(EOS(STATIC_2195), java.lang.Object(ARRAY(100)), 100, i108, i136, java.lang.Object(ARRAY(100)), i149, i144) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2195_0_sort_ArrayAccess(EOS(STATIC_2195), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3)), i149, i144) -> f2206_0_sort_Inc(EOS(STATIC_2206), java.lang.Object(ARRAY(100)), 100, i108, i136) :|: i149 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 f2206_0_sort_Inc(EOS(STATIC_2206), java.lang.Object(ARRAY(matching1)), matching2, i108, i136) -> f2088_0_sort_Inc(EOS(STATIC_2088), java.lang.Object(ARRAY(100)), 100, i108, i136) :|: TRUE && matching1 = 100 && matching2 = 100 Combined rules. Obtained 3 IRulesP rules: f2019_0_sort_GE(EOS(STATIC_2019), java.lang.Object(ARRAY(100)), 100, i108:0, i131:0, i131:0, i133:0) -> f2019_0_sort_GE(EOS(STATIC_2019), 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 f2019_0_sort_GE(EOS(STATIC_2019), java.lang.Object(ARRAY(100)), 100, i108:0, i131:0, i131:0, i133:0) -> f2019_0_sort_GE(EOS(STATIC_2019), 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 f2019_0_sort_GE(EOS(STATIC_2019), java.lang.Object(ARRAY(100)), 100, i108:0, i131:0, i131:0, i133:0) -> f2019_0_sort_GE(EOS(STATIC_2019), 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 Filtered constant ground arguments: f2019_0_sort_GE(x1, x2, x3, x4, x5, x6, x7) -> f2019_0_sort_GE(x4, x5, x6, x7) EOS(x1) -> EOS java.lang.Object(x1) -> java.lang.Object ARRAY(x1) -> ARRAY Filtered duplicate arguments: f2019_0_sort_GE(x1, x2, x3, x4) -> f2019_0_sort_GE(x1, x3, x4) Finished conversion. Obtained 3 rules.P rules: f2019_0_sort_GE(i108:0, i131:0, i133:0) -> f2019_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 f2019_0_sort_GE(i108:0, i131:0, i133:0) -> f2019_0_sort_GE(i108:0 + 1, 0, 100 - (i108:0 + 1)) :|: i133:0 <= i131:0 && i108:0 > -1 && i108:0 < 99 f2019_0_sort_GE(i108:0, i131:0, i133:0) -> f2019_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 ---------------------------------------- (8) Obligation: Rules: f2019_0_sort_GE(i108:0, i131:0, i133:0) -> f2019_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 f2019_0_sort_GE(x, x1, x2) -> f2019_0_sort_GE(x + 1, 0, 100 - (x + 1)) :|: x2 <= x1 && x > -1 && x < 99 f2019_0_sort_GE(x3, x4, x5) -> f2019_0_sort_GE(x3, x4 + 1, 100 - x3) :|: x4 < 100 && x5 > x4 && x4 > -1 && x4 < 99 && x3 > 0 && x6 >= x7 ---------------------------------------- (9) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (10) Obligation: Rules: f2019_0_sort_GE(i108:0, i131:0, i133:0) -> f2019_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 f2019_0_sort_GE(x8, x9, x10) -> f2019_0_sort_GE(x11, 0, x12) :|: x10 <= x9 && x8 > -1 && x8 < 99 && x11 = x8 + 1 && x12 = 100 - (x8 + 1) f2019_0_sort_GE(x13, x14, x15) -> f2019_0_sort_GE(x13, x16, x17) :|: x14 < 100 && x15 > x14 && x14 > -1 && x14 < 99 && x13 > 0 && x18 >= x19 && x16 = x14 + 1 && x17 = 100 - x13 ---------------------------------------- (11) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f2019_0_sort_GE(i108:0, i131:0, i133:0) -> f2019_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 (2) f2019_0_sort_GE(x8, x9, x10) -> f2019_0_sort_GE(x11, 0, x12) :|: x10 <= x9 && x8 > -1 && x8 < 99 && x11 = x8 + 1 && x12 = 100 - (x8 + 1) (3) f2019_0_sort_GE(x13, x14, x15) -> f2019_0_sort_GE(x13, x16, x17) :|: x14 < 100 && x15 > x14 && x14 > -1 && x14 < 99 && x13 > 0 && x18 >= x19 && x16 = x14 + 1 && x17 = 100 - x13 Arcs: (1) -> (1), (2), (3) (2) -> (1), (3) (3) -> (1), (2), (3) This digraph is fully evaluated! ---------------------------------------- (12) Obligation: Termination digraph: Nodes: (1) f2019_0_sort_GE(i108:0, i131:0, i133:0) -> f2019_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 (2) f2019_0_sort_GE(x8, x9, x10) -> f2019_0_sort_GE(x11, 0, x12) :|: x10 <= x9 && x8 > -1 && x8 < 99 && x11 = x8 + 1 && x12 = 100 - (x8 + 1) (3) f2019_0_sort_GE(x13, x14, x15) -> f2019_0_sort_GE(x13, x16, x17) :|: x14 < 100 && x15 > x14 && x14 > -1 && x14 < 99 && x13 > 0 && x18 >= x19 && x16 = x14 + 1 && x17 = 100 - x13 Arcs: (1) -> (1), (2), (3) (2) -> (1), (3) (3) -> (1), (2), (3) This digraph is fully evaluated! ---------------------------------------- (13) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (14) Obligation: Rules: f2019_0_sort_GE(x13:0, x14:0, x15:0) -> f2019_0_sort_GE(x13:0, x14:0 + 1, 100 - x13:0) :|: x13:0 > 0 && x19:0 <= x18:0 && x14:0 < 99 && x14:0 > -1 && x15:0 > x14:0 && x14:0 < 100 f2019_0_sort_GE(x8:0, x9:0, x10:0) -> f2019_0_sort_GE(x8:0 + 1, 0, 100 - (x8:0 + 1)) :|: x9:0 >= x10:0 && x8:0 > -1 && x8:0 < 99 f2019_0_sort_GE(i108:0:0, i131:0:0, i133:0:0) -> f2019_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 ---------------------------------------- (15) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f2019_0_sort_GE(INTEGER, VARIABLE, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (16) Obligation: Rules: f2019_0_sort_GE(x13:0, x14:0, x15:0) -> f2019_0_sort_GE(x13:0, c, c1) :|: c1 = 100 - x13:0 && c = x14:0 + 1 && (x13:0 > 0 && x19:0 <= x18:0 && x14:0 < 99 && x14:0 > -1 && x15:0 > x14:0 && x14:0 < 100) f2019_0_sort_GE(x8:0, x9:0, x10:0) -> f2019_0_sort_GE(c2, c3, c4) :|: c4 = 100 - (x8:0 + 1) && (c3 = 0 && c2 = x8:0 + 1) && (x9:0 >= x10:0 && x8:0 > -1 && x8:0 < 99) f2019_0_sort_GE(i108:0:0, i131:0:0, i133:0:0) -> f2019_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) ---------------------------------------- (17) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f2019_0_sort_GE ] = -1*f2019_0_sort_GE_1 The following rules are decreasing: f2019_0_sort_GE(x8:0, x9:0, x10:0) -> f2019_0_sort_GE(c2, c3, c4) :|: c4 = 100 - (x8:0 + 1) && (c3 = 0 && c2 = x8:0 + 1) && (x9:0 >= x10:0 && x8:0 > -1 && x8:0 < 99) The following rules are bounded: f2019_0_sort_GE(x8:0, x9:0, x10:0) -> f2019_0_sort_GE(c2, c3, c4) :|: c4 = 100 - (x8:0 + 1) && (c3 = 0 && c2 = x8:0 + 1) && (x9:0 >= x10:0 && x8:0 > -1 && x8:0 < 99) ---------------------------------------- (18) Obligation: Rules: f2019_0_sort_GE(x13:0, x14:0, x15:0) -> f2019_0_sort_GE(x13:0, c, c1) :|: c1 = 100 - x13:0 && c = x14:0 + 1 && (x13:0 > 0 && x19:0 <= x18:0 && x14:0 < 99 && x14:0 > -1 && x15:0 > x14:0 && x14:0 < 100) f2019_0_sort_GE(i108:0:0, i131:0:0, i133:0:0) -> f2019_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) ---------------------------------------- (19) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f2019_0_sort_GE ] = -1*f2019_0_sort_GE_2 The following rules are decreasing: f2019_0_sort_GE(x13:0, x14:0, x15:0) -> f2019_0_sort_GE(x13:0, c, c1) :|: c1 = 100 - x13:0 && c = x14:0 + 1 && (x13:0 > 0 && x19:0 <= x18:0 && x14:0 < 99 && x14:0 > -1 && x15:0 > x14:0 && x14:0 < 100) f2019_0_sort_GE(i108:0:0, i131:0:0, i133:0:0) -> f2019_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) The following rules are bounded: f2019_0_sort_GE(x13:0, x14:0, x15:0) -> f2019_0_sort_GE(x13:0, c, c1) :|: c1 = 100 - x13:0 && c = x14:0 + 1 && (x13:0 > 0 && x19:0 <= x18:0 && x14:0 < 99 && x14:0 > -1 && x15:0 > x14:0 && x14:0 < 100) f2019_0_sort_GE(i108:0:0, i131:0:0, i133:0:0) -> f2019_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) ---------------------------------------- (20) YES