/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, 764 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 0 ms] (6) AND (7) JBCTerminationSCC (8) SCCToQDPProof [SOUND, 216 ms] (9) QDP (10) QDPSizeChangeProof [EQUIVALENT, 0 ms] (11) YES (12) JBCTerminationSCC (13) SCCToIRSProof [SOUND, 108 ms] (14) IRSwT (15) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (16) IRSwT (17) IRSwTTerminationDigraphProof [EQUIVALENT, 33 ms] (18) IRSwT (19) IntTRSCompressionProof [EQUIVALENT, 0 ms] (20) IRSwT (21) TempFilterProof [SOUND, 39 ms] (22) IntTRS (23) PolynomialOrderProcessor [EQUIVALENT, 0 ms] (24) YES ---------------------------------------- (0) Obligation: need to prove termination of the following program: package SharingAnalysisRec; public class Random { static String[] args; static int index = 0; public static int random() { final String string = args[index]; index++; return string.length(); } } package SharingAnalysisRec; public class SharingAnalysisRec { int val; SharingAnalysisRec field; public static void main(String[] args) { Random.args = args; SharingAnalysisRec t1 = new SharingAnalysisRec(); SharingAnalysisRec t2 = t1.appendNewList(1); SharingAnalysisRec t3 = t2.appendNewList(Random.random()); t2.field = null; copy(t1, t3); } public static void copy(SharingAnalysisRec source, SharingAnalysisRec target) { if (source == null) { return; } else { SharingAnalysisRec newEle = new SharingAnalysisRec(); newEle.val = source.val; target.field = newEle; copy(source.field, newEle); } } /** * @param i number of elements to append * @return the last list element appended */ private SharingAnalysisRec appendNewList(int i) { this.field = new SharingAnalysisRec(); this.val = Random.random(); if (i <= 1) { return this.field; } else { return this.field.appendNewList(i-1); } } } ---------------------------------------- (1) BareJBCToJBCProof (EQUIVALENT) initialized classpath ---------------------------------------- (2) Obligation: need to prove termination of the following program: package SharingAnalysisRec; public class Random { static String[] args; static int index = 0; public static int random() { final String string = args[index]; index++; return string.length(); } } package SharingAnalysisRec; public class SharingAnalysisRec { int val; SharingAnalysisRec field; public static void main(String[] args) { Random.args = args; SharingAnalysisRec t1 = new SharingAnalysisRec(); SharingAnalysisRec t2 = t1.appendNewList(1); SharingAnalysisRec t3 = t2.appendNewList(Random.random()); t2.field = null; copy(t1, t3); } public static void copy(SharingAnalysisRec source, SharingAnalysisRec target) { if (source == null) { return; } else { SharingAnalysisRec newEle = new SharingAnalysisRec(); newEle.val = source.val; target.field = newEle; copy(source.field, newEle); } } /** * @param i number of elements to append * @return the last list element appended */ private SharingAnalysisRec appendNewList(int i) { this.field = new SharingAnalysisRec(); this.val = Random.random(); if (i <= 1) { return this.field; } else { return this.field.appendNewList(i-1); } } } ---------------------------------------- (3) JBCToGraph (EQUIVALENT) Constructed TerminationGraph. ---------------------------------------- (4) Obligation: Termination Graph based on JBC Program: SharingAnalysisRec.SharingAnalysisRec.main([Ljava/lang/String;)V: Graph of 136 nodes with 0 SCCs. SharingAnalysisRec.SharingAnalysisRec.appendNewList(I)LSharingAnalysisRec/SharingAnalysisRec;: Graph of 140 nodes with 0 SCCs. SharingAnalysisRec.SharingAnalysisRec.copy(LSharingAnalysisRec/SharingAnalysisRec;LSharingAnalysisRec/SharingAnalysisRec;)V: Graph of 32 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: SharingAnalysisRec.SharingAnalysisRec.copy(LSharingAnalysisRec/SharingAnalysisRec;LSharingAnalysisRec/SharingAnalysisRec;)V SCC calls the following helper methods: SharingAnalysisRec.SharingAnalysisRec.copy(LSharingAnalysisRec/SharingAnalysisRec;LSharingAnalysisRec/SharingAnalysisRec;)V Performed SCC analyses: *Used field analysis yielded the following read fields: *SharingAnalysisRec.SharingAnalysisRec: [val, field] *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (8) SCCToQDPProof (SOUND) Transformed TerminationGraph SCC to QDP. Log: Generated 24 rules for P and 31 rules for R.P rules: f3531_0_copy_NONNULL(EOS(STATIC_3531), java.lang.Object(o817sub), java.lang.Object(o817sub)) -> f3533_0_copy_NONNULL(EOS(STATIC_3533), java.lang.Object(o817sub), java.lang.Object(o817sub)) :|: TRUE f3533_0_copy_NONNULL(EOS(STATIC_3533), java.lang.Object(o817sub), java.lang.Object(o817sub)) -> f3535_0_copy_New(EOS(STATIC_3535), java.lang.Object(o817sub)) :|: TRUE f3535_0_copy_New(EOS(STATIC_3535), java.lang.Object(o817sub)) -> f3538_0_copy_Duplicate(EOS(STATIC_3538), java.lang.Object(o817sub)) :|: TRUE f3538_0_copy_Duplicate(EOS(STATIC_3538), java.lang.Object(o817sub)) -> f3542_0_copy_InvokeMethod(EOS(STATIC_3542), java.lang.Object(o817sub)) :|: TRUE f3542_0_copy_InvokeMethod(EOS(STATIC_3542), java.lang.Object(o817sub)) -> f3551_0__init__Load(EOS(STATIC_3551), java.lang.Object(o817sub)) :|: TRUE f3551_0__init__Load(EOS(STATIC_3551), java.lang.Object(o817sub)) -> f3558_0__init__InvokeMethod(EOS(STATIC_3558), java.lang.Object(o817sub)) :|: TRUE f3558_0__init__InvokeMethod(EOS(STATIC_3558), java.lang.Object(o817sub)) -> f3560_0__init__Return(EOS(STATIC_3560), java.lang.Object(o817sub)) :|: TRUE f3560_0__init__Return(EOS(STATIC_3560), java.lang.Object(o817sub)) -> f3562_0_copy_Store(EOS(STATIC_3562), java.lang.Object(o817sub)) :|: TRUE f3562_0_copy_Store(EOS(STATIC_3562), java.lang.Object(o817sub)) -> f3563_0_copy_Load(EOS(STATIC_3563), java.lang.Object(o817sub)) :|: TRUE f3563_0_copy_Load(EOS(STATIC_3563), java.lang.Object(o817sub)) -> f3565_0_copy_Load(EOS(STATIC_3565), java.lang.Object(o817sub)) :|: TRUE f3565_0_copy_Load(EOS(STATIC_3565), java.lang.Object(o817sub)) -> f3567_0_copy_FieldAccess(EOS(STATIC_3567), java.lang.Object(o817sub), java.lang.Object(o817sub)) :|: TRUE f3567_0_copy_FieldAccess(EOS(STATIC_3567), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824)), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) -> f3569_0_copy_FieldAccess(EOS(STATIC_3569), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824)), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) :|: TRUE f3569_0_copy_FieldAccess(EOS(STATIC_3569), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824)), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) -> f3572_0_copy_FieldAccess(EOS(STATIC_3572), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) :|: TRUE f3572_0_copy_FieldAccess(EOS(STATIC_3572), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) -> f3574_0_copy_Load(EOS(STATIC_3574), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) :|: TRUE f3574_0_copy_Load(EOS(STATIC_3574), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) -> f3576_0_copy_Load(EOS(STATIC_3576), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) :|: TRUE f3576_0_copy_Load(EOS(STATIC_3576), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) -> f3578_0_copy_FieldAccess(EOS(STATIC_3578), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) :|: TRUE f3578_0_copy_FieldAccess(EOS(STATIC_3578), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) -> f3582_0_copy_Load(EOS(STATIC_3582), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) :|: TRUE f3582_0_copy_Load(EOS(STATIC_3582), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) -> f3584_0_copy_FieldAccess(EOS(STATIC_3584), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) :|: TRUE f3584_0_copy_FieldAccess(EOS(STATIC_3584), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) -> f3586_0_copy_Load(EOS(STATIC_3586), o824) :|: TRUE f3586_0_copy_Load(EOS(STATIC_3586), o824) -> f3588_0_copy_InvokeMethod(EOS(STATIC_3588), o824) :|: TRUE f3588_0_copy_InvokeMethod(EOS(STATIC_3588), o824) -> f3590_1_copy_InvokeMethod(f3590_0_copy_Load(EOS(STATIC_3590), o824)) :|: TRUE f3590_0_copy_Load(EOS(STATIC_3590), o824) -> f3592_0_copy_Load(EOS(STATIC_3592), o824) :|: TRUE f3592_0_copy_Load(EOS(STATIC_3592), o824) -> f3529_0_copy_Load(EOS(STATIC_3529), o824) :|: TRUE f3529_0_copy_Load(EOS(STATIC_3529), o815) -> f3531_0_copy_NONNULL(EOS(STATIC_3531), o815, o815) :|: TRUE R rules: f3529_0_copy_Load(EOS(STATIC_3529), o815) -> f3531_0_copy_NONNULL(EOS(STATIC_3531), o815, o815) :|: TRUE f3531_0_copy_NONNULL(EOS(STATIC_3531), java.lang.Object(o817sub), java.lang.Object(o817sub)) -> f3533_0_copy_NONNULL(EOS(STATIC_3533), java.lang.Object(o817sub), java.lang.Object(o817sub)) :|: TRUE f3531_0_copy_NONNULL(EOS(STATIC_3531), NULL, NULL) -> f3534_0_copy_NONNULL(EOS(STATIC_3534), NULL, NULL) :|: TRUE f3533_0_copy_NONNULL(EOS(STATIC_3533), java.lang.Object(o817sub), java.lang.Object(o817sub)) -> f3535_0_copy_New(EOS(STATIC_3535), java.lang.Object(o817sub)) :|: TRUE f3534_0_copy_NONNULL(EOS(STATIC_3534), NULL, NULL) -> f3537_0_copy_Return(EOS(STATIC_3537)) :|: TRUE f3535_0_copy_New(EOS(STATIC_3535), java.lang.Object(o817sub)) -> f3538_0_copy_Duplicate(EOS(STATIC_3538), java.lang.Object(o817sub)) :|: TRUE f3538_0_copy_Duplicate(EOS(STATIC_3538), java.lang.Object(o817sub)) -> f3542_0_copy_InvokeMethod(EOS(STATIC_3542), java.lang.Object(o817sub)) :|: TRUE f3542_0_copy_InvokeMethod(EOS(STATIC_3542), java.lang.Object(o817sub)) -> f3551_0__init__Load(EOS(STATIC_3551), java.lang.Object(o817sub)) :|: TRUE f3551_0__init__Load(EOS(STATIC_3551), java.lang.Object(o817sub)) -> f3558_0__init__InvokeMethod(EOS(STATIC_3558), java.lang.Object(o817sub)) :|: TRUE f3558_0__init__InvokeMethod(EOS(STATIC_3558), java.lang.Object(o817sub)) -> f3560_0__init__Return(EOS(STATIC_3560), java.lang.Object(o817sub)) :|: TRUE f3560_0__init__Return(EOS(STATIC_3560), java.lang.Object(o817sub)) -> f3562_0_copy_Store(EOS(STATIC_3562), java.lang.Object(o817sub)) :|: TRUE f3562_0_copy_Store(EOS(STATIC_3562), java.lang.Object(o817sub)) -> f3563_0_copy_Load(EOS(STATIC_3563), java.lang.Object(o817sub)) :|: TRUE f3563_0_copy_Load(EOS(STATIC_3563), java.lang.Object(o817sub)) -> f3565_0_copy_Load(EOS(STATIC_3565), java.lang.Object(o817sub)) :|: TRUE f3565_0_copy_Load(EOS(STATIC_3565), java.lang.Object(o817sub)) -> f3567_0_copy_FieldAccess(EOS(STATIC_3567), java.lang.Object(o817sub), java.lang.Object(o817sub)) :|: TRUE f3567_0_copy_FieldAccess(EOS(STATIC_3567), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824)), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) -> f3569_0_copy_FieldAccess(EOS(STATIC_3569), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824)), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) :|: TRUE f3569_0_copy_FieldAccess(EOS(STATIC_3569), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824)), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) -> f3572_0_copy_FieldAccess(EOS(STATIC_3572), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) :|: TRUE f3572_0_copy_FieldAccess(EOS(STATIC_3572), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) -> f3574_0_copy_Load(EOS(STATIC_3574), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) :|: TRUE f3574_0_copy_Load(EOS(STATIC_3574), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) -> f3576_0_copy_Load(EOS(STATIC_3576), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) :|: TRUE f3576_0_copy_Load(EOS(STATIC_3576), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) -> f3578_0_copy_FieldAccess(EOS(STATIC_3578), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) :|: TRUE f3578_0_copy_FieldAccess(EOS(STATIC_3578), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) -> f3582_0_copy_Load(EOS(STATIC_3582), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) :|: TRUE f3582_0_copy_Load(EOS(STATIC_3582), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) -> f3584_0_copy_FieldAccess(EOS(STATIC_3584), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) :|: TRUE f3584_0_copy_FieldAccess(EOS(STATIC_3584), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691, o824))) -> f3586_0_copy_Load(EOS(STATIC_3586), o824) :|: TRUE f3586_0_copy_Load(EOS(STATIC_3586), o824) -> f3588_0_copy_InvokeMethod(EOS(STATIC_3588), o824) :|: TRUE f3588_0_copy_InvokeMethod(EOS(STATIC_3588), o824) -> f3590_1_copy_InvokeMethod(f3590_0_copy_Load(EOS(STATIC_3590), o824)) :|: TRUE f3590_0_copy_Load(EOS(STATIC_3590), o824) -> f3592_0_copy_Load(EOS(STATIC_3592), o824) :|: TRUE f3978_0_copy_Return(EOS(STATIC_3978)) -> f3979_0_copy_Return(EOS(STATIC_3979)) :|: TRUE f3983_0_copy_Return(EOS(STATIC_3983)) -> f3986_0_copy_Return(EOS(STATIC_3986)) :|: TRUE f3986_0_copy_Return(EOS(STATIC_3986)) -> f3979_0_copy_Return(EOS(STATIC_3979)) :|: TRUE f3592_0_copy_Load(EOS(STATIC_3592), o824) -> f3529_0_copy_Load(EOS(STATIC_3529), o824) :|: TRUE f3590_1_copy_InvokeMethod(f3537_0_copy_Return(EOS(STATIC_3537))) -> f3978_0_copy_Return(EOS(STATIC_3978)) :|: TRUE f3590_1_copy_InvokeMethod(f3979_0_copy_Return(EOS(STATIC_3979))) -> f3983_0_copy_Return(EOS(STATIC_3983)) :|: TRUE Combined rules. Obtained 1 conditional rules for P and 4 conditional rules for R.P rules: f3531_0_copy_NONNULL(EOS(STATIC_3531), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691:0, o824:0)), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691:0, o824:0))) -> f3590_1_copy_InvokeMethod(f3531_0_copy_NONNULL(EOS(STATIC_3531), o824:0, o824:0)) :|: TRUE R rules: f3590_1_copy_InvokeMethod(f3979_0_copy_Return(EOS(STATIC_3979))) -> f3979_0_copy_Return(EOS(STATIC_3979)) :|: TRUE f3590_1_copy_InvokeMethod(f3537_0_copy_Return(EOS(STATIC_3537))) -> f3979_0_copy_Return(EOS(STATIC_3979)) :|: TRUE f3531_0_copy_NONNULL(EOS(STATIC_3531), NULL, NULL) -> f3537_0_copy_Return(EOS(STATIC_3537)) :|: TRUE f3531_0_copy_NONNULL(EOS(STATIC_3531), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691:0, o824:0)), java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(EOC, i691:0, o824:0))) -> f3590_1_copy_InvokeMethod(f3531_0_copy_NONNULL(EOS(STATIC_3531), o824:0, o824:0)) :|: TRUE Filtered ground terms: f3531_0_copy_NONNULL(x1, x2, x3) -> f3531_0_copy_NONNULL(x2, x3) SharingAnalysisRec.SharingAnalysisRec(x1, x2, x3) -> SharingAnalysisRec.SharingAnalysisRec(x2, x3) f3979_0_copy_Return(x1) -> f3979_0_copy_Return f3537_0_copy_Return(x1) -> f3537_0_copy_Return Filtered unneeded arguments: SharingAnalysisRec.SharingAnalysisRec(x1, x2) -> SharingAnalysisRec.SharingAnalysisRec(x2) Filtered duplicate args: f3531_0_copy_NONNULL(x1, x2) -> f3531_0_copy_NONNULL(x2) Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.P rules: F3531_0_COPY_NONNULL(java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(o824:0:0))) -> F3531_0_COPY_NONNULL(o824:0:0) :|: TRUE R rules: ---------------------------------------- (9) Obligation: Q DP problem: The TRS P consists of the following rules: F3531_0_COPY_NONNULL(java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(o824:0:0))) -> F3531_0_COPY_NONNULL(o824:0:0) R is empty. Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (10) QDPSizeChangeProof (EQUIVALENT) By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. From the DPs we obtained the following set of size-change graphs: *F3531_0_COPY_NONNULL(java.lang.Object(SharingAnalysisRec.SharingAnalysisRec(o824:0:0))) -> F3531_0_COPY_NONNULL(o824:0:0) The graph contains the following edges 1 > 1 ---------------------------------------- (11) YES ---------------------------------------- (12) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: SharingAnalysisRec.SharingAnalysisRec.appendNewList(I)LSharingAnalysisRec/SharingAnalysisRec; SCC calls the following helper methods: SharingAnalysisRec.SharingAnalysisRec.appendNewList(I)LSharingAnalysisRec/SharingAnalysisRec; Performed SCC analyses: *Used field analysis yielded the following read fields: *java.lang.String: [count] *SharingAnalysisRec.SharingAnalysisRec: [field] *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (13) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 44 IRulesP rules: f608_0_appendNewList_New(EOS(STATIC_608(java.lang.Object(o92sub), i76)), i77, i77) -> f615_0_appendNewList_Duplicate(EOS(STATIC_615(java.lang.Object(o92sub), i76)), i77, i77) :|: TRUE f615_0_appendNewList_Duplicate(EOS(STATIC_615(java.lang.Object(o92sub), i76)), i77, i77) -> f622_0_appendNewList_InvokeMethod(EOS(STATIC_622(java.lang.Object(o92sub), i76)), i77, i77) :|: TRUE f622_0_appendNewList_InvokeMethod(EOS(STATIC_622(java.lang.Object(o92sub), i76)), i77, i77) -> f634_0__init__Load(EOS(STATIC_634(java.lang.Object(o92sub), i76)), i77, i77) :|: TRUE f634_0__init__Load(EOS(STATIC_634(java.lang.Object(o92sub), i76)), i77, i77) -> f649_0__init__InvokeMethod(EOS(STATIC_649(java.lang.Object(o92sub), i76)), i77, i77) :|: TRUE f649_0__init__InvokeMethod(EOS(STATIC_649(java.lang.Object(o92sub), i76)), i77, i77) -> f658_0__init__Return(EOS(STATIC_658(java.lang.Object(o92sub), i76)), i77, i77) :|: TRUE f658_0__init__Return(EOS(STATIC_658(java.lang.Object(o92sub), i76)), i77, i77) -> f666_0_appendNewList_FieldAccess(EOS(STATIC_666(java.lang.Object(o92sub), i76)), i77, i77) :|: TRUE f666_0_appendNewList_FieldAccess(EOS(STATIC_666(java.lang.Object(o92sub), i76)), i77, i77) -> f672_0_appendNewList_Load(EOS(STATIC_672(java.lang.Object(o92sub), i76)), i77, i77) :|: TRUE f672_0_appendNewList_Load(EOS(STATIC_672(java.lang.Object(o92sub), i76)), i77, i77) -> f677_0_appendNewList_InvokeMethod(EOS(STATIC_677(java.lang.Object(o92sub), i76)), i77, i77) :|: TRUE f677_0_appendNewList_InvokeMethod(EOS(STATIC_677(java.lang.Object(o92sub), i76)), i77, i77) -> f681_0_random_FieldAccess(EOS(STATIC_681(java.lang.Object(o92sub), i76)), i77, i77) :|: TRUE f681_0_random_FieldAccess(EOS(STATIC_681(java.lang.Object(o92sub), i76)), i77, i77) -> f690_0_random_FieldAccess(EOS(STATIC_690(java.lang.Object(o92sub), i76)), i77, i77, java.lang.Object(o92sub)) :|: TRUE f690_0_random_FieldAccess(EOS(STATIC_690(java.lang.Object(o92sub), i76)), i77, i77, java.lang.Object(o92sub)) -> f692_0_random_ArrayAccess(EOS(STATIC_692(java.lang.Object(o92sub), i76)), i77, i77, java.lang.Object(o92sub), i76) :|: TRUE f692_0_random_ArrayAccess(EOS(STATIC_692(java.lang.Object(ARRAY(i79)), i76)), i77, i77, java.lang.Object(ARRAY(i79)), i76) -> f694_0_random_ArrayAccess(EOS(STATIC_694(java.lang.Object(ARRAY(i79)), i76)), i77, i77, java.lang.Object(ARRAY(i79)), i76) :|: i79 >= 0 f694_0_random_ArrayAccess(EOS(STATIC_694(java.lang.Object(ARRAY(i79)), i81)), i77, i77, java.lang.Object(ARRAY(i79)), i81) -> f698_0_random_ArrayAccess(EOS(STATIC_698(java.lang.Object(ARRAY(i79)), i81)), i77, i77, java.lang.Object(ARRAY(i79)), i81) :|: TRUE f698_0_random_ArrayAccess(EOS(STATIC_698(java.lang.Object(ARRAY(i79)), i81)), i77, i77, java.lang.Object(ARRAY(i79)), i81) -> f703_0_random_ArrayAccess(EOS(STATIC_703(java.lang.Object(ARRAY(i79)), i81)), i77, i77, java.lang.Object(ARRAY(i79)), i81) :|: TRUE f703_0_random_ArrayAccess(EOS(STATIC_703(java.lang.Object(ARRAY(i79)), i81)), i77, i77, java.lang.Object(ARRAY(i79)), i81) -> f707_0_random_Store(EOS(STATIC_707(java.lang.Object(ARRAY(i79)), i81)), i77, i77, o102) :|: i81 < i79 f707_0_random_Store(EOS(STATIC_707(java.lang.Object(ARRAY(i79)), i81)), i77, i77, o102) -> f714_0_random_FieldAccess(EOS(STATIC_714(java.lang.Object(ARRAY(i79)), i81)), i77, i77, o102) :|: TRUE f714_0_random_FieldAccess(EOS(STATIC_714(java.lang.Object(ARRAY(i79)), i81)), i77, i77, o102) -> f719_0_random_ConstantStackPush(EOS(STATIC_719(java.lang.Object(ARRAY(i79)), i81)), i77, i77, o102, i81) :|: TRUE f719_0_random_ConstantStackPush(EOS(STATIC_719(java.lang.Object(ARRAY(i79)), i81)), i77, i77, o102, i81) -> f722_0_random_IntArithmetic(EOS(STATIC_722(java.lang.Object(ARRAY(i79)), i81)), i77, i77, o102, i81, 1) :|: TRUE f722_0_random_IntArithmetic(EOS(STATIC_722(java.lang.Object(ARRAY(i79)), i81)), i77, i77, o102, i81, matching1) -> f729_0_random_FieldAccess(EOS(STATIC_729(java.lang.Object(ARRAY(i79)), i81)), i77, i77, o102, i81 + 1) :|: i81 >= 0 && matching1 = 1 f729_0_random_FieldAccess(EOS(STATIC_729(java.lang.Object(ARRAY(i79)), i81)), i77, i77, o102, i83) -> f734_0_random_Load(EOS(STATIC_734(java.lang.Object(ARRAY(i79)), i83)), i77, i77, o102) :|: TRUE f734_0_random_Load(EOS(STATIC_734(java.lang.Object(ARRAY(i79)), i83)), i77, i77, o102) -> f739_0_random_InvokeMethod(EOS(STATIC_739(java.lang.Object(ARRAY(i79)), i83)), i77, i77, o102) :|: TRUE f739_0_random_InvokeMethod(EOS(STATIC_739(java.lang.Object(ARRAY(i79)), i83)), i77, i77, java.lang.Object(o107sub)) -> f747_0_random_InvokeMethod(EOS(STATIC_747(java.lang.Object(ARRAY(i79)), i83)), i77, i77, java.lang.Object(o107sub)) :|: TRUE f747_0_random_InvokeMethod(EOS(STATIC_747(java.lang.Object(ARRAY(i79)), i83)), i77, i77, java.lang.Object(o108sub)) -> f753_0_random_InvokeMethod(EOS(STATIC_753(java.lang.Object(ARRAY(i79)), i83)), i77, i77, java.lang.Object(o108sub)) :|: TRUE f753_0_random_InvokeMethod(EOS(STATIC_753(java.lang.Object(ARRAY(i79)), i83)), i77, i77, java.lang.Object(o108sub)) -> f760_0_length_Load(EOS(STATIC_760(java.lang.Object(ARRAY(i79)), i83)), i77, i77, java.lang.Object(o108sub)) :|: TRUE f760_0_length_Load(EOS(STATIC_760(java.lang.Object(ARRAY(i79)), i83)), i77, i77, java.lang.Object(o108sub)) -> f772_0_length_FieldAccess(EOS(STATIC_772(java.lang.Object(ARRAY(i79)), i83)), i77, i77, java.lang.Object(o108sub)) :|: TRUE f772_0_length_FieldAccess(EOS(STATIC_772(java.lang.Object(ARRAY(i79)), i83)), i77, i77, java.lang.Object(java.lang.String(EOC, i92))) -> f780_0_length_FieldAccess(EOS(STATIC_780(java.lang.Object(ARRAY(i79)), i83)), i77, i77, java.lang.Object(java.lang.String(EOC, i92))) :|: TRUE f780_0_length_FieldAccess(EOS(STATIC_780(java.lang.Object(ARRAY(i79)), i83)), i77, i77, java.lang.Object(java.lang.String(EOC, i92))) -> f788_0_length_Return(EOS(STATIC_788(java.lang.Object(ARRAY(i79)), i83)), i77, i77) :|: TRUE f788_0_length_Return(EOS(STATIC_788(java.lang.Object(ARRAY(i79)), i83)), i77, i77) -> f793_0_random_Return(EOS(STATIC_793(java.lang.Object(ARRAY(i79)), i83)), i77, i77) :|: TRUE f793_0_random_Return(EOS(STATIC_793(java.lang.Object(ARRAY(i79)), i83)), i77, i77) -> f797_0_appendNewList_FieldAccess(EOS(STATIC_797(java.lang.Object(ARRAY(i79)), i83)), i77, i77) :|: TRUE f797_0_appendNewList_FieldAccess(EOS(STATIC_797(java.lang.Object(ARRAY(i79)), i83)), i77, i77) -> f805_0_appendNewList_Load(EOS(STATIC_805(java.lang.Object(ARRAY(i79)), i83)), i77, i77) :|: TRUE f805_0_appendNewList_Load(EOS(STATIC_805(java.lang.Object(ARRAY(i79)), i83)), i77, i77) -> f812_0_appendNewList_ConstantStackPush(EOS(STATIC_812(java.lang.Object(ARRAY(i79)), i83)), i77, i77, i77) :|: TRUE f812_0_appendNewList_ConstantStackPush(EOS(STATIC_812(java.lang.Object(ARRAY(i79)), i83)), i77, i77, i77) -> f825_0_appendNewList_GT(EOS(STATIC_825(java.lang.Object(ARRAY(i79)), i83)), i77, i77, i77, 1) :|: TRUE f825_0_appendNewList_GT(EOS(STATIC_825(java.lang.Object(ARRAY(i79)), i83)), i96, i96, i96, matching1) -> f844_0_appendNewList_GT(EOS(STATIC_844(java.lang.Object(ARRAY(i79)), i83)), i96, i96, i96, 1) :|: TRUE && matching1 = 1 f844_0_appendNewList_GT(EOS(STATIC_844(java.lang.Object(ARRAY(i79)), i83)), i96, i96, i96, matching1) -> f871_0_appendNewList_Load(EOS(STATIC_871(java.lang.Object(ARRAY(i79)), i83)), i96, i96) :|: i96 > 1 && matching1 = 1 f871_0_appendNewList_Load(EOS(STATIC_871(java.lang.Object(ARRAY(i79)), i83)), i96, i96) -> f887_0_appendNewList_FieldAccess(EOS(STATIC_887(java.lang.Object(ARRAY(i79)), i83)), i96, i96) :|: TRUE f887_0_appendNewList_FieldAccess(EOS(STATIC_887(java.lang.Object(ARRAY(i79)), i83)), i96, i96) -> f904_0_appendNewList_Load(EOS(STATIC_904(java.lang.Object(ARRAY(i79)), i83)), i96, i96) :|: TRUE f904_0_appendNewList_Load(EOS(STATIC_904(java.lang.Object(ARRAY(i79)), i83)), i96, i96) -> f914_0_appendNewList_ConstantStackPush(EOS(STATIC_914(java.lang.Object(ARRAY(i79)), i83)), i96, i96) :|: TRUE f914_0_appendNewList_ConstantStackPush(EOS(STATIC_914(java.lang.Object(ARRAY(i79)), i83)), i96, i96) -> f967_0_appendNewList_IntArithmetic(EOS(STATIC_967(java.lang.Object(ARRAY(i79)), i83)), i96, i96, 1) :|: TRUE f967_0_appendNewList_IntArithmetic(EOS(STATIC_967(java.lang.Object(ARRAY(i79)), i83)), i96, i96, matching1) -> f991_0_appendNewList_InvokeMethod(EOS(STATIC_991(java.lang.Object(ARRAY(i79)), i83)), i96, i96 - 1) :|: i96 > 0 && matching1 = 1 f991_0_appendNewList_InvokeMethod(EOS(STATIC_991(java.lang.Object(ARRAY(i79)), i83)), i96, i119) -> f998_0_appendNewList_Load(EOS(STATIC_998(java.lang.Object(ARRAY(i79)), i83)), i119, i119) :|: i96 > 1 && i119 >= 1 && i83 >= 1 && i119 < i96 f991_0_appendNewList_InvokeMethod(EOS(STATIC_991(java.lang.Object(ARRAY(i79)), i83)), i96, i119) -> f998_1_appendNewList_Load(EOS(STATIC_998(java.lang.Object(ARRAY(i79)), i83)), i96, i119) :|: i96 > 1 && i119 >= 1 && i83 >= 1 && i119 < i96 f998_0_appendNewList_Load(EOS(STATIC_998(java.lang.Object(ARRAY(i79)), i83)), i119, i119) -> f1008_0_appendNewList_Load(EOS(STATIC_1008(java.lang.Object(ARRAY(i79)), i83)), i119, i119) :|: TRUE f1008_0_appendNewList_Load(EOS(STATIC_1008(java.lang.Object(ARRAY(i79)), i83)), i119, i119) -> f588_0_appendNewList_Load(EOS(STATIC_588(java.lang.Object(ARRAY(i79)), i83)), i119, i119) :|: TRUE f588_0_appendNewList_Load(EOS(STATIC_588(java.lang.Object(o92sub), i76)), i77, i77) -> f608_0_appendNewList_New(EOS(STATIC_608(java.lang.Object(o92sub), i76)), i77, i77) :|: TRUE Combined rules. Obtained 2 IRulesP rules: f608_0_appendNewList_New(EOS(STATIC_608(java.lang.Object(ARRAY(i79:0)), i76:0)), i77:0, i77:0) -> f608_0_appendNewList_New(EOS(STATIC_608(java.lang.Object(ARRAY(i79:0)), i76:0 + 1)), i77:0 - 1, i77:0 - 1) :|: i77:0 > 1 && i79:0 > -1 && i79:0 > i76:0 && i76:0 > -1 && i77:0 - 1 < i77:0 Removed following non-SCC rules: f608_0_appendNewList_New(EOS(STATIC_608(java.lang.Object(ARRAY(i79:0)), i76:0)), i77:0, i77:0) -> f998_1_appendNewList_Load(EOS(STATIC_998(java.lang.Object(ARRAY(i79:0)), i76:0 + 1)), i77:0, i77:0 - 1) :|: i77:0 > 1 && i79:0 > -1 && i79:0 > i76:0 && i76:0 > -1 && i77:0 - 1 < i77:0 Filtered duplicate arguments: f608_0_appendNewList_New(x1, x2, x3) -> f608_0_appendNewList_New(x1, x3) Finished conversion. Obtained 1 rules.P rules: f608_0_appendNewList_New(i77:0, i79:0, i76:0) -> f608_0_appendNewList_New(i77:0 - 1, i79:0, i76:0 + 1) :|: i79:0 > -1 && i77:0 > 1 && i79:0 > i76:0 && i77:0 - 1 < i77:0 && i76:0 > -1 ---------------------------------------- (14) Obligation: Rules: f608_0_appendNewList_New(i77:0, i79:0, i76:0) -> f608_0_appendNewList_New(i77:0 - 1, i79:0, i76:0 + 1) :|: i79:0 > -1 && i77:0 > 1 && i79:0 > i76:0 && i77:0 - 1 < i77:0 && i76:0 > -1 ---------------------------------------- (15) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (16) Obligation: Rules: f608_0_appendNewList_New(i77:0, i79:0, i76:0) -> f608_0_appendNewList_New(arith, i79:0, arith1) :|: i79:0 > -1 && i77:0 > 1 && i79:0 > i76:0 && i77:0 - 1 < i77:0 && i76:0 > -1 && arith = i77:0 - 1 && arith1 = i76:0 + 1 ---------------------------------------- (17) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f608_0_appendNewList_New(i77:0, i79:0, i76:0) -> f608_0_appendNewList_New(arith, i79:0, arith1) :|: i79:0 > -1 && i77:0 > 1 && i79:0 > i76:0 && i77:0 - 1 < i77:0 && i76:0 > -1 && arith = i77:0 - 1 && arith1 = i76:0 + 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (18) Obligation: Termination digraph: Nodes: (1) f608_0_appendNewList_New(i77:0, i79:0, i76:0) -> f608_0_appendNewList_New(arith, i79:0, arith1) :|: i79:0 > -1 && i77:0 > 1 && i79:0 > i76:0 && i77:0 - 1 < i77:0 && i76:0 > -1 && arith = i77:0 - 1 && arith1 = i76:0 + 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (19) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (20) Obligation: Rules: f608_0_appendNewList_New(i77:0:0, i79:0:0, i76:0:0) -> f608_0_appendNewList_New(i77:0:0 - 1, i79:0:0, i76:0:0 + 1) :|: i77:0:0 - 1 < i77:0:0 && i76:0:0 > -1 && i79:0:0 > i76:0:0 && i77:0:0 > 1 && i79:0:0 > -1 ---------------------------------------- (21) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f608_0_appendNewList_New(INTEGER, INTEGER, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (22) Obligation: Rules: f608_0_appendNewList_New(i77:0:0, i79:0:0, i76:0:0) -> f608_0_appendNewList_New(c, i79:0:0, c1) :|: c1 = i76:0:0 + 1 && c = i77:0:0 - 1 && (i77:0:0 - 1 < i77:0:0 && i76:0:0 > -1 && i79:0:0 > i76:0:0 && i77:0:0 > 1 && i79:0:0 > -1) ---------------------------------------- (23) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f608_0_appendNewList_New(x, x1, x2)] = x1 - x2 The following rules are decreasing: f608_0_appendNewList_New(i77:0:0, i79:0:0, i76:0:0) -> f608_0_appendNewList_New(c, i79:0:0, c1) :|: c1 = i76:0:0 + 1 && c = i77:0:0 - 1 && (i77:0:0 - 1 < i77:0:0 && i76:0:0 > -1 && i79:0:0 > i76:0:0 && i77:0:0 > 1 && i79:0:0 > -1) The following rules are bounded: f608_0_appendNewList_New(i77:0:0, i79:0:0, i76:0:0) -> f608_0_appendNewList_New(c, i79:0:0, c1) :|: c1 = i76:0:0 + 1 && c = i77:0:0 - 1 && (i77:0:0 - 1 < i77:0:0 && i76:0:0 > -1 && i79:0:0 > i76:0:0 && i77:0:0 > 1 && i79:0:0 > -1) ---------------------------------------- (24) YES