/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: 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, 366 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 0 ms] (6) AND (7) JBCTerminationSCC (8) SCCToIRSProof [SOUND, 113 ms] (9) IRSwT (10) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (11) IRSwT (12) IRSwTTerminationDigraphProof [EQUIVALENT, 44 ms] (13) IRSwT (14) IntTRSCompressionProof [EQUIVALENT, 0 ms] (15) IRSwT (16) TempFilterProof [SOUND, 13 ms] (17) IntTRS (18) RankingReductionPairProof [EQUIVALENT, 0 ms] (19) YES (20) JBCTerminationSCC (21) SCCToIRSProof [SOUND, 65 ms] (22) IRSwT (23) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (24) IRSwT (25) IRSwTTerminationDigraphProof [EQUIVALENT, 49 ms] (26) IRSwT (27) IntTRSCompressionProof [EQUIVALENT, 0 ms] (28) IRSwT (29) TempFilterProof [SOUND, 48 ms] (30) IntTRS (31) RankingReductionPairProof [EQUIVALENT, 0 ms] (32) YES ---------------------------------------- (0) Obligation: need to prove termination of the following program: public class List3 { private List3 next; void iterate() { List3 current = this.next; while (current != this) { current = current.next; } } public static void main(String[] args) { //Create cyclic list: int length = args.length; List3 cur = new List3(); List3 first = cur; while (length-- > 0) { cur.next = new List3(); cur = cur.next; } cur.next = first; cur.iterate(); } } ---------------------------------------- (1) BareJBCToJBCProof (EQUIVALENT) initialized classpath ---------------------------------------- (2) Obligation: need to prove termination of the following program: public class List3 { private List3 next; void iterate() { List3 current = this.next; while (current != this) { current = current.next; } } public static void main(String[] args) { //Create cyclic list: int length = args.length; List3 cur = new List3(); List3 first = cur; while (length-- > 0) { cur.next = new List3(); cur = cur.next; } cur.next = first; cur.iterate(); } } ---------------------------------------- (3) JBCToGraph (EQUIVALENT) Constructed TerminationGraph. ---------------------------------------- (4) Obligation: Termination Graph based on JBC Program: List3.main([Ljava/lang/String;)V: Graph of 81 nodes with 2 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: List3.main([Ljava/lang/String;)V SCC calls the following helper methods: Performed SCC analyses: *Used field analysis yielded the following read fields: *List3: [next] *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (8) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 17 IRulesP rules: f1306_0_iterate_EQ(EOS(STATIC_1306), o126[List3.next]o127, o126[List3.next]o125, o127[List3.next]o126, o127[List3.next]o125) -> f1308_0_iterate_Load(EOS(STATIC_1308), o126[List3.next]o127, o126[List3.next]o125, o127[List3.next]o126, o127[List3.next]o125) :|: TRUE f1308_0_iterate_Load(EOS(STATIC_1308), o126[List3.next]o127, o126[List3.next]o125, o127[List3.next]o126, o127[List3.next]o125) -> f1312_0_iterate_FieldAccess(EOS(STATIC_1312), o126[List3.next]o127, o126[List3.next]o125, o127[List3.next]o126, o127[List3.next]o125) :|: TRUE f1312_0_iterate_FieldAccess(EOS(STATIC_1312), o126[List3.next]o127, o126[List3.next]o125, o127[List3.next]o126, o127[List3.next]o125) -> f1328_0_iterate_FieldAccess(EOS(STATIC_1328), o126[List3.next]o127, o126[List3.next]o125, o127[List3.next]o125, o127[List3.next]o126) :|: o126[List3.next]o127 > 0 && o127[List3.next]o126 > 0 f1312_0_iterate_FieldAccess(EOS(STATIC_1312), o161[List3.next]o161, o161[List3.next]o125, o161[List3.next]o161, o161[List3.next]o125) -> f1330_0_iterate_FieldAccess(EOS(STATIC_1330), o161[List3.next]o125, o161[List3.next]o161) :|: TRUE f1328_0_iterate_FieldAccess(EOS(STATIC_1328), o126[List3.next]o162, o126[List3.next]o125, o162[List3.next]o125, o162[List3.next]o126) -> f1336_0_iterate_FieldAccess(EOS(STATIC_1336), o126[List3.next]o125, o126[List3.next]o162, o163[List3.next]o125, o163[List3.next]o126) :|: o163[List3.next]o125 < o162[List3.next]o125 && o162[List3.next]o125 >= 0 && o163[List3.next]o126 < o162[List3.next]o126 && o162[List3.next]o126 >= 0 f1336_0_iterate_FieldAccess(EOS(STATIC_1336), o126[List3.next]o125, o126[List3.next]o162, o163[List3.next]o125, o163[List3.next]o126) -> f1339_0_iterate_Store(EOS(STATIC_1339), o126[List3.next]o125, o163[List3.next]o125, o163[List3.next]o126, o126[List3.next]o163) :|: o126[List3.next]o163 > o126[List3.next]o162 && o126[List3.next]o162 >= 0 f1339_0_iterate_Store(EOS(STATIC_1339), o126[List3.next]o125, o163[List3.next]o125, o163[List3.next]o126, o126[List3.next]o163) -> f1343_0_iterate_JMP(EOS(STATIC_1343), o126[List3.next]o125, o163[List3.next]o125, o163[List3.next]o126, o126[List3.next]o163) :|: TRUE f1343_0_iterate_JMP(EOS(STATIC_1343), o126[List3.next]o125, o163[List3.next]o125, o163[List3.next]o126, o126[List3.next]o163) -> f1359_0_iterate_Load(EOS(STATIC_1359), o126[List3.next]o125, o163[List3.next]o125, o163[List3.next]o126, o126[List3.next]o163) :|: TRUE f1359_0_iterate_Load(EOS(STATIC_1359), o126[List3.next]o125, o163[List3.next]o125, o163[List3.next]o126, o126[List3.next]o163) -> f1278_0_iterate_Load(EOS(STATIC_1278), o126[List3.next]o163, o126[List3.next]o125, o163[List3.next]o125, o163[List3.next]o126) :|: TRUE f1278_0_iterate_Load(EOS(STATIC_1278), o126[List3.next]o127, o126[List3.next]o125, o127[List3.next]o125, o127[List3.next]o126) -> f1285_0_iterate_Load(EOS(STATIC_1285), o126[List3.next]o127, o126[List3.next]o125, o127[List3.next]o125, o127[List3.next]o126) :|: TRUE f1285_0_iterate_Load(EOS(STATIC_1285), o126[List3.next]o127, o126[List3.next]o125, o127[List3.next]o125, o127[List3.next]o126) -> f1299_0_iterate_EQ(EOS(STATIC_1299), o126[List3.next]o127, o126[List3.next]o125, o127[List3.next]o125, o127[List3.next]o126) :|: TRUE f1299_0_iterate_EQ(EOS(STATIC_1299), o126[List3.next]o127, o126[List3.next]o125, o127[List3.next]o125, o127[List3.next]o126) -> f1306_0_iterate_EQ(EOS(STATIC_1306), o126[List3.next]o127, o126[List3.next]o125, o127[List3.next]o126, o127[List3.next]o125) :|: o127[List3.next]o125 > 0 f1330_0_iterate_FieldAccess(EOS(STATIC_1330), o164[List3.next]o125, o164[List3.next]o164) -> f1338_0_iterate_FieldAccess(EOS(STATIC_1338), o165[List3.next]o125, o165[List3.next]o164) :|: o165[List3.next]o125 < o164[List3.next]o125 && o164[List3.next]o125 >= 0 && o165[List3.next]o164 < o164[List3.next]o164 && o164[List3.next]o164 >= 0 f1338_0_iterate_FieldAccess(EOS(STATIC_1338), o165[List3.next]o125, o165[List3.next]o164) -> f1341_0_iterate_Store(EOS(STATIC_1341), o165[List3.next]o125, o165[List3.next]o164) :|: TRUE f1341_0_iterate_Store(EOS(STATIC_1341), o165[List3.next]o125, o165[List3.next]o164) -> f1347_0_iterate_JMP(EOS(STATIC_1347), o165[List3.next]o125, o165[List3.next]o164) :|: TRUE f1347_0_iterate_JMP(EOS(STATIC_1347), o165[List3.next]o125, o165[List3.next]o164) -> f1380_0_iterate_Load(EOS(STATIC_1380), o165[List3.next]o125, o165[List3.next]o164) :|: TRUE f1380_0_iterate_Load(EOS(STATIC_1380), o165[List3.next]o125, o165[List3.next]o164) -> f1278_0_iterate_Load(EOS(STATIC_1278), o164[List3.next]o165, o164[List3.next]o125, o165[List3.next]o125, o165[List3.next]o164) :|: o164[List3.next]o165 = 1 Combined rules. Obtained 2 IRulesP rules: f1306_0_iterate_EQ(EOS(STATIC_1306), o126[List3.next]o127:0, o126[List3.next]o125:0, o126[List3.next]o127:0, o126[List3.next]o125:0) -> f1306_0_iterate_EQ(EOS(STATIC_1306), 1, o164[List3.next]o125:0, o165[List3.next]o164:0, o165[List3.next]o125:0) :|: o126[List3.next]o125:0 > -1 && o165[List3.next]o125:0 < o126[List3.next]o125:0 && o165[List3.next]o164:0 < o126[List3.next]o127:0 && o165[List3.next]o125:0 > 0 && o126[List3.next]o127:0 > -1 f1306_0_iterate_EQ(EOS(STATIC_1306), o126[List3.next]o127:0, o126[List3.next]o125:0, o127[List3.next]o126:0, o127[List3.next]o125:0) -> f1306_0_iterate_EQ(EOS(STATIC_1306), o126[List3.next]o163:0, o126[List3.next]o125:0, o163[List3.next]o126:0, o163[List3.next]o125:0) :|: o127[List3.next]o126:0 > 0 && o126[List3.next]o127:0 > 0 && o127[List3.next]o125:0 > -1 && o163[List3.next]o125:0 < o127[List3.next]o125:0 && o163[List3.next]o126:0 < o127[List3.next]o126:0 && o163[List3.next]o125:0 > 0 && o126[List3.next]o163:0 > o126[List3.next]o127:0 Filtered constant ground arguments: f1306_0_iterate_EQ(x1, x2, x3, x4, x5) -> f1306_0_iterate_EQ(x2, x3, x4, x5) EOS(x1) -> EOS Finished conversion. Obtained 2 rules.P rules: f1306_0_iterate_EQ(o126[List3.next]o127:0, o126[List3.next]o125:0, o126[List3.next]o127:0, o126[List3.next]o125:0) -> f1306_0_iterate_EQ(1, o164[List3.next]o125:0, o165[List3.next]o164:0, o165[List3.next]o125:0) :|: o165[List3.next]o125:0 < o126[List3.next]o125:0 && o126[List3.next]o125:0 > -1 && o165[List3.next]o164:0 < o126[List3.next]o127:0 && o126[List3.next]o127:0 > -1 && o165[List3.next]o125:0 > 0 f1306_0_iterate_EQ(o126[List3.next]o127:0, o126[List3.next]o125:0, o127[List3.next]o126:0, o127[List3.next]o125:0) -> f1306_0_iterate_EQ(o126[List3.next]o163:0, o126[List3.next]o125:0, o163[List3.next]o126:0, o163[List3.next]o125:0) :|: o126[List3.next]o127:0 > 0 && o127[List3.next]o126:0 > 0 && o127[List3.next]o125:0 > -1 && o163[List3.next]o125:0 < o127[List3.next]o125:0 && o163[List3.next]o126:0 < o127[List3.next]o126:0 && o126[List3.next]o163:0 > o126[List3.next]o127:0 && o163[List3.next]o125:0 > 0 ---------------------------------------- (9) Obligation: Rules: f1306_0_iterate_EQ(o126[List3.next]o127:0, o126[List3.next]o125:0, o126[List3.next]o127:0, o126[List3.next]o125:0) -> f1306_0_iterate_EQ(1, o164[List3.next]o125:0, o165[List3.next]o164:0, o165[List3.next]o125:0) :|: o165[List3.next]o125:0 < o126[List3.next]o125:0 && o126[List3.next]o125:0 > -1 && o165[List3.next]o164:0 < o126[List3.next]o127:0 && o126[List3.next]o127:0 > -1 && o165[List3.next]o125:0 > 0 f1306_0_iterate_EQ(x, x1, x2, x3) -> f1306_0_iterate_EQ(x4, x1, x5, x6) :|: x > 0 && x2 > 0 && x3 > -1 && x6 < x3 && x5 < x2 && x4 > x && x6 > 0 ---------------------------------------- (10) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (11) Obligation: Rules: f1306_0_iterate_EQ(o126[List3.next]o127:0, o126[List3.next]o125:0, o126[List3.next]o127:0, o126[List3.next]o125:0) -> f1306_0_iterate_EQ(1, o164[List3.next]o125:0, o165[List3.next]o164:0, o165[List3.next]o125:0) :|: o165[List3.next]o125:0 < o126[List3.next]o125:0 && o126[List3.next]o125:0 > -1 && o165[List3.next]o164:0 < o126[List3.next]o127:0 && o126[List3.next]o127:0 > -1 && o165[List3.next]o125:0 > 0 f1306_0_iterate_EQ(x, x1, x2, x3) -> f1306_0_iterate_EQ(x4, x1, x5, x6) :|: x > 0 && x2 > 0 && x3 > -1 && x6 < x3 && x5 < x2 && x4 > x && x6 > 0 ---------------------------------------- (12) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f1306_0_iterate_EQ(o126[List3.next]o127:0, o126[List3.next]o125:0, o126[List3.next]o127:0, o126[List3.next]o125:0) -> f1306_0_iterate_EQ(1, o164[List3.next]o125:0, o165[List3.next]o164:0, o165[List3.next]o125:0) :|: o165[List3.next]o125:0 < o126[List3.next]o125:0 && o126[List3.next]o125:0 > -1 && o165[List3.next]o164:0 < o126[List3.next]o127:0 && o126[List3.next]o127:0 > -1 && o165[List3.next]o125:0 > 0 (2) f1306_0_iterate_EQ(x, x1, x2, x3) -> f1306_0_iterate_EQ(x4, x1, x5, x6) :|: x > 0 && x2 > 0 && x3 > -1 && x6 < x3 && x5 < x2 && x4 > x && x6 > 0 Arcs: (1) -> (1), (2) (2) -> (1), (2) This digraph is fully evaluated! ---------------------------------------- (13) Obligation: Termination digraph: Nodes: (1) f1306_0_iterate_EQ(o126[List3.next]o127:0, o126[List3.next]o125:0, o126[List3.next]o127:0, o126[List3.next]o125:0) -> f1306_0_iterate_EQ(1, o164[List3.next]o125:0, o165[List3.next]o164:0, o165[List3.next]o125:0) :|: o165[List3.next]o125:0 < o126[List3.next]o125:0 && o126[List3.next]o125:0 > -1 && o165[List3.next]o164:0 < o126[List3.next]o127:0 && o126[List3.next]o127:0 > -1 && o165[List3.next]o125:0 > 0 (2) f1306_0_iterate_EQ(x, x1, x2, x3) -> f1306_0_iterate_EQ(x4, x1, x5, x6) :|: x > 0 && x2 > 0 && x3 > -1 && x6 < x3 && x5 < x2 && x4 > x && x6 > 0 Arcs: (1) -> (1), (2) (2) -> (1), (2) This digraph is fully evaluated! ---------------------------------------- (14) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (15) Obligation: Rules: f1306_0_iterate_EQ(x:0, x1:0, x2:0, x3:0) -> f1306_0_iterate_EQ(x4:0, x1:0, x5:0, x6:0) :|: x:0 < x4:0 && x6:0 > 0 && x5:0 < x2:0 && x6:0 < x3:0 && x3:0 > -1 && x2:0 > 0 && x:0 > 0 f1306_0_iterate_EQ(o126[List3.next]o127:0:0, o126[List3.next]o125:0:0, o126[List3.next]o127:0:0, o126[List3.next]o125:0:0) -> f1306_0_iterate_EQ(1, o164[List3.next]o125:0:0, o165[List3.next]o164:0:0, o165[List3.next]o125:0:0) :|: o126[List3.next]o127:0:0 > -1 && o165[List3.next]o125:0:0 > 0 && o165[List3.next]o164:0:0 < o126[List3.next]o127:0:0 && o126[List3.next]o125:0:0 > -1 && o165[List3.next]o125:0:0 < o126[List3.next]o125:0:0 ---------------------------------------- (16) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f1306_0_iterate_EQ(VARIABLE, VARIABLE, INTEGER, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (17) Obligation: Rules: f1306_0_iterate_EQ(x:0, x1:0, x2:0, x3:0) -> f1306_0_iterate_EQ(x4:0, x1:0, x5:0, x6:0) :|: x:0 < x4:0 && x6:0 > 0 && x5:0 < x2:0 && x6:0 < x3:0 && x3:0 > -1 && x2:0 > 0 && x:0 > 0 f1306_0_iterate_EQ(o126[List3.next]o127:0:0, o126[List3.next]o125:0:0, o126[List3.next]o127:0:0, o126[List3.next]o125:0:0) -> f1306_0_iterate_EQ(c, o164[List3.next]o125:0:0, o165[List3.next]o164:0:0, o165[List3.next]o125:0:0) :|: c = 1 && (o126[List3.next]o127:0:0 > -1 && o165[List3.next]o125:0:0 > 0 && o165[List3.next]o164:0:0 < o126[List3.next]o127:0:0 && o126[List3.next]o125:0:0 > -1 && o165[List3.next]o125:0:0 < o126[List3.next]o125:0:0) ---------------------------------------- (18) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f1306_0_iterate_EQ ] = f1306_0_iterate_EQ_4 The following rules are decreasing: f1306_0_iterate_EQ(x:0, x1:0, x2:0, x3:0) -> f1306_0_iterate_EQ(x4:0, x1:0, x5:0, x6:0) :|: x:0 < x4:0 && x6:0 > 0 && x5:0 < x2:0 && x6:0 < x3:0 && x3:0 > -1 && x2:0 > 0 && x:0 > 0 f1306_0_iterate_EQ(o126[List3.next]o127:0:0, o126[List3.next]o125:0:0, o126[List3.next]o127:0:0, o126[List3.next]o125:0:0) -> f1306_0_iterate_EQ(c, o164[List3.next]o125:0:0, o165[List3.next]o164:0:0, o165[List3.next]o125:0:0) :|: c = 1 && (o126[List3.next]o127:0:0 > -1 && o165[List3.next]o125:0:0 > 0 && o165[List3.next]o164:0:0 < o126[List3.next]o127:0:0 && o126[List3.next]o125:0:0 > -1 && o165[List3.next]o125:0:0 < o126[List3.next]o125:0:0) The following rules are bounded: f1306_0_iterate_EQ(x:0, x1:0, x2:0, x3:0) -> f1306_0_iterate_EQ(x4:0, x1:0, x5:0, x6:0) :|: x:0 < x4:0 && x6:0 > 0 && x5:0 < x2:0 && x6:0 < x3:0 && x3:0 > -1 && x2:0 > 0 && x:0 > 0 f1306_0_iterate_EQ(o126[List3.next]o127:0:0, o126[List3.next]o125:0:0, o126[List3.next]o127:0:0, o126[List3.next]o125:0:0) -> f1306_0_iterate_EQ(c, o164[List3.next]o125:0:0, o165[List3.next]o164:0:0, o165[List3.next]o125:0:0) :|: c = 1 && (o126[List3.next]o127:0:0 > -1 && o165[List3.next]o125:0:0 > 0 && o165[List3.next]o164:0:0 < o126[List3.next]o127:0:0 && o126[List3.next]o125:0:0 > -1 && o165[List3.next]o125:0:0 < o126[List3.next]o125:0:0) ---------------------------------------- (19) YES ---------------------------------------- (20) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: List3.main([Ljava/lang/String;)V SCC calls the following helper methods: Performed SCC analyses: *Used field analysis yielded the following read fields: *List3: [next] *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (21) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 25 IRulesP rules: f1011_0_main_Inc(EOS(STATIC_1011), i84, i84, o82[List3.next]o81) -> f1014_0_main_LE(EOS(STATIC_1014), i84 + -1, i84, o82[List3.next]o81) :|: TRUE f1014_0_main_LE(EOS(STATIC_1014), i88, i92, o82[List3.next]o81) -> f1021_0_main_LE(EOS(STATIC_1021), i88, i92, o82[List3.next]o81) :|: TRUE f1021_0_main_LE(EOS(STATIC_1021), i88, i92, o82[List3.next]o81) -> f1023_0_main_Load(EOS(STATIC_1023), i88, o82[List3.next]o81) :|: i92 > 0 f1023_0_main_Load(EOS(STATIC_1023), i88, o82[List3.next]o81) -> f1025_0_main_New(EOS(STATIC_1025), i88, o82[List3.next]o81) :|: TRUE f1025_0_main_New(EOS(STATIC_1025), i88, o82[List3.next]o81) -> f1027_0_main_Duplicate(EOS(STATIC_1027), i88, o82[List3.next]o81) :|: TRUE f1027_0_main_Duplicate(EOS(STATIC_1027), i88, o82[List3.next]o81) -> f1037_0_main_InvokeMethod(EOS(STATIC_1037), i88, o82[List3.next]o81) :|: TRUE f1037_0_main_InvokeMethod(EOS(STATIC_1037), i88, o82[List3.next]o81) -> f1055_0__init__Load(EOS(STATIC_1055), i88, o82[List3.next]o81) :|: TRUE f1055_0__init__Load(EOS(STATIC_1055), i88, o82[List3.next]o81) -> f1063_0__init__InvokeMethod(EOS(STATIC_1063), i88, o82[List3.next]o81) :|: TRUE f1063_0__init__InvokeMethod(EOS(STATIC_1063), i88, o82[List3.next]o81) -> f1064_0__init__Return(EOS(STATIC_1064), i88, o82[List3.next]o81) :|: TRUE f1064_0__init__Return(EOS(STATIC_1064), i88, o82[List3.next]o81) -> f1067_0_main_FieldAccess(EOS(STATIC_1067), i88, o82[List3.next]o81) :|: TRUE f1067_0_main_FieldAccess(EOS(STATIC_1067), i88, o82[List3.next]o81) -> f1070_0_main_FieldAccess(EOS(STATIC_1070), i88, o82[List3.next]o81) :|: o82[List3.next]o81 > 0 f1067_0_main_FieldAccess(EOS(STATIC_1067), i88, o101[List3.next]o101) -> f1071_0_main_FieldAccess(EOS(STATIC_1071), i88) :|: TRUE f1070_0_main_FieldAccess(EOS(STATIC_1070), i88, o82[List3.next]o81) -> f1075_0_main_Load(EOS(STATIC_1075), i88, o82[List3.next]o81) :|: TRUE f1075_0_main_Load(EOS(STATIC_1075), i88, o82[List3.next]o81) -> f1090_0_main_FieldAccess(EOS(STATIC_1090), i88, o82[List3.next]o81) :|: TRUE f1090_0_main_FieldAccess(EOS(STATIC_1090), i88, o82[List3.next]o81) -> f1103_0_main_Store(EOS(STATIC_1103), i88, o82[List3.next]o85) :|: o82[List3.next]o85 > o82[List3.next]o81 && o82[List3.next]o81 >= 0 f1103_0_main_Store(EOS(STATIC_1103), i88, o82[List3.next]o85) -> f1114_0_main_JMP(EOS(STATIC_1114), i88, o82[List3.next]o85) :|: TRUE f1114_0_main_JMP(EOS(STATIC_1114), i88, o82[List3.next]o85) -> f1191_0_main_Load(EOS(STATIC_1191), i88, o82[List3.next]o85) :|: TRUE f1191_0_main_Load(EOS(STATIC_1191), i88, o82[List3.next]o85) -> f1000_0_main_Load(EOS(STATIC_1000), i88, o82[List3.next]o85) :|: TRUE f1000_0_main_Load(EOS(STATIC_1000), i84, o82[List3.next]o81) -> f1011_0_main_Inc(EOS(STATIC_1011), i84, i84, o82[List3.next]o81) :|: TRUE f1071_0_main_FieldAccess(EOS(STATIC_1071), i88) -> f1081_0_main_Load(EOS(STATIC_1081), i88) :|: TRUE f1081_0_main_Load(EOS(STATIC_1081), i88) -> f1093_0_main_FieldAccess(EOS(STATIC_1093), i88) :|: TRUE f1093_0_main_FieldAccess(EOS(STATIC_1093), i88) -> f1107_0_main_Store(EOS(STATIC_1107), i88) :|: TRUE f1107_0_main_Store(EOS(STATIC_1107), i88) -> f1118_0_main_JMP(EOS(STATIC_1118), i88) :|: TRUE f1118_0_main_JMP(EOS(STATIC_1118), i88) -> f1219_0_main_Load(EOS(STATIC_1219), i88) :|: TRUE f1219_0_main_Load(EOS(STATIC_1219), i88) -> f1000_0_main_Load(EOS(STATIC_1000), i88, o101[List3.next]o85) :|: o101[List3.next]o85 = 1 Combined rules. Obtained 2 IRulesP rules: f1011_0_main_Inc(EOS(STATIC_1011), i84:0, i84:0, o82[List3.next]o81:0) -> f1011_0_main_Inc(EOS(STATIC_1011), i84:0 - 1, i84:0 - 1, o82[List3.next]o85:0) :|: o82[List3.next]o81:0 > 0 && o82[List3.next]o85:0 > o82[List3.next]o81:0 && i84:0 > 0 f1011_0_main_Inc(EOS(STATIC_1011), i84:0, i84:0, o82[List3.next]o81:0) -> f1011_0_main_Inc(EOS(STATIC_1011), i84:0 - 1, i84:0 - 1, 1) :|: i84:0 > 0 Filtered constant ground arguments: f1011_0_main_Inc(x1, x2, x3, x4) -> f1011_0_main_Inc(x2, x3, x4) EOS(x1) -> EOS Filtered duplicate arguments: f1011_0_main_Inc(x1, x2, x3) -> f1011_0_main_Inc(x2, x3) Finished conversion. Obtained 2 rules.P rules: f1011_0_main_Inc(i84:0, o82[List3.next]o81:0) -> f1011_0_main_Inc(i84:0 - 1, o82[List3.next]o85:0) :|: o82[List3.next]o85:0 > o82[List3.next]o81:0 && i84:0 > 0 && o82[List3.next]o81:0 > 0 f1011_0_main_Inc(i84:0, o82[List3.next]o81:0) -> f1011_0_main_Inc(i84:0 - 1, 1) :|: i84:0 > 0 ---------------------------------------- (22) Obligation: Rules: f1011_0_main_Inc(i84:0, o82[List3.next]o81:0) -> f1011_0_main_Inc(i84:0 - 1, o82[List3.next]o85:0) :|: o82[List3.next]o85:0 > o82[List3.next]o81:0 && i84:0 > 0 && o82[List3.next]o81:0 > 0 f1011_0_main_Inc(x, x1) -> f1011_0_main_Inc(x - 1, 1) :|: x > 0 ---------------------------------------- (23) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (24) Obligation: Rules: f1011_0_main_Inc(i84:0, o82[List3.next]o81:0) -> f1011_0_main_Inc(arith, o82[List3.next]o85:0) :|: o82[List3.next]o85:0 > o82[List3.next]o81:0 && i84:0 > 0 && o82[List3.next]o81:0 > 0 && arith = i84:0 - 1 f1011_0_main_Inc(x2, x3) -> f1011_0_main_Inc(x4, 1) :|: x2 > 0 && x4 = x2 - 1 ---------------------------------------- (25) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f1011_0_main_Inc(i84:0, o82[List3.next]o81:0) -> f1011_0_main_Inc(arith, o82[List3.next]o85:0) :|: o82[List3.next]o85:0 > o82[List3.next]o81:0 && i84:0 > 0 && o82[List3.next]o81:0 > 0 && arith = i84:0 - 1 (2) f1011_0_main_Inc(x2, x3) -> f1011_0_main_Inc(x4, 1) :|: x2 > 0 && x4 = x2 - 1 Arcs: (1) -> (1), (2) (2) -> (1), (2) This digraph is fully evaluated! ---------------------------------------- (26) Obligation: Termination digraph: Nodes: (1) f1011_0_main_Inc(i84:0, o82[List3.next]o81:0) -> f1011_0_main_Inc(arith, o82[List3.next]o85:0) :|: o82[List3.next]o85:0 > o82[List3.next]o81:0 && i84:0 > 0 && o82[List3.next]o81:0 > 0 && arith = i84:0 - 1 (2) f1011_0_main_Inc(x2, x3) -> f1011_0_main_Inc(x4, 1) :|: x2 > 0 && x4 = x2 - 1 Arcs: (1) -> (1), (2) (2) -> (1), (2) This digraph is fully evaluated! ---------------------------------------- (27) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (28) Obligation: Rules: f1011_0_main_Inc(i84:0:0, o82[List3.next]o81:0:0) -> f1011_0_main_Inc(i84:0:0 - 1, o82[List3.next]o85:0:0) :|: o82[List3.next]o85:0:0 > o82[List3.next]o81:0:0 && i84:0:0 > 0 && o82[List3.next]o81:0:0 > 0 f1011_0_main_Inc(x2:0, x3:0) -> f1011_0_main_Inc(x2:0 - 1, 1) :|: x2:0 > 0 ---------------------------------------- (29) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f1011_0_main_Inc(INTEGER, VARIABLE) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (30) Obligation: Rules: f1011_0_main_Inc(i84:0:0, o82[List3.next]o81:0:0) -> f1011_0_main_Inc(c, o82[List3.next]o85:0:0) :|: c = i84:0:0 - 1 && (o82[List3.next]o85:0:0 > o82[List3.next]o81:0:0 && i84:0:0 > 0 && o82[List3.next]o81:0:0 > 0) f1011_0_main_Inc(x2:0, x3:0) -> f1011_0_main_Inc(c1, c2) :|: c2 = 1 && c1 = x2:0 - 1 && x2:0 > 0 ---------------------------------------- (31) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f1011_0_main_Inc ] = f1011_0_main_Inc_1 The following rules are decreasing: f1011_0_main_Inc(i84:0:0, o82[List3.next]o81:0:0) -> f1011_0_main_Inc(c, o82[List3.next]o85:0:0) :|: c = i84:0:0 - 1 && (o82[List3.next]o85:0:0 > o82[List3.next]o81:0:0 && i84:0:0 > 0 && o82[List3.next]o81:0:0 > 0) f1011_0_main_Inc(x2:0, x3:0) -> f1011_0_main_Inc(c1, c2) :|: c2 = 1 && c1 = x2:0 - 1 && x2:0 > 0 The following rules are bounded: f1011_0_main_Inc(i84:0:0, o82[List3.next]o81:0:0) -> f1011_0_main_Inc(c, o82[List3.next]o85:0:0) :|: c = i84:0:0 - 1 && (o82[List3.next]o85:0:0 > o82[List3.next]o81:0:0 && i84:0:0 > 0 && o82[List3.next]o81:0:0 > 0) f1011_0_main_Inc(x2:0, x3:0) -> f1011_0_main_Inc(c1, c2) :|: c2 = 1 && c1 = x2:0 - 1 && x2:0 > 0 ---------------------------------------- (32) YES