/export/starexec/sandbox2/solver/bin/starexec_run_standard /export/starexec/sandbox2/benchmark/theBenchmark.jar /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- YES proof of /export/starexec/sandbox2/benchmark/theBenchmark.jar # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 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, 705 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 0 ms] (6) AND (7) JBCTerminationSCC (8) SCCToIRSProof [SOUND, 78 ms] (9) IRSwT (10) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (11) IRSwT (12) IRSwTTerminationDigraphProof [EQUIVALENT, 37 ms] (13) AND (14) IRSwT (15) IntTRSCompressionProof [EQUIVALENT, 0 ms] (16) IRSwT (17) IntTRSUnneededArgumentFilterProof [EQUIVALENT, 0 ms] (18) IRSwT (19) TempFilterProof [SOUND, 4 ms] (20) IntTRS (21) PolynomialOrderProcessor [EQUIVALENT, 0 ms] (22) YES (23) IRSwT (24) IntTRSCompressionProof [EQUIVALENT, 0 ms] (25) IRSwT (26) TempFilterProof [SOUND, 7 ms] (27) IntTRS (28) RankingReductionPairProof [EQUIVALENT, 0 ms] (29) YES (30) JBCTerminationSCC (31) SCCToIRSProof [SOUND, 41 ms] (32) IRSwT (33) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (34) IRSwT (35) IRSwTTerminationDigraphProof [EQUIVALENT, 11 ms] (36) IRSwT (37) IntTRSCompressionProof [EQUIVALENT, 0 ms] (38) IRSwT (39) TempFilterProof [SOUND, 35 ms] (40) IntTRS (41) RankingReductionPairProof [EQUIVALENT, 9 ms] (42) YES ---------------------------------------- (0) Obligation: need to prove termination of the following program: public class TimesPlusUserDef { public static void main(String[] args) { int x, y; x = args[0].length(); y = args[1].length(); times(x, y); } public static int times(int x, int y) { if (y == 0) return 0; if (y > 0) return plus(times(x, y - 1), x); return 0; } public static int plus(int x, int y) { if (y > 0) { return 1 + plus(x, y-1); } else if (x > 0) { return 1 + plus(x-1, y); } else { return 0; } } } ---------------------------------------- (1) BareJBCToJBCProof (EQUIVALENT) initialized classpath ---------------------------------------- (2) Obligation: need to prove termination of the following program: public class TimesPlusUserDef { public static void main(String[] args) { int x, y; x = args[0].length(); y = args[1].length(); times(x, y); } public static int times(int x, int y) { if (y == 0) return 0; if (y > 0) return plus(times(x, y - 1), x); return 0; } public static int plus(int x, int y) { if (y > 0) { return 1 + plus(x, y-1); } else if (x > 0) { return 1 + plus(x-1, y); } else { return 0; } } } ---------------------------------------- (3) JBCToGraph (EQUIVALENT) Constructed TerminationGraph. ---------------------------------------- (4) Obligation: Termination Graph based on JBC Program: TimesPlusUserDef.main([Ljava/lang/String;)V: Graph of 130 nodes with 0 SCCs. TimesPlusUserDef.times(II)I: Graph of 39 nodes with 0 SCCs. TimesPlusUserDef.plus(II)I: Graph of 47 nodes with 0 SCCs. ---------------------------------------- (5) TerminationGraphToSCCProof (SOUND) Splitted TerminationGraph to 2 SCCss. ---------------------------------------- (6) Complex Obligation (AND) ---------------------------------------- (7) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: TimesPlusUserDef.plus(II)I SCC calls the following helper methods: TimesPlusUserDef.plus(II)I Performed SCC analyses: *Used field analysis yielded the following read fields: *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (8) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 26 IRulesP rules: f8526_0_plus_LE(EOS(STATIC_8526), i951, matching1, i951, matching2, matching3) -> f8527_0_plus_LE(EOS(STATIC_8527), i951, 0, i951, 0, 0) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 f8526_0_plus_LE(EOS(STATIC_8526), i951, i953, i951, i953, i953) -> f8528_0_plus_LE(EOS(STATIC_8528), i951, i953, i951, i953, i953) :|: TRUE f8527_0_plus_LE(EOS(STATIC_8527), i951, matching1, i951, matching2, matching3) -> f8529_0_plus_Load(EOS(STATIC_8529), i951, 0, i951, 0) :|: 0 <= 0 && matching1 = 0 && matching2 = 0 && matching3 = 0 f8529_0_plus_Load(EOS(STATIC_8529), i951, matching1, i951, matching2) -> f8531_0_plus_LE(EOS(STATIC_8531), i951, 0, i951, 0, i951) :|: TRUE && matching1 = 0 && matching2 = 0 f8531_0_plus_LE(EOS(STATIC_8531), i955, matching1, i955, matching2, i955) -> f8534_0_plus_LE(EOS(STATIC_8534), i955, 0, i955, 0, i955) :|: TRUE && matching1 = 0 && matching2 = 0 f8534_0_plus_LE(EOS(STATIC_8534), i955, matching1, i955, matching2, i955) -> f8537_0_plus_ConstantStackPush(EOS(STATIC_8537), i955, 0, i955, 0) :|: i955 > 0 && matching1 = 0 && matching2 = 0 f8537_0_plus_ConstantStackPush(EOS(STATIC_8537), i955, matching1, i955, matching2) -> f8540_0_plus_Load(EOS(STATIC_8540), i955, 0, i955, 0, 1) :|: TRUE && matching1 = 0 && matching2 = 0 f8540_0_plus_Load(EOS(STATIC_8540), i955, matching1, i955, matching2, matching3) -> f8543_0_plus_ConstantStackPush(EOS(STATIC_8543), i955, 0, 0, 1, i955) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 1 f8543_0_plus_ConstantStackPush(EOS(STATIC_8543), i955, matching1, matching2, matching3, i955) -> f8545_0_plus_IntArithmetic(EOS(STATIC_8545), i955, 0, 0, 1, i955, 1) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 1 f8545_0_plus_IntArithmetic(EOS(STATIC_8545), i955, matching1, matching2, matching3, i955, matching4) -> f8548_0_plus_Load(EOS(STATIC_8548), i955, 0, 0, 1, i955 - 1) :|: i955 > 0 && matching1 = 0 && matching2 = 0 && matching3 = 1 && matching4 = 1 f8548_0_plus_Load(EOS(STATIC_8548), i955, matching1, matching2, matching3, i960) -> f8551_0_plus_InvokeMethod(EOS(STATIC_8551), i955, 0, 1, i960, 0) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 1 f8551_0_plus_InvokeMethod(EOS(STATIC_8551), i955, matching1, matching2, i960, matching3) -> f8553_0_plus_Load(EOS(STATIC_8553), i960, 0, i960, 0) :|: i955 >= 1 && i960 < i955 && matching1 = 0 && matching2 = 1 && matching3 = 0 f8551_0_plus_InvokeMethod(EOS(STATIC_8551), i955, matching1, matching2, i960, matching3) -> f8553_1_plus_Load(EOS(STATIC_8553), i955, 0, 1, i960, 0) :|: i955 >= 1 && i960 < i955 && matching1 = 0 && matching2 = 1 && matching3 = 0 f8553_0_plus_Load(EOS(STATIC_8553), i960, matching1, i960, matching2) -> f8554_0_plus_Load(EOS(STATIC_8554), i960, 0, i960, 0) :|: TRUE && matching1 = 0 && matching2 = 0 f8554_0_plus_Load(EOS(STATIC_8554), i960, matching1, i960, matching2) -> f8525_0_plus_Load(EOS(STATIC_8525), i960, 0, i960, 0) :|: TRUE && matching1 = 0 && matching2 = 0 f8525_0_plus_Load(EOS(STATIC_8525), i951, i952, i951, i952) -> f8526_0_plus_LE(EOS(STATIC_8526), i951, i952, i951, i952, i952) :|: TRUE f8528_0_plus_LE(EOS(STATIC_8528), i951, i953, i951, i953, i953) -> f8530_0_plus_ConstantStackPush(EOS(STATIC_8530), i951, i953, i951, i953) :|: i953 > 0 f8530_0_plus_ConstantStackPush(EOS(STATIC_8530), i951, i953, i951, i953) -> f8532_0_plus_Load(EOS(STATIC_8532), i951, i953, i951, i953, 1) :|: TRUE f8532_0_plus_Load(EOS(STATIC_8532), i951, i953, i951, i953, matching1) -> f8535_0_plus_Load(EOS(STATIC_8535), i951, i953, i953, 1, i951) :|: TRUE && matching1 = 1 f8535_0_plus_Load(EOS(STATIC_8535), i951, i953, i953, matching1, i951) -> f8538_0_plus_ConstantStackPush(EOS(STATIC_8538), i951, i953, 1, i951, i953) :|: TRUE && matching1 = 1 f8538_0_plus_ConstantStackPush(EOS(STATIC_8538), i951, i953, matching1, i951, i953) -> f8541_0_plus_IntArithmetic(EOS(STATIC_8541), i951, i953, 1, i951, i953, 1) :|: TRUE && matching1 = 1 f8541_0_plus_IntArithmetic(EOS(STATIC_8541), i951, i953, matching1, i951, i953, matching2) -> f8544_0_plus_InvokeMethod(EOS(STATIC_8544), i951, i953, 1, i951, i953 - 1) :|: i953 > 0 && matching1 = 1 && matching2 = 1 f8544_0_plus_InvokeMethod(EOS(STATIC_8544), i951, i953, matching1, i951, i956) -> f8546_0_plus_Load(EOS(STATIC_8546), i951, i956, i951, i956) :|: i953 >= 1 && i956 < i953 && matching1 = 1 f8544_0_plus_InvokeMethod(EOS(STATIC_8544), i951, i953, matching1, i951, i956) -> f8546_1_plus_Load(EOS(STATIC_8546), i951, i953, 1, i951, i956) :|: i953 >= 1 && i956 < i953 && matching1 = 1 f8546_0_plus_Load(EOS(STATIC_8546), i951, i956, i951, i956) -> f8549_0_plus_Load(EOS(STATIC_8549), i951, i956, i951, i956) :|: TRUE f8549_0_plus_Load(EOS(STATIC_8549), i951, i956, i951, i956) -> f8525_0_plus_Load(EOS(STATIC_8525), i951, i956, i951, i956) :|: TRUE Combined rules. Obtained 4 IRulesP rules: f8526_0_plus_LE(EOS(STATIC_8526), i951:0, 0, i951:0, 0, 0) -> f8526_0_plus_LE(EOS(STATIC_8526), i951:0 - 1, 0, i951:0 - 1, 0, 0) :|: i951:0 > 0 && i951:0 - 1 < i951:0 f8526_0_plus_LE(EOS(STATIC_8526), i951:0, i953:0, i951:0, i953:0, i953:0) -> f8526_0_plus_LE(EOS(STATIC_8526), i951:0, i953:0 - 1, i951:0, i953:0 - 1, i953:0 - 1) :|: i953:0 > 0 && i953:0 - 1 < i953:0 Removed following non-SCC rules: f8526_0_plus_LE(EOS(STATIC_8526), i951:0, i953:0, i951:0, i953:0, i953:0) -> f8546_1_plus_Load(EOS(STATIC_8546), i951:0, i953:0, 1, i951:0, i953:0 - 1) :|: i953:0 > 0 && i953:0 - 1 < i953:0 f8526_0_plus_LE(EOS(STATIC_8526), i951:0, 0, i951:0, 0, 0) -> f8553_1_plus_Load(EOS(STATIC_8553), i951:0, 0, 1, i951:0 - 1, 0) :|: i951:0 > 0 && i951:0 - 1 < i951:0 Filtered constant ground arguments: f8526_0_plus_LE(x1, x2, x3, x4, x5, x6) -> f8526_0_plus_LE(x2, x3, x4, x5, x6) EOS(x1) -> EOS Filtered duplicate arguments: f8526_0_plus_LE(x1, x2, x3, x4, x5) -> f8526_0_plus_LE(x3, x5) Finished conversion. Obtained 2 rules.P rules: f8526_0_plus_LE(i951:0, cons_0) -> f8526_0_plus_LE(i951:0 - 1, 0) :|: i951:0 > 0 && i951:0 - 1 < i951:0 && cons_0 = 0 f8526_0_plus_LE(i951:0, i953:0) -> f8526_0_plus_LE(i951:0, i953:0 - 1) :|: i953:0 > 0 && i953:0 - 1 < i953:0 ---------------------------------------- (9) Obligation: Rules: f8526_0_plus_LE(i951:0, cons_0) -> f8526_0_plus_LE(i951:0 - 1, 0) :|: i951:0 > 0 && i951:0 - 1 < i951:0 && cons_0 = 0 f8526_0_plus_LE(x, x1) -> f8526_0_plus_LE(x, x1 - 1) :|: x1 > 0 && x1 - 1 < x1 ---------------------------------------- (10) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (11) Obligation: Rules: f8526_0_plus_LE(i951:0, cons_0) -> f8526_0_plus_LE(arith, 0) :|: i951:0 > 0 && i951:0 - 1 < i951:0 && cons_0 = 0 && arith = i951:0 - 1 f8526_0_plus_LE(x2, x3) -> f8526_0_plus_LE(x2, x4) :|: x3 > 0 && x3 - 1 < x3 && x4 = x3 - 1 ---------------------------------------- (12) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f8526_0_plus_LE(i951:0, cons_0) -> f8526_0_plus_LE(arith, 0) :|: i951:0 > 0 && i951:0 - 1 < i951:0 && cons_0 = 0 && arith = i951:0 - 1 (2) f8526_0_plus_LE(x2, x3) -> f8526_0_plus_LE(x2, x4) :|: x3 > 0 && x3 - 1 < x3 && x4 = x3 - 1 Arcs: (1) -> (1) (2) -> (1), (2) This digraph is fully evaluated! ---------------------------------------- (13) Complex Obligation (AND) ---------------------------------------- (14) Obligation: Termination digraph: Nodes: (1) f8526_0_plus_LE(x2, x3) -> f8526_0_plus_LE(x2, x4) :|: x3 > 0 && x3 - 1 < x3 && x4 = x3 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (15) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (16) Obligation: Rules: f8526_0_plus_LE(x2:0, x3:0) -> f8526_0_plus_LE(x2:0, x3:0 - 1) :|: x3:0 > 0 && x3:0 - 1 < x3:0 ---------------------------------------- (17) IntTRSUnneededArgumentFilterProof (EQUIVALENT) Some arguments are removed because they cannot influence termination. We removed arguments according to the following replacements: f8526_0_plus_LE(x1, x2) -> f8526_0_plus_LE(x2) ---------------------------------------- (18) Obligation: Rules: f8526_0_plus_LE(x3:0) -> f8526_0_plus_LE(x3:0 - 1) :|: x3:0 > 0 && x3:0 - 1 < x3:0 ---------------------------------------- (19) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f8526_0_plus_LE(INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (20) Obligation: Rules: f8526_0_plus_LE(x3:0) -> f8526_0_plus_LE(c) :|: c = x3:0 - 1 && (x3:0 > 0 && x3:0 - 1 < x3:0) ---------------------------------------- (21) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f8526_0_plus_LE(x)] = x The following rules are decreasing: f8526_0_plus_LE(x3:0) -> f8526_0_plus_LE(c) :|: c = x3:0 - 1 && (x3:0 > 0 && x3:0 - 1 < x3:0) The following rules are bounded: f8526_0_plus_LE(x3:0) -> f8526_0_plus_LE(c) :|: c = x3:0 - 1 && (x3:0 > 0 && x3:0 - 1 < x3:0) ---------------------------------------- (22) YES ---------------------------------------- (23) Obligation: Termination digraph: Nodes: (1) f8526_0_plus_LE(i951:0, cons_0) -> f8526_0_plus_LE(arith, 0) :|: i951:0 > 0 && i951:0 - 1 < i951:0 && cons_0 = 0 && arith = i951:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (24) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (25) Obligation: Rules: f8526_0_plus_LE(i951:0:0, cons_0) -> f8526_0_plus_LE(i951:0:0 - 1, 0) :|: i951:0:0 > 0 && i951:0:0 - 1 < i951:0:0 && cons_0 = 0 ---------------------------------------- (26) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f8526_0_plus_LE(INTEGER, VARIABLE) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (27) Obligation: Rules: f8526_0_plus_LE(i951:0:0, c) -> f8526_0_plus_LE(c1, c2) :|: c2 = 0 && (c1 = i951:0:0 - 1 && c = 0) && (i951:0:0 > 0 && i951:0:0 - 1 < i951:0:0 && cons_0 = 0) ---------------------------------------- (28) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f8526_0_plus_LE ] = f8526_0_plus_LE_1 The following rules are decreasing: f8526_0_plus_LE(i951:0:0, c) -> f8526_0_plus_LE(c1, c2) :|: c2 = 0 && (c1 = i951:0:0 - 1 && c = 0) && (i951:0:0 > 0 && i951:0:0 - 1 < i951:0:0 && cons_0 = 0) The following rules are bounded: f8526_0_plus_LE(i951:0:0, c) -> f8526_0_plus_LE(c1, c2) :|: c2 = 0 && (c1 = i951:0:0 - 1 && c = 0) && (i951:0:0 > 0 && i951:0:0 - 1 < i951:0:0 && cons_0 = 0) ---------------------------------------- (29) YES ---------------------------------------- (30) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: TimesPlusUserDef.times(II)I SCC calls the following helper methods: TimesPlusUserDef.times(II)I, TimesPlusUserDef.plus(II)I Performed SCC analyses: *Used field analysis yielded the following read fields: *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (31) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 13 IRulesP rules: f250_0_times_NE(EOS(STATIC_250), i13, i41, i13, i41, i41) -> f291_0_times_NE(EOS(STATIC_291), i13, i41, i13, i41, i41) :|: TRUE f291_0_times_NE(EOS(STATIC_291), i13, i41, i13, i41, i41) -> f304_0_times_Load(EOS(STATIC_304), i13, i41, i13, i41) :|: i41 > 0 f304_0_times_Load(EOS(STATIC_304), i13, i41, i13, i41) -> f311_0_times_LE(EOS(STATIC_311), i13, i41, i13, i41, i41) :|: TRUE f311_0_times_LE(EOS(STATIC_311), i13, i41, i13, i41, i41) -> f315_0_times_Load(EOS(STATIC_315), i13, i41, i13, i41) :|: i41 > 0 f315_0_times_Load(EOS(STATIC_315), i13, i41, i13, i41) -> f319_0_times_Load(EOS(STATIC_319), i13, i41, i13, i41, i13) :|: TRUE f319_0_times_Load(EOS(STATIC_319), i13, i41, i13, i41, i13) -> f372_0_times_ConstantStackPush(EOS(STATIC_372), i13, i41, i13, i13, i41) :|: TRUE f372_0_times_ConstantStackPush(EOS(STATIC_372), i13, i41, i13, i13, i41) -> f381_0_times_IntArithmetic(EOS(STATIC_381), i13, i41, i13, i13, i41, 1) :|: TRUE f381_0_times_IntArithmetic(EOS(STATIC_381), i13, i41, i13, i13, i41, matching1) -> f391_0_times_InvokeMethod(EOS(STATIC_391), i13, i41, i13, i13, i41 - 1) :|: i41 > 0 && matching1 = 1 f391_0_times_InvokeMethod(EOS(STATIC_391), i13, i41, i13, i13, i55) -> f399_0_times_Load(EOS(STATIC_399), i13, i55, i13, i55) :|: i41 >= 1 && i55 < i41 f391_0_times_InvokeMethod(EOS(STATIC_391), i13, i41, i13, i13, i55) -> f399_1_times_Load(EOS(STATIC_399), i13, i41, i13, i13, i55) :|: i41 >= 1 && i55 < i41 f399_0_times_Load(EOS(STATIC_399), i13, i55, i13, i55) -> f405_0_times_Load(EOS(STATIC_405), i13, i55, i13, i55) :|: TRUE f405_0_times_Load(EOS(STATIC_405), i13, i55, i13, i55) -> f235_0_times_Load(EOS(STATIC_235), i13, i55, i13, i55) :|: TRUE f235_0_times_Load(EOS(STATIC_235), i13, i30, i13, i30) -> f250_0_times_NE(EOS(STATIC_250), i13, i30, i13, i30, i30) :|: TRUE Combined rules. Obtained 2 IRulesP rules: f250_0_times_NE(EOS(STATIC_250), i13:0, i41:0, i13:0, i41:0, i41:0) -> f250_0_times_NE(EOS(STATIC_250), i13:0, i41:0 - 1, i13:0, i41:0 - 1, i41:0 - 1) :|: i41:0 > 0 && i41:0 - 1 < i41:0 Removed following non-SCC rules: f250_0_times_NE(EOS(STATIC_250), i13:0, i41:0, i13:0, i41:0, i41:0) -> f399_1_times_Load(EOS(STATIC_399), i13:0, i41:0, i13:0, i13:0, i41:0 - 1) :|: i41:0 > 0 && i41:0 - 1 < i41:0 Filtered constant ground arguments: f250_0_times_NE(x1, x2, x3, x4, x5, x6) -> f250_0_times_NE(x2, x3, x4, x5, x6) EOS(x1) -> EOS Filtered duplicate arguments: f250_0_times_NE(x1, x2, x3, x4, x5) -> f250_0_times_NE(x3, x5) Filtered unneeded arguments: f250_0_times_NE(x1, x2) -> f250_0_times_NE(x2) Finished conversion. Obtained 1 rules.P rules: f250_0_times_NE(i41:0) -> f250_0_times_NE(i41:0 - 1) :|: i41:0 > 0 && i41:0 - 1 < i41:0 ---------------------------------------- (32) Obligation: Rules: f250_0_times_NE(i41:0) -> f250_0_times_NE(i41:0 - 1) :|: i41:0 > 0 && i41:0 - 1 < i41:0 ---------------------------------------- (33) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (34) Obligation: Rules: f250_0_times_NE(i41:0) -> f250_0_times_NE(arith) :|: i41:0 > 0 && i41:0 - 1 < i41:0 && arith = i41:0 - 1 ---------------------------------------- (35) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f250_0_times_NE(i41:0) -> f250_0_times_NE(arith) :|: i41:0 > 0 && i41:0 - 1 < i41:0 && arith = i41:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (36) Obligation: Termination digraph: Nodes: (1) f250_0_times_NE(i41:0) -> f250_0_times_NE(arith) :|: i41:0 > 0 && i41:0 - 1 < i41:0 && arith = i41:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (37) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (38) Obligation: Rules: f250_0_times_NE(i41:0:0) -> f250_0_times_NE(i41:0:0 - 1) :|: i41:0:0 > 0 && i41:0:0 - 1 < i41:0:0 ---------------------------------------- (39) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f250_0_times_NE(INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (40) Obligation: Rules: f250_0_times_NE(i41:0:0) -> f250_0_times_NE(c) :|: c = i41:0:0 - 1 && (i41:0:0 > 0 && i41:0:0 - 1 < i41:0:0) ---------------------------------------- (41) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f250_0_times_NE ] = f250_0_times_NE_1 The following rules are decreasing: f250_0_times_NE(i41:0:0) -> f250_0_times_NE(c) :|: c = i41:0:0 - 1 && (i41:0:0 > 0 && i41:0:0 - 1 < i41:0:0) The following rules are bounded: f250_0_times_NE(i41:0:0) -> f250_0_times_NE(c) :|: c = i41:0:0 - 1 && (i41:0:0 > 0 && i41:0:0 - 1 < i41:0:0) ---------------------------------------- (42) YES