6.92/2.70 YES 6.92/2.71 proof of /export/starexec/sandbox2/benchmark/theBenchmark.jar 6.92/2.71 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 6.92/2.71 6.92/2.71 6.92/2.71 termination of the given Bare JBC problem could be proven: 6.92/2.71 6.92/2.71 (0) Bare JBC problem 6.92/2.71 (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] 6.92/2.71 (2) JBC problem 6.92/2.71 (3) JBCToGraph [EQUIVALENT, 386 ms] 6.92/2.71 (4) JBCTerminationGraph 6.92/2.71 (5) TerminationGraphToSCCProof [SOUND, 8 ms] 6.92/2.71 (6) AND 6.92/2.71 (7) JBCTerminationSCC 6.92/2.71 (8) SCCToIRSProof [SOUND, 78 ms] 6.92/2.71 (9) IRSwT 6.92/2.71 (10) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 6.92/2.71 (11) IRSwT 6.92/2.71 (12) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] 6.92/2.71 (13) IRSwT 6.92/2.71 (14) IntTRSCompressionProof [EQUIVALENT, 0 ms] 6.92/2.71 (15) IRSwT 6.92/2.71 (16) TempFilterProof [SOUND, 15 ms] 6.92/2.71 (17) IntTRS 6.92/2.71 (18) PolynomialOrderProcessor [EQUIVALENT, 0 ms] 6.92/2.71 (19) YES 6.92/2.71 (20) JBCTerminationSCC 6.92/2.71 (21) SCCToQDPProof [SOUND, 177 ms] 6.92/2.71 (22) QDP 6.92/2.71 (23) QDPSizeChangeProof [EQUIVALENT, 0 ms] 6.92/2.71 (24) YES 6.92/2.71 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (0) 6.92/2.71 Obligation: 6.92/2.71 need to prove termination of the following program: 6.92/2.71 public class ObjectList { 6.92/2.71 Object value; 6.92/2.71 ObjectList next; 6.92/2.71 6.92/2.71 public ObjectList(Object value, ObjectList next) { 6.92/2.71 this.value = value; 6.92/2.71 this.next = next; 6.92/2.71 } 6.92/2.71 6.92/2.71 public static ObjectList createList() { 6.92/2.71 ObjectList result = null; 6.92/2.71 int length = Random.random(); 6.92/2.71 while (length > 0) { 6.92/2.71 result = new ObjectList(new Object(), result); 6.92/2.71 length--; 6.92/2.71 } 6.92/2.71 return result; 6.92/2.71 } 6.92/2.71 } 6.92/2.71 6.92/2.71 6.92/2.71 public class Random { 6.92/2.71 static String[] args; 6.92/2.71 static int index = 0; 6.92/2.71 6.92/2.71 public static int random() { 6.92/2.71 String string = args[index]; 6.92/2.71 index++; 6.92/2.71 return string.length(); 6.92/2.71 } 6.92/2.71 } 6.92/2.71 6.92/2.71 6.92/2.71 /** 6.92/2.71 * Allegedly based on an interview question at Microsoft. 6.92/2.71 */ 6.92/2.71 public class RunningPointers { 6.92/2.71 6.92/2.71 public static boolean isCyclic(ObjectList l) { 6.92/2.71 if (l == null) { 6.92/2.71 return false; 6.92/2.71 } 6.92/2.71 ObjectList l1, l2; 6.92/2.71 l1 = l; 6.92/2.71 l2 = l.next; 6.92/2.71 while (l2 != null && l1 != l2) { 6.92/2.71 l2 = l2.next; 6.92/2.71 if (l2 == null) { 6.92/2.71 return false; 6.92/2.71 } 6.92/2.71 else if (l2 == l1) { 6.92/2.71 return true; 6.92/2.71 } 6.92/2.71 else { 6.92/2.71 l2 = l2.next; 6.92/2.71 } 6.92/2.71 l1 = l1.next; 6.92/2.71 } 6.92/2.71 return l2 != null; 6.92/2.71 } 6.92/2.71 6.92/2.71 public static void main(String[] args) { 6.92/2.71 Random.args = args; 6.92/2.71 ObjectList list = ObjectList.createList(); 6.92/2.71 isCyclic(list); 6.92/2.71 } 6.92/2.71 } 6.92/2.71 6.92/2.71 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (1) BareJBCToJBCProof (EQUIVALENT) 6.92/2.71 initialized classpath 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (2) 6.92/2.71 Obligation: 6.92/2.71 need to prove termination of the following program: 6.92/2.71 public class ObjectList { 6.92/2.71 Object value; 6.92/2.71 ObjectList next; 6.92/2.71 6.92/2.71 public ObjectList(Object value, ObjectList next) { 6.92/2.71 this.value = value; 6.92/2.71 this.next = next; 6.92/2.71 } 6.92/2.71 6.92/2.71 public static ObjectList createList() { 6.92/2.71 ObjectList result = null; 6.92/2.71 int length = Random.random(); 6.92/2.71 while (length > 0) { 6.92/2.71 result = new ObjectList(new Object(), result); 6.92/2.71 length--; 6.92/2.71 } 6.92/2.71 return result; 6.92/2.71 } 6.92/2.71 } 6.92/2.71 6.92/2.71 6.92/2.71 public class Random { 6.92/2.71 static String[] args; 6.92/2.71 static int index = 0; 6.92/2.71 6.92/2.71 public static int random() { 6.92/2.71 String string = args[index]; 6.92/2.71 index++; 6.92/2.71 return string.length(); 6.92/2.71 } 6.92/2.71 } 6.92/2.71 6.92/2.71 6.92/2.71 /** 6.92/2.71 * Allegedly based on an interview question at Microsoft. 6.92/2.71 */ 6.92/2.71 public class RunningPointers { 6.92/2.71 6.92/2.71 public static boolean isCyclic(ObjectList l) { 6.92/2.71 if (l == null) { 6.92/2.71 return false; 6.92/2.71 } 6.92/2.71 ObjectList l1, l2; 6.92/2.71 l1 = l; 6.92/2.71 l2 = l.next; 6.92/2.71 while (l2 != null && l1 != l2) { 6.92/2.71 l2 = l2.next; 6.92/2.71 if (l2 == null) { 6.92/2.71 return false; 6.92/2.71 } 6.92/2.71 else if (l2 == l1) { 6.92/2.71 return true; 6.92/2.71 } 6.92/2.71 else { 6.92/2.71 l2 = l2.next; 6.92/2.71 } 6.92/2.71 l1 = l1.next; 6.92/2.71 } 6.92/2.71 return l2 != null; 6.92/2.71 } 6.92/2.71 6.92/2.71 public static void main(String[] args) { 6.92/2.71 Random.args = args; 6.92/2.71 ObjectList list = ObjectList.createList(); 6.92/2.71 isCyclic(list); 6.92/2.71 } 6.92/2.71 } 6.92/2.71 6.92/2.71 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (3) JBCToGraph (EQUIVALENT) 6.92/2.71 Constructed TerminationGraph. 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (4) 6.92/2.71 Obligation: 6.92/2.71 Termination Graph based on JBC Program: 6.92/2.71 RunningPointers.main([Ljava/lang/String;)V: Graph of 127 nodes with 1 SCC. 6.92/2.71 6.92/2.71 6.92/2.71 6.92/2.71 ObjectList.createList()LObjectList;: Graph of 124 nodes with 1 SCC. 6.92/2.71 6.92/2.71 6.92/2.71 6.92/2.71 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (5) TerminationGraphToSCCProof (SOUND) 6.92/2.71 Splitted TerminationGraph to 2 SCCss. 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (6) 6.92/2.71 Complex Obligation (AND) 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (7) 6.92/2.71 Obligation: 6.92/2.71 SCC of termination graph based on JBC Program. 6.92/2.71 SCC contains nodes from the following methods: ObjectList.createList()LObjectList; 6.92/2.71 SCC calls the following helper methods: 6.92/2.71 Performed SCC analyses: 6.92/2.71 *Used field analysis yielded the following read fields: 6.92/2.71 6.92/2.71 *Marker field analysis yielded the following relations that could be markers: 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (8) SCCToIRSProof (SOUND) 6.92/2.71 Transformed FIGraph SCCs to intTRSs. Log: 6.92/2.71 Generated rules. Obtained 23 IRulesP rules: 6.92/2.71 f1051_0_createList_LE(EOS(STATIC_1051), i87, i87) -> f1055_0_createList_LE(EOS(STATIC_1055), i87, i87) :|: TRUE 6.92/2.71 f1055_0_createList_LE(EOS(STATIC_1055), i87, i87) -> f1058_0_createList_New(EOS(STATIC_1058), i87) :|: i87 > 0 6.92/2.71 f1058_0_createList_New(EOS(STATIC_1058), i87) -> f1064_0_createList_Duplicate(EOS(STATIC_1064), i87) :|: TRUE 6.92/2.71 f1064_0_createList_Duplicate(EOS(STATIC_1064), i87) -> f1068_0_createList_New(EOS(STATIC_1068), i87) :|: TRUE 6.92/2.71 f1068_0_createList_New(EOS(STATIC_1068), i87) -> f1083_0_createList_Duplicate(EOS(STATIC_1083), i87) :|: TRUE 6.92/2.71 f1083_0_createList_Duplicate(EOS(STATIC_1083), i87) -> f1108_0_createList_InvokeMethod(EOS(STATIC_1108), i87) :|: TRUE 6.92/2.71 f1108_0_createList_InvokeMethod(EOS(STATIC_1108), i87) -> f1113_0_createList_Load(EOS(STATIC_1113), i87) :|: TRUE 6.92/2.71 f1113_0_createList_Load(EOS(STATIC_1113), i87) -> f1118_0_createList_InvokeMethod(EOS(STATIC_1118), i87) :|: TRUE 6.92/2.71 f1118_0_createList_InvokeMethod(EOS(STATIC_1118), i87) -> f1123_0__init__Load(EOS(STATIC_1123), i87) :|: TRUE 6.92/2.71 f1123_0__init__Load(EOS(STATIC_1123), i87) -> f1128_0__init__InvokeMethod(EOS(STATIC_1128), i87) :|: TRUE 6.92/2.71 f1128_0__init__InvokeMethod(EOS(STATIC_1128), i87) -> f1132_0__init__Load(EOS(STATIC_1132), i87) :|: TRUE 6.92/2.71 f1132_0__init__Load(EOS(STATIC_1132), i87) -> f1138_0__init__Load(EOS(STATIC_1138), i87) :|: TRUE 6.92/2.71 f1138_0__init__Load(EOS(STATIC_1138), i87) -> f1145_0__init__FieldAccess(EOS(STATIC_1145), i87) :|: TRUE 6.92/2.71 f1145_0__init__FieldAccess(EOS(STATIC_1145), i87) -> f1154_0__init__Load(EOS(STATIC_1154), i87) :|: TRUE 6.92/2.71 f1154_0__init__Load(EOS(STATIC_1154), i87) -> f1160_0__init__Load(EOS(STATIC_1160), i87) :|: TRUE 6.92/2.71 f1160_0__init__Load(EOS(STATIC_1160), i87) -> f1167_0__init__FieldAccess(EOS(STATIC_1167), i87) :|: TRUE 6.92/2.71 f1167_0__init__FieldAccess(EOS(STATIC_1167), i87) -> f1177_0__init__Return(EOS(STATIC_1177), i87) :|: TRUE 6.92/2.71 f1177_0__init__Return(EOS(STATIC_1177), i87) -> f1182_0_createList_Store(EOS(STATIC_1182), i87) :|: TRUE 6.92/2.71 f1182_0_createList_Store(EOS(STATIC_1182), i87) -> f1184_0_createList_Inc(EOS(STATIC_1184), i87) :|: TRUE 6.92/2.71 f1184_0_createList_Inc(EOS(STATIC_1184), i87) -> f1186_0_createList_JMP(EOS(STATIC_1186), i87 + -1) :|: TRUE 6.92/2.71 f1186_0_createList_JMP(EOS(STATIC_1186), i99) -> f1196_0_createList_Load(EOS(STATIC_1196), i99) :|: TRUE 6.92/2.71 f1196_0_createList_Load(EOS(STATIC_1196), i99) -> f985_0_createList_Load(EOS(STATIC_985), i99) :|: TRUE 6.92/2.71 f985_0_createList_Load(EOS(STATIC_985), i82) -> f1051_0_createList_LE(EOS(STATIC_1051), i82, i82) :|: TRUE 6.92/2.71 Combined rules. Obtained 1 IRulesP rules: 6.92/2.71 f1051_0_createList_LE(EOS(STATIC_1051), i87:0, i87:0) -> f1051_0_createList_LE(EOS(STATIC_1051), i87:0 - 1, i87:0 - 1) :|: i87:0 > 0 6.92/2.71 Filtered constant ground arguments: 6.92/2.71 f1051_0_createList_LE(x1, x2, x3) -> f1051_0_createList_LE(x2, x3) 6.92/2.71 EOS(x1) -> EOS 6.92/2.71 Filtered duplicate arguments: 6.92/2.71 f1051_0_createList_LE(x1, x2) -> f1051_0_createList_LE(x2) 6.92/2.71 Finished conversion. Obtained 1 rules.P rules: 6.92/2.71 f1051_0_createList_LE(i87:0) -> f1051_0_createList_LE(i87:0 - 1) :|: i87:0 > 0 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (9) 6.92/2.71 Obligation: 6.92/2.71 Rules: 6.92/2.71 f1051_0_createList_LE(i87:0) -> f1051_0_createList_LE(i87:0 - 1) :|: i87:0 > 0 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (10) IRSFormatTransformerProof (EQUIVALENT) 6.92/2.71 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (11) 6.92/2.71 Obligation: 6.92/2.71 Rules: 6.92/2.71 f1051_0_createList_LE(i87:0) -> f1051_0_createList_LE(arith) :|: i87:0 > 0 && arith = i87:0 - 1 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (12) IRSwTTerminationDigraphProof (EQUIVALENT) 6.92/2.71 Constructed termination digraph! 6.92/2.71 Nodes: 6.92/2.71 (1) f1051_0_createList_LE(i87:0) -> f1051_0_createList_LE(arith) :|: i87:0 > 0 && arith = i87:0 - 1 6.92/2.71 6.92/2.71 Arcs: 6.92/2.71 (1) -> (1) 6.92/2.71 6.92/2.71 This digraph is fully evaluated! 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (13) 6.92/2.71 Obligation: 6.92/2.71 6.92/2.71 Termination digraph: 6.92/2.71 Nodes: 6.92/2.71 (1) f1051_0_createList_LE(i87:0) -> f1051_0_createList_LE(arith) :|: i87:0 > 0 && arith = i87:0 - 1 6.92/2.71 6.92/2.71 Arcs: 6.92/2.71 (1) -> (1) 6.92/2.71 6.92/2.71 This digraph is fully evaluated! 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (14) IntTRSCompressionProof (EQUIVALENT) 6.92/2.71 Compressed rules. 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (15) 6.92/2.71 Obligation: 6.92/2.71 Rules: 6.92/2.71 f1051_0_createList_LE(i87:0:0) -> f1051_0_createList_LE(i87:0:0 - 1) :|: i87:0:0 > 0 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (16) TempFilterProof (SOUND) 6.92/2.71 Used the following sort dictionary for filtering: 6.92/2.71 f1051_0_createList_LE(INTEGER) 6.92/2.71 Replaced non-predefined constructor symbols by 0. 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (17) 6.92/2.71 Obligation: 6.92/2.71 Rules: 6.92/2.71 f1051_0_createList_LE(i87:0:0) -> f1051_0_createList_LE(c) :|: c = i87:0:0 - 1 && i87:0:0 > 0 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (18) PolynomialOrderProcessor (EQUIVALENT) 6.92/2.71 Found the following polynomial interpretation: 6.92/2.71 [f1051_0_createList_LE(x)] = x 6.92/2.71 6.92/2.71 The following rules are decreasing: 6.92/2.71 f1051_0_createList_LE(i87:0:0) -> f1051_0_createList_LE(c) :|: c = i87:0:0 - 1 && i87:0:0 > 0 6.92/2.71 The following rules are bounded: 6.92/2.71 f1051_0_createList_LE(i87:0:0) -> f1051_0_createList_LE(c) :|: c = i87:0:0 - 1 && i87:0:0 > 0 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (19) 6.92/2.71 YES 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (20) 6.92/2.71 Obligation: 6.92/2.71 SCC of termination graph based on JBC Program. 6.92/2.71 SCC contains nodes from the following methods: RunningPointers.main([Ljava/lang/String;)V 6.92/2.71 SCC calls the following helper methods: 6.92/2.71 Performed SCC analyses: 6.92/2.71 *Used field analysis yielded the following read fields: 6.92/2.71 *ObjectList: [next] 6.92/2.71 *Marker field analysis yielded the following relations that could be markers: 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (21) SCCToQDPProof (SOUND) 6.92/2.71 Transformed TerminationGraph SCC to QDP. Log: 6.92/2.71 Generated 29 rules for P and 0 rules for R.P rules: 6.92/2.71 f1383_0_isCyclic_NULL(EOS(STATIC_1383), o192, java.lang.Object(o197sub), java.lang.Object(o197sub)) -> f1385_0_isCyclic_Load(EOS(STATIC_1385), o192, java.lang.Object(o197sub)) :|: TRUE 6.92/2.71 f1385_0_isCyclic_Load(EOS(STATIC_1385), o192, java.lang.Object(o197sub)) -> f1387_0_isCyclic_Load(EOS(STATIC_1387), o192, java.lang.Object(o197sub), o192) :|: TRUE 6.92/2.71 f1387_0_isCyclic_Load(EOS(STATIC_1387), o192, java.lang.Object(o197sub), o192) -> f1389_0_isCyclic_EQ(EOS(STATIC_1389), o192, java.lang.Object(o197sub), o192, java.lang.Object(o197sub)) :|: TRUE 6.92/2.71 f1389_0_isCyclic_EQ(EOS(STATIC_1389), java.lang.Object(o198sub), java.lang.Object(o197sub), java.lang.Object(o198sub), java.lang.Object(o197sub)) -> f1391_0_isCyclic_EQ(EOS(STATIC_1391), java.lang.Object(o198sub), java.lang.Object(o197sub), java.lang.Object(o198sub), java.lang.Object(o197sub)) :|: TRUE 6.92/2.71 f1391_0_isCyclic_EQ(EOS(STATIC_1391), java.lang.Object(o198sub), java.lang.Object(o197sub), java.lang.Object(o198sub), java.lang.Object(o197sub)) -> f1394_0_isCyclic_EQ(EOS(STATIC_1394), java.lang.Object(o198sub), java.lang.Object(o197sub), java.lang.Object(o198sub), java.lang.Object(o197sub)) :|: TRUE 6.92/2.71 f1394_0_isCyclic_EQ(EOS(STATIC_1394), java.lang.Object(o198sub), java.lang.Object(o197sub), java.lang.Object(o198sub), java.lang.Object(o197sub)) -> f1398_0_isCyclic_Load(EOS(STATIC_1398), java.lang.Object(o198sub), java.lang.Object(o197sub)) :|: TRUE 6.92/2.71 f1398_0_isCyclic_Load(EOS(STATIC_1398), java.lang.Object(o198sub), java.lang.Object(o197sub)) -> f1401_0_isCyclic_FieldAccess(EOS(STATIC_1401), java.lang.Object(o198sub), java.lang.Object(o197sub)) :|: TRUE 6.92/2.71 f1401_0_isCyclic_FieldAccess(EOS(STATIC_1401), java.lang.Object(o198sub), java.lang.Object(ObjectList(EOC, o216))) -> f1404_0_isCyclic_FieldAccess(EOS(STATIC_1404), java.lang.Object(o198sub), java.lang.Object(ObjectList(EOC, o216))) :|: TRUE 6.92/2.71 f1404_0_isCyclic_FieldAccess(EOS(STATIC_1404), java.lang.Object(o198sub), java.lang.Object(ObjectList(EOC, o216))) -> f1407_0_isCyclic_Store(EOS(STATIC_1407), java.lang.Object(o198sub), o216) :|: TRUE 6.92/2.71 f1407_0_isCyclic_Store(EOS(STATIC_1407), java.lang.Object(o198sub), o216) -> f1410_0_isCyclic_Load(EOS(STATIC_1410), java.lang.Object(o198sub), o216) :|: TRUE 6.92/2.71 f1410_0_isCyclic_Load(EOS(STATIC_1410), java.lang.Object(o198sub), o216) -> f1413_0_isCyclic_NONNULL(EOS(STATIC_1413), java.lang.Object(o198sub), o216, o216) :|: TRUE 6.92/2.71 f1413_0_isCyclic_NONNULL(EOS(STATIC_1413), java.lang.Object(o198sub), java.lang.Object(o224sub), java.lang.Object(o224sub)) -> f1417_0_isCyclic_NONNULL(EOS(STATIC_1417), java.lang.Object(o198sub), java.lang.Object(o224sub), java.lang.Object(o224sub)) :|: TRUE 6.92/2.71 f1417_0_isCyclic_NONNULL(EOS(STATIC_1417), java.lang.Object(o198sub), java.lang.Object(o224sub), java.lang.Object(o224sub)) -> f1422_0_isCyclic_Load(EOS(STATIC_1422), java.lang.Object(o198sub), java.lang.Object(o224sub)) :|: TRUE 6.92/2.71 f1422_0_isCyclic_Load(EOS(STATIC_1422), java.lang.Object(o198sub), java.lang.Object(o224sub)) -> f1426_0_isCyclic_Load(EOS(STATIC_1426), java.lang.Object(o198sub), java.lang.Object(o224sub), java.lang.Object(o224sub)) :|: TRUE 6.92/2.71 f1426_0_isCyclic_Load(EOS(STATIC_1426), java.lang.Object(o198sub), java.lang.Object(o224sub), java.lang.Object(o224sub)) -> f1442_0_isCyclic_NE(EOS(STATIC_1442), java.lang.Object(o198sub), java.lang.Object(o224sub), java.lang.Object(o224sub), java.lang.Object(o198sub)) :|: TRUE 6.92/2.71 f1442_0_isCyclic_NE(EOS(STATIC_1442), java.lang.Object(o198sub), java.lang.Object(o224sub), java.lang.Object(o224sub), java.lang.Object(o198sub)) -> f1453_0_isCyclic_NE(EOS(STATIC_1453), java.lang.Object(o198sub), java.lang.Object(o224sub), java.lang.Object(o224sub), java.lang.Object(o198sub)) :|: TRUE 6.92/2.71 f1453_0_isCyclic_NE(EOS(STATIC_1453), java.lang.Object(o198sub), java.lang.Object(o224sub), java.lang.Object(o224sub), java.lang.Object(o198sub)) -> f1461_0_isCyclic_Load(EOS(STATIC_1461), java.lang.Object(o198sub), java.lang.Object(o224sub)) :|: TRUE 6.92/2.71 f1461_0_isCyclic_Load(EOS(STATIC_1461), java.lang.Object(o198sub), java.lang.Object(o224sub)) -> f1475_0_isCyclic_FieldAccess(EOS(STATIC_1475), java.lang.Object(o198sub), java.lang.Object(o224sub)) :|: TRUE 6.92/2.71 f1475_0_isCyclic_FieldAccess(EOS(STATIC_1475), java.lang.Object(o198sub), java.lang.Object(ObjectList(EOC, o250))) -> f1486_0_isCyclic_FieldAccess(EOS(STATIC_1486), java.lang.Object(o198sub), java.lang.Object(ObjectList(EOC, o250))) :|: TRUE 6.92/2.71 f1486_0_isCyclic_FieldAccess(EOS(STATIC_1486), java.lang.Object(o198sub), java.lang.Object(ObjectList(EOC, o250))) -> f1499_0_isCyclic_Store(EOS(STATIC_1499), java.lang.Object(o198sub), o250) :|: TRUE 6.92/2.71 f1499_0_isCyclic_Store(EOS(STATIC_1499), java.lang.Object(o198sub), o250) -> f1504_0_isCyclic_Load(EOS(STATIC_1504), java.lang.Object(o198sub), o250) :|: TRUE 6.92/2.71 f1504_0_isCyclic_Load(EOS(STATIC_1504), java.lang.Object(o198sub), o250) -> f1516_0_isCyclic_FieldAccess(EOS(STATIC_1516), o250, java.lang.Object(o198sub)) :|: TRUE 6.92/2.71 f1516_0_isCyclic_FieldAccess(EOS(STATIC_1516), o250, java.lang.Object(ObjectList(EOC, o265))) -> f1521_0_isCyclic_FieldAccess(EOS(STATIC_1521), o250, java.lang.Object(ObjectList(EOC, o265))) :|: TRUE 6.92/2.71 f1521_0_isCyclic_FieldAccess(EOS(STATIC_1521), o250, java.lang.Object(ObjectList(EOC, o265))) -> f1526_0_isCyclic_Store(EOS(STATIC_1526), o250, o265) :|: TRUE 6.92/2.71 f1526_0_isCyclic_Store(EOS(STATIC_1526), o250, o265) -> f1528_0_isCyclic_JMP(EOS(STATIC_1528), o265, o250) :|: TRUE 6.92/2.71 f1528_0_isCyclic_JMP(EOS(STATIC_1528), o265, o250) -> f1539_0_isCyclic_Load(EOS(STATIC_1539), o265, o250) :|: TRUE 6.92/2.71 f1539_0_isCyclic_Load(EOS(STATIC_1539), o265, o250) -> f1381_0_isCyclic_Load(EOS(STATIC_1381), o265, o250) :|: TRUE 6.92/2.71 f1381_0_isCyclic_Load(EOS(STATIC_1381), o192, o193) -> f1382_0_isCyclic_NULL(EOS(STATIC_1382), o192, o193, o193) :|: TRUE 6.92/2.71 f1382_0_isCyclic_NULL(EOS(STATIC_1382), o192, java.lang.Object(o197sub), java.lang.Object(o197sub)) -> f1383_0_isCyclic_NULL(EOS(STATIC_1383), o192, java.lang.Object(o197sub), java.lang.Object(o197sub)) :|: TRUE 6.92/2.71 R rules: 6.92/2.71 Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.P rules: 6.92/2.71 f1383_0_isCyclic_NULL(EOS(STATIC_1383), java.lang.Object(ObjectList(EOC, o265:0)), java.lang.Object(ObjectList(EOC, java.lang.Object(ObjectList(EOC, java.lang.Object(o197sub:0))))), java.lang.Object(ObjectList(EOC, java.lang.Object(ObjectList(EOC, java.lang.Object(o197sub:0)))))) -> f1383_0_isCyclic_NULL(EOS(STATIC_1383), o265:0, java.lang.Object(o197sub:0), java.lang.Object(o197sub:0)) :|: TRUE 6.92/2.71 R rules: 6.92/2.71 Filtered ground terms: 6.92/2.71 f1383_0_isCyclic_NULL(x1, x2, x3, x4) -> f1383_0_isCyclic_NULL(x2, x3, x4) 6.92/2.71 EOS(x1) -> EOS 6.92/2.71 ObjectList(x1, x2) -> ObjectList(x2) 6.92/2.71 Filtered duplicate args: 6.92/2.71 f1383_0_isCyclic_NULL(x1, x2, x3) -> f1383_0_isCyclic_NULL(x1, x3) 6.92/2.71 Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.P rules: 6.92/2.71 F1383_0_ISCYCLIC_NULL(java.lang.Object(ObjectList(o265:0:0)), java.lang.Object(ObjectList(java.lang.Object(ObjectList(java.lang.Object(o197sub:0:0)))))) -> F1383_0_ISCYCLIC_NULL(o265:0:0, java.lang.Object(o197sub:0:0)) :|: TRUE 6.92/2.71 R rules: 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (22) 6.92/2.71 Obligation: 6.92/2.71 Q DP problem: 6.92/2.71 The TRS P consists of the following rules: 6.92/2.71 6.92/2.71 F1383_0_ISCYCLIC_NULL(java.lang.Object(ObjectList(o265:0:0)), java.lang.Object(ObjectList(java.lang.Object(ObjectList(java.lang.Object(o197sub:0:0)))))) -> F1383_0_ISCYCLIC_NULL(o265:0:0, java.lang.Object(o197sub:0:0)) 6.92/2.71 6.92/2.71 R is empty. 6.92/2.71 Q is empty. 6.92/2.71 We have to consider all minimal (P,Q,R)-chains. 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (23) QDPSizeChangeProof (EQUIVALENT) 6.92/2.71 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. 6.92/2.71 6.92/2.71 From the DPs we obtained the following set of size-change graphs: 6.92/2.71 *F1383_0_ISCYCLIC_NULL(java.lang.Object(ObjectList(o265:0:0)), java.lang.Object(ObjectList(java.lang.Object(ObjectList(java.lang.Object(o197sub:0:0)))))) -> F1383_0_ISCYCLIC_NULL(o265:0:0, java.lang.Object(o197sub:0:0)) 6.92/2.71 The graph contains the following edges 1 > 1, 2 > 2 6.92/2.71 6.92/2.71 6.92/2.71 ---------------------------------------- 6.92/2.71 6.92/2.71 (24) 6.92/2.71 YES 7.22/2.77 EOF