/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, 426 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 6 ms] (6) AND (7) JBCTerminationSCC (8) SCCToQDPProof [SOUND, 122 ms] (9) QDP (10) QDPSizeChangeProof [EQUIVALENT, 0 ms] (11) YES (12) JBCTerminationSCC (13) SCCToIRSProof [SOUND, 49 ms] (14) IRSwT (15) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (16) IRSwT (17) IRSwTTerminationDigraphProof [EQUIVALENT, 13 ms] (18) IRSwT (19) IntTRSCompressionProof [EQUIVALENT, 0 ms] (20) IRSwT (21) TempFilterProof [SOUND, 11 ms] (22) IntTRS (23) PolynomialOrderProcessor [EQUIVALENT, 0 ms] (24) YES (25) JBCTerminationSCC (26) SCCToIRSProof [SOUND, 58 ms] (27) IRSwT (28) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (29) IRSwT (30) IRSwTTerminationDigraphProof [EQUIVALENT, 43 ms] (31) IRSwT (32) IntTRSCompressionProof [EQUIVALENT, 0 ms] (33) IRSwT (34) TempFilterProof [SOUND, 29 ms] (35) IntTRS (36) RankingReductionPairProof [EQUIVALENT, 0 ms] (37) YES ---------------------------------------- (0) Obligation: need to prove termination of the following program: package CyclicAnalysis; public class CyclicAnalysis { CyclicAnalysis field; public static void main(String[] args) { Random.args = args; CyclicAnalysis t = new CyclicAnalysis(); t.field = new CyclicAnalysis(); t.field.appendNewCyclicList(Random.random()); t.appendNewList(Random.random()); t.length(); } public int length() { int length = 1; CyclicAnalysis cur = this.field; while (cur != null) { cur = cur.field; length++; } return length; } public void appendNewCyclicList(int i) { CyclicAnalysis last = this.appendNewList(i); last.field = this; } /** * @param i number of elements to append * @return the last list element appended */ private CyclicAnalysis appendNewList(int i) { this.field = new CyclicAnalysis(); CyclicAnalysis cur = this.field; while (i > 1) { i--; cur = cur.field = new CyclicAnalysis(); } return cur; } } package CyclicAnalysis; public class Random { static String[] args; static int index = 0; public static int random() { final String string = args[index]; index++; return string.length(); } } ---------------------------------------- (1) BareJBCToJBCProof (EQUIVALENT) initialized classpath ---------------------------------------- (2) Obligation: need to prove termination of the following program: package CyclicAnalysis; public class CyclicAnalysis { CyclicAnalysis field; public static void main(String[] args) { Random.args = args; CyclicAnalysis t = new CyclicAnalysis(); t.field = new CyclicAnalysis(); t.field.appendNewCyclicList(Random.random()); t.appendNewList(Random.random()); t.length(); } public int length() { int length = 1; CyclicAnalysis cur = this.field; while (cur != null) { cur = cur.field; length++; } return length; } public void appendNewCyclicList(int i) { CyclicAnalysis last = this.appendNewList(i); last.field = this; } /** * @param i number of elements to append * @return the last list element appended */ private CyclicAnalysis appendNewList(int i) { this.field = new CyclicAnalysis(); CyclicAnalysis cur = this.field; while (i > 1) { i--; cur = cur.field = new CyclicAnalysis(); } return cur; } } package CyclicAnalysis; public class Random { static String[] args; static int index = 0; public static int random() { final String string = args[index]; index++; return string.length(); } } ---------------------------------------- (3) JBCToGraph (EQUIVALENT) Constructed TerminationGraph. ---------------------------------------- (4) Obligation: Termination Graph based on JBC Program: CyclicAnalysis.CyclicAnalysis.main([Ljava/lang/String;)V: Graph of 299 nodes with 3 SCCs. ---------------------------------------- (5) TerminationGraphToSCCProof (SOUND) Splitted TerminationGraph to 3 SCCss. ---------------------------------------- (6) Complex Obligation (AND) ---------------------------------------- (7) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: CyclicAnalysis.CyclicAnalysis.main([Ljava/lang/String;)V SCC calls the following helper methods: Performed SCC analyses: *Used field analysis yielded the following read fields: *CyclicAnalysis.CyclicAnalysis: [field] *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (8) SCCToQDPProof (SOUND) Transformed TerminationGraph SCC to QDP. Log: Generated 10 rules for P and 0 rules for R.P rules: f1242_0_length_NULL(EOS(STATIC_1242), java.lang.Object(o185sub), java.lang.Object(o185sub)) -> f1245_0_length_NULL(EOS(STATIC_1245), java.lang.Object(o185sub), java.lang.Object(o185sub)) :|: TRUE f1245_0_length_NULL(EOS(STATIC_1245), java.lang.Object(o185sub), java.lang.Object(o185sub)) -> f1248_0_length_Load(EOS(STATIC_1248), java.lang.Object(o185sub)) :|: TRUE f1248_0_length_Load(EOS(STATIC_1248), java.lang.Object(o185sub)) -> f1252_0_length_FieldAccess(EOS(STATIC_1252), java.lang.Object(o185sub)) :|: TRUE f1252_0_length_FieldAccess(EOS(STATIC_1252), java.lang.Object(CyclicAnalysis.CyclicAnalysis(EOC, o187))) -> f1255_0_length_FieldAccess(EOS(STATIC_1255), java.lang.Object(CyclicAnalysis.CyclicAnalysis(EOC, o187))) :|: TRUE f1255_0_length_FieldAccess(EOS(STATIC_1255), java.lang.Object(CyclicAnalysis.CyclicAnalysis(EOC, o187))) -> f1257_0_length_Store(EOS(STATIC_1257), o187) :|: TRUE f1257_0_length_Store(EOS(STATIC_1257), o187) -> f1259_0_length_Inc(EOS(STATIC_1259), o187) :|: TRUE f1259_0_length_Inc(EOS(STATIC_1259), o187) -> f1263_0_length_JMP(EOS(STATIC_1263), o187) :|: TRUE f1263_0_length_JMP(EOS(STATIC_1263), o187) -> f1267_0_length_Load(EOS(STATIC_1267), o187) :|: TRUE f1267_0_length_Load(EOS(STATIC_1267), o187) -> f1239_0_length_Load(EOS(STATIC_1239), o187) :|: TRUE f1239_0_length_Load(EOS(STATIC_1239), o183) -> f1242_0_length_NULL(EOS(STATIC_1242), o183, o183) :|: TRUE R rules: Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.P rules: f1242_0_length_NULL(EOS(STATIC_1242), java.lang.Object(CyclicAnalysis.CyclicAnalysis(EOC, o187:0)), java.lang.Object(CyclicAnalysis.CyclicAnalysis(EOC, o187:0))) -> f1242_0_length_NULL(EOS(STATIC_1242), o187:0, o187:0) :|: TRUE R rules: Filtered ground terms: f1242_0_length_NULL(x1, x2, x3) -> f1242_0_length_NULL(x2, x3) EOS(x1) -> EOS CyclicAnalysis.CyclicAnalysis(x1, x2) -> CyclicAnalysis.CyclicAnalysis(x2) Filtered duplicate args: f1242_0_length_NULL(x1, x2) -> f1242_0_length_NULL(x2) Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.P rules: F1242_0_LENGTH_NULL(java.lang.Object(CyclicAnalysis.CyclicAnalysis(o187:0:0))) -> F1242_0_LENGTH_NULL(o187:0:0) :|: TRUE R rules: ---------------------------------------- (9) Obligation: Q DP problem: The TRS P consists of the following rules: F1242_0_LENGTH_NULL(java.lang.Object(CyclicAnalysis.CyclicAnalysis(o187:0:0))) -> F1242_0_LENGTH_NULL(o187:0:0) R is empty. Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (10) QDPSizeChangeProof (EQUIVALENT) By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. From the DPs we obtained the following set of size-change graphs: *F1242_0_LENGTH_NULL(java.lang.Object(CyclicAnalysis.CyclicAnalysis(o187:0:0))) -> F1242_0_LENGTH_NULL(o187:0:0) The graph contains the following edges 1 > 1 ---------------------------------------- (11) YES ---------------------------------------- (12) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: CyclicAnalysis.CyclicAnalysis.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: ---------------------------------------- (13) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 23 IRulesP rules: f806_0_appendNewList_ConstantStackPush(EOS(STATIC_806), i96, i96, o128[CyclicAnalysis.field]o126) -> f827_0_appendNewList_LE(EOS(STATIC_827), i96, i96, 1, o128[CyclicAnalysis.field]o126) :|: TRUE f827_0_appendNewList_LE(EOS(STATIC_827), i107, i107, matching1, o128[CyclicAnalysis.field]o126) -> f834_0_appendNewList_LE(EOS(STATIC_834), i107, i107, 1, o128[CyclicAnalysis.field]o126) :|: TRUE && matching1 = 1 f834_0_appendNewList_LE(EOS(STATIC_834), i107, i107, matching1, o128[CyclicAnalysis.field]o126) -> f891_0_appendNewList_Inc(EOS(STATIC_891), i107, o128[CyclicAnalysis.field]o126) :|: i107 > 1 && matching1 = 1 f891_0_appendNewList_Inc(EOS(STATIC_891), i107, o128[CyclicAnalysis.field]o126) -> f897_0_appendNewList_Load(EOS(STATIC_897), i107 + -1, o128[CyclicAnalysis.field]o126) :|: TRUE f897_0_appendNewList_Load(EOS(STATIC_897), i110, o128[CyclicAnalysis.field]o126) -> f899_0_appendNewList_New(EOS(STATIC_899), i110, o128[CyclicAnalysis.field]o126) :|: TRUE f899_0_appendNewList_New(EOS(STATIC_899), i110, o128[CyclicAnalysis.field]o126) -> f904_0_appendNewList_Duplicate(EOS(STATIC_904), i110, o128[CyclicAnalysis.field]o126) :|: TRUE f904_0_appendNewList_Duplicate(EOS(STATIC_904), i110, o128[CyclicAnalysis.field]o126) -> f908_0_appendNewList_InvokeMethod(EOS(STATIC_908), i110, o128[CyclicAnalysis.field]o126) :|: TRUE f908_0_appendNewList_InvokeMethod(EOS(STATIC_908), i110, o128[CyclicAnalysis.field]o126) -> f910_0__init__Load(EOS(STATIC_910), i110, o128[CyclicAnalysis.field]o126) :|: TRUE f910_0__init__Load(EOS(STATIC_910), i110, o128[CyclicAnalysis.field]o126) -> f914_0__init__InvokeMethod(EOS(STATIC_914), i110, o128[CyclicAnalysis.field]o126) :|: TRUE f914_0__init__InvokeMethod(EOS(STATIC_914), i110, o128[CyclicAnalysis.field]o126) -> f918_0__init__Return(EOS(STATIC_918), i110, o128[CyclicAnalysis.field]o126) :|: TRUE f918_0__init__Return(EOS(STATIC_918), i110, o128[CyclicAnalysis.field]o126) -> f921_0_appendNewList_Duplicate(EOS(STATIC_921), i110, o128[CyclicAnalysis.field]o126) :|: TRUE f921_0_appendNewList_Duplicate(EOS(STATIC_921), i110, o128[CyclicAnalysis.field]o126) -> f932_0_appendNewList_FieldAccess(EOS(STATIC_932), i110, o128[CyclicAnalysis.field]o126) :|: TRUE f932_0_appendNewList_FieldAccess(EOS(STATIC_932), i110, o128[CyclicAnalysis.field]o126) -> f972_0_appendNewList_FieldAccess(EOS(STATIC_972), i110, o128[CyclicAnalysis.field]o126) :|: o128[CyclicAnalysis.field]o126 > 0 f932_0_appendNewList_FieldAccess(EOS(STATIC_932), i110, o148[CyclicAnalysis.field]o148) -> f973_0_appendNewList_FieldAccess(EOS(STATIC_973), i110) :|: TRUE f972_0_appendNewList_FieldAccess(EOS(STATIC_972), i110, o128[CyclicAnalysis.field]o126) -> f977_0_appendNewList_Store(EOS(STATIC_977), i110, o128[CyclicAnalysis.field]o142) :|: o128[CyclicAnalysis.field]o142 > o128[CyclicAnalysis.field]o126 && o128[CyclicAnalysis.field]o126 >= 0 f977_0_appendNewList_Store(EOS(STATIC_977), i110, o128[CyclicAnalysis.field]o142) -> f994_0_appendNewList_JMP(EOS(STATIC_994), i110, o128[CyclicAnalysis.field]o142) :|: TRUE f994_0_appendNewList_JMP(EOS(STATIC_994), i110, o128[CyclicAnalysis.field]o142) -> f1015_0_appendNewList_Load(EOS(STATIC_1015), i110, o128[CyclicAnalysis.field]o142) :|: TRUE f1015_0_appendNewList_Load(EOS(STATIC_1015), i110, o128[CyclicAnalysis.field]o142) -> f801_0_appendNewList_Load(EOS(STATIC_801), i110, o128[CyclicAnalysis.field]o142) :|: TRUE f801_0_appendNewList_Load(EOS(STATIC_801), i96, o128[CyclicAnalysis.field]o126) -> f806_0_appendNewList_ConstantStackPush(EOS(STATIC_806), i96, i96, o128[CyclicAnalysis.field]o126) :|: TRUE f973_0_appendNewList_FieldAccess(EOS(STATIC_973), i110) -> f991_0_appendNewList_Store(EOS(STATIC_991), i110) :|: TRUE f991_0_appendNewList_Store(EOS(STATIC_991), i110) -> f996_0_appendNewList_JMP(EOS(STATIC_996), i110) :|: TRUE f996_0_appendNewList_JMP(EOS(STATIC_996), i110) -> f1063_0_appendNewList_Load(EOS(STATIC_1063), i110) :|: TRUE f1063_0_appendNewList_Load(EOS(STATIC_1063), i110) -> f801_0_appendNewList_Load(EOS(STATIC_801), i110, o148[CyclicAnalysis.field]o142) :|: o148[CyclicAnalysis.field]o142 = 1 Combined rules. Obtained 2 IRulesP rules: f806_0_appendNewList_ConstantStackPush(EOS(STATIC_806), i96:0, i96:0, o128[CyclicAnalysis.field]o126:0) -> f806_0_appendNewList_ConstantStackPush(EOS(STATIC_806), i96:0 - 1, i96:0 - 1, 1) :|: i96:0 > 1 f806_0_appendNewList_ConstantStackPush(EOS(STATIC_806), i96:0, i96:0, o128[CyclicAnalysis.field]o126:0) -> f806_0_appendNewList_ConstantStackPush(EOS(STATIC_806), i96:0 - 1, i96:0 - 1, o128[CyclicAnalysis.field]o142:0) :|: o128[CyclicAnalysis.field]o126:0 > 0 && o128[CyclicAnalysis.field]o142:0 > o128[CyclicAnalysis.field]o126:0 && i96:0 > 1 Filtered constant ground arguments: f806_0_appendNewList_ConstantStackPush(x1, x2, x3, x4) -> f806_0_appendNewList_ConstantStackPush(x2, x3, x4) EOS(x1) -> EOS Filtered duplicate arguments: f806_0_appendNewList_ConstantStackPush(x1, x2, x3) -> f806_0_appendNewList_ConstantStackPush(x2, x3) Finished conversion. Obtained 2 rules.P rules: f806_0_appendNewList_ConstantStackPush(i96:0, o128[CyclicAnalysis.field]o126:0) -> f806_0_appendNewList_ConstantStackPush(i96:0 - 1, 1) :|: i96:0 > 1 f806_0_appendNewList_ConstantStackPush(i96:0, o128[CyclicAnalysis.field]o126:0) -> f806_0_appendNewList_ConstantStackPush(i96:0 - 1, o128[CyclicAnalysis.field]o142:0) :|: o128[CyclicAnalysis.field]o142:0 > o128[CyclicAnalysis.field]o126:0 && i96:0 > 1 && o128[CyclicAnalysis.field]o126:0 > 0 ---------------------------------------- (14) Obligation: Rules: f806_0_appendNewList_ConstantStackPush(i96:0, o128[CyclicAnalysis.field]o126:0) -> f806_0_appendNewList_ConstantStackPush(i96:0 - 1, 1) :|: i96:0 > 1 f806_0_appendNewList_ConstantStackPush(x, x1) -> f806_0_appendNewList_ConstantStackPush(x - 1, x2) :|: x2 > x1 && x > 1 && x1 > 0 ---------------------------------------- (15) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (16) Obligation: Rules: f806_0_appendNewList_ConstantStackPush(i96:0, o128[CyclicAnalysis.field]o126:0) -> f806_0_appendNewList_ConstantStackPush(arith, 1) :|: i96:0 > 1 && arith = i96:0 - 1 f806_0_appendNewList_ConstantStackPush(x3, x4) -> f806_0_appendNewList_ConstantStackPush(x5, x6) :|: x6 > x4 && x3 > 1 && x4 > 0 && x5 = x3 - 1 ---------------------------------------- (17) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f806_0_appendNewList_ConstantStackPush(i96:0, o128[CyclicAnalysis.field]o126:0) -> f806_0_appendNewList_ConstantStackPush(arith, 1) :|: i96:0 > 1 && arith = i96:0 - 1 (2) f806_0_appendNewList_ConstantStackPush(x3, x4) -> f806_0_appendNewList_ConstantStackPush(x5, x6) :|: x6 > x4 && x3 > 1 && x4 > 0 && x5 = x3 - 1 Arcs: (1) -> (1), (2) (2) -> (1), (2) This digraph is fully evaluated! ---------------------------------------- (18) Obligation: Termination digraph: Nodes: (1) f806_0_appendNewList_ConstantStackPush(i96:0, o128[CyclicAnalysis.field]o126:0) -> f806_0_appendNewList_ConstantStackPush(arith, 1) :|: i96:0 > 1 && arith = i96:0 - 1 (2) f806_0_appendNewList_ConstantStackPush(x3, x4) -> f806_0_appendNewList_ConstantStackPush(x5, x6) :|: x6 > x4 && x3 > 1 && x4 > 0 && x5 = x3 - 1 Arcs: (1) -> (1), (2) (2) -> (1), (2) This digraph is fully evaluated! ---------------------------------------- (19) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (20) Obligation: Rules: f806_0_appendNewList_ConstantStackPush(i96:0:0, o128[CyclicAnalysis.field]o126:0:0) -> f806_0_appendNewList_ConstantStackPush(i96:0:0 - 1, 1) :|: i96:0:0 > 1 f806_0_appendNewList_ConstantStackPush(x3:0, x4:0) -> f806_0_appendNewList_ConstantStackPush(x3:0 - 1, x6:0) :|: x6:0 > x4:0 && x3:0 > 1 && x4:0 > 0 ---------------------------------------- (21) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f806_0_appendNewList_ConstantStackPush(INTEGER, VARIABLE) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (22) Obligation: Rules: f806_0_appendNewList_ConstantStackPush(i96:0:0, o128[CyclicAnalysis.field]o126:0:0) -> f806_0_appendNewList_ConstantStackPush(c, c1) :|: c1 = 1 && c = i96:0:0 - 1 && i96:0:0 > 1 f806_0_appendNewList_ConstantStackPush(x3:0, x4:0) -> f806_0_appendNewList_ConstantStackPush(c2, x6:0) :|: c2 = x3:0 - 1 && (x6:0 > x4:0 && x3:0 > 1 && x4:0 > 0) ---------------------------------------- (23) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f806_0_appendNewList_ConstantStackPush(x, x1)] = x The following rules are decreasing: f806_0_appendNewList_ConstantStackPush(i96:0:0, o128[CyclicAnalysis.field]o126:0:0) -> f806_0_appendNewList_ConstantStackPush(c, c1) :|: c1 = 1 && c = i96:0:0 - 1 && i96:0:0 > 1 f806_0_appendNewList_ConstantStackPush(x3:0, x4:0) -> f806_0_appendNewList_ConstantStackPush(c2, x6:0) :|: c2 = x3:0 - 1 && (x6:0 > x4:0 && x3:0 > 1 && x4:0 > 0) The following rules are bounded: f806_0_appendNewList_ConstantStackPush(i96:0:0, o128[CyclicAnalysis.field]o126:0:0) -> f806_0_appendNewList_ConstantStackPush(c, c1) :|: c1 = 1 && c = i96:0:0 - 1 && i96:0:0 > 1 f806_0_appendNewList_ConstantStackPush(x3:0, x4:0) -> f806_0_appendNewList_ConstantStackPush(c2, x6:0) :|: c2 = x3:0 - 1 && (x6:0 > x4:0 && x3:0 > 1 && x4:0 > 0) ---------------------------------------- (24) YES ---------------------------------------- (25) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: CyclicAnalysis.CyclicAnalysis.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: ---------------------------------------- (26) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 23 IRulesP rules: f377_0_appendNewList_ConstantStackPush(EOS(STATIC_377), i33, i33, o46[CyclicAnalysis.field]o44) -> f378_0_appendNewList_LE(EOS(STATIC_378), i33, i33, 1, o46[CyclicAnalysis.field]o44) :|: TRUE f378_0_appendNewList_LE(EOS(STATIC_378), i42, i42, matching1, o46[CyclicAnalysis.field]o44) -> f380_0_appendNewList_LE(EOS(STATIC_380), i42, i42, 1, o46[CyclicAnalysis.field]o44) :|: TRUE && matching1 = 1 f380_0_appendNewList_LE(EOS(STATIC_380), i42, i42, matching1, o46[CyclicAnalysis.field]o44) -> f393_0_appendNewList_Inc(EOS(STATIC_393), i42, o46[CyclicAnalysis.field]o44) :|: i42 > 1 && matching1 = 1 f393_0_appendNewList_Inc(EOS(STATIC_393), i42, o46[CyclicAnalysis.field]o44) -> f399_0_appendNewList_Load(EOS(STATIC_399), i42 + -1, o46[CyclicAnalysis.field]o44) :|: TRUE f399_0_appendNewList_Load(EOS(STATIC_399), i43, o46[CyclicAnalysis.field]o44) -> f405_0_appendNewList_New(EOS(STATIC_405), i43, o46[CyclicAnalysis.field]o44) :|: TRUE f405_0_appendNewList_New(EOS(STATIC_405), i43, o46[CyclicAnalysis.field]o44) -> f411_0_appendNewList_Duplicate(EOS(STATIC_411), i43, o46[CyclicAnalysis.field]o44) :|: TRUE f411_0_appendNewList_Duplicate(EOS(STATIC_411), i43, o46[CyclicAnalysis.field]o44) -> f415_0_appendNewList_InvokeMethod(EOS(STATIC_415), i43, o46[CyclicAnalysis.field]o44) :|: TRUE f415_0_appendNewList_InvokeMethod(EOS(STATIC_415), i43, o46[CyclicAnalysis.field]o44) -> f417_0__init__Load(EOS(STATIC_417), i43, o46[CyclicAnalysis.field]o44) :|: TRUE f417_0__init__Load(EOS(STATIC_417), i43, o46[CyclicAnalysis.field]o44) -> f462_0__init__InvokeMethod(EOS(STATIC_462), i43, o46[CyclicAnalysis.field]o44) :|: TRUE f462_0__init__InvokeMethod(EOS(STATIC_462), i43, o46[CyclicAnalysis.field]o44) -> f468_0__init__Return(EOS(STATIC_468), i43, o46[CyclicAnalysis.field]o44) :|: TRUE f468_0__init__Return(EOS(STATIC_468), i43, o46[CyclicAnalysis.field]o44) -> f476_0_appendNewList_Duplicate(EOS(STATIC_476), i43, o46[CyclicAnalysis.field]o44) :|: TRUE f476_0_appendNewList_Duplicate(EOS(STATIC_476), i43, o46[CyclicAnalysis.field]o44) -> f479_0_appendNewList_FieldAccess(EOS(STATIC_479), i43, o46[CyclicAnalysis.field]o44) :|: TRUE f479_0_appendNewList_FieldAccess(EOS(STATIC_479), i43, o46[CyclicAnalysis.field]o44) -> f496_0_appendNewList_FieldAccess(EOS(STATIC_496), i43, o46[CyclicAnalysis.field]o44) :|: o46[CyclicAnalysis.field]o44 > 0 f479_0_appendNewList_FieldAccess(EOS(STATIC_479), i43, o77[CyclicAnalysis.field]o77) -> f497_0_appendNewList_FieldAccess(EOS(STATIC_497), i43) :|: TRUE f496_0_appendNewList_FieldAccess(EOS(STATIC_496), i43, o46[CyclicAnalysis.field]o44) -> f509_0_appendNewList_Store(EOS(STATIC_509), i43, o46[CyclicAnalysis.field]o60) :|: o46[CyclicAnalysis.field]o60 > o46[CyclicAnalysis.field]o44 && o46[CyclicAnalysis.field]o44 >= 0 f509_0_appendNewList_Store(EOS(STATIC_509), i43, o46[CyclicAnalysis.field]o60) -> f528_0_appendNewList_JMP(EOS(STATIC_528), i43, o46[CyclicAnalysis.field]o60) :|: TRUE f528_0_appendNewList_JMP(EOS(STATIC_528), i43, o46[CyclicAnalysis.field]o60) -> f565_0_appendNewList_Load(EOS(STATIC_565), i43, o46[CyclicAnalysis.field]o60) :|: TRUE f565_0_appendNewList_Load(EOS(STATIC_565), i43, o46[CyclicAnalysis.field]o60) -> f376_0_appendNewList_Load(EOS(STATIC_376), i43, o46[CyclicAnalysis.field]o60) :|: TRUE f376_0_appendNewList_Load(EOS(STATIC_376), i33, o46[CyclicAnalysis.field]o44) -> f377_0_appendNewList_ConstantStackPush(EOS(STATIC_377), i33, i33, o46[CyclicAnalysis.field]o44) :|: TRUE f497_0_appendNewList_FieldAccess(EOS(STATIC_497), i43) -> f515_0_appendNewList_Store(EOS(STATIC_515), i43) :|: TRUE f515_0_appendNewList_Store(EOS(STATIC_515), i43) -> f530_0_appendNewList_JMP(EOS(STATIC_530), i43) :|: TRUE f530_0_appendNewList_JMP(EOS(STATIC_530), i43) -> f569_0_appendNewList_Load(EOS(STATIC_569), i43) :|: TRUE f569_0_appendNewList_Load(EOS(STATIC_569), i43) -> f376_0_appendNewList_Load(EOS(STATIC_376), i43, o77[CyclicAnalysis.field]o60) :|: o77[CyclicAnalysis.field]o60 = 1 Combined rules. Obtained 2 IRulesP rules: f377_0_appendNewList_ConstantStackPush(EOS(STATIC_377), i33:0, i33:0, o46[CyclicAnalysis.field]o44:0) -> f377_0_appendNewList_ConstantStackPush(EOS(STATIC_377), i33:0 - 1, i33:0 - 1, o46[CyclicAnalysis.field]o60:0) :|: o46[CyclicAnalysis.field]o44:0 > 0 && o46[CyclicAnalysis.field]o60:0 > o46[CyclicAnalysis.field]o44:0 && i33:0 > 1 f377_0_appendNewList_ConstantStackPush(EOS(STATIC_377), i33:0, i33:0, o46[CyclicAnalysis.field]o44:0) -> f377_0_appendNewList_ConstantStackPush(EOS(STATIC_377), i33:0 - 1, i33:0 - 1, 1) :|: i33:0 > 1 Filtered constant ground arguments: f377_0_appendNewList_ConstantStackPush(x1, x2, x3, x4) -> f377_0_appendNewList_ConstantStackPush(x2, x3, x4) EOS(x1) -> EOS Filtered duplicate arguments: f377_0_appendNewList_ConstantStackPush(x1, x2, x3) -> f377_0_appendNewList_ConstantStackPush(x2, x3) Finished conversion. Obtained 2 rules.P rules: f377_0_appendNewList_ConstantStackPush(i33:0, o46[CyclicAnalysis.field]o44:0) -> f377_0_appendNewList_ConstantStackPush(i33:0 - 1, o46[CyclicAnalysis.field]o60:0) :|: o46[CyclicAnalysis.field]o60:0 > o46[CyclicAnalysis.field]o44:0 && i33:0 > 1 && o46[CyclicAnalysis.field]o44:0 > 0 f377_0_appendNewList_ConstantStackPush(i33:0, o46[CyclicAnalysis.field]o44:0) -> f377_0_appendNewList_ConstantStackPush(i33:0 - 1, 1) :|: i33:0 > 1 ---------------------------------------- (27) Obligation: Rules: f377_0_appendNewList_ConstantStackPush(i33:0, o46[CyclicAnalysis.field]o44:0) -> f377_0_appendNewList_ConstantStackPush(i33:0 - 1, o46[CyclicAnalysis.field]o60:0) :|: o46[CyclicAnalysis.field]o60:0 > o46[CyclicAnalysis.field]o44:0 && i33:0 > 1 && o46[CyclicAnalysis.field]o44:0 > 0 f377_0_appendNewList_ConstantStackPush(x, x1) -> f377_0_appendNewList_ConstantStackPush(x - 1, 1) :|: x > 1 ---------------------------------------- (28) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (29) Obligation: Rules: f377_0_appendNewList_ConstantStackPush(i33:0, o46[CyclicAnalysis.field]o44:0) -> f377_0_appendNewList_ConstantStackPush(arith, o46[CyclicAnalysis.field]o60:0) :|: o46[CyclicAnalysis.field]o60:0 > o46[CyclicAnalysis.field]o44:0 && i33:0 > 1 && o46[CyclicAnalysis.field]o44:0 > 0 && arith = i33:0 - 1 f377_0_appendNewList_ConstantStackPush(x2, x3) -> f377_0_appendNewList_ConstantStackPush(x4, 1) :|: x2 > 1 && x4 = x2 - 1 ---------------------------------------- (30) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f377_0_appendNewList_ConstantStackPush(i33:0, o46[CyclicAnalysis.field]o44:0) -> f377_0_appendNewList_ConstantStackPush(arith, o46[CyclicAnalysis.field]o60:0) :|: o46[CyclicAnalysis.field]o60:0 > o46[CyclicAnalysis.field]o44:0 && i33:0 > 1 && o46[CyclicAnalysis.field]o44:0 > 0 && arith = i33:0 - 1 (2) f377_0_appendNewList_ConstantStackPush(x2, x3) -> f377_0_appendNewList_ConstantStackPush(x4, 1) :|: x2 > 1 && x4 = x2 - 1 Arcs: (1) -> (1), (2) (2) -> (1), (2) This digraph is fully evaluated! ---------------------------------------- (31) Obligation: Termination digraph: Nodes: (1) f377_0_appendNewList_ConstantStackPush(i33:0, o46[CyclicAnalysis.field]o44:0) -> f377_0_appendNewList_ConstantStackPush(arith, o46[CyclicAnalysis.field]o60:0) :|: o46[CyclicAnalysis.field]o60:0 > o46[CyclicAnalysis.field]o44:0 && i33:0 > 1 && o46[CyclicAnalysis.field]o44:0 > 0 && arith = i33:0 - 1 (2) f377_0_appendNewList_ConstantStackPush(x2, x3) -> f377_0_appendNewList_ConstantStackPush(x4, 1) :|: x2 > 1 && x4 = x2 - 1 Arcs: (1) -> (1), (2) (2) -> (1), (2) This digraph is fully evaluated! ---------------------------------------- (32) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (33) Obligation: Rules: f377_0_appendNewList_ConstantStackPush(i33:0:0, o46[CyclicAnalysis.field]o44:0:0) -> f377_0_appendNewList_ConstantStackPush(i33:0:0 - 1, o46[CyclicAnalysis.field]o60:0:0) :|: o46[CyclicAnalysis.field]o60:0:0 > o46[CyclicAnalysis.field]o44:0:0 && i33:0:0 > 1 && o46[CyclicAnalysis.field]o44:0:0 > 0 f377_0_appendNewList_ConstantStackPush(x2:0, x3:0) -> f377_0_appendNewList_ConstantStackPush(x2:0 - 1, 1) :|: x2:0 > 1 ---------------------------------------- (34) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f377_0_appendNewList_ConstantStackPush(INTEGER, VARIABLE) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (35) Obligation: Rules: f377_0_appendNewList_ConstantStackPush(i33:0:0, o46[CyclicAnalysis.field]o44:0:0) -> f377_0_appendNewList_ConstantStackPush(c, o46[CyclicAnalysis.field]o60:0:0) :|: c = i33:0:0 - 1 && (o46[CyclicAnalysis.field]o60:0:0 > o46[CyclicAnalysis.field]o44:0:0 && i33:0:0 > 1 && o46[CyclicAnalysis.field]o44:0:0 > 0) f377_0_appendNewList_ConstantStackPush(x2:0, x3:0) -> f377_0_appendNewList_ConstantStackPush(c1, c2) :|: c2 = 1 && c1 = x2:0 - 1 && x2:0 > 1 ---------------------------------------- (36) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f377_0_appendNewList_ConstantStackPush ] = f377_0_appendNewList_ConstantStackPush_1 The following rules are decreasing: f377_0_appendNewList_ConstantStackPush(i33:0:0, o46[CyclicAnalysis.field]o44:0:0) -> f377_0_appendNewList_ConstantStackPush(c, o46[CyclicAnalysis.field]o60:0:0) :|: c = i33:0:0 - 1 && (o46[CyclicAnalysis.field]o60:0:0 > o46[CyclicAnalysis.field]o44:0:0 && i33:0:0 > 1 && o46[CyclicAnalysis.field]o44:0:0 > 0) f377_0_appendNewList_ConstantStackPush(x2:0, x3:0) -> f377_0_appendNewList_ConstantStackPush(c1, c2) :|: c2 = 1 && c1 = x2:0 - 1 && x2:0 > 1 The following rules are bounded: f377_0_appendNewList_ConstantStackPush(i33:0:0, o46[CyclicAnalysis.field]o44:0:0) -> f377_0_appendNewList_ConstantStackPush(c, o46[CyclicAnalysis.field]o60:0:0) :|: c = i33:0:0 - 1 && (o46[CyclicAnalysis.field]o60:0:0 > o46[CyclicAnalysis.field]o44:0:0 && i33:0:0 > 1 && o46[CyclicAnalysis.field]o44:0:0 > 0) f377_0_appendNewList_ConstantStackPush(x2:0, x3:0) -> f377_0_appendNewList_ConstantStackPush(c1, c2) :|: c2 = 1 && c1 = x2:0 - 1 && x2:0 > 1 ---------------------------------------- (37) YES