/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, 97 ms] (2) JBC problem (3) JBCToGraph [EQUIVALENT, 1538 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 0 ms] (6) AND (7) JBCTerminationSCC (8) SCCToIRSProof [SOUND, 160 ms] (9) IRSwT (10) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (11) IRSwT (12) IRSwTTerminationDigraphProof [EQUIVALENT, 11 ms] (13) IRSwT (14) IntTRSCompressionProof [EQUIVALENT, 0 ms] (15) IRSwT (16) TempFilterProof [SOUND, 339 ms] (17) IRSwT (18) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] (19) IRSwT (20) IntTRSUnneededArgumentFilterProof [EQUIVALENT, 0 ms] (21) IRSwT (22) IRSwTOrderProof [EQUIVALENT, 0 ms] (23) YES (24) JBCTerminationSCC (25) SCCToIRSProof [SOUND, 170 ms] (26) IRSwT (27) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (28) IRSwT (29) IRSwTTerminationDigraphProof [EQUIVALENT, 55 ms] (30) AND (31) IRSwT (32) IntTRSCompressionProof [EQUIVALENT, 5 ms] (33) IRSwT (34) TempFilterProof [SOUND, 13 ms] (35) IntTRS (36) PolynomialOrderProcessor [EQUIVALENT, 0 ms] (37) YES (38) IRSwT (39) IntTRSCompressionProof [EQUIVALENT, 0 ms] (40) IRSwT (41) TempFilterProof [SOUND, 10 ms] (42) IntTRS (43) RankingReductionPairProof [EQUIVALENT, 0 ms] (44) YES ---------------------------------------- (0) Obligation: need to prove termination of the following program: package ConvertRec; public class ConvertRec { public static int convert(List xs, int b) { if (xs == null) return 0; if (xs.value <= 0) return b * convert(xs.next, b); return 1 + convert(new List(xs.value - 1, xs.next), b); } public static void main(String[] args) { Random.args = args; List xs = createList(Random.random()); convert(xs, Random.random()); } public static List createList(int l) { if (l <= 0) { return null; } else { return new List(Random.random(), createList(l-1)); } } } package ConvertRec; public class List { int value; List next; public List() {} public List(int value, List next) { this.value = value; this.next = next; } public static List copy(List x) { if (x == null) return null; else return new List(x.value,copy(x.next)); } } package ConvertRec; public class Random { static String[] args; static int index = 0; public static int random() { if (args.length <= index) { return 0; } String string = args[index]; index++; if (string == null) { return 0; } return string.length(); } } ---------------------------------------- (1) BareJBCToJBCProof (EQUIVALENT) initialized classpath ---------------------------------------- (2) Obligation: need to prove termination of the following program: package ConvertRec; public class ConvertRec { public static int convert(List xs, int b) { if (xs == null) return 0; if (xs.value <= 0) return b * convert(xs.next, b); return 1 + convert(new List(xs.value - 1, xs.next), b); } public static void main(String[] args) { Random.args = args; List xs = createList(Random.random()); convert(xs, Random.random()); } public static List createList(int l) { if (l <= 0) { return null; } else { return new List(Random.random(), createList(l-1)); } } } package ConvertRec; public class List { int value; List next; public List() {} public List(int value, List next) { this.value = value; this.next = next; } public static List copy(List x) { if (x == null) return null; else return new List(x.value,copy(x.next)); } } package ConvertRec; public class Random { static String[] args; static int index = 0; public static int random() { if (args.length <= index) { return 0; } String string = args[index]; index++; if (string == null) { return 0; } return string.length(); } } ---------------------------------------- (3) JBCToGraph (EQUIVALENT) Constructed TerminationGraph. ---------------------------------------- (4) Obligation: Termination Graph based on JBC Program: ConvertRec.ConvertRec.main([Ljava/lang/String;)V: Graph of 345 nodes with 0 SCCs. ConvertRec.ConvertRec.createList(I)LConvertRec/List;: Graph of 163 nodes with 0 SCCs. ConvertRec.ConvertRec.convert(LConvertRec/List;I)I: Graph of 84 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: ConvertRec.ConvertRec.convert(LConvertRec/List;I)I SCC calls the following helper methods: ConvertRec.ConvertRec.convert(LConvertRec/List;I)I Performed SCC analyses: *Used field analysis yielded the following read fields: *ConvertRec.List: [value, next] *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (8) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 47 IRulesP rules: f4407_0_convert_NONNULL(EOS(STATIC_4407), java.lang.Object(o1559sub), java.lang.Object(o1559sub), java.lang.Object(o1559sub)) -> f4408_0_convert_NONNULL(EOS(STATIC_4408), java.lang.Object(o1559sub), java.lang.Object(o1559sub), java.lang.Object(o1559sub)) :|: TRUE f4408_0_convert_NONNULL(EOS(STATIC_4408), java.lang.Object(o1559sub), java.lang.Object(o1559sub), java.lang.Object(o1559sub)) -> f4410_0_convert_Load(EOS(STATIC_4410), java.lang.Object(o1559sub), java.lang.Object(o1559sub)) :|: TRUE f4410_0_convert_Load(EOS(STATIC_4410), java.lang.Object(o1559sub), java.lang.Object(o1559sub)) -> f4412_0_convert_FieldAccess(EOS(STATIC_4412), java.lang.Object(o1559sub), java.lang.Object(o1559sub), java.lang.Object(o1559sub)) :|: TRUE f4412_0_convert_FieldAccess(EOS(STATIC_4412), java.lang.Object(ConvertRec.List(EOC, i2204, o1561)), java.lang.Object(ConvertRec.List(EOC, i2204, o1561)), java.lang.Object(ConvertRec.List(EOC, i2204, o1561))) -> f4414_0_convert_FieldAccess(EOS(STATIC_4414), java.lang.Object(ConvertRec.List(EOC, i2204, o1561)), java.lang.Object(ConvertRec.List(EOC, i2204, o1561)), java.lang.Object(ConvertRec.List(EOC, i2204, o1561))) :|: TRUE f4414_0_convert_FieldAccess(EOS(STATIC_4414), java.lang.Object(ConvertRec.List(EOC, i2204, o1561)), java.lang.Object(ConvertRec.List(EOC, i2204, o1561)), java.lang.Object(ConvertRec.List(EOC, i2204, o1561))) -> f4416_0_convert_GT(EOS(STATIC_4416), java.lang.Object(ConvertRec.List(EOC, i2204, o1561)), java.lang.Object(ConvertRec.List(EOC, i2204, o1561)), i2204) :|: TRUE f4416_0_convert_GT(EOS(STATIC_4416), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), i2229) -> f4417_0_convert_GT(EOS(STATIC_4417), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), i2229) :|: TRUE f4416_0_convert_GT(EOS(STATIC_4416), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), i2230) -> f4418_0_convert_GT(EOS(STATIC_4418), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), i2230) :|: TRUE f4417_0_convert_GT(EOS(STATIC_4417), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), i2229) -> f4424_0_convert_Load(EOS(STATIC_4424), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), java.lang.Object(ConvertRec.List(EOC, i2229, o1561))) :|: i2229 <= 0 f4424_0_convert_Load(EOS(STATIC_4424), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), java.lang.Object(ConvertRec.List(EOC, i2229, o1561))) -> f4426_0_convert_Load(EOS(STATIC_4426), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), java.lang.Object(ConvertRec.List(EOC, i2229, o1561))) :|: TRUE f4426_0_convert_Load(EOS(STATIC_4426), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), java.lang.Object(ConvertRec.List(EOC, i2229, o1561))) -> f4428_0_convert_FieldAccess(EOS(STATIC_4428), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), java.lang.Object(ConvertRec.List(EOC, i2229, o1561))) :|: TRUE f4428_0_convert_FieldAccess(EOS(STATIC_4428), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), java.lang.Object(ConvertRec.List(EOC, i2229, o1561))) -> f4430_0_convert_Load(EOS(STATIC_4430), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), o1561) :|: TRUE f4430_0_convert_Load(EOS(STATIC_4430), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), o1561) -> f4432_0_convert_InvokeMethod(EOS(STATIC_4432), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), o1561) :|: TRUE f4432_0_convert_InvokeMethod(EOS(STATIC_4432), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), o1561) -> f4434_0_convert_Load(EOS(STATIC_4434), o1561, java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), o1561) :|: i2229 < 1 f4432_0_convert_InvokeMethod(EOS(STATIC_4432), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), o1561) -> f4434_1_convert_Load(EOS(STATIC_4434), java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), o1561) :|: i2229 < 1 f4434_0_convert_Load(EOS(STATIC_4434), o1561, java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), o1561) -> f4436_0_convert_Load(EOS(STATIC_4436), o1561, java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), o1561) :|: TRUE f4436_0_convert_Load(EOS(STATIC_4436), o1561, java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), o1561) -> f4438_0_convert_Load(EOS(STATIC_4438), o1561, java.lang.Object(ConvertRec.List(EOC, i2229, o1561)), o1561) :|: TRUE f4438_0_convert_Load(EOS(STATIC_4438), o1575, o1580, o1575) -> f4442_0_convert_Load(EOS(STATIC_4442), o1575, o1575) :|: TRUE f4442_0_convert_Load(EOS(STATIC_4442), o1575, o1575) -> f4406_0_convert_Load(EOS(STATIC_4406), o1575, o1575) :|: TRUE f4406_0_convert_Load(EOS(STATIC_4406), o1554, o1554) -> f4407_0_convert_NONNULL(EOS(STATIC_4407), o1554, o1554, o1554) :|: TRUE f4418_0_convert_GT(EOS(STATIC_4418), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), i2230) -> f4425_0_convert_ConstantStackPush(EOS(STATIC_4425), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561))) :|: i2230 > 0 f4425_0_convert_ConstantStackPush(EOS(STATIC_4425), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561))) -> f4427_0_convert_New(EOS(STATIC_4427), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1) :|: TRUE f4427_0_convert_New(EOS(STATIC_4427), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1) -> f4429_0_convert_Duplicate(EOS(STATIC_4429), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, 0, NULL))) :|: TRUE && matching1 = 1 f4429_0_convert_Duplicate(EOS(STATIC_4429), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, matching2, NULL))) -> f4431_0_convert_Load(EOS(STATIC_4431), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, 0, NULL)), java.lang.Object(ConvertRec.List(EOC, 0, NULL))) :|: TRUE && matching1 = 1 && matching2 = 0 f4431_0_convert_Load(EOS(STATIC_4431), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, matching2, NULL)), java.lang.Object(ConvertRec.List(EOC, matching3, NULL))) -> f4433_0_convert_FieldAccess(EOS(STATIC_4433), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, 0, NULL)), java.lang.Object(ConvertRec.List(EOC, 0, NULL)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561))) :|: TRUE && matching1 = 1 && matching2 = 0 && matching3 = 0 f4433_0_convert_FieldAccess(EOS(STATIC_4433), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, matching2, NULL)), java.lang.Object(ConvertRec.List(EOC, matching3, NULL)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561))) -> f4435_0_convert_ConstantStackPush(EOS(STATIC_4435), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, 0, NULL)), java.lang.Object(ConvertRec.List(EOC, 0, NULL)), i2230) :|: TRUE && matching1 = 1 && matching2 = 0 && matching3 = 0 f4435_0_convert_ConstantStackPush(EOS(STATIC_4435), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, matching2, NULL)), java.lang.Object(ConvertRec.List(EOC, matching3, NULL)), i2230) -> f4437_0_convert_IntArithmetic(EOS(STATIC_4437), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, 0, NULL)), java.lang.Object(ConvertRec.List(EOC, 0, NULL)), i2230, 1) :|: TRUE && matching1 = 1 && matching2 = 0 && matching3 = 0 f4437_0_convert_IntArithmetic(EOS(STATIC_4437), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, matching2, NULL)), java.lang.Object(ConvertRec.List(EOC, matching3, NULL)), i2230, matching4) -> f4439_0_convert_Load(EOS(STATIC_4439), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, 0, NULL)), java.lang.Object(ConvertRec.List(EOC, 0, NULL)), i2230 - 1) :|: i2230 > 0 && matching1 = 1 && matching2 = 0 && matching3 = 0 && matching4 = 1 f4439_0_convert_Load(EOS(STATIC_4439), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, matching2, NULL)), java.lang.Object(ConvertRec.List(EOC, matching3, NULL)), i2236) -> f4440_0_convert_FieldAccess(EOS(STATIC_4440), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, 0, NULL)), java.lang.Object(ConvertRec.List(EOC, 0, NULL)), i2236, java.lang.Object(ConvertRec.List(EOC, i2230, o1561))) :|: TRUE && matching1 = 1 && matching2 = 0 && matching3 = 0 f4440_0_convert_FieldAccess(EOS(STATIC_4440), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, matching2, NULL)), java.lang.Object(ConvertRec.List(EOC, matching3, NULL)), i2236, java.lang.Object(ConvertRec.List(EOC, i2230, o1561))) -> f4441_0_convert_InvokeMethod(EOS(STATIC_4441), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, 0, NULL)), java.lang.Object(ConvertRec.List(EOC, 0, NULL)), i2236, o1561) :|: TRUE && matching1 = 1 && matching2 = 0 && matching3 = 0 f4441_0_convert_InvokeMethod(EOS(STATIC_4441), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, matching2, NULL)), java.lang.Object(ConvertRec.List(EOC, matching3, NULL)), i2236, o1561) -> f4444_0__init__Load(EOS(STATIC_4444), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, 0, NULL)), java.lang.Object(ConvertRec.List(EOC, 0, NULL)), i2236, o1561) :|: TRUE && matching1 = 1 && matching2 = 0 && matching3 = 0 f4444_0__init__Load(EOS(STATIC_4444), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, matching2, NULL)), java.lang.Object(ConvertRec.List(EOC, matching3, NULL)), i2236, o1561) -> f4447_0__init__InvokeMethod(EOS(STATIC_4447), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, 0, NULL)), java.lang.Object(ConvertRec.List(EOC, 0, NULL)), i2236, o1561, java.lang.Object(ConvertRec.List(EOC, 0, NULL))) :|: TRUE && matching1 = 1 && matching2 = 0 && matching3 = 0 f4447_0__init__InvokeMethod(EOS(STATIC_4447), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, matching2, NULL)), java.lang.Object(ConvertRec.List(EOC, matching3, NULL)), i2236, o1561, java.lang.Object(ConvertRec.List(EOC, matching4, NULL))) -> f4449_0__init__Load(EOS(STATIC_4449), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, 0, NULL)), java.lang.Object(ConvertRec.List(EOC, 0, NULL)), i2236, o1561) :|: TRUE && matching1 = 1 && matching2 = 0 && matching3 = 0 && matching4 = 0 f4449_0__init__Load(EOS(STATIC_4449), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, matching2, NULL)), java.lang.Object(ConvertRec.List(EOC, matching3, NULL)), i2236, o1561) -> f4450_0__init__Load(EOS(STATIC_4450), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, 0, NULL)), java.lang.Object(ConvertRec.List(EOC, 0, NULL)), i2236, o1561, java.lang.Object(ConvertRec.List(EOC, 0, NULL))) :|: TRUE && matching1 = 1 && matching2 = 0 && matching3 = 0 f4450_0__init__Load(EOS(STATIC_4450), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, matching2, NULL)), java.lang.Object(ConvertRec.List(EOC, matching3, NULL)), i2236, o1561, java.lang.Object(ConvertRec.List(EOC, matching4, NULL))) -> f4457_0__init__FieldAccess(EOS(STATIC_4457), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, 0, NULL)), java.lang.Object(ConvertRec.List(EOC, 0, NULL)), o1561, java.lang.Object(ConvertRec.List(EOC, 0, NULL)), i2236) :|: TRUE && matching1 = 1 && matching2 = 0 && matching3 = 0 && matching4 = 0 f4457_0__init__FieldAccess(EOS(STATIC_4457), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, matching2, NULL)), java.lang.Object(ConvertRec.List(EOC, matching3, NULL)), o1561, java.lang.Object(ConvertRec.List(EOC, matching4, NULL)), i2236) -> f4459_0__init__Load(EOS(STATIC_4459), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, i2236, NULL)), java.lang.Object(ConvertRec.List(EOC, i2236, NULL)), o1561) :|: TRUE && matching1 = 1 && matching2 = 0 && matching3 = 0 && matching4 = 0 f4459_0__init__Load(EOS(STATIC_4459), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, i2236, NULL)), java.lang.Object(ConvertRec.List(EOC, i2236, NULL)), o1561) -> f4461_0__init__Load(EOS(STATIC_4461), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, i2236, NULL)), o1561, java.lang.Object(ConvertRec.List(EOC, i2236, NULL))) :|: TRUE && matching1 = 1 f4461_0__init__Load(EOS(STATIC_4461), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, i2236, NULL)), o1561, java.lang.Object(ConvertRec.List(EOC, i2236, NULL))) -> f4463_0__init__FieldAccess(EOS(STATIC_4463), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, i2236, NULL)), java.lang.Object(ConvertRec.List(EOC, i2236, NULL)), o1561) :|: TRUE && matching1 = 1 f4463_0__init__FieldAccess(EOS(STATIC_4463), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, i2236, NULL)), java.lang.Object(ConvertRec.List(EOC, i2236, NULL)), o1561) -> f4464_0__init__Return(EOS(STATIC_4464), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, i2236, o1561))) :|: TRUE && matching1 = 1 f4464_0__init__Return(EOS(STATIC_4464), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, i2236, o1561))) -> f4472_0_convert_Load(EOS(STATIC_4472), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, i2236, o1561))) :|: TRUE && matching1 = 1 f4472_0_convert_Load(EOS(STATIC_4472), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, i2236, o1561))) -> f4474_0_convert_InvokeMethod(EOS(STATIC_4474), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, i2236, o1561))) :|: TRUE && matching1 = 1 f4474_0_convert_InvokeMethod(EOS(STATIC_4474), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, i2236, o1561))) -> f4476_0_convert_Load(EOS(STATIC_4476), o1561, java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2236, o1561))) :|: i2230 >= 1 && i2236 < i2230 && matching1 = 1 f4474_0_convert_InvokeMethod(EOS(STATIC_4474), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), matching1, java.lang.Object(ConvertRec.List(EOC, i2236, o1561))) -> f4476_1_convert_Load(EOS(STATIC_4476), java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), 1, java.lang.Object(ConvertRec.List(EOC, i2236, o1561))) :|: i2230 >= 1 && i2236 < i2230 && matching1 = 1 f4476_0_convert_Load(EOS(STATIC_4476), o1561, java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2236, o1561))) -> f4478_0_convert_Load(EOS(STATIC_4478), o1561, java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2236, o1561))) :|: TRUE f4478_0_convert_Load(EOS(STATIC_4478), o1561, java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2236, o1561))) -> f4479_0_convert_Load(EOS(STATIC_4479), o1561, java.lang.Object(ConvertRec.List(EOC, i2230, o1561)), java.lang.Object(ConvertRec.List(EOC, i2236, o1561))) :|: TRUE f4479_0_convert_Load(EOS(STATIC_4479), o1754, o1755, java.lang.Object(ConvertRec.List(EOC, i2236, o1754))) -> f4486_0_convert_Load(EOS(STATIC_4486), o1755, o1754, java.lang.Object(ConvertRec.List(EOC, i2236, o1754))) :|: TRUE f4486_0_convert_Load(EOS(STATIC_4486), o1755, o1765, java.lang.Object(ConvertRec.List(EOC, i2236, o1754))) -> f4487_0_convert_Load(EOS(STATIC_4487), java.lang.Object(ConvertRec.List(EOC, i2236, o1754)), java.lang.Object(ConvertRec.List(EOC, i2236, o1754))) :|: TRUE f4487_0_convert_Load(EOS(STATIC_4487), java.lang.Object(ConvertRec.List(EOC, i2236, o1754)), java.lang.Object(ConvertRec.List(EOC, i2236, o1754))) -> f4406_0_convert_Load(EOS(STATIC_4406), java.lang.Object(ConvertRec.List(EOC, i2236, o1754)), java.lang.Object(ConvertRec.List(EOC, i2236, o1754))) :|: TRUE Combined rules. Obtained 4 IRulesP rules: f4407_0_convert_NONNULL(EOS(STATIC_4407), java.lang.Object(ConvertRec.List(EOC, i2204:0, o1561:0)), java.lang.Object(ConvertRec.List(EOC, i2204:0, o1561:0)), java.lang.Object(ConvertRec.List(EOC, i2204:0, o1561:0))) -> f4407_0_convert_NONNULL(EOS(STATIC_4407), o1561:0, o1561:0, o1561:0) :|: i2204:0 < 1 f4407_0_convert_NONNULL(EOS(STATIC_4407), java.lang.Object(ConvertRec.List(EOC, i2204:0, o1561:0)), java.lang.Object(ConvertRec.List(EOC, i2204:0, o1561:0)), java.lang.Object(ConvertRec.List(EOC, i2204:0, o1561:0))) -> f4407_0_convert_NONNULL(EOS(STATIC_4407), java.lang.Object(ConvertRec.List(EOC, i2204:0 - 1, o1561:0)), java.lang.Object(ConvertRec.List(EOC, i2204:0 - 1, o1561:0)), java.lang.Object(ConvertRec.List(EOC, i2204:0 - 1, o1561:0))) :|: i2204:0 > 0 && i2204:0 - 1 < i2204:0 Removed following non-SCC rules: f4407_0_convert_NONNULL(EOS(STATIC_4407), java.lang.Object(ConvertRec.List(EOC, i2204:0, o1561:0)), java.lang.Object(ConvertRec.List(EOC, i2204:0, o1561:0)), java.lang.Object(ConvertRec.List(EOC, i2204:0, o1561:0))) -> f4476_1_convert_Load(EOS(STATIC_4476), java.lang.Object(ConvertRec.List(EOC, i2204:0, o1561:0)), 1, java.lang.Object(ConvertRec.List(EOC, i2204:0 - 1, o1561:0))) :|: i2204:0 > 0 && i2204:0 - 1 < i2204:0 f4407_0_convert_NONNULL(EOS(STATIC_4407), java.lang.Object(ConvertRec.List(EOC, i2204:0, o1561:0)), java.lang.Object(ConvertRec.List(EOC, i2204:0, o1561:0)), java.lang.Object(ConvertRec.List(EOC, i2204:0, o1561:0))) -> f4434_1_convert_Load(EOS(STATIC_4434), java.lang.Object(ConvertRec.List(EOC, i2204:0, o1561:0)), o1561:0) :|: i2204:0 < 1 Filtered constant ground arguments: f4407_0_convert_NONNULL(x1, x2, x3, x4) -> f4407_0_convert_NONNULL(x2, x3, x4) EOS(x1) -> EOS ConvertRec.List(x1, x2, x3) -> ConvertRec.List(x2, x3) Filtered duplicate arguments: f4407_0_convert_NONNULL(x1, x2, x3) -> f4407_0_convert_NONNULL(x3) Finished conversion. Obtained 2 rules.P rules: f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(i2204:0, o1561:0))) -> f4407_0_convert_NONNULL(o1561:0) :|: i2204:0 < 1 f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(i2204:0, o1561:0))) -> f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(i2204:0 - 1, o1561:0))) :|: i2204:0 > 0 && i2204:0 - 1 < i2204:0 ---------------------------------------- (9) Obligation: Rules: f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(i2204:0, o1561:0))) -> f4407_0_convert_NONNULL(o1561:0) :|: i2204:0 < 1 f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x, x1))) -> f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x - 1, x1))) :|: x > 0 && x - 1 < x ---------------------------------------- (10) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (11) Obligation: Rules: f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(i2204:0, o1561:0))) -> f4407_0_convert_NONNULL(o1561:0) :|: i2204:0 < 1 f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x, x1))) -> f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(arith, x1))) :|: x > 0 && x - 1 < x && arith = x - 1 ---------------------------------------- (12) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(i2204:0, o1561:0))) -> f4407_0_convert_NONNULL(o1561:0) :|: i2204:0 < 1 (2) f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x, x1))) -> f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(arith, x1))) :|: x > 0 && x - 1 < x && arith = x - 1 Arcs: (1) -> (1), (2) (2) -> (1), (2) This digraph is fully evaluated! ---------------------------------------- (13) Obligation: Termination digraph: Nodes: (1) f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(i2204:0, o1561:0))) -> f4407_0_convert_NONNULL(o1561:0) :|: i2204:0 < 1 (2) f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x, x1))) -> f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(arith, x1))) :|: x > 0 && x - 1 < x && arith = x - 1 Arcs: (1) -> (1), (2) (2) -> (1), (2) This digraph is fully evaluated! ---------------------------------------- (14) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (15) Obligation: Rules: f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x:0, x1:0))) -> f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x:0 - 1, x1:0))) :|: x:0 > 0 && x:0 - 1 < x:0 f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(i2204:0:0, o1561:0:0))) -> f4407_0_convert_NONNULL(o1561:0:0) :|: i2204:0:0 < 1 ---------------------------------------- (16) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f4407_0_convert_NONNULL(VARIABLE) java.lang.Object(VARIABLE) ConvertRec.List(INTEGER, VARIABLE) Removed predefined arithmetic.The following proof was generated: # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty Termination of the given IRSwT could not be shown: - IRSwT - IRSwTToQDPProof Rules: f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x1:0))) -> f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x1:0))) f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(o1561:0:0))) -> f4407_0_convert_NONNULL(o1561:0:0) Removed the integers and created a QDP-Problem. - IRSwT - IRSwTToQDPProof - QDP - MRRProof Q DP problem: The TRS P consists of the following rules: f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x1:0))) -> f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x1:0))) f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(o1561:0:0))) -> f4407_0_convert_NONNULL(o1561:0:0) R is empty. Q is empty. We have to consider all (P,Q,R)-chains. By using the rule removal processor [LPAR04] with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented. Strictly oriented dependency pairs: f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(o1561:0:0))) -> f4407_0_convert_NONNULL(o1561:0:0) Used ordering: Knuth-Bendix order [KBO] with precedence:ConvertRec.List_1 > java.lang.Object_1 > f4407_0_convert_NONNULL_1 and weight map: f4407_0_convert_NONNULL_1=1 java.lang.Object_1=1 ConvertRec.List_1=1 The variable weight is 1 - IRSwT - IRSwTToQDPProof - QDP - MRRProof - QDP Q DP problem: The TRS P consists of the following rules: f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x1:0))) -> f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x1:0))) R is empty. Q is empty. We have to consider all (P,Q,R)-chains. ---------------------------------------- (17) Obligation: Rules: f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x:0, x1:0))) -> f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x:0 - 1, x1:0))) :|: x:0 > 0 && x:0 - 1 < x:0 ---------------------------------------- (18) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x:0, x1:0))) -> f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x:0 - 1, x1:0))) :|: x:0 > 0 && x:0 - 1 < x:0 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (19) Obligation: Termination digraph: Nodes: (1) f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x:0, x1:0))) -> f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x:0 - 1, x1:0))) :|: x:0 > 0 && x:0 - 1 < x:0 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (20) IntTRSUnneededArgumentFilterProof (EQUIVALENT) Some arguments are removed because they cannot influence termination. We removed arguments according to the following replacements: ConvertRec.List(x1, x2) -> ConvertRec.List(x1) ---------------------------------------- (21) Obligation: Rules: f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x:0))) -> f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x:0 - 1))) :|: x:0 > 0 && x:0 - 1 < x:0 ---------------------------------------- (22) IRSwTOrderProof (EQUIVALENT) [f4407_0_convert_NONNULL(x)] = -10 + 5*x [java.lang.Object(x1)] = 0 + 1*x1 [ConvertRec.List(x2)] = 0 + 2*x2 The following rules are decreasing: f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x:0))) -> f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x:0 - 1))) :|: x:0 > 0 && x:0 - 1 < x:0 The following rules are bounded: f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x:0))) -> f4407_0_convert_NONNULL(java.lang.Object(ConvertRec.List(x:0 - 1))) :|: x:0 > 0 && x:0 - 1 < x:0 ---------------------------------------- (23) YES ---------------------------------------- (24) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: ConvertRec.ConvertRec.createList(I)LConvertRec/List; SCC calls the following helper methods: ConvertRec.ConvertRec.createList(I)LConvertRec/List; Performed SCC analyses: *Used field analysis yielded the following read fields: *java.lang.String: [count] *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (25) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 55 IRulesP rules: f665_0_createList_GT(EOS(STATIC_665(java.lang.Object(o64sub), i66)), i70, i70, i70) -> f678_0_createList_GT(EOS(STATIC_678(java.lang.Object(o64sub), i66)), i70, i70, i70) :|: TRUE f678_0_createList_GT(EOS(STATIC_678(java.lang.Object(o64sub), i66)), i70, i70, i70) -> f683_0_createList_New(EOS(STATIC_683(java.lang.Object(o64sub), i66)), i70, i70) :|: i70 > 0 f683_0_createList_New(EOS(STATIC_683(java.lang.Object(o64sub), i66)), i70, i70) -> f690_0_createList_Duplicate(EOS(STATIC_690(java.lang.Object(o64sub), i66)), i70, i70) :|: TRUE f690_0_createList_Duplicate(EOS(STATIC_690(java.lang.Object(o64sub), i66)), i70, i70) -> f701_0_createList_InvokeMethod(EOS(STATIC_701(java.lang.Object(o64sub), i66)), i70, i70) :|: TRUE f701_0_createList_InvokeMethod(EOS(STATIC_701(java.lang.Object(o64sub), i66)), i70, i70) -> f719_0_random_FieldAccess(EOS(STATIC_719(java.lang.Object(o64sub), i66)), i70, i70) :|: TRUE f719_0_random_FieldAccess(EOS(STATIC_719(java.lang.Object(o64sub), i66)), i70, i70) -> f759_0_random_ArrayLength(EOS(STATIC_759(java.lang.Object(o64sub), i66)), i70, i70, java.lang.Object(o64sub)) :|: TRUE f759_0_random_ArrayLength(EOS(STATIC_759(java.lang.Object(ARRAY(i90)), i66)), i70, i70, java.lang.Object(ARRAY(i90))) -> f776_0_random_ArrayLength(EOS(STATIC_776(java.lang.Object(ARRAY(i90)), i66)), i70, i70, java.lang.Object(ARRAY(i90))) :|: i90 >= 0 f776_0_random_ArrayLength(EOS(STATIC_776(java.lang.Object(ARRAY(i90)), i66)), i70, i70, java.lang.Object(ARRAY(i90))) -> f779_0_random_FieldAccess(EOS(STATIC_779(java.lang.Object(ARRAY(i90)), i66)), i70, i70, i90) :|: i90 >= 0 f779_0_random_FieldAccess(EOS(STATIC_779(java.lang.Object(ARRAY(i90)), i66)), i70, i70, i90) -> f782_0_random_GT(EOS(STATIC_782(java.lang.Object(ARRAY(i90)), i66)), i70, i70, i90, i66) :|: TRUE f782_0_random_GT(EOS(STATIC_782(java.lang.Object(ARRAY(i90)), i66)), i70, i70, i90, i66) -> f791_0_random_GT(EOS(STATIC_791(java.lang.Object(ARRAY(i90)), i66)), i70, i70, i90, i66) :|: i90 > i66 f782_0_random_GT(EOS(STATIC_782(java.lang.Object(ARRAY(i90)), i66)), i70, i70, i90, i66) -> f792_0_random_GT(EOS(STATIC_792(java.lang.Object(ARRAY(i90)), i66)), i70, i70, i90, i66) :|: i90 <= i66 f791_0_random_GT(EOS(STATIC_791(java.lang.Object(ARRAY(i90)), i66)), i70, i70, i90, i66) -> f803_0_random_FieldAccess(EOS(STATIC_803(java.lang.Object(ARRAY(i90)), i66)), i70, i70) :|: i90 > i66 f803_0_random_FieldAccess(EOS(STATIC_803(java.lang.Object(ARRAY(i90)), i66)), i70, i70) -> f811_0_random_FieldAccess(EOS(STATIC_811(java.lang.Object(ARRAY(i90)), i66)), i70, i70, java.lang.Object(ARRAY(i90))) :|: TRUE f811_0_random_FieldAccess(EOS(STATIC_811(java.lang.Object(ARRAY(i90)), i66)), i70, i70, java.lang.Object(ARRAY(i90))) -> f834_0_random_ArrayAccess(EOS(STATIC_834(java.lang.Object(ARRAY(i90)), i66)), i70, i70, java.lang.Object(ARRAY(i90)), i66) :|: TRUE f834_0_random_ArrayAccess(EOS(STATIC_834(java.lang.Object(ARRAY(i90)), i66)), i70, i70, java.lang.Object(ARRAY(i90)), i66) -> f846_0_random_ArrayAccess(EOS(STATIC_846(java.lang.Object(ARRAY(i90)), i66)), i70, i70, java.lang.Object(ARRAY(i90)), i66) :|: TRUE f846_0_random_ArrayAccess(EOS(STATIC_846(java.lang.Object(ARRAY(i90)), i66)), i70, i70, java.lang.Object(ARRAY(i90)), i66) -> f867_0_random_Store(EOS(STATIC_867(java.lang.Object(ARRAY(i90)), i66)), i70, i70, o88) :|: i66 < i90 f867_0_random_Store(EOS(STATIC_867(java.lang.Object(ARRAY(i90)), i66)), i70, i70, o88) -> f876_0_random_FieldAccess(EOS(STATIC_876(java.lang.Object(ARRAY(i90)), i66)), i70, i70, o88) :|: TRUE f876_0_random_FieldAccess(EOS(STATIC_876(java.lang.Object(ARRAY(i90)), i66)), i70, i70, o88) -> f887_0_random_ConstantStackPush(EOS(STATIC_887(java.lang.Object(ARRAY(i90)), i66)), i70, i70, o88, i66) :|: TRUE f887_0_random_ConstantStackPush(EOS(STATIC_887(java.lang.Object(ARRAY(i90)), i66)), i70, i70, o88, i66) -> f898_0_random_IntArithmetic(EOS(STATIC_898(java.lang.Object(ARRAY(i90)), i66)), i70, i70, o88, i66, 1) :|: TRUE f898_0_random_IntArithmetic(EOS(STATIC_898(java.lang.Object(ARRAY(i90)), i66)), i70, i70, o88, i66, matching1) -> f916_0_random_FieldAccess(EOS(STATIC_916(java.lang.Object(ARRAY(i90)), i66)), i70, i70, o88, i66 + 1) :|: i66 >= 0 && matching1 = 1 f916_0_random_FieldAccess(EOS(STATIC_916(java.lang.Object(ARRAY(i90)), i66)), i70, i70, o88, i102) -> f930_0_random_Load(EOS(STATIC_930(java.lang.Object(ARRAY(i90)), i102)), i70, i70, o88) :|: TRUE f930_0_random_Load(EOS(STATIC_930(java.lang.Object(ARRAY(i90)), i102)), i70, i70, o88) -> f943_0_random_NONNULL(EOS(STATIC_943(java.lang.Object(ARRAY(i90)), i102)), i70, i70, o88, o88) :|: TRUE f943_0_random_NONNULL(EOS(STATIC_943(java.lang.Object(ARRAY(i90)), i102)), i70, i70, java.lang.Object(o114sub), java.lang.Object(o114sub)) -> f972_0_random_NONNULL(EOS(STATIC_972(java.lang.Object(ARRAY(i90)), i102)), i70, i70, java.lang.Object(o114sub), java.lang.Object(o114sub)) :|: TRUE f943_0_random_NONNULL(EOS(STATIC_943(java.lang.Object(ARRAY(i90)), i102)), i70, i70, NULL, NULL) -> f973_0_random_NONNULL(EOS(STATIC_973(java.lang.Object(ARRAY(i90)), i102)), i70, i70, NULL, NULL) :|: TRUE f972_0_random_NONNULL(EOS(STATIC_972(java.lang.Object(ARRAY(i90)), i102)), i70, i70, java.lang.Object(o114sub), java.lang.Object(o114sub)) -> f1219_0_random_Load(EOS(STATIC_1219(java.lang.Object(ARRAY(i90)), i102)), i70, i70, java.lang.Object(o114sub)) :|: TRUE f1219_0_random_Load(EOS(STATIC_1219(java.lang.Object(ARRAY(i90)), i102)), i70, i70, java.lang.Object(o114sub)) -> f1234_0_random_InvokeMethod(EOS(STATIC_1234(java.lang.Object(ARRAY(i90)), i102)), i70, i70, java.lang.Object(o114sub)) :|: TRUE f1234_0_random_InvokeMethod(EOS(STATIC_1234(java.lang.Object(ARRAY(i90)), i102)), i70, i70, java.lang.Object(o130sub)) -> f1252_0_random_InvokeMethod(EOS(STATIC_1252(java.lang.Object(ARRAY(i90)), i102)), i70, i70, java.lang.Object(o130sub)) :|: TRUE f1252_0_random_InvokeMethod(EOS(STATIC_1252(java.lang.Object(ARRAY(i90)), i102)), i70, i70, java.lang.Object(o130sub)) -> f1257_0_length_Load(EOS(STATIC_1257(java.lang.Object(ARRAY(i90)), i102)), i70, i70, java.lang.Object(o130sub)) :|: TRUE f1257_0_length_Load(EOS(STATIC_1257(java.lang.Object(ARRAY(i90)), i102)), i70, i70, java.lang.Object(o130sub)) -> f1280_0_length_FieldAccess(EOS(STATIC_1280(java.lang.Object(ARRAY(i90)), i102)), i70, i70, java.lang.Object(o130sub)) :|: TRUE f1280_0_length_FieldAccess(EOS(STATIC_1280(java.lang.Object(ARRAY(i90)), i102)), i70, i70, java.lang.Object(java.lang.String(EOC, i151))) -> f1293_0_length_FieldAccess(EOS(STATIC_1293(java.lang.Object(ARRAY(i90)), i102)), i70, i70, java.lang.Object(java.lang.String(EOC, i151))) :|: TRUE f1293_0_length_FieldAccess(EOS(STATIC_1293(java.lang.Object(ARRAY(i90)), i102)), i70, i70, java.lang.Object(java.lang.String(EOC, i151))) -> f1300_0_length_Return(EOS(STATIC_1300(java.lang.Object(ARRAY(i90)), i102)), i70, i70) :|: TRUE f1300_0_length_Return(EOS(STATIC_1300(java.lang.Object(ARRAY(i90)), i102)), i70, i70) -> f1314_0_random_Return(EOS(STATIC_1314(java.lang.Object(ARRAY(i90)), i102)), i70, i70) :|: TRUE f1314_0_random_Return(EOS(STATIC_1314(java.lang.Object(ARRAY(i90)), i102)), i70, i70) -> f1359_0_createList_Load(EOS(STATIC_1359(java.lang.Object(ARRAY(i90)), i102)), i70, i70) :|: TRUE f1359_0_createList_Load(EOS(STATIC_1359(java.lang.Object(ARRAY(i90)), i102)), i70, i70) -> f1381_0_createList_ConstantStackPush(EOS(STATIC_1381(java.lang.Object(ARRAY(i90)), i102)), i70, i70) :|: TRUE f1381_0_createList_ConstantStackPush(EOS(STATIC_1381(java.lang.Object(ARRAY(i90)), i102)), i70, i70) -> f1419_0_createList_IntArithmetic(EOS(STATIC_1419(java.lang.Object(ARRAY(i90)), i102)), i70, i70, 1) :|: TRUE f1419_0_createList_IntArithmetic(EOS(STATIC_1419(java.lang.Object(ARRAY(i90)), i102)), i70, i70, matching1) -> f1575_0_createList_InvokeMethod(EOS(STATIC_1575(java.lang.Object(ARRAY(i90)), i102)), i70, i70 - 1) :|: i70 > 0 && matching1 = 1 f1575_0_createList_InvokeMethod(EOS(STATIC_1575(java.lang.Object(ARRAY(i90)), i102)), i70, i185) -> f1607_0_createList_Load(EOS(STATIC_1607(java.lang.Object(ARRAY(i90)), i102)), i185, i185) :|: i70 >= 1 && i102 >= 1 && i90 >= 1 && i102 <= i90 && i185 < i70 f1575_0_createList_InvokeMethod(EOS(STATIC_1575(java.lang.Object(ARRAY(i90)), i102)), i70, i185) -> f1607_1_createList_Load(EOS(STATIC_1607(java.lang.Object(ARRAY(i90)), i102)), i70, i185) :|: i70 >= 1 && i102 >= 1 && i90 >= 1 && i102 <= i90 && i185 < i70 f1607_0_createList_Load(EOS(STATIC_1607(java.lang.Object(ARRAY(i90)), i102)), i185, i185) -> f1675_0_createList_Load(EOS(STATIC_1675(java.lang.Object(ARRAY(i90)), i102)), i185, i185) :|: TRUE f1675_0_createList_Load(EOS(STATIC_1675(java.lang.Object(ARRAY(i90)), i102)), i185, i185) -> f646_0_createList_Load(EOS(STATIC_646(java.lang.Object(ARRAY(i90)), i102)), i185, i185) :|: TRUE f646_0_createList_Load(EOS(STATIC_646(java.lang.Object(o64sub), i66)), i67, i67) -> f665_0_createList_GT(EOS(STATIC_665(java.lang.Object(o64sub), i66)), i67, i67, i67) :|: TRUE f973_0_random_NONNULL(EOS(STATIC_973(java.lang.Object(ARRAY(i90)), i102)), i70, i70, NULL, NULL) -> f1220_0_random_ConstantStackPush(EOS(STATIC_1220(java.lang.Object(ARRAY(i90)), i102)), i70, i70) :|: TRUE f1220_0_random_ConstantStackPush(EOS(STATIC_1220(java.lang.Object(ARRAY(i90)), i102)), i70, i70) -> f1237_0_random_Return(EOS(STATIC_1237(java.lang.Object(ARRAY(i90)), i102)), i70, i70) :|: TRUE f1237_0_random_Return(EOS(STATIC_1237(java.lang.Object(ARRAY(i90)), i102)), i70, i70) -> f1253_0_createList_Load(EOS(STATIC_1253(java.lang.Object(ARRAY(i90)), i102)), i70, i70) :|: TRUE f1253_0_createList_Load(EOS(STATIC_1253(java.lang.Object(ARRAY(i90)), i102)), i70, i70) -> f1359_0_createList_Load(EOS(STATIC_1359(java.lang.Object(ARRAY(i90)), i102)), i70, i70) :|: TRUE f792_0_random_GT(EOS(STATIC_792(java.lang.Object(ARRAY(i90)), i66)), i70, i70, i90, i66) -> f805_0_random_ConstantStackPush(EOS(STATIC_805(java.lang.Object(ARRAY(i90)), i66)), i70, i70) :|: i90 <= i66 f805_0_random_ConstantStackPush(EOS(STATIC_805(java.lang.Object(ARRAY(i90)), i66)), i70, i70) -> f813_0_random_Return(EOS(STATIC_813(java.lang.Object(ARRAY(i90)), i66)), i70, i70) :|: TRUE f813_0_random_Return(EOS(STATIC_813(java.lang.Object(ARRAY(i90)), i66)), i70, i70) -> f835_0_createList_Load(EOS(STATIC_835(java.lang.Object(ARRAY(i90)), i66)), i70, i70) :|: TRUE f835_0_createList_Load(EOS(STATIC_835(java.lang.Object(ARRAY(i90)), i66)), i70, i70) -> f851_0_createList_ConstantStackPush(EOS(STATIC_851(java.lang.Object(ARRAY(i90)), i66)), i70, i70) :|: TRUE f851_0_createList_ConstantStackPush(EOS(STATIC_851(java.lang.Object(ARRAY(i90)), i66)), i70, i70) -> f872_0_createList_IntArithmetic(EOS(STATIC_872(java.lang.Object(ARRAY(i90)), i66)), i70, i70, 1) :|: TRUE f872_0_createList_IntArithmetic(EOS(STATIC_872(java.lang.Object(ARRAY(i90)), i66)), i70, i70, matching1) -> f879_0_createList_InvokeMethod(EOS(STATIC_879(java.lang.Object(ARRAY(i90)), i66)), i70, i70 - 1) :|: i70 > 0 && matching1 = 1 f879_0_createList_InvokeMethod(EOS(STATIC_879(java.lang.Object(ARRAY(i90)), i66)), i70, i97) -> f891_0_createList_Load(EOS(STATIC_891(java.lang.Object(ARRAY(i90)), i66)), i97, i97) :|: i70 >= 1 && i90 <= i66 && i97 < i70 f879_0_createList_InvokeMethod(EOS(STATIC_879(java.lang.Object(ARRAY(i90)), i66)), i70, i97) -> f891_1_createList_Load(EOS(STATIC_891(java.lang.Object(ARRAY(i90)), i66)), i70, i97) :|: i70 >= 1 && i90 <= i66 && i97 < i70 f891_0_createList_Load(EOS(STATIC_891(java.lang.Object(ARRAY(i90)), i66)), i97, i97) -> f904_0_createList_Load(EOS(STATIC_904(java.lang.Object(ARRAY(i90)), i66)), i97, i97) :|: TRUE f904_0_createList_Load(EOS(STATIC_904(java.lang.Object(ARRAY(i90)), i66)), i97, i97) -> f646_0_createList_Load(EOS(STATIC_646(java.lang.Object(ARRAY(i90)), i66)), i97, i97) :|: TRUE Combined rules. Obtained 5 IRulesP rules: f665_0_createList_GT(EOS(STATIC_665(java.lang.Object(ARRAY(i90:0)), i66:0)), i70:0, i70:0, i70:0) -> f1575_0_createList_InvokeMethod(EOS(STATIC_1575(java.lang.Object(ARRAY(i90:0)), i66:0 + 1)), i70:0, i70:0 - 1) :|: i70:0 > 0 && i90:0 > -1 && i90:0 > i66:0 && i66:0 > -1 f1575_0_createList_InvokeMethod(EOS(STATIC_1575(java.lang.Object(ARRAY(i90:0)), i102:0)), i70:0, i185:0) -> f665_0_createList_GT(EOS(STATIC_665(java.lang.Object(ARRAY(i90:0)), i102:0)), i185:0, i185:0, i185:0) :|: i102:0 > 0 && i70:0 > 0 && i90:0 > 0 && i70:0 > i185:0 && i90:0 >= i102:0 f665_0_createList_GT(EOS(STATIC_665(java.lang.Object(ARRAY(i90:0)), i66:0)), i70:0, i70:0, i70:0) -> f665_0_createList_GT(EOS(STATIC_665(java.lang.Object(ARRAY(i90:0)), i66:0)), i70:0 - 1, i70:0 - 1, i70:0 - 1) :|: i70:0 > 0 && i90:0 > -1 && i90:0 <= i66:0 && i70:0 - 1 < i70:0 Removed following non-SCC rules: f665_0_createList_GT(EOS(STATIC_665(java.lang.Object(ARRAY(i90:0)), i66:0)), i70:0, i70:0, i70:0) -> f891_1_createList_Load(EOS(STATIC_891(java.lang.Object(ARRAY(i90:0)), i66:0)), i70:0, i70:0 - 1) :|: i70:0 > 0 && i90:0 > -1 && i90:0 <= i66:0 && i70:0 - 1 < i70:0 f1575_0_createList_InvokeMethod(EOS(STATIC_1575(java.lang.Object(ARRAY(i90:0)), i102:0)), i70:0, i185:0) -> f1607_1_createList_Load(EOS(STATIC_1607(java.lang.Object(ARRAY(i90:0)), i102:0)), i70:0, i185:0) :|: i102:0 > 0 && i70:0 > 0 && i90:0 > 0 && i70:0 > i185:0 && i90:0 >= i102:0 Filtered duplicate arguments: f665_0_createList_GT(x1, x2, x3, x4) -> f665_0_createList_GT(x1, x4) Finished conversion. Obtained 3 rules.P rules: f665_0_createList_GT(i70:0, i90:0, i66:0) -> f1575_0_createList_InvokeMethod(i70:0, i70:0 - 1, i90:0, i66:0 + 1) :|: i90:0 > -1 && i70:0 > 0 && i66:0 > -1 && i90:0 > i66:0 f1575_0_createList_InvokeMethod(i70:0, i185:0, i90:0, i102:0) -> f665_0_createList_GT(i185:0, i90:0, i102:0) :|: i70:0 > 0 && i102:0 > 0 && i90:0 > 0 && i90:0 >= i102:0 && i70:0 > i185:0 f665_0_createList_GT(i70:0, i90:0, i66:0) -> f665_0_createList_GT(i70:0 - 1, i90:0, i66:0) :|: i90:0 > -1 && i70:0 > 0 && i70:0 - 1 < i70:0 && i90:0 <= i66:0 ---------------------------------------- (26) Obligation: Rules: f665_0_createList_GT(i70:0, i90:0, i66:0) -> f1575_0_createList_InvokeMethod(i70:0, i70:0 - 1, i90:0, i66:0 + 1) :|: i90:0 > -1 && i70:0 > 0 && i66:0 > -1 && i90:0 > i66:0 f1575_0_createList_InvokeMethod(x, x1, x2, x3) -> f665_0_createList_GT(x1, x2, x3) :|: x > 0 && x3 > 0 && x2 > 0 && x2 >= x3 && x > x1 f665_0_createList_GT(x4, x5, x6) -> f665_0_createList_GT(x4 - 1, x5, x6) :|: x5 > -1 && x4 > 0 && x4 - 1 < x4 && x5 <= x6 ---------------------------------------- (27) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (28) Obligation: Rules: f665_0_createList_GT(i70:0, i90:0, i66:0) -> f1575_0_createList_InvokeMethod(i70:0, arith, i90:0, arith1) :|: i90:0 > -1 && i70:0 > 0 && i66:0 > -1 && i90:0 > i66:0 && arith = i70:0 - 1 && arith1 = i66:0 + 1 f1575_0_createList_InvokeMethod(x, x1, x2, x3) -> f665_0_createList_GT(x1, x2, x3) :|: x > 0 && x3 > 0 && x2 > 0 && x2 >= x3 && x > x1 f665_0_createList_GT(x7, x8, x9) -> f665_0_createList_GT(x10, x8, x9) :|: x8 > -1 && x7 > 0 && x7 - 1 < x7 && x8 <= x9 && x10 = x7 - 1 ---------------------------------------- (29) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f665_0_createList_GT(i70:0, i90:0, i66:0) -> f1575_0_createList_InvokeMethod(i70:0, arith, i90:0, arith1) :|: i90:0 > -1 && i70:0 > 0 && i66:0 > -1 && i90:0 > i66:0 && arith = i70:0 - 1 && arith1 = i66:0 + 1 (2) f1575_0_createList_InvokeMethod(x, x1, x2, x3) -> f665_0_createList_GT(x1, x2, x3) :|: x > 0 && x3 > 0 && x2 > 0 && x2 >= x3 && x > x1 (3) f665_0_createList_GT(x7, x8, x9) -> f665_0_createList_GT(x10, x8, x9) :|: x8 > -1 && x7 > 0 && x7 - 1 < x7 && x8 <= x9 && x10 = x7 - 1 Arcs: (1) -> (2) (2) -> (1), (3) (3) -> (3) This digraph is fully evaluated! ---------------------------------------- (30) Complex Obligation (AND) ---------------------------------------- (31) Obligation: Termination digraph: Nodes: (1) f665_0_createList_GT(i70:0, i90:0, i66:0) -> f1575_0_createList_InvokeMethod(i70:0, arith, i90:0, arith1) :|: i90:0 > -1 && i70:0 > 0 && i66:0 > -1 && i90:0 > i66:0 && arith = i70:0 - 1 && arith1 = i66:0 + 1 (2) f1575_0_createList_InvokeMethod(x, x1, x2, x3) -> f665_0_createList_GT(x1, x2, x3) :|: x > 0 && x3 > 0 && x2 > 0 && x2 >= x3 && x > x1 Arcs: (1) -> (2) (2) -> (1) This digraph is fully evaluated! ---------------------------------------- (32) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (33) Obligation: Rules: f665_0_createList_GT(i70:0:0, i90:0:0, i66:0:0) -> f665_0_createList_GT(i70:0:0 - 1, i90:0:0, i66:0:0 + 1) :|: i90:0:0 >= i66:0:0 + 1 && i70:0:0 - 1 < i70:0:0 && i90:0:0 > i66:0:0 && i66:0:0 > -1 && i90:0:0 > 0 && i70:0:0 > 0 ---------------------------------------- (34) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f665_0_createList_GT(INTEGER, INTEGER, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (35) Obligation: Rules: f665_0_createList_GT(i70:0:0, i90:0:0, i66:0:0) -> f665_0_createList_GT(c, i90:0:0, c1) :|: c1 = i66:0:0 + 1 && c = i70:0:0 - 1 && (i90:0:0 >= i66:0:0 + 1 && i70:0:0 - 1 < i70:0:0 && i90:0:0 > i66:0:0 && i66:0:0 > -1 && i90:0:0 > 0 && i70:0:0 > 0) ---------------------------------------- (36) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f665_0_createList_GT(x, x1, x2)] = x1 - x2 The following rules are decreasing: f665_0_createList_GT(i70:0:0, i90:0:0, i66:0:0) -> f665_0_createList_GT(c, i90:0:0, c1) :|: c1 = i66:0:0 + 1 && c = i70:0:0 - 1 && (i90:0:0 >= i66:0:0 + 1 && i70:0:0 - 1 < i70:0:0 && i90:0:0 > i66:0:0 && i66:0:0 > -1 && i90:0:0 > 0 && i70:0:0 > 0) The following rules are bounded: f665_0_createList_GT(i70:0:0, i90:0:0, i66:0:0) -> f665_0_createList_GT(c, i90:0:0, c1) :|: c1 = i66:0:0 + 1 && c = i70:0:0 - 1 && (i90:0:0 >= i66:0:0 + 1 && i70:0:0 - 1 < i70:0:0 && i90:0:0 > i66:0:0 && i66:0:0 > -1 && i90:0:0 > 0 && i70:0:0 > 0) ---------------------------------------- (37) YES ---------------------------------------- (38) Obligation: Termination digraph: Nodes: (1) f665_0_createList_GT(x7, x8, x9) -> f665_0_createList_GT(x10, x8, x9) :|: x8 > -1 && x7 > 0 && x7 - 1 < x7 && x8 <= x9 && x10 = x7 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (39) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (40) Obligation: Rules: f665_0_createList_GT(x7:0, x8:0, x9:0) -> f665_0_createList_GT(x7:0 - 1, x8:0, x9:0) :|: x7:0 - 1 < x7:0 && x9:0 >= x8:0 && x7:0 > 0 && x8:0 > -1 ---------------------------------------- (41) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f665_0_createList_GT(INTEGER, INTEGER, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (42) Obligation: Rules: f665_0_createList_GT(x7:0, x8:0, x9:0) -> f665_0_createList_GT(c, x8:0, x9:0) :|: c = x7:0 - 1 && (x7:0 - 1 < x7:0 && x9:0 >= x8:0 && x7:0 > 0 && x8:0 > -1) ---------------------------------------- (43) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f665_0_createList_GT ] = f665_0_createList_GT_1 The following rules are decreasing: f665_0_createList_GT(x7:0, x8:0, x9:0) -> f665_0_createList_GT(c, x8:0, x9:0) :|: c = x7:0 - 1 && (x7:0 - 1 < x7:0 && x9:0 >= x8:0 && x7:0 > 0 && x8:0 > -1) The following rules are bounded: f665_0_createList_GT(x7:0, x8:0, x9:0) -> f665_0_createList_GT(c, x8:0, x9:0) :|: c = x7:0 - 1 && (x7:0 - 1 < x7:0 && x9:0 >= x8:0 && x7:0 > 0 && x8:0 > -1) ---------------------------------------- (44) YES