6.85/2.74 YES 6.85/2.75 proof of /export/starexec/sandbox2/benchmark/theBenchmark.jar 6.85/2.75 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 6.85/2.75 6.85/2.75 6.85/2.75 termination of the given Bare JBC problem could be proven: 6.85/2.75 6.85/2.75 (0) Bare JBC problem 6.85/2.75 (1) BareJBCToJBCProof [EQUIVALENT, 95 ms] 6.85/2.75 (2) JBC problem 6.85/2.75 (3) JBCToGraph [EQUIVALENT, 348 ms] 6.85/2.75 (4) JBCTerminationGraph 6.85/2.75 (5) TerminationGraphToSCCProof [SOUND, 0 ms] 6.85/2.75 (6) AND 6.85/2.75 (7) JBCTerminationSCC 6.85/2.75 (8) SCCToQDPProof [SOUND, 86 ms] 6.85/2.75 (9) QDP 6.85/2.75 (10) QDPSizeChangeProof [EQUIVALENT, 0 ms] 6.85/2.75 (11) YES 6.85/2.75 (12) JBCTerminationSCC 6.85/2.75 (13) SCCToIRSProof [SOUND, 116 ms] 6.85/2.75 (14) IRSwT 6.85/2.75 (15) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 6.85/2.75 (16) IRSwT 6.85/2.75 (17) IRSwTTerminationDigraphProof [EQUIVALENT, 25 ms] 6.85/2.75 (18) IRSwT 6.85/2.75 (19) IntTRSCompressionProof [EQUIVALENT, 0 ms] 6.85/2.75 (20) IRSwT 6.85/2.75 (21) TempFilterProof [SOUND, 37 ms] 6.85/2.75 (22) IntTRS 6.85/2.75 (23) RankingReductionPairProof [EQUIVALENT, 0 ms] 6.85/2.75 (24) YES 6.85/2.75 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (0) 6.85/2.75 Obligation: 6.85/2.75 need to prove termination of the following program: 6.85/2.75 package SharingAnalysis; 6.85/2.75 6.85/2.75 public class Random { 6.85/2.75 static String[] args; 6.85/2.75 static int index = 0; 6.85/2.75 6.85/2.75 public static int random() { 6.85/2.75 final String string = args[index]; 6.85/2.75 index++; 6.85/2.75 return string.length(); 6.85/2.75 } 6.85/2.75 } 6.85/2.75 6.85/2.75 6.85/2.75 package SharingAnalysis; 6.85/2.75 6.85/2.75 public class SharingAnalysis { 6.85/2.75 int val; 6.85/2.75 SharingAnalysis field; 6.85/2.75 6.85/2.75 public static void main(String[] args) { 6.85/2.75 Random.args = args; 6.85/2.75 SharingAnalysis t1 = new SharingAnalysis(); 6.85/2.75 SharingAnalysis t2 = t1.appendNewList(1); 6.85/2.75 SharingAnalysis t3 = t2.appendNewList(Random.random()); 6.85/2.75 t2.field = null; 6.85/2.75 copy(t1, t3); 6.85/2.75 } 6.85/2.75 6.85/2.75 public static void copy(SharingAnalysis source, SharingAnalysis target) { 6.85/2.75 while (source != null) { 6.85/2.75 SharingAnalysis newEle = new SharingAnalysis(); 6.85/2.75 newEle.val = source.val; 6.85/2.75 target.field = newEle; 6.85/2.75 source = source.field; 6.85/2.75 target = target.field; 6.85/2.75 } 6.85/2.75 } 6.85/2.75 6.85/2.75 /** 6.85/2.75 * @param i number of elements to append 6.85/2.75 * @return the last list element appended 6.85/2.75 */ 6.85/2.75 private SharingAnalysis appendNewList(int i) { 6.85/2.75 this.field = new SharingAnalysis(); 6.85/2.75 SharingAnalysis cur = this.field; 6.85/2.75 while (i > 1) { 6.85/2.75 i--; 6.85/2.75 cur = cur.field = new SharingAnalysis(); 6.85/2.75 } 6.85/2.75 return cur; 6.85/2.75 } 6.85/2.75 } 6.85/2.75 6.85/2.75 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (1) BareJBCToJBCProof (EQUIVALENT) 6.85/2.75 initialized classpath 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (2) 6.85/2.75 Obligation: 6.85/2.75 need to prove termination of the following program: 6.85/2.75 package SharingAnalysis; 6.85/2.75 6.85/2.75 public class Random { 6.85/2.75 static String[] args; 6.85/2.75 static int index = 0; 6.85/2.75 6.85/2.75 public static int random() { 6.85/2.75 final String string = args[index]; 6.85/2.75 index++; 6.85/2.75 return string.length(); 6.85/2.75 } 6.85/2.75 } 6.85/2.75 6.85/2.75 6.85/2.75 package SharingAnalysis; 6.85/2.75 6.85/2.75 public class SharingAnalysis { 6.85/2.75 int val; 6.85/2.75 SharingAnalysis field; 6.85/2.75 6.85/2.75 public static void main(String[] args) { 6.85/2.75 Random.args = args; 6.85/2.75 SharingAnalysis t1 = new SharingAnalysis(); 6.85/2.75 SharingAnalysis t2 = t1.appendNewList(1); 6.85/2.75 SharingAnalysis t3 = t2.appendNewList(Random.random()); 6.85/2.75 t2.field = null; 6.85/2.75 copy(t1, t3); 6.85/2.75 } 6.85/2.75 6.85/2.75 public static void copy(SharingAnalysis source, SharingAnalysis target) { 6.85/2.75 while (source != null) { 6.85/2.75 SharingAnalysis newEle = new SharingAnalysis(); 6.85/2.75 newEle.val = source.val; 6.85/2.75 target.field = newEle; 6.85/2.75 source = source.field; 6.85/2.75 target = target.field; 6.85/2.75 } 6.85/2.75 } 6.85/2.75 6.85/2.75 /** 6.85/2.75 * @param i number of elements to append 6.85/2.75 * @return the last list element appended 6.85/2.75 */ 6.85/2.75 private SharingAnalysis appendNewList(int i) { 6.85/2.75 this.field = new SharingAnalysis(); 6.85/2.75 SharingAnalysis cur = this.field; 6.85/2.75 while (i > 1) { 6.85/2.75 i--; 6.85/2.75 cur = cur.field = new SharingAnalysis(); 6.85/2.75 } 6.85/2.75 return cur; 6.85/2.75 } 6.85/2.75 } 6.85/2.75 6.85/2.75 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (3) JBCToGraph (EQUIVALENT) 6.85/2.75 Constructed TerminationGraph. 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (4) 6.85/2.75 Obligation: 6.85/2.75 Termination Graph based on JBC Program: 6.85/2.75 SharingAnalysis.SharingAnalysis.main([Ljava/lang/String;)V: Graph of 203 nodes with 2 SCCs. 6.85/2.75 6.85/2.75 6.85/2.75 6.85/2.75 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (5) TerminationGraphToSCCProof (SOUND) 6.85/2.75 Splitted TerminationGraph to 2 SCCss. 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (6) 6.85/2.75 Complex Obligation (AND) 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (7) 6.85/2.75 Obligation: 6.85/2.75 SCC of termination graph based on JBC Program. 6.85/2.75 SCC contains nodes from the following methods: SharingAnalysis.SharingAnalysis.main([Ljava/lang/String;)V 6.85/2.75 SCC calls the following helper methods: 6.85/2.75 Performed SCC analyses: 6.85/2.75 *Used field analysis yielded the following read fields: 6.85/2.75 *SharingAnalysis.SharingAnalysis: [val, field] 6.85/2.75 *Marker field analysis yielded the following relations that could be markers: 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (8) SCCToQDPProof (SOUND) 6.85/2.75 Transformed TerminationGraph SCC to QDP. Log: 6.85/2.75 Generated 26 rules for P and 0 rules for R.P rules: 6.85/2.75 f815_0_copy_NULL(EOS(STATIC_815), java.lang.Object(o133sub), java.lang.Object(o133sub)) -> f816_0_copy_NULL(EOS(STATIC_816), java.lang.Object(o133sub), java.lang.Object(o133sub)) :|: TRUE 6.85/2.75 f816_0_copy_NULL(EOS(STATIC_816), java.lang.Object(o133sub), java.lang.Object(o133sub)) -> f818_0_copy_New(EOS(STATIC_818), java.lang.Object(o133sub)) :|: TRUE 6.85/2.75 f818_0_copy_New(EOS(STATIC_818), java.lang.Object(o133sub)) -> f820_0_copy_Duplicate(EOS(STATIC_820), java.lang.Object(o133sub)) :|: TRUE 6.85/2.75 f820_0_copy_Duplicate(EOS(STATIC_820), java.lang.Object(o133sub)) -> f822_0_copy_InvokeMethod(EOS(STATIC_822), java.lang.Object(o133sub)) :|: TRUE 6.85/2.75 f822_0_copy_InvokeMethod(EOS(STATIC_822), java.lang.Object(o133sub)) -> f824_0__init__Load(EOS(STATIC_824), java.lang.Object(o133sub)) :|: TRUE 6.85/2.75 f824_0__init__Load(EOS(STATIC_824), java.lang.Object(o133sub)) -> f825_0__init__InvokeMethod(EOS(STATIC_825), java.lang.Object(o133sub)) :|: TRUE 6.85/2.75 f825_0__init__InvokeMethod(EOS(STATIC_825), java.lang.Object(o133sub)) -> f826_0__init__Return(EOS(STATIC_826), java.lang.Object(o133sub)) :|: TRUE 6.85/2.75 f826_0__init__Return(EOS(STATIC_826), java.lang.Object(o133sub)) -> f827_0_copy_Store(EOS(STATIC_827), java.lang.Object(o133sub)) :|: TRUE 6.85/2.75 f827_0_copy_Store(EOS(STATIC_827), java.lang.Object(o133sub)) -> f828_0_copy_Load(EOS(STATIC_828), java.lang.Object(o133sub)) :|: TRUE 6.85/2.75 f828_0_copy_Load(EOS(STATIC_828), java.lang.Object(o133sub)) -> f829_0_copy_Load(EOS(STATIC_829), java.lang.Object(o133sub)) :|: TRUE 6.85/2.75 f829_0_copy_Load(EOS(STATIC_829), java.lang.Object(o133sub)) -> f830_0_copy_FieldAccess(EOS(STATIC_830), java.lang.Object(o133sub), java.lang.Object(o133sub)) :|: TRUE 6.85/2.75 f830_0_copy_FieldAccess(EOS(STATIC_830), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138)), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138))) -> f831_0_copy_FieldAccess(EOS(STATIC_831), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138)), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138))) :|: TRUE 6.85/2.75 f831_0_copy_FieldAccess(EOS(STATIC_831), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138)), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138))) -> f832_0_copy_FieldAccess(EOS(STATIC_832), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138))) :|: TRUE 6.85/2.75 f832_0_copy_FieldAccess(EOS(STATIC_832), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138))) -> f833_0_copy_Load(EOS(STATIC_833), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138))) :|: TRUE 6.85/2.75 f833_0_copy_Load(EOS(STATIC_833), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138))) -> f834_0_copy_Load(EOS(STATIC_834), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138))) :|: TRUE 6.85/2.75 f834_0_copy_Load(EOS(STATIC_834), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138))) -> f835_0_copy_FieldAccess(EOS(STATIC_835), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138))) :|: TRUE 6.85/2.75 f835_0_copy_FieldAccess(EOS(STATIC_835), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138))) -> f836_0_copy_Load(EOS(STATIC_836), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138))) :|: TRUE 6.85/2.75 f836_0_copy_Load(EOS(STATIC_836), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138))) -> f837_0_copy_FieldAccess(EOS(STATIC_837), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138))) :|: TRUE 6.85/2.75 f837_0_copy_FieldAccess(EOS(STATIC_837), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64, o138))) -> f838_0_copy_Store(EOS(STATIC_838), o138) :|: TRUE 6.85/2.75 f838_0_copy_Store(EOS(STATIC_838), o138) -> f839_0_copy_Load(EOS(STATIC_839), o138) :|: TRUE 6.85/2.75 f839_0_copy_Load(EOS(STATIC_839), o138) -> f840_0_copy_FieldAccess(EOS(STATIC_840), o138) :|: TRUE 6.85/2.75 f840_0_copy_FieldAccess(EOS(STATIC_840), o138) -> f841_0_copy_Store(EOS(STATIC_841), o138) :|: TRUE 6.85/2.75 f841_0_copy_Store(EOS(STATIC_841), o138) -> f843_0_copy_JMP(EOS(STATIC_843), o138) :|: TRUE 6.85/2.75 f843_0_copy_JMP(EOS(STATIC_843), o138) -> f856_0_copy_Load(EOS(STATIC_856), o138) :|: TRUE 6.85/2.75 f856_0_copy_Load(EOS(STATIC_856), o138) -> f810_0_copy_Load(EOS(STATIC_810), o138) :|: TRUE 6.85/2.75 f810_0_copy_Load(EOS(STATIC_810), o125) -> f815_0_copy_NULL(EOS(STATIC_815), o125, o125) :|: TRUE 6.85/2.75 R rules: 6.85/2.75 Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.P rules: 6.85/2.75 f815_0_copy_NULL(EOS(STATIC_815), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64:0, o138:0)), java.lang.Object(SharingAnalysis.SharingAnalysis(EOC, i64:0, o138:0))) -> f815_0_copy_NULL(EOS(STATIC_815), o138:0, o138:0) :|: TRUE 6.85/2.75 R rules: 6.85/2.75 Filtered ground terms: 6.85/2.75 f815_0_copy_NULL(x1, x2, x3) -> f815_0_copy_NULL(x2, x3) 6.85/2.75 EOS(x1) -> EOS 6.85/2.75 SharingAnalysis.SharingAnalysis(x1, x2, x3) -> SharingAnalysis.SharingAnalysis(x2, x3) 6.85/2.75 Filtered unneeded arguments: 6.85/2.75 SharingAnalysis.SharingAnalysis(x1, x2) -> SharingAnalysis.SharingAnalysis(x2) 6.85/2.75 Filtered duplicate args: 6.85/2.75 f815_0_copy_NULL(x1, x2) -> f815_0_copy_NULL(x2) 6.85/2.75 Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.P rules: 6.85/2.75 F815_0_COPY_NULL(java.lang.Object(SharingAnalysis.SharingAnalysis(o138:0:0))) -> F815_0_COPY_NULL(o138:0:0) :|: TRUE 6.85/2.75 R rules: 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (9) 6.85/2.75 Obligation: 6.85/2.75 Q DP problem: 6.85/2.75 The TRS P consists of the following rules: 6.85/2.75 6.85/2.75 F815_0_COPY_NULL(java.lang.Object(SharingAnalysis.SharingAnalysis(o138:0:0))) -> F815_0_COPY_NULL(o138:0:0) 6.85/2.75 6.85/2.75 R is empty. 6.85/2.75 Q is empty. 6.85/2.75 We have to consider all minimal (P,Q,R)-chains. 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (10) QDPSizeChangeProof (EQUIVALENT) 6.85/2.75 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.85/2.75 6.85/2.75 From the DPs we obtained the following set of size-change graphs: 6.85/2.75 *F815_0_COPY_NULL(java.lang.Object(SharingAnalysis.SharingAnalysis(o138:0:0))) -> F815_0_COPY_NULL(o138:0:0) 6.85/2.75 The graph contains the following edges 1 > 1 6.85/2.75 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (11) 6.85/2.75 YES 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (12) 6.85/2.75 Obligation: 6.85/2.75 SCC of termination graph based on JBC Program. 6.85/2.75 SCC contains nodes from the following methods: SharingAnalysis.SharingAnalysis.main([Ljava/lang/String;)V 6.85/2.75 SCC calls the following helper methods: 6.85/2.75 Performed SCC analyses: 6.85/2.75 *Used field analysis yielded the following read fields: 6.85/2.75 6.85/2.75 *Marker field analysis yielded the following relations that could be markers: 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (13) SCCToIRSProof (SOUND) 6.85/2.75 Transformed FIGraph SCCs to intTRSs. Log: 6.85/2.75 Generated rules. Obtained 24 IRulesP rules: 6.85/2.75 f394_0_appendNewList_ConstantStackPush(EOS(STATIC_394), i35, i35, o44[SharingAnalysis.field]o41) -> f407_0_appendNewList_LE(EOS(STATIC_407), i35, i35, 1, o44[SharingAnalysis.field]o41) :|: TRUE 6.85/2.75 f407_0_appendNewList_LE(EOS(STATIC_407), i47, i47, matching1, o44[SharingAnalysis.field]o41) -> f417_0_appendNewList_LE(EOS(STATIC_417), i47, i47, 1, o44[SharingAnalysis.field]o41) :|: TRUE && matching1 = 1 6.85/2.75 f417_0_appendNewList_LE(EOS(STATIC_417), i47, i47, matching1, o44[SharingAnalysis.field]o41) -> f428_0_appendNewList_Inc(EOS(STATIC_428), i47, o44[SharingAnalysis.field]o41) :|: i47 > 1 && matching1 = 1 6.85/2.75 f428_0_appendNewList_Inc(EOS(STATIC_428), i47, o44[SharingAnalysis.field]o41) -> f435_0_appendNewList_Load(EOS(STATIC_435), i47 + -1, o44[SharingAnalysis.field]o41) :|: TRUE 6.85/2.75 f435_0_appendNewList_Load(EOS(STATIC_435), i48, o44[SharingAnalysis.field]o41) -> f439_0_appendNewList_New(EOS(STATIC_439), i48, o44[SharingAnalysis.field]o41) :|: TRUE 6.85/2.75 f439_0_appendNewList_New(EOS(STATIC_439), i48, o44[SharingAnalysis.field]o41) -> f442_0_appendNewList_Duplicate(EOS(STATIC_442), i48, o44[SharingAnalysis.field]o41) :|: TRUE 6.85/2.75 f442_0_appendNewList_Duplicate(EOS(STATIC_442), i48, o44[SharingAnalysis.field]o41) -> f447_0_appendNewList_InvokeMethod(EOS(STATIC_447), i48, o44[SharingAnalysis.field]o41) :|: TRUE 6.85/2.75 f447_0_appendNewList_InvokeMethod(EOS(STATIC_447), i48, o44[SharingAnalysis.field]o41) -> f450_0__init__Load(EOS(STATIC_450), i48, o44[SharingAnalysis.field]o41) :|: TRUE 6.85/2.75 f450_0__init__Load(EOS(STATIC_450), i48, o44[SharingAnalysis.field]o41) -> f454_0__init__InvokeMethod(EOS(STATIC_454), i48, o44[SharingAnalysis.field]o41) :|: TRUE 6.85/2.75 f454_0__init__InvokeMethod(EOS(STATIC_454), i48, o44[SharingAnalysis.field]o41) -> f459_0__init__Return(EOS(STATIC_459), i48, o44[SharingAnalysis.field]o41) :|: TRUE 6.85/2.75 f459_0__init__Return(EOS(STATIC_459), i48, o44[SharingAnalysis.field]o41) -> f462_0_appendNewList_Duplicate(EOS(STATIC_462), i48, o44[SharingAnalysis.field]o41) :|: TRUE 6.85/2.75 f462_0_appendNewList_Duplicate(EOS(STATIC_462), i48, o44[SharingAnalysis.field]o41) -> f463_0_appendNewList_FieldAccess(EOS(STATIC_463), i48, o44[SharingAnalysis.field]o41) :|: TRUE 6.85/2.75 f463_0_appendNewList_FieldAccess(EOS(STATIC_463), i48, o44[SharingAnalysis.field]o41) -> f531_0_appendNewList_FieldAccess(EOS(STATIC_531), i48, o44[SharingAnalysis.field]o41) :|: o44[SharingAnalysis.field]o41 > 0 6.85/2.75 f463_0_appendNewList_FieldAccess(EOS(STATIC_463), i48, o68[SharingAnalysis.field]o68) -> f532_0_appendNewList_FieldAccess(EOS(STATIC_532), i48) :|: TRUE 6.85/2.75 f531_0_appendNewList_FieldAccess(EOS(STATIC_531), i48, o44[SharingAnalysis.field]o41) -> f540_0_appendNewList_Store(EOS(STATIC_540), i48, o44[SharingAnalysis.field]o61) :|: o44[SharingAnalysis.field]o61 > o44[SharingAnalysis.field]o41 && o44[SharingAnalysis.field]o41 >= 0 6.85/2.75 f540_0_appendNewList_Store(EOS(STATIC_540), i48, o44[SharingAnalysis.field]o61) -> f547_0_appendNewList_JMP(EOS(STATIC_547), i48, o44[SharingAnalysis.field]o61) :|: TRUE 6.85/2.75 f547_0_appendNewList_JMP(EOS(STATIC_547), i48, o44[SharingAnalysis.field]o61) -> f594_0_appendNewList_Load(EOS(STATIC_594), i48, o44[SharingAnalysis.field]o61) :|: TRUE 6.85/2.75 f594_0_appendNewList_Load(EOS(STATIC_594), i48, o44[SharingAnalysis.field]o61) -> f392_0_appendNewList_Load(EOS(STATIC_392), i48, o44[SharingAnalysis.field]o61) :|: TRUE 6.85/2.75 f392_0_appendNewList_Load(EOS(STATIC_392), i35, o44[SharingAnalysis.field]o41) -> f394_0_appendNewList_ConstantStackPush(EOS(STATIC_394), i35, i35, o44[SharingAnalysis.field]o41) :|: TRUE 6.85/2.75 f532_0_appendNewList_FieldAccess(EOS(STATIC_532), i48) -> f541_0_appendNewList_FieldAccess(EOS(STATIC_541), i48) :|: TRUE 6.85/2.75 f541_0_appendNewList_FieldAccess(EOS(STATIC_541), i48) -> f555_0_appendNewList_Store(EOS(STATIC_555), i48) :|: TRUE 6.85/2.75 f555_0_appendNewList_Store(EOS(STATIC_555), i48) -> f600_0_appendNewList_JMP(EOS(STATIC_600), i48) :|: TRUE 6.85/2.75 f600_0_appendNewList_JMP(EOS(STATIC_600), i48) -> f606_0_appendNewList_Load(EOS(STATIC_606), i48) :|: TRUE 6.85/2.75 f606_0_appendNewList_Load(EOS(STATIC_606), i48) -> f392_0_appendNewList_Load(EOS(STATIC_392), i48, o69[SharingAnalysis.field]o61) :|: o69[SharingAnalysis.field]o61 = 1 6.85/2.75 Combined rules. Obtained 2 IRulesP rules: 6.85/2.75 f394_0_appendNewList_ConstantStackPush(EOS(STATIC_394), i35:0, i35:0, o44[SharingAnalysis.field]o41:0) -> f394_0_appendNewList_ConstantStackPush(EOS(STATIC_394), i35:0 - 1, i35:0 - 1, 1) :|: i35:0 > 1 6.85/2.75 f394_0_appendNewList_ConstantStackPush(EOS(STATIC_394), i35:0, i35:0, o44[SharingAnalysis.field]o41:0) -> f394_0_appendNewList_ConstantStackPush(EOS(STATIC_394), i35:0 - 1, i35:0 - 1, o44[SharingAnalysis.field]o61:0) :|: o44[SharingAnalysis.field]o41:0 > 0 && o44[SharingAnalysis.field]o61:0 > o44[SharingAnalysis.field]o41:0 && i35:0 > 1 6.85/2.75 Filtered constant ground arguments: 6.85/2.75 f394_0_appendNewList_ConstantStackPush(x1, x2, x3, x4) -> f394_0_appendNewList_ConstantStackPush(x2, x3, x4) 6.85/2.75 EOS(x1) -> EOS 6.85/2.75 Filtered duplicate arguments: 6.85/2.75 f394_0_appendNewList_ConstantStackPush(x1, x2, x3) -> f394_0_appendNewList_ConstantStackPush(x2, x3) 6.85/2.75 Finished conversion. Obtained 2 rules.P rules: 6.85/2.75 f394_0_appendNewList_ConstantStackPush(i35:0, o44[SharingAnalysis.field]o41:0) -> f394_0_appendNewList_ConstantStackPush(i35:0 - 1, 1) :|: i35:0 > 1 6.85/2.75 f394_0_appendNewList_ConstantStackPush(i35:0, o44[SharingAnalysis.field]o41:0) -> f394_0_appendNewList_ConstantStackPush(i35:0 - 1, o44[SharingAnalysis.field]o61:0) :|: o44[SharingAnalysis.field]o61:0 > o44[SharingAnalysis.field]o41:0 && i35:0 > 1 && o44[SharingAnalysis.field]o41:0 > 0 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (14) 6.85/2.75 Obligation: 6.85/2.75 Rules: 6.85/2.75 f394_0_appendNewList_ConstantStackPush(i35:0, o44[SharingAnalysis.field]o41:0) -> f394_0_appendNewList_ConstantStackPush(i35:0 - 1, 1) :|: i35:0 > 1 6.85/2.75 f394_0_appendNewList_ConstantStackPush(x, x1) -> f394_0_appendNewList_ConstantStackPush(x - 1, x2) :|: x2 > x1 && x > 1 && x1 > 0 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (15) IRSFormatTransformerProof (EQUIVALENT) 6.85/2.75 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (16) 6.85/2.75 Obligation: 6.85/2.75 Rules: 6.85/2.75 f394_0_appendNewList_ConstantStackPush(i35:0, o44[SharingAnalysis.field]o41:0) -> f394_0_appendNewList_ConstantStackPush(arith, 1) :|: i35:0 > 1 && arith = i35:0 - 1 6.85/2.75 f394_0_appendNewList_ConstantStackPush(x3, x4) -> f394_0_appendNewList_ConstantStackPush(x5, x6) :|: x6 > x4 && x3 > 1 && x4 > 0 && x5 = x3 - 1 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (17) IRSwTTerminationDigraphProof (EQUIVALENT) 6.85/2.75 Constructed termination digraph! 6.85/2.75 Nodes: 6.85/2.75 (1) f394_0_appendNewList_ConstantStackPush(i35:0, o44[SharingAnalysis.field]o41:0) -> f394_0_appendNewList_ConstantStackPush(arith, 1) :|: i35:0 > 1 && arith = i35:0 - 1 6.85/2.75 (2) f394_0_appendNewList_ConstantStackPush(x3, x4) -> f394_0_appendNewList_ConstantStackPush(x5, x6) :|: x6 > x4 && x3 > 1 && x4 > 0 && x5 = x3 - 1 6.85/2.75 6.85/2.75 Arcs: 6.85/2.75 (1) -> (1), (2) 6.85/2.75 (2) -> (1), (2) 6.85/2.75 6.85/2.75 This digraph is fully evaluated! 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (18) 6.85/2.75 Obligation: 6.85/2.75 6.85/2.75 Termination digraph: 6.85/2.75 Nodes: 6.85/2.75 (1) f394_0_appendNewList_ConstantStackPush(i35:0, o44[SharingAnalysis.field]o41:0) -> f394_0_appendNewList_ConstantStackPush(arith, 1) :|: i35:0 > 1 && arith = i35:0 - 1 6.85/2.75 (2) f394_0_appendNewList_ConstantStackPush(x3, x4) -> f394_0_appendNewList_ConstantStackPush(x5, x6) :|: x6 > x4 && x3 > 1 && x4 > 0 && x5 = x3 - 1 6.85/2.75 6.85/2.75 Arcs: 6.85/2.75 (1) -> (1), (2) 6.85/2.75 (2) -> (1), (2) 6.85/2.75 6.85/2.75 This digraph is fully evaluated! 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (19) IntTRSCompressionProof (EQUIVALENT) 6.85/2.75 Compressed rules. 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (20) 6.85/2.75 Obligation: 6.85/2.75 Rules: 6.85/2.75 f394_0_appendNewList_ConstantStackPush(x3:0, x4:0) -> f394_0_appendNewList_ConstantStackPush(x3:0 - 1, x6:0) :|: x6:0 > x4:0 && x3:0 > 1 && x4:0 > 0 6.85/2.75 f394_0_appendNewList_ConstantStackPush(i35:0:0, o44[SharingAnalysis.field]o41:0:0) -> f394_0_appendNewList_ConstantStackPush(i35:0:0 - 1, 1) :|: i35:0:0 > 1 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (21) TempFilterProof (SOUND) 6.85/2.75 Used the following sort dictionary for filtering: 6.85/2.75 f394_0_appendNewList_ConstantStackPush(INTEGER, VARIABLE) 6.85/2.75 Replaced non-predefined constructor symbols by 0. 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (22) 6.85/2.75 Obligation: 6.85/2.75 Rules: 6.85/2.75 f394_0_appendNewList_ConstantStackPush(x3:0, x4:0) -> f394_0_appendNewList_ConstantStackPush(c, x6:0) :|: c = x3:0 - 1 && (x6:0 > x4:0 && x3:0 > 1 && x4:0 > 0) 6.85/2.75 f394_0_appendNewList_ConstantStackPush(i35:0:0, o44[SharingAnalysis.field]o41:0:0) -> f394_0_appendNewList_ConstantStackPush(c1, c2) :|: c2 = 1 && c1 = i35:0:0 - 1 && i35:0:0 > 1 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (23) RankingReductionPairProof (EQUIVALENT) 6.85/2.75 Interpretation: 6.85/2.75 [ f394_0_appendNewList_ConstantStackPush ] = f394_0_appendNewList_ConstantStackPush_1 6.85/2.75 6.85/2.75 The following rules are decreasing: 6.85/2.75 f394_0_appendNewList_ConstantStackPush(x3:0, x4:0) -> f394_0_appendNewList_ConstantStackPush(c, x6:0) :|: c = x3:0 - 1 && (x6:0 > x4:0 && x3:0 > 1 && x4:0 > 0) 6.85/2.75 f394_0_appendNewList_ConstantStackPush(i35:0:0, o44[SharingAnalysis.field]o41:0:0) -> f394_0_appendNewList_ConstantStackPush(c1, c2) :|: c2 = 1 && c1 = i35:0:0 - 1 && i35:0:0 > 1 6.85/2.75 6.85/2.75 The following rules are bounded: 6.85/2.75 f394_0_appendNewList_ConstantStackPush(x3:0, x4:0) -> f394_0_appendNewList_ConstantStackPush(c, x6:0) :|: c = x3:0 - 1 && (x6:0 > x4:0 && x3:0 > 1 && x4:0 > 0) 6.85/2.75 f394_0_appendNewList_ConstantStackPush(i35:0:0, o44[SharingAnalysis.field]o41:0:0) -> f394_0_appendNewList_ConstantStackPush(c1, c2) :|: c2 = 1 && c1 = i35:0:0 - 1 && i35:0:0 > 1 6.85/2.75 6.85/2.75 6.85/2.75 ---------------------------------------- 6.85/2.75 6.85/2.75 (24) 6.85/2.75 YES 7.01/2.85 EOF