/export/starexec/sandbox/solver/bin/starexec_run_standard /export/starexec/sandbox/benchmark/theBenchmark.jar /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- YES proof of /export/starexec/sandbox/benchmark/theBenchmark.jar # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty termination of the given Bare JBC problem could be proven: (0) Bare JBC problem (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] (2) JBC problem (3) JBCToGraph [EQUIVALENT, 392 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 0 ms] (6) AND (7) JBCTerminationSCC (8) SCCToQDPProof [SOUND, 79 ms] (9) QDP (10) QDPSizeChangeProof [EQUIVALENT, 0 ms] (11) YES (12) JBCTerminationSCC (13) SCCToIRSProof [SOUND, 74 ms] (14) IRSwT (15) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (16) IRSwT (17) IRSwTTerminationDigraphProof [EQUIVALENT, 48 ms] (18) IRSwT (19) IntTRSCompressionProof [EQUIVALENT, 0 ms] (20) IRSwT (21) TempFilterProof [SOUND, 50 ms] (22) IntTRS (23) PolynomialOrderProcessor [EQUIVALENT, 13 ms] (24) YES (25) JBCTerminationSCC (26) SCCToIRSProof [SOUND, 78 ms] (27) IRSwT (28) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (29) IRSwT (30) IRSwTTerminationDigraphProof [EQUIVALENT, 23 ms] (31) IRSwT (32) IntTRSCompressionProof [EQUIVALENT, 0 ms] (33) IRSwT (34) TempFilterProof [SOUND, 9 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: f1177_0_length_NULL(EOS(STATIC_1177), java.lang.Object(o191sub), java.lang.Object(o191sub)) -> f1178_0_length_NULL(EOS(STATIC_1178), java.lang.Object(o191sub), java.lang.Object(o191sub)) :|: TRUE f1178_0_length_NULL(EOS(STATIC_1178), java.lang.Object(o191sub), java.lang.Object(o191sub)) -> f1180_0_length_Load(EOS(STATIC_1180), java.lang.Object(o191sub)) :|: TRUE f1180_0_length_Load(EOS(STATIC_1180), java.lang.Object(o191sub)) -> f1184_0_length_FieldAccess(EOS(STATIC_1184), java.lang.Object(o191sub)) :|: TRUE f1184_0_length_FieldAccess(EOS(STATIC_1184), java.lang.Object(CyclicAnalysis.CyclicAnalysis(EOC, o193))) -> f1188_0_length_FieldAccess(EOS(STATIC_1188), java.lang.Object(CyclicAnalysis.CyclicAnalysis(EOC, o193))) :|: TRUE f1188_0_length_FieldAccess(EOS(STATIC_1188), java.lang.Object(CyclicAnalysis.CyclicAnalysis(EOC, o193))) -> f1191_0_length_Store(EOS(STATIC_1191), o193) :|: TRUE f1191_0_length_Store(EOS(STATIC_1191), o193) -> f1193_0_length_Inc(EOS(STATIC_1193), o193) :|: TRUE f1193_0_length_Inc(EOS(STATIC_1193), o193) -> f1195_0_length_JMP(EOS(STATIC_1195), o193) :|: TRUE f1195_0_length_JMP(EOS(STATIC_1195), o193) -> f1201_0_length_Load(EOS(STATIC_1201), o193) :|: TRUE f1201_0_length_Load(EOS(STATIC_1201), o193) -> f1175_0_length_Load(EOS(STATIC_1175), o193) :|: TRUE f1175_0_length_Load(EOS(STATIC_1175), o188) -> f1177_0_length_NULL(EOS(STATIC_1177), o188, o188) :|: TRUE R rules: Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.P rules: f1177_0_length_NULL(EOS(STATIC_1177), java.lang.Object(CyclicAnalysis.CyclicAnalysis(EOC, o193:0)), java.lang.Object(CyclicAnalysis.CyclicAnalysis(EOC, o193:0))) -> f1177_0_length_NULL(EOS(STATIC_1177), o193:0, o193:0) :|: TRUE R rules: Filtered ground terms: f1177_0_length_NULL(x1, x2, x3) -> f1177_0_length_NULL(x2, x3) EOS(x1) -> EOS CyclicAnalysis.CyclicAnalysis(x1, x2) -> CyclicAnalysis.CyclicAnalysis(x2) Filtered duplicate args: f1177_0_length_NULL(x1, x2) -> f1177_0_length_NULL(x2) Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.P rules: F1177_0_LENGTH_NULL(java.lang.Object(CyclicAnalysis.CyclicAnalysis(o193:0:0))) -> F1177_0_LENGTH_NULL(o193:0:0) :|: TRUE R rules: ---------------------------------------- (9) Obligation: Q DP problem: The TRS P consists of the following rules: F1177_0_LENGTH_NULL(java.lang.Object(CyclicAnalysis.CyclicAnalysis(o193:0:0))) -> F1177_0_LENGTH_NULL(o193: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: *F1177_0_LENGTH_NULL(java.lang.Object(CyclicAnalysis.CyclicAnalysis(o193:0:0))) -> F1177_0_LENGTH_NULL(o193: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: f899_0_appendNewList_ConstantStackPush(EOS(STATIC_899), i100, i100, o143[CyclicAnalysis.field]o141) -> f914_0_appendNewList_LE(EOS(STATIC_914), i100, i100, 1, o143[CyclicAnalysis.field]o141) :|: TRUE f914_0_appendNewList_LE(EOS(STATIC_914), i114, i114, matching1, o143[CyclicAnalysis.field]o141) -> f939_0_appendNewList_LE(EOS(STATIC_939), i114, i114, 1, o143[CyclicAnalysis.field]o141) :|: TRUE && matching1 = 1 f939_0_appendNewList_LE(EOS(STATIC_939), i114, i114, matching1, o143[CyclicAnalysis.field]o141) -> f954_0_appendNewList_Inc(EOS(STATIC_954), i114, o143[CyclicAnalysis.field]o141) :|: i114 > 1 && matching1 = 1 f954_0_appendNewList_Inc(EOS(STATIC_954), i114, o143[CyclicAnalysis.field]o141) -> f959_0_appendNewList_Load(EOS(STATIC_959), i114 + -1, o143[CyclicAnalysis.field]o141) :|: TRUE f959_0_appendNewList_Load(EOS(STATIC_959), i116, o143[CyclicAnalysis.field]o141) -> f961_0_appendNewList_New(EOS(STATIC_961), i116, o143[CyclicAnalysis.field]o141) :|: TRUE f961_0_appendNewList_New(EOS(STATIC_961), i116, o143[CyclicAnalysis.field]o141) -> f965_0_appendNewList_Duplicate(EOS(STATIC_965), i116, o143[CyclicAnalysis.field]o141) :|: TRUE f965_0_appendNewList_Duplicate(EOS(STATIC_965), i116, o143[CyclicAnalysis.field]o141) -> f967_0_appendNewList_InvokeMethod(EOS(STATIC_967), i116, o143[CyclicAnalysis.field]o141) :|: TRUE f967_0_appendNewList_InvokeMethod(EOS(STATIC_967), i116, o143[CyclicAnalysis.field]o141) -> f972_0__init__Load(EOS(STATIC_972), i116, o143[CyclicAnalysis.field]o141) :|: TRUE f972_0__init__Load(EOS(STATIC_972), i116, o143[CyclicAnalysis.field]o141) -> f979_0__init__InvokeMethod(EOS(STATIC_979), i116, o143[CyclicAnalysis.field]o141) :|: TRUE f979_0__init__InvokeMethod(EOS(STATIC_979), i116, o143[CyclicAnalysis.field]o141) -> f982_0__init__Return(EOS(STATIC_982), i116, o143[CyclicAnalysis.field]o141) :|: TRUE f982_0__init__Return(EOS(STATIC_982), i116, o143[CyclicAnalysis.field]o141) -> f984_0_appendNewList_Duplicate(EOS(STATIC_984), i116, o143[CyclicAnalysis.field]o141) :|: TRUE f984_0_appendNewList_Duplicate(EOS(STATIC_984), i116, o143[CyclicAnalysis.field]o141) -> f988_0_appendNewList_FieldAccess(EOS(STATIC_988), i116, o143[CyclicAnalysis.field]o141) :|: TRUE f988_0_appendNewList_FieldAccess(EOS(STATIC_988), i116, o143[CyclicAnalysis.field]o141) -> f992_0_appendNewList_FieldAccess(EOS(STATIC_992), i116, o143[CyclicAnalysis.field]o141) :|: o143[CyclicAnalysis.field]o141 > 0 f988_0_appendNewList_FieldAccess(EOS(STATIC_988), i116, o156[CyclicAnalysis.field]o156) -> f993_0_appendNewList_FieldAccess(EOS(STATIC_993), i116) :|: TRUE f992_0_appendNewList_FieldAccess(EOS(STATIC_992), i116, o143[CyclicAnalysis.field]o141) -> f996_0_appendNewList_Store(EOS(STATIC_996), i116, o143[CyclicAnalysis.field]o152) :|: o143[CyclicAnalysis.field]o152 > o143[CyclicAnalysis.field]o141 && o143[CyclicAnalysis.field]o141 >= 0 f996_0_appendNewList_Store(EOS(STATIC_996), i116, o143[CyclicAnalysis.field]o152) -> f1006_0_appendNewList_JMP(EOS(STATIC_1006), i116, o143[CyclicAnalysis.field]o152) :|: TRUE f1006_0_appendNewList_JMP(EOS(STATIC_1006), i116, o143[CyclicAnalysis.field]o152) -> f1031_0_appendNewList_Load(EOS(STATIC_1031), i116, o143[CyclicAnalysis.field]o152) :|: TRUE f1031_0_appendNewList_Load(EOS(STATIC_1031), i116, o143[CyclicAnalysis.field]o152) -> f896_0_appendNewList_Load(EOS(STATIC_896), i116, o143[CyclicAnalysis.field]o152) :|: TRUE f896_0_appendNewList_Load(EOS(STATIC_896), i100, o143[CyclicAnalysis.field]o141) -> f899_0_appendNewList_ConstantStackPush(EOS(STATIC_899), i100, i100, o143[CyclicAnalysis.field]o141) :|: TRUE f993_0_appendNewList_FieldAccess(EOS(STATIC_993), i116) -> f1000_0_appendNewList_Store(EOS(STATIC_1000), i116) :|: TRUE f1000_0_appendNewList_Store(EOS(STATIC_1000), i116) -> f1013_0_appendNewList_JMP(EOS(STATIC_1013), i116) :|: TRUE f1013_0_appendNewList_JMP(EOS(STATIC_1013), i116) -> f1047_0_appendNewList_Load(EOS(STATIC_1047), i116) :|: TRUE f1047_0_appendNewList_Load(EOS(STATIC_1047), i116) -> f896_0_appendNewList_Load(EOS(STATIC_896), i116, o156[CyclicAnalysis.field]o152) :|: o156[CyclicAnalysis.field]o152 = 1 Combined rules. Obtained 2 IRulesP rules: f899_0_appendNewList_ConstantStackPush(EOS(STATIC_899), i100:0, i100:0, o143[CyclicAnalysis.field]o141:0) -> f899_0_appendNewList_ConstantStackPush(EOS(STATIC_899), i100:0 - 1, i100:0 - 1, 1) :|: i100:0 > 1 f899_0_appendNewList_ConstantStackPush(EOS(STATIC_899), i100:0, i100:0, o143[CyclicAnalysis.field]o141:0) -> f899_0_appendNewList_ConstantStackPush(EOS(STATIC_899), i100:0 - 1, i100:0 - 1, o143[CyclicAnalysis.field]o152:0) :|: o143[CyclicAnalysis.field]o141:0 > 0 && o143[CyclicAnalysis.field]o152:0 > o143[CyclicAnalysis.field]o141:0 && i100:0 > 1 Filtered constant ground arguments: f899_0_appendNewList_ConstantStackPush(x1, x2, x3, x4) -> f899_0_appendNewList_ConstantStackPush(x2, x3, x4) EOS(x1) -> EOS Filtered duplicate arguments: f899_0_appendNewList_ConstantStackPush(x1, x2, x3) -> f899_0_appendNewList_ConstantStackPush(x2, x3) Finished conversion. Obtained 2 rules.P rules: f899_0_appendNewList_ConstantStackPush(i100:0, o143[CyclicAnalysis.field]o141:0) -> f899_0_appendNewList_ConstantStackPush(i100:0 - 1, 1) :|: i100:0 > 1 f899_0_appendNewList_ConstantStackPush(i100:0, o143[CyclicAnalysis.field]o141:0) -> f899_0_appendNewList_ConstantStackPush(i100:0 - 1, o143[CyclicAnalysis.field]o152:0) :|: o143[CyclicAnalysis.field]o152:0 > o143[CyclicAnalysis.field]o141:0 && i100:0 > 1 && o143[CyclicAnalysis.field]o141:0 > 0 ---------------------------------------- (14) Obligation: Rules: f899_0_appendNewList_ConstantStackPush(i100:0, o143[CyclicAnalysis.field]o141:0) -> f899_0_appendNewList_ConstantStackPush(i100:0 - 1, 1) :|: i100:0 > 1 f899_0_appendNewList_ConstantStackPush(x, x1) -> f899_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: f899_0_appendNewList_ConstantStackPush(i100:0, o143[CyclicAnalysis.field]o141:0) -> f899_0_appendNewList_ConstantStackPush(arith, 1) :|: i100:0 > 1 && arith = i100:0 - 1 f899_0_appendNewList_ConstantStackPush(x3, x4) -> f899_0_appendNewList_ConstantStackPush(x5, x6) :|: x6 > x4 && x3 > 1 && x4 > 0 && x5 = x3 - 1 ---------------------------------------- (17) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f899_0_appendNewList_ConstantStackPush(i100:0, o143[CyclicAnalysis.field]o141:0) -> f899_0_appendNewList_ConstantStackPush(arith, 1) :|: i100:0 > 1 && arith = i100:0 - 1 (2) f899_0_appendNewList_ConstantStackPush(x3, x4) -> f899_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) f899_0_appendNewList_ConstantStackPush(i100:0, o143[CyclicAnalysis.field]o141:0) -> f899_0_appendNewList_ConstantStackPush(arith, 1) :|: i100:0 > 1 && arith = i100:0 - 1 (2) f899_0_appendNewList_ConstantStackPush(x3, x4) -> f899_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: f899_0_appendNewList_ConstantStackPush(x3:0, x4:0) -> f899_0_appendNewList_ConstantStackPush(x3:0 - 1, x6:0) :|: x6:0 > x4:0 && x3:0 > 1 && x4:0 > 0 f899_0_appendNewList_ConstantStackPush(i100:0:0, o143[CyclicAnalysis.field]o141:0:0) -> f899_0_appendNewList_ConstantStackPush(i100:0:0 - 1, 1) :|: i100:0:0 > 1 ---------------------------------------- (21) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f899_0_appendNewList_ConstantStackPush(INTEGER, VARIABLE) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (22) Obligation: Rules: f899_0_appendNewList_ConstantStackPush(x3:0, x4:0) -> f899_0_appendNewList_ConstantStackPush(c, x6:0) :|: c = x3:0 - 1 && (x6:0 > x4:0 && x3:0 > 1 && x4:0 > 0) f899_0_appendNewList_ConstantStackPush(i100:0:0, o143[CyclicAnalysis.field]o141:0:0) -> f899_0_appendNewList_ConstantStackPush(c1, c2) :|: c2 = 1 && c1 = i100:0:0 - 1 && i100:0:0 > 1 ---------------------------------------- (23) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f899_0_appendNewList_ConstantStackPush(x, x1)] = x The following rules are decreasing: f899_0_appendNewList_ConstantStackPush(x3:0, x4:0) -> f899_0_appendNewList_ConstantStackPush(c, x6:0) :|: c = x3:0 - 1 && (x6:0 > x4:0 && x3:0 > 1 && x4:0 > 0) f899_0_appendNewList_ConstantStackPush(i100:0:0, o143[CyclicAnalysis.field]o141:0:0) -> f899_0_appendNewList_ConstantStackPush(c1, c2) :|: c2 = 1 && c1 = i100:0:0 - 1 && i100:0:0 > 1 The following rules are bounded: f899_0_appendNewList_ConstantStackPush(x3:0, x4:0) -> f899_0_appendNewList_ConstantStackPush(c, x6:0) :|: c = x3:0 - 1 && (x6:0 > x4:0 && x3:0 > 1 && x4:0 > 0) f899_0_appendNewList_ConstantStackPush(i100:0:0, o143[CyclicAnalysis.field]o141:0:0) -> f899_0_appendNewList_ConstantStackPush(c1, c2) :|: c2 = 1 && c1 = i100:0:0 - 1 && i100:0:0 > 1 ---------------------------------------- (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: f382_0_appendNewList_ConstantStackPush(EOS(STATIC_382), i31, i31, o43[CyclicAnalysis.field]o41) -> f383_0_appendNewList_LE(EOS(STATIC_383), i31, i31, 1, o43[CyclicAnalysis.field]o41) :|: TRUE f383_0_appendNewList_LE(EOS(STATIC_383), i42, i42, matching1, o43[CyclicAnalysis.field]o41) -> f386_0_appendNewList_LE(EOS(STATIC_386), i42, i42, 1, o43[CyclicAnalysis.field]o41) :|: TRUE && matching1 = 1 f386_0_appendNewList_LE(EOS(STATIC_386), i42, i42, matching1, o43[CyclicAnalysis.field]o41) -> f408_0_appendNewList_Inc(EOS(STATIC_408), i42, o43[CyclicAnalysis.field]o41) :|: i42 > 1 && matching1 = 1 f408_0_appendNewList_Inc(EOS(STATIC_408), i42, o43[CyclicAnalysis.field]o41) -> f413_0_appendNewList_Load(EOS(STATIC_413), i42 + -1, o43[CyclicAnalysis.field]o41) :|: TRUE f413_0_appendNewList_Load(EOS(STATIC_413), i44, o43[CyclicAnalysis.field]o41) -> f417_0_appendNewList_New(EOS(STATIC_417), i44, o43[CyclicAnalysis.field]o41) :|: TRUE f417_0_appendNewList_New(EOS(STATIC_417), i44, o43[CyclicAnalysis.field]o41) -> f420_0_appendNewList_Duplicate(EOS(STATIC_420), i44, o43[CyclicAnalysis.field]o41) :|: TRUE f420_0_appendNewList_Duplicate(EOS(STATIC_420), i44, o43[CyclicAnalysis.field]o41) -> f422_0_appendNewList_InvokeMethod(EOS(STATIC_422), i44, o43[CyclicAnalysis.field]o41) :|: TRUE f422_0_appendNewList_InvokeMethod(EOS(STATIC_422), i44, o43[CyclicAnalysis.field]o41) -> f425_0__init__Load(EOS(STATIC_425), i44, o43[CyclicAnalysis.field]o41) :|: TRUE f425_0__init__Load(EOS(STATIC_425), i44, o43[CyclicAnalysis.field]o41) -> f468_0__init__InvokeMethod(EOS(STATIC_468), i44, o43[CyclicAnalysis.field]o41) :|: TRUE f468_0__init__InvokeMethod(EOS(STATIC_468), i44, o43[CyclicAnalysis.field]o41) -> f473_0__init__Return(EOS(STATIC_473), i44, o43[CyclicAnalysis.field]o41) :|: TRUE f473_0__init__Return(EOS(STATIC_473), i44, o43[CyclicAnalysis.field]o41) -> f481_0_appendNewList_Duplicate(EOS(STATIC_481), i44, o43[CyclicAnalysis.field]o41) :|: TRUE f481_0_appendNewList_Duplicate(EOS(STATIC_481), i44, o43[CyclicAnalysis.field]o41) -> f488_0_appendNewList_FieldAccess(EOS(STATIC_488), i44, o43[CyclicAnalysis.field]o41) :|: TRUE f488_0_appendNewList_FieldAccess(EOS(STATIC_488), i44, o43[CyclicAnalysis.field]o41) -> f498_0_appendNewList_FieldAccess(EOS(STATIC_498), i44, o43[CyclicAnalysis.field]o41) :|: o43[CyclicAnalysis.field]o41 > 0 f488_0_appendNewList_FieldAccess(EOS(STATIC_488), i44, o79[CyclicAnalysis.field]o79) -> f499_0_appendNewList_FieldAccess(EOS(STATIC_499), i44) :|: TRUE f498_0_appendNewList_FieldAccess(EOS(STATIC_498), i44, o43[CyclicAnalysis.field]o41) -> f502_0_appendNewList_Store(EOS(STATIC_502), i44, o43[CyclicAnalysis.field]o62) :|: o43[CyclicAnalysis.field]o62 > o43[CyclicAnalysis.field]o41 && o43[CyclicAnalysis.field]o41 >= 0 f502_0_appendNewList_Store(EOS(STATIC_502), i44, o43[CyclicAnalysis.field]o62) -> f520_0_appendNewList_JMP(EOS(STATIC_520), i44, o43[CyclicAnalysis.field]o62) :|: TRUE f520_0_appendNewList_JMP(EOS(STATIC_520), i44, o43[CyclicAnalysis.field]o62) -> f542_0_appendNewList_Load(EOS(STATIC_542), i44, o43[CyclicAnalysis.field]o62) :|: TRUE f542_0_appendNewList_Load(EOS(STATIC_542), i44, o43[CyclicAnalysis.field]o62) -> f381_0_appendNewList_Load(EOS(STATIC_381), i44, o43[CyclicAnalysis.field]o62) :|: TRUE f381_0_appendNewList_Load(EOS(STATIC_381), i31, o43[CyclicAnalysis.field]o41) -> f382_0_appendNewList_ConstantStackPush(EOS(STATIC_382), i31, i31, o43[CyclicAnalysis.field]o41) :|: TRUE f499_0_appendNewList_FieldAccess(EOS(STATIC_499), i44) -> f503_0_appendNewList_Store(EOS(STATIC_503), i44) :|: TRUE f503_0_appendNewList_Store(EOS(STATIC_503), i44) -> f522_0_appendNewList_JMP(EOS(STATIC_522), i44) :|: TRUE f522_0_appendNewList_JMP(EOS(STATIC_522), i44) -> f550_0_appendNewList_Load(EOS(STATIC_550), i44) :|: TRUE f550_0_appendNewList_Load(EOS(STATIC_550), i44) -> f381_0_appendNewList_Load(EOS(STATIC_381), i44, o79[CyclicAnalysis.field]o62) :|: o79[CyclicAnalysis.field]o62 = 1 Combined rules. Obtained 2 IRulesP rules: f382_0_appendNewList_ConstantStackPush(EOS(STATIC_382), i31:0, i31:0, o43[CyclicAnalysis.field]o41:0) -> f382_0_appendNewList_ConstantStackPush(EOS(STATIC_382), i31:0 - 1, i31:0 - 1, 1) :|: i31:0 > 1 f382_0_appendNewList_ConstantStackPush(EOS(STATIC_382), i31:0, i31:0, o43[CyclicAnalysis.field]o41:0) -> f382_0_appendNewList_ConstantStackPush(EOS(STATIC_382), i31:0 - 1, i31:0 - 1, o43[CyclicAnalysis.field]o62:0) :|: o43[CyclicAnalysis.field]o41:0 > 0 && o43[CyclicAnalysis.field]o62:0 > o43[CyclicAnalysis.field]o41:0 && i31:0 > 1 Filtered constant ground arguments: f382_0_appendNewList_ConstantStackPush(x1, x2, x3, x4) -> f382_0_appendNewList_ConstantStackPush(x2, x3, x4) EOS(x1) -> EOS Filtered duplicate arguments: f382_0_appendNewList_ConstantStackPush(x1, x2, x3) -> f382_0_appendNewList_ConstantStackPush(x2, x3) Finished conversion. Obtained 2 rules.P rules: f382_0_appendNewList_ConstantStackPush(i31:0, o43[CyclicAnalysis.field]o41:0) -> f382_0_appendNewList_ConstantStackPush(i31:0 - 1, 1) :|: i31:0 > 1 f382_0_appendNewList_ConstantStackPush(i31:0, o43[CyclicAnalysis.field]o41:0) -> f382_0_appendNewList_ConstantStackPush(i31:0 - 1, o43[CyclicAnalysis.field]o62:0) :|: o43[CyclicAnalysis.field]o62:0 > o43[CyclicAnalysis.field]o41:0 && i31:0 > 1 && o43[CyclicAnalysis.field]o41:0 > 0 ---------------------------------------- (27) Obligation: Rules: f382_0_appendNewList_ConstantStackPush(i31:0, o43[CyclicAnalysis.field]o41:0) -> f382_0_appendNewList_ConstantStackPush(i31:0 - 1, 1) :|: i31:0 > 1 f382_0_appendNewList_ConstantStackPush(x, x1) -> f382_0_appendNewList_ConstantStackPush(x - 1, x2) :|: x2 > x1 && x > 1 && x1 > 0 ---------------------------------------- (28) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (29) Obligation: Rules: f382_0_appendNewList_ConstantStackPush(i31:0, o43[CyclicAnalysis.field]o41:0) -> f382_0_appendNewList_ConstantStackPush(arith, 1) :|: i31:0 > 1 && arith = i31:0 - 1 f382_0_appendNewList_ConstantStackPush(x3, x4) -> f382_0_appendNewList_ConstantStackPush(x5, x6) :|: x6 > x4 && x3 > 1 && x4 > 0 && x5 = x3 - 1 ---------------------------------------- (30) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f382_0_appendNewList_ConstantStackPush(i31:0, o43[CyclicAnalysis.field]o41:0) -> f382_0_appendNewList_ConstantStackPush(arith, 1) :|: i31:0 > 1 && arith = i31:0 - 1 (2) f382_0_appendNewList_ConstantStackPush(x3, x4) -> f382_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! ---------------------------------------- (31) Obligation: Termination digraph: Nodes: (1) f382_0_appendNewList_ConstantStackPush(i31:0, o43[CyclicAnalysis.field]o41:0) -> f382_0_appendNewList_ConstantStackPush(arith, 1) :|: i31:0 > 1 && arith = i31:0 - 1 (2) f382_0_appendNewList_ConstantStackPush(x3, x4) -> f382_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! ---------------------------------------- (32) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (33) Obligation: Rules: f382_0_appendNewList_ConstantStackPush(i31:0:0, o43[CyclicAnalysis.field]o41:0:0) -> f382_0_appendNewList_ConstantStackPush(i31:0:0 - 1, 1) :|: i31:0:0 > 1 f382_0_appendNewList_ConstantStackPush(x3:0, x4:0) -> f382_0_appendNewList_ConstantStackPush(x3:0 - 1, x6:0) :|: x6:0 > x4:0 && x3:0 > 1 && x4:0 > 0 ---------------------------------------- (34) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f382_0_appendNewList_ConstantStackPush(INTEGER, VARIABLE) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (35) Obligation: Rules: f382_0_appendNewList_ConstantStackPush(i31:0:0, o43[CyclicAnalysis.field]o41:0:0) -> f382_0_appendNewList_ConstantStackPush(c, c1) :|: c1 = 1 && c = i31:0:0 - 1 && i31:0:0 > 1 f382_0_appendNewList_ConstantStackPush(x3:0, x4:0) -> f382_0_appendNewList_ConstantStackPush(c2, x6:0) :|: c2 = x3:0 - 1 && (x6:0 > x4:0 && x3:0 > 1 && x4:0 > 0) ---------------------------------------- (36) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f382_0_appendNewList_ConstantStackPush ] = f382_0_appendNewList_ConstantStackPush_1 The following rules are decreasing: f382_0_appendNewList_ConstantStackPush(i31:0:0, o43[CyclicAnalysis.field]o41:0:0) -> f382_0_appendNewList_ConstantStackPush(c, c1) :|: c1 = 1 && c = i31:0:0 - 1 && i31:0:0 > 1 f382_0_appendNewList_ConstantStackPush(x3:0, x4:0) -> f382_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: f382_0_appendNewList_ConstantStackPush(i31:0:0, o43[CyclicAnalysis.field]o41:0:0) -> f382_0_appendNewList_ConstantStackPush(c, c1) :|: c1 = 1 && c = i31:0:0 - 1 && i31:0:0 > 1 f382_0_appendNewList_ConstantStackPush(x3:0, x4:0) -> f382_0_appendNewList_ConstantStackPush(c2, x6:0) :|: c2 = x3:0 - 1 && (x6:0 > x4:0 && x3:0 > 1 && x4:0 > 0) ---------------------------------------- (37) YES