/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: 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, 649 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 4 ms] (6) JBCTerminationSCC (7) SCCToIRSProof [SOUND, 178 ms] (8) IRSwT (9) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (10) IRSwT (11) IRSwTTerminationDigraphProof [EQUIVALENT, 134 ms] (12) IRSwT (13) IntTRSCompressionProof [EQUIVALENT, 4 ms] (14) IRSwT (15) TempFilterProof [SOUND, 88 ms] (16) IntTRS (17) RankingReductionPairProof [EQUIVALENT, 36 ms] (18) IntTRS (19) RankingReductionPairProof [EQUIVALENT, 0 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: f1652_0_sort_Load(EOS(STATIC_1652), java.lang.Object(ARRAY(matching1)), matching2, i106, i106) -> f1653_0_sort_GE(EOS(STATIC_1653), java.lang.Object(ARRAY(100)), 100, i106, i106, 100) :|: TRUE && matching1 = 100 && matching2 = 100 f1653_0_sort_GE(EOS(STATIC_1653), java.lang.Object(ARRAY(matching1)), matching2, i108, i108, matching3) -> f1658_0_sort_GE(EOS(STATIC_1658), java.lang.Object(ARRAY(100)), 100, i108, i108, 100) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f1658_0_sort_GE(EOS(STATIC_1658), java.lang.Object(ARRAY(matching1)), matching2, i108, i108, matching3) -> f1665_0_sort_ConstantStackPush(EOS(STATIC_1665), java.lang.Object(ARRAY(100)), 100, i108) :|: i108 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 f1665_0_sort_ConstantStackPush(EOS(STATIC_1665), java.lang.Object(ARRAY(matching1)), matching2, i108) -> f1674_0_sort_Store(EOS(STATIC_1674), java.lang.Object(ARRAY(100)), 100, i108, 0) :|: TRUE && matching1 = 100 && matching2 = 100 f1674_0_sort_Store(EOS(STATIC_1674), java.lang.Object(ARRAY(matching1)), matching2, i108, matching3) -> f1676_0_sort_Load(EOS(STATIC_1676), java.lang.Object(ARRAY(100)), 100, i108, 0) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 0 f1676_0_sort_Load(EOS(STATIC_1676), java.lang.Object(ARRAY(matching1)), matching2, i108, matching3) -> f1731_0_sort_Load(EOS(STATIC_1731), java.lang.Object(ARRAY(100)), 100, i108, 0) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 0 f1731_0_sort_Load(EOS(STATIC_1731), java.lang.Object(ARRAY(matching1)), matching2, i108, i113) -> f1845_0_sort_Load(EOS(STATIC_1845), java.lang.Object(ARRAY(100)), 100, i108, i113) :|: TRUE && matching1 = 100 && matching2 = 100 f1845_0_sort_Load(EOS(STATIC_1845), java.lang.Object(ARRAY(matching1)), matching2, i108, i122) -> f1950_0_sort_Load(EOS(STATIC_1950), java.lang.Object(ARRAY(100)), 100, i108, i122) :|: TRUE && matching1 = 100 && matching2 = 100 f1950_0_sort_Load(EOS(STATIC_1950), java.lang.Object(ARRAY(matching1)), matching2, i108, i131) -> f1952_0_sort_Load(EOS(STATIC_1952), java.lang.Object(ARRAY(100)), 100, i108, i131, i131) :|: TRUE && matching1 = 100 && matching2 = 100 f1952_0_sort_Load(EOS(STATIC_1952), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131) -> f1953_0_sort_Load(EOS(STATIC_1953), java.lang.Object(ARRAY(100)), 100, i108, i131, i131, 100) :|: TRUE && matching1 = 100 && matching2 = 100 f1953_0_sort_Load(EOS(STATIC_1953), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, matching3) -> f1954_0_sort_IntArithmetic(EOS(STATIC_1954), java.lang.Object(ARRAY(100)), 100, i108, i131, i131, 100, i108) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f1954_0_sort_IntArithmetic(EOS(STATIC_1954), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, matching3, i108) -> f1957_0_sort_GE(EOS(STATIC_1957), java.lang.Object(ARRAY(100)), 100, i108, i131, i131, 100 - i108) :|: i108 > 0 && matching1 = 100 && matching2 = 100 && matching3 = 100 f1957_0_sort_GE(EOS(STATIC_1957), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, i133) -> f1968_0_sort_GE(EOS(STATIC_1968), java.lang.Object(ARRAY(100)), 100, i108, i131, i131, i133) :|: i131 >= i133 && matching1 = 100 && matching2 = 100 f1957_0_sort_GE(EOS(STATIC_1957), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, i133) -> f1969_0_sort_GE(EOS(STATIC_1969), java.lang.Object(ARRAY(100)), 100, i108, i131, i131, i133) :|: i131 < i133 && matching1 = 100 && matching2 = 100 f1968_0_sort_GE(EOS(STATIC_1968), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, i133) -> f1974_0_sort_Inc(EOS(STATIC_1974), java.lang.Object(ARRAY(100)), 100, i108) :|: i131 >= i133 && matching1 = 100 && matching2 = 100 f1974_0_sort_Inc(EOS(STATIC_1974), java.lang.Object(ARRAY(matching1)), matching2, i108) -> f1982_0_sort_JMP(EOS(STATIC_1982), java.lang.Object(ARRAY(100)), 100, i108 + 1) :|: TRUE && matching1 = 100 && matching2 = 100 f1982_0_sort_JMP(EOS(STATIC_1982), java.lang.Object(ARRAY(matching1)), matching2, i134) -> f1994_0_sort_Load(EOS(STATIC_1994), java.lang.Object(ARRAY(100)), 100, i134) :|: TRUE && matching1 = 100 && matching2 = 100 f1994_0_sort_Load(EOS(STATIC_1994), java.lang.Object(ARRAY(matching1)), matching2, i134) -> f1646_0_sort_Load(EOS(STATIC_1646), java.lang.Object(ARRAY(100)), 100, i134) :|: TRUE && matching1 = 100 && matching2 = 100 f1646_0_sort_Load(EOS(STATIC_1646), java.lang.Object(ARRAY(matching1)), matching2, i106) -> f1652_0_sort_Load(EOS(STATIC_1652), java.lang.Object(ARRAY(100)), 100, i106, i106) :|: TRUE && matching1 = 100 && matching2 = 100 f1969_0_sort_GE(EOS(STATIC_1969), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, i131, i133) -> f1980_0_sort_Load(EOS(STATIC_1980), java.lang.Object(ARRAY(100)), 100, i108, i131) :|: i131 < i133 && matching1 = 100 && matching2 = 100 f1980_0_sort_Load(EOS(STATIC_1980), java.lang.Object(ARRAY(matching1)), matching2, i108, i131) -> f1984_0_sort_Load(EOS(STATIC_1984), java.lang.Object(ARRAY(100)), 100, i108, i131, java.lang.Object(ARRAY(100))) :|: TRUE && matching1 = 100 && matching2 = 100 f1984_0_sort_Load(EOS(STATIC_1984), java.lang.Object(ARRAY(matching1)), matching2, i108, i131, java.lang.Object(ARRAY(matching3))) -> f1995_0_sort_ArrayAccess(EOS(STATIC_1995), java.lang.Object(ARRAY(100)), 100, i108, i131, java.lang.Object(ARRAY(100)), i131) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f1995_0_sort_ArrayAccess(EOS(STATIC_1995), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3)), i136) -> f1997_0_sort_ArrayAccess(EOS(STATIC_1997), java.lang.Object(ARRAY(100)), 100, i108, i136, java.lang.Object(ARRAY(100)), i136) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f1997_0_sort_ArrayAccess(EOS(STATIC_1997), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3)), i136) -> f2000_0_sort_Load(EOS(STATIC_2000), java.lang.Object(ARRAY(100)), 100, i108, i136, i138) :|: i136 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 f2000_0_sort_Load(EOS(STATIC_2000), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138) -> f2007_0_sort_Load(EOS(STATIC_2007), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, java.lang.Object(ARRAY(100))) :|: TRUE && matching1 = 100 && matching2 = 100 f2007_0_sort_Load(EOS(STATIC_2007), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, java.lang.Object(ARRAY(matching3))) -> f2008_0_sort_ConstantStackPush(EOS(STATIC_2008), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, java.lang.Object(ARRAY(100)), i136) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2008_0_sort_ConstantStackPush(EOS(STATIC_2008), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, java.lang.Object(ARRAY(matching3)), i136) -> f2011_0_sort_IntArithmetic(EOS(STATIC_2011), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, java.lang.Object(ARRAY(100)), i136, 1) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2011_0_sort_IntArithmetic(EOS(STATIC_2011), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, java.lang.Object(ARRAY(matching3)), i136, matching4) -> f2016_0_sort_ArrayAccess(EOS(STATIC_2016), 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 f2016_0_sort_ArrayAccess(EOS(STATIC_2016), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, java.lang.Object(ARRAY(matching3)), i140) -> f2020_0_sort_ArrayAccess(EOS(STATIC_2020), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, java.lang.Object(ARRAY(100)), i140) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2020_0_sort_ArrayAccess(EOS(STATIC_2020), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, java.lang.Object(ARRAY(matching3)), i140) -> f2025_0_sort_LE(EOS(STATIC_2025), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, i141) :|: i140 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 f2025_0_sort_LE(EOS(STATIC_2025), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, i141) -> f2035_0_sort_LE(EOS(STATIC_2035), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, i141) :|: i138 <= i141 && matching1 = 100 && matching2 = 100 f2025_0_sort_LE(EOS(STATIC_2025), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, i141) -> f2036_0_sort_LE(EOS(STATIC_2036), java.lang.Object(ARRAY(100)), 100, i108, i136, i138, i141) :|: i138 > i141 && matching1 = 100 && matching2 = 100 f2035_0_sort_LE(EOS(STATIC_2035), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, i141) -> f2042_0_sort_Inc(EOS(STATIC_2042), java.lang.Object(ARRAY(100)), 100, i108, i136) :|: i138 <= i141 && matching1 = 100 && matching2 = 100 f2042_0_sort_Inc(EOS(STATIC_2042), java.lang.Object(ARRAY(matching1)), matching2, i108, i136) -> f2055_0_sort_JMP(EOS(STATIC_2055), java.lang.Object(ARRAY(100)), 100, i108, i136 + 1) :|: TRUE && matching1 = 100 && matching2 = 100 f2055_0_sort_JMP(EOS(STATIC_2055), java.lang.Object(ARRAY(matching1)), matching2, i108, i142) -> f2071_0_sort_Load(EOS(STATIC_2071), java.lang.Object(ARRAY(100)), 100, i108, i142) :|: TRUE && matching1 = 100 && matching2 = 100 f2071_0_sort_Load(EOS(STATIC_2071), java.lang.Object(ARRAY(matching1)), matching2, i108, i142) -> f1950_0_sort_Load(EOS(STATIC_1950), java.lang.Object(ARRAY(100)), 100, i108, i142) :|: TRUE && matching1 = 100 && matching2 = 100 f2036_0_sort_LE(EOS(STATIC_2036), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i138, i141) -> f2047_0_sort_Load(EOS(STATIC_2047), java.lang.Object(ARRAY(100)), 100, i108, i136) :|: i138 > i141 && matching1 = 100 && matching2 = 100 f2047_0_sort_Load(EOS(STATIC_2047), java.lang.Object(ARRAY(matching1)), matching2, i108, i136) -> f2057_0_sort_Load(EOS(STATIC_2057), java.lang.Object(ARRAY(100)), 100, i108, i136, java.lang.Object(ARRAY(100))) :|: TRUE && matching1 = 100 && matching2 = 100 f2057_0_sort_Load(EOS(STATIC_2057), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3))) -> f2074_0_sort_ArrayAccess(EOS(STATIC_2074), java.lang.Object(ARRAY(100)), 100, i108, i136, java.lang.Object(ARRAY(100)), i136) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2074_0_sort_ArrayAccess(EOS(STATIC_2074), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3)), i136) -> f2078_0_sort_Store(EOS(STATIC_2078), java.lang.Object(ARRAY(100)), 100, i108, i136, i144) :|: i136 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 f2078_0_sort_Store(EOS(STATIC_2078), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144) -> f2085_0_sort_Load(EOS(STATIC_2085), java.lang.Object(ARRAY(100)), 100, i108, i136, i144) :|: TRUE && matching1 = 100 && matching2 = 100 f2085_0_sort_Load(EOS(STATIC_2085), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144) -> f2092_0_sort_Load(EOS(STATIC_2092), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100))) :|: TRUE && matching1 = 100 && matching2 = 100 f2092_0_sort_Load(EOS(STATIC_2092), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3))) -> f2094_0_sort_Load(EOS(STATIC_2094), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100)), i136) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2094_0_sort_Load(EOS(STATIC_2094), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136) -> f2099_0_sort_Load(EOS(STATIC_2099), 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 f2099_0_sort_Load(EOS(STATIC_2099), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, java.lang.Object(ARRAY(matching4))) -> f2105_0_sort_ConstantStackPush(EOS(STATIC_2105), 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 f2105_0_sort_ConstantStackPush(EOS(STATIC_2105), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, java.lang.Object(ARRAY(matching4)), i136) -> f2109_0_sort_IntArithmetic(EOS(STATIC_2109), 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 f2109_0_sort_IntArithmetic(EOS(STATIC_2109), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, java.lang.Object(ARRAY(matching4)), i136, matching5) -> f2113_0_sort_ArrayAccess(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) :|: i136 >= 0 && matching1 = 100 && matching2 = 100 && matching3 = 100 && matching4 = 100 && matching5 = 1 f2113_0_sort_ArrayAccess(EOS(STATIC_2113), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136, java.lang.Object(ARRAY(matching4)), i146) -> f2124_0_sort_ArrayAccess(EOS(STATIC_2124), 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 f2124_0_sort_ArrayAccess(EOS(STATIC_2124), 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) -> f2145_0_sort_Load(EOS(STATIC_2145), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100))) :|: TRUE && matching1 = 100 && matching2 = 100 f2145_0_sort_Load(EOS(STATIC_2145), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3))) -> f2155_0_sort_ConstantStackPush(EOS(STATIC_2155), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100)), i136) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2155_0_sort_ConstantStackPush(EOS(STATIC_2155), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, i144, java.lang.Object(ARRAY(matching3)), i136) -> f2163_0_sort_IntArithmetic(EOS(STATIC_2163), java.lang.Object(ARRAY(100)), 100, i108, i136, i144, java.lang.Object(ARRAY(100)), i136, 1) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2163_0_sort_IntArithmetic(EOS(STATIC_2163), 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) -> f2202_0_sort_ArrayAccess(EOS(STATIC_2202), java.lang.Object(ARRAY(100)), 100, i108, i136, java.lang.Object(ARRAY(100)), i149, i144) :|: TRUE && matching1 = 100 && matching2 = 100 && matching3 = 100 f2202_0_sort_ArrayAccess(EOS(STATIC_2202), java.lang.Object(ARRAY(matching1)), matching2, i108, i136, java.lang.Object(ARRAY(matching3)), i149, i144) -> f2213_0_sort_Inc(EOS(STATIC_2213), java.lang.Object(ARRAY(100)), 100, i108, i136) :|: i149 < 100 && matching1 = 100 && matching2 = 100 && matching3 = 100 f2213_0_sort_Inc(EOS(STATIC_2213), java.lang.Object(ARRAY(matching1)), matching2, i108, i136) -> f2042_0_sort_Inc(EOS(STATIC_2042), java.lang.Object(ARRAY(100)), 100, i108, i136) :|: TRUE && matching1 = 100 && matching2 = 100 Combined rules. Obtained 3 IRulesP rules: f1957_0_sort_GE(EOS(STATIC_1957), java.lang.Object(ARRAY(100)), 100, i108:0, i131:0, i131:0, i133:0) -> f1957_0_sort_GE(EOS(STATIC_1957), 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 f1957_0_sort_GE(EOS(STATIC_1957), java.lang.Object(ARRAY(100)), 100, i108:0, i131:0, i131:0, i133:0) -> f1957_0_sort_GE(EOS(STATIC_1957), 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 f1957_0_sort_GE(EOS(STATIC_1957), java.lang.Object(ARRAY(100)), 100, i108:0, i131:0, i131:0, i133:0) -> f1957_0_sort_GE(EOS(STATIC_1957), 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: f1957_0_sort_GE(x1, x2, x3, x4, x5, x6, x7) -> f1957_0_sort_GE(x4, x5, x6, x7) EOS(x1) -> EOS java.lang.Object(x1) -> java.lang.Object ARRAY(x1) -> ARRAY Filtered duplicate arguments: f1957_0_sort_GE(x1, x2, x3, x4) -> f1957_0_sort_GE(x1, x3, x4) Finished conversion. Obtained 3 rules.P rules: f1957_0_sort_GE(i108:0, i131:0, i133:0) -> f1957_0_sort_GE(i108:0 + 1, 0, 100 - (i108:0 + 1)) :|: i133:0 <= i131:0 && i108:0 > -1 && i108:0 < 99 f1957_0_sort_GE(i108:0, i131:0, i133:0) -> f1957_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 f1957_0_sort_GE(i108:0, i131:0, i133:0) -> f1957_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: f1957_0_sort_GE(i108:0, i131:0, i133:0) -> f1957_0_sort_GE(i108:0 + 1, 0, 100 - (i108:0 + 1)) :|: i133:0 <= i131:0 && i108:0 > -1 && i108:0 < 99 f1957_0_sort_GE(x, x1, x2) -> f1957_0_sort_GE(x, x1 + 1, 100 - x) :|: x1 < 100 && x2 > x1 && x1 > -1 && x1 < 99 && x > 0 && x3 >= x4 f1957_0_sort_GE(x5, x6, x7) -> f1957_0_sort_GE(x5, x6 + 1, 100 - x5) :|: x6 < 100 && x7 > x6 && x6 > -1 && x6 < 99 && x5 > 0 && x8 < x9 ---------------------------------------- (9) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (10) Obligation: Rules: f1957_0_sort_GE(i108:0, i131:0, i133:0) -> f1957_0_sort_GE(arith, 0, arith1) :|: i133:0 <= i131:0 && i108:0 > -1 && i108:0 < 99 && arith = i108:0 + 1 && arith1 = 100 - (i108:0 + 1) f1957_0_sort_GE(x10, x11, x12) -> f1957_0_sort_GE(x10, x13, x14) :|: x11 < 100 && x12 > x11 && x11 > -1 && x11 < 99 && x10 > 0 && x15 >= x16 && x13 = x11 + 1 && x14 = 100 - x10 f1957_0_sort_GE(x17, x18, x19) -> f1957_0_sort_GE(x17, x20, x21) :|: x18 < 100 && x19 > x18 && x18 > -1 && x18 < 99 && x17 > 0 && x22 < x23 && x20 = x18 + 1 && x21 = 100 - x17 ---------------------------------------- (11) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f1957_0_sort_GE(i108:0, i131:0, i133:0) -> f1957_0_sort_GE(arith, 0, arith1) :|: i133:0 <= i131:0 && i108:0 > -1 && i108:0 < 99 && arith = i108:0 + 1 && arith1 = 100 - (i108:0 + 1) (2) f1957_0_sort_GE(x10, x11, x12) -> f1957_0_sort_GE(x10, x13, x14) :|: x11 < 100 && x12 > x11 && x11 > -1 && x11 < 99 && x10 > 0 && x15 >= x16 && x13 = x11 + 1 && x14 = 100 - x10 (3) f1957_0_sort_GE(x17, x18, x19) -> f1957_0_sort_GE(x17, x20, x21) :|: x18 < 100 && x19 > x18 && x18 > -1 && x18 < 99 && x17 > 0 && x22 < x23 && x20 = x18 + 1 && x21 = 100 - x17 Arcs: (1) -> (2), (3) (2) -> (1), (2), (3) (3) -> (1), (2), (3) This digraph is fully evaluated! ---------------------------------------- (12) Obligation: Termination digraph: Nodes: (1) f1957_0_sort_GE(i108:0, i131:0, i133:0) -> f1957_0_sort_GE(arith, 0, arith1) :|: i133:0 <= i131:0 && i108:0 > -1 && i108:0 < 99 && arith = i108:0 + 1 && arith1 = 100 - (i108:0 + 1) (2) f1957_0_sort_GE(x10, x11, x12) -> f1957_0_sort_GE(x10, x13, x14) :|: x11 < 100 && x12 > x11 && x11 > -1 && x11 < 99 && x10 > 0 && x15 >= x16 && x13 = x11 + 1 && x14 = 100 - x10 (3) f1957_0_sort_GE(x17, x18, x19) -> f1957_0_sort_GE(x17, x20, x21) :|: x18 < 100 && x19 > x18 && x18 > -1 && x18 < 99 && x17 > 0 && x22 < x23 && x20 = x18 + 1 && x21 = 100 - x17 Arcs: (1) -> (2), (3) (2) -> (1), (2), (3) (3) -> (1), (2), (3) This digraph is fully evaluated! ---------------------------------------- (13) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (14) Obligation: Rules: f1957_0_sort_GE(x17:0, x18:0, x19:0) -> f1957_0_sort_GE(x17:0, x18:0 + 1, 100 - x17:0) :|: x17:0 > 0 && x23:0 > x22:0 && x18:0 < 99 && x18:0 > -1 && x19:0 > x18:0 && x18:0 < 100 f1957_0_sort_GE(i108:0:0, i131:0:0, i133:0:0) -> f1957_0_sort_GE(i108:0:0 + 1, 0, 100 - (i108:0:0 + 1)) :|: i133:0:0 <= i131:0:0 && i108:0:0 > -1 && i108:0:0 < 99 f1957_0_sort_GE(x10:0, x11:0, x12:0) -> f1957_0_sort_GE(x10:0, x11:0 + 1, 100 - x10:0) :|: x10:0 > 0 && x16:0 <= x15:0 && x11:0 < 99 && x11:0 > -1 && x12:0 > x11:0 && x11:0 < 100 ---------------------------------------- (15) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f1957_0_sort_GE(INTEGER, VARIABLE, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (16) Obligation: Rules: f1957_0_sort_GE(x17:0, x18:0, x19:0) -> f1957_0_sort_GE(x17:0, c, c1) :|: c1 = 100 - x17:0 && c = x18:0 + 1 && (x17:0 > 0 && x23:0 > x22:0 && x18:0 < 99 && x18:0 > -1 && x19:0 > x18:0 && x18:0 < 100) f1957_0_sort_GE(i108:0:0, i131:0:0, i133:0:0) -> f1957_0_sort_GE(c2, c3, c4) :|: c4 = 100 - (i108:0:0 + 1) && (c3 = 0 && c2 = i108:0:0 + 1) && (i133:0:0 <= i131:0:0 && i108:0:0 > -1 && i108:0:0 < 99) f1957_0_sort_GE(x10:0, x11:0, x12:0) -> f1957_0_sort_GE(x10:0, c5, c6) :|: c6 = 100 - x10:0 && c5 = x11:0 + 1 && (x10:0 > 0 && x16:0 <= x15:0 && x11:0 < 99 && x11:0 > -1 && x12:0 > x11:0 && x11:0 < 100) ---------------------------------------- (17) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f1957_0_sort_GE ] = -1*f1957_0_sort_GE_1 The following rules are decreasing: f1957_0_sort_GE(i108:0:0, i131:0:0, i133:0:0) -> f1957_0_sort_GE(c2, c3, c4) :|: c4 = 100 - (i108:0:0 + 1) && (c3 = 0 && c2 = i108:0:0 + 1) && (i133:0:0 <= i131:0:0 && i108:0:0 > -1 && i108:0:0 < 99) The following rules are bounded: f1957_0_sort_GE(i108:0:0, i131:0:0, i133:0:0) -> f1957_0_sort_GE(c2, c3, c4) :|: c4 = 100 - (i108:0:0 + 1) && (c3 = 0 && c2 = i108:0:0 + 1) && (i133:0:0 <= i131:0:0 && i108:0:0 > -1 && i108:0:0 < 99) ---------------------------------------- (18) Obligation: Rules: f1957_0_sort_GE(x17:0, x18:0, x19:0) -> f1957_0_sort_GE(x17:0, c, c1) :|: c1 = 100 - x17:0 && c = x18:0 + 1 && (x17:0 > 0 && x23:0 > x22:0 && x18:0 < 99 && x18:0 > -1 && x19:0 > x18:0 && x18:0 < 100) f1957_0_sort_GE(x10:0, x11:0, x12:0) -> f1957_0_sort_GE(x10:0, c5, c6) :|: c6 = 100 - x10:0 && c5 = x11:0 + 1 && (x10:0 > 0 && x16:0 <= x15:0 && x11:0 < 99 && x11:0 > -1 && x12:0 > x11:0 && x11:0 < 100) ---------------------------------------- (19) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f1957_0_sort_GE ] = -1*f1957_0_sort_GE_2 The following rules are decreasing: f1957_0_sort_GE(x17:0, x18:0, x19:0) -> f1957_0_sort_GE(x17:0, c, c1) :|: c1 = 100 - x17:0 && c = x18:0 + 1 && (x17:0 > 0 && x23:0 > x22:0 && x18:0 < 99 && x18:0 > -1 && x19:0 > x18:0 && x18:0 < 100) f1957_0_sort_GE(x10:0, x11:0, x12:0) -> f1957_0_sort_GE(x10:0, c5, c6) :|: c6 = 100 - x10:0 && c5 = x11:0 + 1 && (x10:0 > 0 && x16:0 <= x15:0 && x11:0 < 99 && x11:0 > -1 && x12:0 > x11:0 && x11:0 < 100) The following rules are bounded: f1957_0_sort_GE(x17:0, x18:0, x19:0) -> f1957_0_sort_GE(x17:0, c, c1) :|: c1 = 100 - x17:0 && c = x18:0 + 1 && (x17:0 > 0 && x23:0 > x22:0 && x18:0 < 99 && x18:0 > -1 && x19:0 > x18:0 && x18:0 < 100) f1957_0_sort_GE(x10:0, x11:0, x12:0) -> f1957_0_sort_GE(x10:0, c5, c6) :|: c6 = 100 - x10:0 && c5 = x11:0 + 1 && (x10:0 > 0 && x16:0 <= x15:0 && x11:0 < 99 && x11:0 > -1 && x12:0 > x11:0 && x11:0 < 100) ---------------------------------------- (20) YES