/export/starexec/sandbox2/solver/bin/starexec_run_standard /export/starexec/sandbox2/benchmark/theBenchmark.jar /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- YES proof of /export/starexec/sandbox2/benchmark/theBenchmark.jar # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty termination of the given Bare JBC problem could be proven: (0) Bare JBC problem (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] (2) JBC problem (3) JBCToGraph [EQUIVALENT, 622 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 0 ms] (6) AND (7) JBCTerminationSCC (8) SCCToIRSProof [SOUND, 43 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, 2 ms] (17) IRSwT (18) IRSwTToQDPProof [SOUND, 0 ms] (19) QDP (20) QDPSizeChangeProof [EQUIVALENT, 0 ms] (21) YES (22) JBCTerminationSCC (23) SCCToQDPProof [SOUND, 100 ms] (24) QDP (25) QDPSizeChangeProof [EQUIVALENT, 0 ms] (26) YES (27) JBCTerminationSCC (28) SCCToIRSProof [SOUND, 45 ms] (29) IRSwT (30) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (31) IRSwT (32) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] (33) IRSwT (34) IntTRSCompressionProof [EQUIVALENT, 0 ms] (35) IRSwT (36) TempFilterProof [SOUND, 5 ms] (37) IntTRS (38) RankingReductionPairProof [EQUIVALENT, 0 ms] (39) YES (40) JBCTerminationSCC (41) SCCToIRSProof [SOUND, 44 ms] (42) IRSwT (43) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (44) IRSwT (45) IRSwTTerminationDigraphProof [EQUIVALENT, 24 ms] (46) IRSwT (47) IntTRSCompressionProof [EQUIVALENT, 0 ms] (48) IRSwT (49) TempFilterProof [SOUND, 45 ms] (50) IntTRS (51) RankingReductionPairProof [EQUIVALENT, 26 ms] (52) IntTRS (53) RankingReductionPairProof [EQUIVALENT, 0 ms] (54) YES ---------------------------------------- (0) Obligation: need to prove termination of the following program: public class Test7 { public static void main(String[] args) { List[] ls = { List.mk(args.length), List.mk(args.length), List.mk(args.length) }; for (int k = 0; k < ls.length; k++) { int len = length(ls[0]); for (int i = 0; i < len; i++) bubble(ls[0]); } } private static void bubble(List l) { for (List cursor = l; cursor != null && cursor.getTail() != null; cursor = cursor.getTail()) if (cursor.head > cursor.getTail().head) { int temp = cursor.head; cursor.head = cursor.getTail().head; cursor.getTail().head = temp; } } private static int length(List list) { int len = 0; while (list != null) { list = list.getTail(); len++; } return len; } } public class List { public int head; private List tail; public List(int head, List tail) { this.head = head; this.tail = tail; } public List getTail() { return tail; } public static List mk(int len) { List result = null; while (len-- > 0) result = new List(len, result); return result; } } ---------------------------------------- (1) BareJBCToJBCProof (EQUIVALENT) initialized classpath ---------------------------------------- (2) Obligation: need to prove termination of the following program: public class Test7 { public static void main(String[] args) { List[] ls = { List.mk(args.length), List.mk(args.length), List.mk(args.length) }; for (int k = 0; k < ls.length; k++) { int len = length(ls[0]); for (int i = 0; i < len; i++) bubble(ls[0]); } } private static void bubble(List l) { for (List cursor = l; cursor != null && cursor.getTail() != null; cursor = cursor.getTail()) if (cursor.head > cursor.getTail().head) { int temp = cursor.head; cursor.head = cursor.getTail().head; cursor.getTail().head = temp; } } private static int length(List list) { int len = 0; while (list != null) { list = list.getTail(); len++; } return len; } } public class List { public int head; private List tail; public List(int head, List tail) { this.head = head; this.tail = tail; } public List getTail() { return tail; } public static List mk(int len) { List result = null; while (len-- > 0) result = new List(len, result); return result; } } ---------------------------------------- (3) JBCToGraph (EQUIVALENT) Constructed TerminationGraph. ---------------------------------------- (4) Obligation: Termination Graph based on JBC Program: Test7.main([Ljava/lang/String;)V: Graph of 83 nodes with 1 SCC. List.mk(I)LList;: Graph of 54 nodes with 1 SCC. Test7.length(LList;)I: Graph of 22 nodes with 1 SCC. Test7.bubble(LList;)V: Graph of 63 nodes with 1 SCC. ---------------------------------------- (5) TerminationGraphToSCCProof (SOUND) Splitted TerminationGraph to 4 SCCss. ---------------------------------------- (6) Complex Obligation (AND) ---------------------------------------- (7) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: Test7.bubble(LList;)V SCC calls the following helper methods: Performed SCC analyses: *Used field analysis yielded the following read fields: *List: [tail, head] *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (8) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 55 IRulesP rules: f3176_0_bubble_NULL(EOS(STATIC_3176), java.lang.Object(o465sub), java.lang.Object(o465sub)) -> f3177_0_bubble_NULL(EOS(STATIC_3177), java.lang.Object(o465sub), java.lang.Object(o465sub)) :|: TRUE f3177_0_bubble_NULL(EOS(STATIC_3177), java.lang.Object(o465sub), java.lang.Object(o465sub)) -> f3179_0_bubble_Load(EOS(STATIC_3179), java.lang.Object(o465sub)) :|: TRUE f3179_0_bubble_Load(EOS(STATIC_3179), java.lang.Object(o465sub)) -> f3181_0_bubble_InvokeMethod(EOS(STATIC_3181), java.lang.Object(o465sub), java.lang.Object(o465sub)) :|: TRUE f3181_0_bubble_InvokeMethod(EOS(STATIC_3181), java.lang.Object(o465sub), java.lang.Object(o465sub)) -> f3183_0_getTail_Load(EOS(STATIC_3183), java.lang.Object(o465sub), java.lang.Object(o465sub)) :|: TRUE f3183_0_getTail_Load(EOS(STATIC_3183), java.lang.Object(o465sub), java.lang.Object(o465sub)) -> f3188_0_getTail_FieldAccess(EOS(STATIC_3188), java.lang.Object(o465sub), java.lang.Object(o465sub)) :|: TRUE f3188_0_getTail_FieldAccess(EOS(STATIC_3188), java.lang.Object(List(EOC, o471, i497)), java.lang.Object(List(EOC, o471, i497))) -> f3190_0_getTail_FieldAccess(EOS(STATIC_3190), java.lang.Object(List(EOC, o471, i497)), java.lang.Object(List(EOC, o471, i497))) :|: TRUE f3190_0_getTail_FieldAccess(EOS(STATIC_3190), java.lang.Object(List(EOC, o471, i497)), java.lang.Object(List(EOC, o471, i497))) -> f3192_0_getTail_Return(EOS(STATIC_3192), java.lang.Object(List(EOC, o471, i497)), o471) :|: TRUE f3192_0_getTail_Return(EOS(STATIC_3192), java.lang.Object(List(EOC, o471, i497)), o471) -> f3194_0_bubble_NULL(EOS(STATIC_3194), java.lang.Object(List(EOC, o471, i497)), o471) :|: TRUE f3194_0_bubble_NULL(EOS(STATIC_3194), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497)), java.lang.Object(o472sub)) -> f3197_0_bubble_NULL(EOS(STATIC_3197), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497)), java.lang.Object(o472sub)) :|: TRUE f3197_0_bubble_NULL(EOS(STATIC_3197), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497)), java.lang.Object(o472sub)) -> f3200_0_bubble_Load(EOS(STATIC_3200), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497))) :|: TRUE f3200_0_bubble_Load(EOS(STATIC_3200), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497))) -> f3206_0_bubble_FieldAccess(EOS(STATIC_3206), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497)), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497))) :|: TRUE f3206_0_bubble_FieldAccess(EOS(STATIC_3206), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497)), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497))) -> f3207_0_bubble_Load(EOS(STATIC_3207), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497)), i497) :|: TRUE f3207_0_bubble_Load(EOS(STATIC_3207), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497)), i497) -> f3208_0_bubble_InvokeMethod(EOS(STATIC_3208), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(o472sub), i497))) :|: TRUE f3208_0_bubble_InvokeMethod(EOS(STATIC_3208), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(o472sub), i497))) -> f3209_0_getTail_Load(EOS(STATIC_3209), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(o472sub), i497))) :|: TRUE f3209_0_getTail_Load(EOS(STATIC_3209), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(o472sub), i497))) -> f3210_0_getTail_FieldAccess(EOS(STATIC_3210), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(o472sub), i497))) :|: TRUE f3210_0_getTail_FieldAccess(EOS(STATIC_3210), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(o472sub), i497))) -> f3211_0_getTail_Return(EOS(STATIC_3211), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497)), i497, java.lang.Object(o472sub)) :|: TRUE f3211_0_getTail_Return(EOS(STATIC_3211), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497)), i497, java.lang.Object(o472sub)) -> f3212_0_bubble_FieldAccess(EOS(STATIC_3212), java.lang.Object(List(EOC, java.lang.Object(o472sub), i497)), i497, java.lang.Object(o472sub)) :|: TRUE f3212_0_bubble_FieldAccess(EOS(STATIC_3212), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, o476, i498))) -> f3213_0_bubble_FieldAccess(EOS(STATIC_3213), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, o476, i498))) :|: TRUE f3213_0_bubble_FieldAccess(EOS(STATIC_3213), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, o476, i498))) -> f3214_0_bubble_LE(EOS(STATIC_3214), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, i498) :|: TRUE f3214_0_bubble_LE(EOS(STATIC_3214), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, i498) -> f3215_0_bubble_LE(EOS(STATIC_3215), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, i498) :|: i497 <= i498 f3214_0_bubble_LE(EOS(STATIC_3214), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, i498) -> f3216_0_bubble_LE(EOS(STATIC_3216), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, i498) :|: i497 > i498 f3215_0_bubble_LE(EOS(STATIC_3215), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, i498) -> f3218_0_bubble_Load(EOS(STATIC_3218), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) :|: i497 <= i498 f3218_0_bubble_Load(EOS(STATIC_3218), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) -> f3225_0_bubble_InvokeMethod(EOS(STATIC_3225), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) :|: TRUE f3225_0_bubble_InvokeMethod(EOS(STATIC_3225), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) -> f3230_0_getTail_Load(EOS(STATIC_3230), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) :|: TRUE f3230_0_getTail_Load(EOS(STATIC_3230), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) -> f3239_0_getTail_FieldAccess(EOS(STATIC_3239), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) :|: TRUE f3239_0_getTail_FieldAccess(EOS(STATIC_3239), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) -> f3245_0_getTail_Return(EOS(STATIC_3245), java.lang.Object(List(EOC, o476, i498))) :|: TRUE f3245_0_getTail_Return(EOS(STATIC_3245), java.lang.Object(List(EOC, o476, i498))) -> f3249_0_bubble_Store(EOS(STATIC_3249), java.lang.Object(List(EOC, o476, i498))) :|: TRUE f3249_0_bubble_Store(EOS(STATIC_3249), java.lang.Object(List(EOC, o476, i498))) -> f3254_0_bubble_JMP(EOS(STATIC_3254), java.lang.Object(List(EOC, o476, i498))) :|: TRUE f3254_0_bubble_JMP(EOS(STATIC_3254), java.lang.Object(List(EOC, o476, i498))) -> f3260_0_bubble_Load(EOS(STATIC_3260), java.lang.Object(List(EOC, o476, i498))) :|: TRUE f3260_0_bubble_Load(EOS(STATIC_3260), java.lang.Object(List(EOC, o476, i498))) -> f3175_0_bubble_Load(EOS(STATIC_3175), java.lang.Object(List(EOC, o476, i498))) :|: TRUE f3175_0_bubble_Load(EOS(STATIC_3175), o461) -> f3176_0_bubble_NULL(EOS(STATIC_3176), o461, o461) :|: TRUE f3216_0_bubble_LE(EOS(STATIC_3216), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, i498) -> f3223_0_bubble_Load(EOS(STATIC_3223), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) :|: i497 > i498 f3223_0_bubble_Load(EOS(STATIC_3223), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) -> f3227_0_bubble_FieldAccess(EOS(STATIC_3227), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) :|: TRUE f3227_0_bubble_FieldAccess(EOS(STATIC_3227), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) -> f3232_0_bubble_Store(EOS(STATIC_3232), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497) :|: TRUE f3232_0_bubble_Store(EOS(STATIC_3232), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497) -> f3235_0_bubble_Load(EOS(STATIC_3235), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497) :|: TRUE f3235_0_bubble_Load(EOS(STATIC_3235), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497) -> f3241_0_bubble_Load(EOS(STATIC_3241), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) :|: TRUE f3241_0_bubble_Load(EOS(STATIC_3241), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) -> f3247_0_bubble_InvokeMethod(EOS(STATIC_3247), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) :|: TRUE f3247_0_bubble_InvokeMethod(EOS(STATIC_3247), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) -> f3252_0_getTail_Load(EOS(STATIC_3252), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) :|: TRUE f3252_0_getTail_Load(EOS(STATIC_3252), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) -> f3261_0_getTail_FieldAccess(EOS(STATIC_3261), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) :|: TRUE f3261_0_getTail_FieldAccess(EOS(STATIC_3261), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497))) -> f3262_0_getTail_Return(EOS(STATIC_3262), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), java.lang.Object(List(EOC, o476, i498))) :|: TRUE f3262_0_getTail_Return(EOS(STATIC_3262), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), java.lang.Object(List(EOC, o476, i498))) -> f3263_0_bubble_FieldAccess(EOS(STATIC_3263), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), java.lang.Object(List(EOC, o476, i498))) :|: TRUE f3263_0_bubble_FieldAccess(EOS(STATIC_3263), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), java.lang.Object(List(EOC, o476, i498))) -> f3264_0_bubble_FieldAccess(EOS(STATIC_3264), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i498) :|: TRUE f3264_0_bubble_FieldAccess(EOS(STATIC_3264), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i497)), i498) -> f3265_0_bubble_Load(EOS(STATIC_3265), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498)), i497) :|: TRUE f3265_0_bubble_Load(EOS(STATIC_3265), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498)), i497) -> f3266_0_bubble_InvokeMethod(EOS(STATIC_3266), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498))) :|: TRUE f3266_0_bubble_InvokeMethod(EOS(STATIC_3266), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498))) -> f3267_0_getTail_Load(EOS(STATIC_3267), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498))) :|: TRUE f3267_0_getTail_Load(EOS(STATIC_3267), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498))) -> f3268_0_getTail_FieldAccess(EOS(STATIC_3268), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498))) :|: TRUE f3268_0_getTail_FieldAccess(EOS(STATIC_3268), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498)), i497, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498))) -> f3269_0_getTail_Return(EOS(STATIC_3269), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498)), i497, java.lang.Object(List(EOC, o476, i498))) :|: TRUE f3269_0_getTail_Return(EOS(STATIC_3269), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498)), i497, java.lang.Object(List(EOC, o476, i498))) -> f3270_0_bubble_Load(EOS(STATIC_3270), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498)), i497, java.lang.Object(List(EOC, o476, i498))) :|: TRUE f3270_0_bubble_Load(EOS(STATIC_3270), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498)), i497, java.lang.Object(List(EOC, o476, i498))) -> f3271_0_bubble_FieldAccess(EOS(STATIC_3271), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498)), java.lang.Object(List(EOC, o476, i498)), i497) :|: TRUE f3271_0_bubble_FieldAccess(EOS(STATIC_3271), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i498)), i498)), java.lang.Object(List(EOC, o476, i498)), i497) -> f3272_0_bubble_Load(EOS(STATIC_3272), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i497)), i498))) :|: TRUE f3272_0_bubble_Load(EOS(STATIC_3272), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i497)), i498))) -> f3276_0_bubble_InvokeMethod(EOS(STATIC_3276), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i497)), i498))) :|: TRUE f3276_0_bubble_InvokeMethod(EOS(STATIC_3276), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i497)), i498))) -> f3277_0_getTail_Load(EOS(STATIC_3277), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i497)), i498))) :|: TRUE f3277_0_getTail_Load(EOS(STATIC_3277), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i497)), i498))) -> f3278_0_getTail_FieldAccess(EOS(STATIC_3278), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i497)), i498))) :|: TRUE f3278_0_getTail_FieldAccess(EOS(STATIC_3278), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476, i497)), i498))) -> f3279_0_getTail_Return(EOS(STATIC_3279), java.lang.Object(List(EOC, o476, i497))) :|: TRUE f3279_0_getTail_Return(EOS(STATIC_3279), java.lang.Object(List(EOC, o476, i497))) -> f3245_0_getTail_Return(EOS(STATIC_3245), java.lang.Object(List(EOC, o476, i497))) :|: TRUE Combined rules. Obtained 2 IRulesP rules: f3176_0_bubble_NULL(EOS(STATIC_3176), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476:0, i498:0)), i497:0)), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476:0, i498:0)), i497:0))) -> f3176_0_bubble_NULL(EOS(STATIC_3176), java.lang.Object(List(EOC, o476:0, i498:0)), java.lang.Object(List(EOC, o476:0, i498:0))) :|: i498:0 >= i497:0 f3176_0_bubble_NULL(EOS(STATIC_3176), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476:0, i498:0)), i497:0)), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o476:0, i498:0)), i497:0))) -> f3176_0_bubble_NULL(EOS(STATIC_3176), java.lang.Object(List(EOC, o476:0, i497:0)), java.lang.Object(List(EOC, o476:0, i497:0))) :|: i498:0 < i497:0 Filtered constant ground arguments: f3176_0_bubble_NULL(x1, x2, x3) -> f3176_0_bubble_NULL(x2, x3) EOS(x1) -> EOS List(x1, x2, x3) -> List(x2, x3) Filtered duplicate arguments: f3176_0_bubble_NULL(x1, x2) -> f3176_0_bubble_NULL(x2) Finished conversion. Obtained 2 rules.P rules: f3176_0_bubble_NULL(java.lang.Object(List(java.lang.Object(List(o476:0, i498:0)), i497:0)), i497:0) -> f3176_0_bubble_NULL(java.lang.Object(List(o476:0, i498:0)), i498:0) :|: i498:0 >= i497:0 f3176_0_bubble_NULL(java.lang.Object(List(java.lang.Object(List(o476:0, i498:0)), i497:0)), i497:0) -> f3176_0_bubble_NULL(java.lang.Object(List(o476:0, i497:0)), i497:0) :|: i498:0 < i497:0 ---------------------------------------- (9) Obligation: Rules: f3176_0_bubble_NULL(java.lang.Object(List(java.lang.Object(List(o476:0, i498:0)), i497:0)), i497:0) -> f3176_0_bubble_NULL(java.lang.Object(List(o476:0, i498:0)), i498:0) :|: i498:0 >= i497:0 f3176_0_bubble_NULL(java.lang.Object(List(java.lang.Object(List(x, x1)), x2)), x2) -> f3176_0_bubble_NULL(java.lang.Object(List(x, x2)), x2) :|: x1 < x2 ---------------------------------------- (10) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (11) Obligation: Rules: f3176_0_bubble_NULL(java.lang.Object(List(java.lang.Object(List(o476:0, i498:0)), i497:0)), i497:0) -> f3176_0_bubble_NULL(java.lang.Object(List(o476:0, i498:0)), i498:0) :|: i498:0 >= i497:0 f3176_0_bubble_NULL(java.lang.Object(List(java.lang.Object(List(x, x1)), x2)), x2) -> f3176_0_bubble_NULL(java.lang.Object(List(x, x2)), x2) :|: x1 < x2 ---------------------------------------- (12) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f3176_0_bubble_NULL(java.lang.Object(List(java.lang.Object(List(o476:0, i498:0)), i497:0)), i497:0) -> f3176_0_bubble_NULL(java.lang.Object(List(o476:0, i498:0)), i498:0) :|: i498:0 >= i497:0 (2) f3176_0_bubble_NULL(java.lang.Object(List(java.lang.Object(List(x, x1)), x2)), x2) -> f3176_0_bubble_NULL(java.lang.Object(List(x, x2)), x2) :|: x1 < x2 Arcs: (1) -> (1), (2) (2) -> (1), (2) This digraph is fully evaluated! ---------------------------------------- (13) Obligation: Termination digraph: Nodes: (1) f3176_0_bubble_NULL(java.lang.Object(List(java.lang.Object(List(o476:0, i498:0)), i497:0)), i497:0) -> f3176_0_bubble_NULL(java.lang.Object(List(o476:0, i498:0)), i498:0) :|: i498:0 >= i497:0 (2) f3176_0_bubble_NULL(java.lang.Object(List(java.lang.Object(List(x, x1)), x2)), x2) -> f3176_0_bubble_NULL(java.lang.Object(List(x, x2)), x2) :|: x1 < x2 Arcs: (1) -> (1), (2) (2) -> (1), (2) This digraph is fully evaluated! ---------------------------------------- (14) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (15) Obligation: Rules: f3176_0_bubble_NULL(java.lang.Object(List(java.lang.Object(List(x:0, x1:0)), x2:0)), x2:0) -> f3176_0_bubble_NULL(java.lang.Object(List(x:0, x2:0)), x2:0) :|: x2:0 > x1:0 f3176_0_bubble_NULL(java.lang.Object(List(java.lang.Object(List(o476:0:0, i498:0:0)), i497:0:0)), i497:0:0) -> f3176_0_bubble_NULL(java.lang.Object(List(o476:0:0, i498:0:0)), i498:0:0) :|: i498:0:0 >= i497:0:0 ---------------------------------------- (16) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f3176_0_bubble_NULL(VARIABLE, INTEGER) java.lang.Object(VARIABLE) List(VARIABLE, INTEGER) Removed predefined arithmetic. ---------------------------------------- (17) Obligation: Rules: f3176_0_bubble_NULL(java.lang.Object(List(java.lang.Object(List(x:0))))) -> f3176_0_bubble_NULL(java.lang.Object(List(x:0))) ---------------------------------------- (18) IRSwTToQDPProof (SOUND) Removed the integers and created a QDP-Problem. ---------------------------------------- (19) Obligation: Q DP problem: The TRS P consists of the following rules: f3176_0_bubble_NULL(java.lang.Object(List(java.lang.Object(List(x:0))))) -> f3176_0_bubble_NULL(java.lang.Object(List(x:0))) R is empty. Q is empty. We have to consider all (P,Q,R)-chains. ---------------------------------------- (20) 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: *f3176_0_bubble_NULL(java.lang.Object(List(java.lang.Object(List(x:0))))) -> f3176_0_bubble_NULL(java.lang.Object(List(x:0))) The graph contains the following edges 1 > 1 ---------------------------------------- (21) YES ---------------------------------------- (22) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: Test7.length(LList;)I SCC calls the following helper methods: Performed SCC analyses: *Used field analysis yielded the following read fields: *List: [tail] *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (23) SCCToQDPProof (SOUND) Transformed TerminationGraph SCC to QDP. Log: Generated 13 rules for P and 0 rules for R.P rules: f1878_0_length_NULL(EOS(STATIC_1878), java.lang.Object(o247sub), java.lang.Object(o247sub)) -> f1883_0_length_NULL(EOS(STATIC_1883), java.lang.Object(o247sub), java.lang.Object(o247sub)) :|: TRUE f1883_0_length_NULL(EOS(STATIC_1883), java.lang.Object(o247sub), java.lang.Object(o247sub)) -> f1887_0_length_Load(EOS(STATIC_1887), java.lang.Object(o247sub)) :|: TRUE f1887_0_length_Load(EOS(STATIC_1887), java.lang.Object(o247sub)) -> f1891_0_length_InvokeMethod(EOS(STATIC_1891), java.lang.Object(o247sub)) :|: TRUE f1891_0_length_InvokeMethod(EOS(STATIC_1891), java.lang.Object(o247sub)) -> f1922_0_getTail_Load(EOS(STATIC_1922), java.lang.Object(o247sub)) :|: TRUE f1922_0_getTail_Load(EOS(STATIC_1922), java.lang.Object(o247sub)) -> f1937_0_getTail_FieldAccess(EOS(STATIC_1937), java.lang.Object(o247sub)) :|: TRUE f1937_0_getTail_FieldAccess(EOS(STATIC_1937), java.lang.Object(List(EOC, o261))) -> f1942_0_getTail_FieldAccess(EOS(STATIC_1942), java.lang.Object(List(EOC, o261))) :|: TRUE f1942_0_getTail_FieldAccess(EOS(STATIC_1942), java.lang.Object(List(EOC, o261))) -> f1951_0_getTail_Return(EOS(STATIC_1951), o261) :|: TRUE f1951_0_getTail_Return(EOS(STATIC_1951), o261) -> f1953_0_length_Store(EOS(STATIC_1953), o261) :|: TRUE f1953_0_length_Store(EOS(STATIC_1953), o261) -> f1957_0_length_Inc(EOS(STATIC_1957), o261) :|: TRUE f1957_0_length_Inc(EOS(STATIC_1957), o261) -> f1962_0_length_JMP(EOS(STATIC_1962), o261) :|: TRUE f1962_0_length_JMP(EOS(STATIC_1962), o261) -> f1986_0_length_Load(EOS(STATIC_1986), o261) :|: TRUE f1986_0_length_Load(EOS(STATIC_1986), o261) -> f1876_0_length_Load(EOS(STATIC_1876), o261) :|: TRUE f1876_0_length_Load(EOS(STATIC_1876), o241) -> f1878_0_length_NULL(EOS(STATIC_1878), o241, o241) :|: TRUE R rules: Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.P rules: f1878_0_length_NULL(EOS(STATIC_1878), java.lang.Object(List(EOC, o261:0)), java.lang.Object(List(EOC, o261:0))) -> f1878_0_length_NULL(EOS(STATIC_1878), o261:0, o261:0) :|: TRUE R rules: Filtered ground terms: f1878_0_length_NULL(x1, x2, x3) -> f1878_0_length_NULL(x2, x3) EOS(x1) -> EOS List(x1, x2) -> List(x2) Filtered duplicate args: f1878_0_length_NULL(x1, x2) -> f1878_0_length_NULL(x2) Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.P rules: F1878_0_LENGTH_NULL(java.lang.Object(List(o261:0:0))) -> F1878_0_LENGTH_NULL(o261:0:0) :|: TRUE R rules: ---------------------------------------- (24) Obligation: Q DP problem: The TRS P consists of the following rules: F1878_0_LENGTH_NULL(java.lang.Object(List(o261:0:0))) -> F1878_0_LENGTH_NULL(o261:0:0) R is empty. Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (25) 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: *F1878_0_LENGTH_NULL(java.lang.Object(List(o261:0:0))) -> F1878_0_LENGTH_NULL(o261:0:0) The graph contains the following edges 1 > 1 ---------------------------------------- (26) YES ---------------------------------------- (27) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: List.mk(I)LList; SCC calls the following helper methods: Performed SCC analyses: *Used field analysis yielded the following read fields: *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (28) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 21 IRulesP rules: f1196_0_mk_Inc(EOS(STATIC_1196), i220, java.lang.Object(List(EOC)), i220) -> f1206_0_mk_LE(EOS(STATIC_1206), i220 + -1, java.lang.Object(List(EOC)), i220) :|: TRUE f1206_0_mk_LE(EOS(STATIC_1206), i248, java.lang.Object(List(EOC)), i260) -> f1211_0_mk_LE(EOS(STATIC_1211), i248, java.lang.Object(List(EOC)), i260) :|: TRUE f1211_0_mk_LE(EOS(STATIC_1211), i248, java.lang.Object(List(EOC)), i260) -> f1222_0_mk_New(EOS(STATIC_1222), i248, java.lang.Object(List(EOC))) :|: i260 > 0 f1222_0_mk_New(EOS(STATIC_1222), i248, java.lang.Object(List(EOC))) -> f1246_0_mk_Duplicate(EOS(STATIC_1246), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC))) :|: TRUE f1246_0_mk_Duplicate(EOS(STATIC_1246), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC))) -> f1252_0_mk_Load(EOS(STATIC_1252), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), java.lang.Object(List(EOC))) :|: TRUE f1252_0_mk_Load(EOS(STATIC_1252), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), java.lang.Object(List(EOC))) -> f1267_0_mk_Load(EOS(STATIC_1267), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), i248) :|: TRUE f1267_0_mk_Load(EOS(STATIC_1267), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), i248) -> f1278_0_mk_InvokeMethod(EOS(STATIC_1278), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), i248, java.lang.Object(List(EOC))) :|: TRUE f1278_0_mk_InvokeMethod(EOS(STATIC_1278), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), i248, java.lang.Object(List(EOC))) -> f1281_0__init__Load(EOS(STATIC_1281), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), i248, java.lang.Object(List(EOC))) :|: TRUE f1281_0__init__Load(EOS(STATIC_1281), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), i248, java.lang.Object(List(EOC))) -> f1289_0__init__InvokeMethod(EOS(STATIC_1289), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC))) :|: TRUE f1289_0__init__InvokeMethod(EOS(STATIC_1289), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC))) -> f1294_0__init__Load(EOS(STATIC_1294), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), i248, java.lang.Object(List(EOC))) :|: TRUE f1294_0__init__Load(EOS(STATIC_1294), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), i248, java.lang.Object(List(EOC))) -> f1299_0__init__Load(EOS(STATIC_1299), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC))) :|: TRUE f1299_0__init__Load(EOS(STATIC_1299), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC))) -> f1306_0__init__FieldAccess(EOS(STATIC_1306), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), i248) :|: TRUE f1306_0__init__FieldAccess(EOS(STATIC_1306), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), i248) -> f1308_0__init__Load(EOS(STATIC_1308), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), java.lang.Object(List(EOC))) :|: TRUE f1308_0__init__Load(EOS(STATIC_1308), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), java.lang.Object(List(EOC))) -> f1311_0__init__Load(EOS(STATIC_1311), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), java.lang.Object(List(EOC))) :|: TRUE f1311_0__init__Load(EOS(STATIC_1311), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), java.lang.Object(List(EOC))) -> f1314_0__init__FieldAccess(EOS(STATIC_1314), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), java.lang.Object(List(EOC))) :|: TRUE f1314_0__init__FieldAccess(EOS(STATIC_1314), i248, java.lang.Object(List(EOC)), java.lang.Object(List(EOC)), java.lang.Object(List(EOC))) -> f1317_0__init__Return(EOS(STATIC_1317), i248, java.lang.Object(List(EOC))) :|: TRUE f1317_0__init__Return(EOS(STATIC_1317), i248, java.lang.Object(List(EOC))) -> f1320_0_mk_Store(EOS(STATIC_1320), i248, java.lang.Object(List(EOC))) :|: TRUE f1320_0_mk_Store(EOS(STATIC_1320), i248, java.lang.Object(List(EOC))) -> f1323_0_mk_JMP(EOS(STATIC_1323), i248, java.lang.Object(List(EOC))) :|: TRUE f1323_0_mk_JMP(EOS(STATIC_1323), i248, java.lang.Object(List(EOC))) -> f1346_0_mk_Load(EOS(STATIC_1346), i248, java.lang.Object(List(EOC))) :|: TRUE f1346_0_mk_Load(EOS(STATIC_1346), i248, java.lang.Object(List(EOC))) -> f1189_0_mk_Load(EOS(STATIC_1189), i248, java.lang.Object(List(EOC))) :|: TRUE f1189_0_mk_Load(EOS(STATIC_1189), i220, java.lang.Object(List(EOC))) -> f1196_0_mk_Inc(EOS(STATIC_1196), i220, java.lang.Object(List(EOC)), i220) :|: TRUE Combined rules. Obtained 1 IRulesP rules: f1196_0_mk_Inc(EOS(STATIC_1196), i220:0, java.lang.Object(List(EOC)), i220:0) -> f1196_0_mk_Inc(EOS(STATIC_1196), i220:0 - 1, java.lang.Object(List(EOC)), i220:0 - 1) :|: i220:0 > 0 Filtered constant ground arguments: f1196_0_mk_Inc(x1, x2, x3, x4) -> f1196_0_mk_Inc(x2, x4) EOS(x1) -> EOS java.lang.Object(x1) -> java.lang.Object List(x1) -> List Filtered duplicate arguments: f1196_0_mk_Inc(x1, x2) -> f1196_0_mk_Inc(x2) Finished conversion. Obtained 1 rules.P rules: f1196_0_mk_Inc(i220:0) -> f1196_0_mk_Inc(i220:0 - 1) :|: i220:0 > 0 ---------------------------------------- (29) Obligation: Rules: f1196_0_mk_Inc(i220:0) -> f1196_0_mk_Inc(i220:0 - 1) :|: i220:0 > 0 ---------------------------------------- (30) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (31) Obligation: Rules: f1196_0_mk_Inc(i220:0) -> f1196_0_mk_Inc(arith) :|: i220:0 > 0 && arith = i220:0 - 1 ---------------------------------------- (32) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f1196_0_mk_Inc(i220:0) -> f1196_0_mk_Inc(arith) :|: i220:0 > 0 && arith = i220:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (33) Obligation: Termination digraph: Nodes: (1) f1196_0_mk_Inc(i220:0) -> f1196_0_mk_Inc(arith) :|: i220:0 > 0 && arith = i220:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (34) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (35) Obligation: Rules: f1196_0_mk_Inc(i220:0:0) -> f1196_0_mk_Inc(i220:0:0 - 1) :|: i220:0:0 > 0 ---------------------------------------- (36) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f1196_0_mk_Inc(INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (37) Obligation: Rules: f1196_0_mk_Inc(i220:0:0) -> f1196_0_mk_Inc(c) :|: c = i220:0:0 - 1 && i220:0:0 > 0 ---------------------------------------- (38) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f1196_0_mk_Inc ] = f1196_0_mk_Inc_1 The following rules are decreasing: f1196_0_mk_Inc(i220:0:0) -> f1196_0_mk_Inc(c) :|: c = i220:0:0 - 1 && i220:0:0 > 0 The following rules are bounded: f1196_0_mk_Inc(i220:0:0) -> f1196_0_mk_Inc(c) :|: c = i220:0:0 - 1 && i220:0:0 > 0 ---------------------------------------- (39) YES ---------------------------------------- (40) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: Test7.main([Ljava/lang/String;)V SCC calls the following helper methods: Test7.length(LList;)I, Test7.bubble(LList;)V Performed SCC analyses: *Used field analysis yielded the following read fields: *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (41) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 40 IRulesP rules: f2155_0_main_Load(EOS(STATIC_2155), java.lang.Object(ARRAY(matching1)), i367, i367) -> f2157_0_main_ArrayLength(EOS(STATIC_2157), java.lang.Object(ARRAY(3)), i367, i367, java.lang.Object(ARRAY(3))) :|: TRUE && matching1 = 3 f2157_0_main_ArrayLength(EOS(STATIC_2157), java.lang.Object(ARRAY(matching1)), i367, i367, java.lang.Object(ARRAY(matching2))) -> f2159_0_main_GE(EOS(STATIC_2159), java.lang.Object(ARRAY(3)), i367, i367, 3) :|: 3 >= 0 && matching1 = 3 && matching2 = 3 f2159_0_main_GE(EOS(STATIC_2159), java.lang.Object(ARRAY(matching1)), i369, i369, matching2) -> f2168_0_main_GE(EOS(STATIC_2168), java.lang.Object(ARRAY(3)), i369, i369, 3) :|: TRUE && matching1 = 3 && matching2 = 3 f2168_0_main_GE(EOS(STATIC_2168), java.lang.Object(ARRAY(matching1)), i369, i369, matching2) -> f2176_0_main_Load(EOS(STATIC_2176), java.lang.Object(ARRAY(3)), i369) :|: i369 < 3 && matching1 = 3 && matching2 = 3 f2176_0_main_Load(EOS(STATIC_2176), java.lang.Object(ARRAY(matching1)), i369) -> f2187_0_main_ConstantStackPush(EOS(STATIC_2187), java.lang.Object(ARRAY(3)), i369, java.lang.Object(ARRAY(3))) :|: TRUE && matching1 = 3 f2187_0_main_ConstantStackPush(EOS(STATIC_2187), java.lang.Object(ARRAY(matching1)), i369, java.lang.Object(ARRAY(matching2))) -> f2191_0_main_ArrayAccess(EOS(STATIC_2191), java.lang.Object(ARRAY(3)), i369, java.lang.Object(ARRAY(3)), 0) :|: TRUE && matching1 = 3 && matching2 = 3 f2191_0_main_ArrayAccess(EOS(STATIC_2191), java.lang.Object(ARRAY(matching1)), i369, java.lang.Object(ARRAY(matching2)), matching3) -> f2192_0_main_InvokeMethod(EOS(STATIC_2192), java.lang.Object(ARRAY(3)), i369, o272) :|: 0 < 3 && matching1 = 3 && matching2 = 3 && matching3 = 0 f2192_0_main_InvokeMethod(EOS(STATIC_2192), java.lang.Object(ARRAY(matching1)), i369, o272) -> f2193_0_length_ConstantStackPush(EOS(STATIC_2193), o272, o272) :|: TRUE && matching1 = 3 f2192_0_main_InvokeMethod(EOS(STATIC_2192), java.lang.Object(ARRAY(matching1)), i369, o272) -> f2193_1_length_ConstantStackPush(EOS(STATIC_2193), java.lang.Object(ARRAY(3)), i369, o272) :|: TRUE && matching1 = 3 f2193_0_length_ConstantStackPush(EOS(STATIC_2193), o272, o272) -> f3511_0_length_ConstantStackPush(EOS(STATIC_3511), o272, o272) :|: TRUE f2207_0_length_Return(EOS(STATIC_2207), java.lang.Object(ARRAY(matching1)), i369, i374) -> f2211_0_main_Store(EOS(STATIC_2211), java.lang.Object(ARRAY(3)), i369, i374) :|: TRUE && matching1 = 3 f2211_0_main_Store(EOS(STATIC_2211), java.lang.Object(ARRAY(matching1)), i369, i374) -> f2212_0_main_ConstantStackPush(EOS(STATIC_2212), java.lang.Object(ARRAY(3)), i369, i374) :|: TRUE && matching1 = 3 f2212_0_main_ConstantStackPush(EOS(STATIC_2212), java.lang.Object(ARRAY(matching1)), i369, i374) -> f2213_0_main_Store(EOS(STATIC_2213), java.lang.Object(ARRAY(3)), i369, i374, 0) :|: TRUE && matching1 = 3 f2213_0_main_Store(EOS(STATIC_2213), java.lang.Object(ARRAY(matching1)), i369, i374, matching2) -> f2214_0_main_Load(EOS(STATIC_2214), java.lang.Object(ARRAY(3)), i369, i374, 0) :|: TRUE && matching1 = 3 && matching2 = 0 f2214_0_main_Load(EOS(STATIC_2214), java.lang.Object(ARRAY(matching1)), i369, i374, matching2) -> f2376_0_main_Load(EOS(STATIC_2376), java.lang.Object(ARRAY(3)), i369, i374, 0) :|: TRUE && matching1 = 3 && matching2 = 0 f2376_0_main_Load(EOS(STATIC_2376), java.lang.Object(ARRAY(matching1)), i369, i410, i411) -> f2731_0_main_Load(EOS(STATIC_2731), java.lang.Object(ARRAY(3)), i369, i410, i411) :|: TRUE && matching1 = 3 f2731_0_main_Load(EOS(STATIC_2731), java.lang.Object(ARRAY(matching1)), i369, i454, i455) -> f2848_0_main_Load(EOS(STATIC_2848), java.lang.Object(ARRAY(3)), i369, i454, i455) :|: TRUE && matching1 = 3 f2848_0_main_Load(EOS(STATIC_2848), java.lang.Object(ARRAY(matching1)), i369, i465, i466) -> f2850_0_main_Load(EOS(STATIC_2850), java.lang.Object(ARRAY(3)), i369, i465, i466, i466) :|: TRUE && matching1 = 3 f2850_0_main_Load(EOS(STATIC_2850), java.lang.Object(ARRAY(matching1)), i369, i465, i466, i466) -> f2853_0_main_GE(EOS(STATIC_2853), java.lang.Object(ARRAY(3)), i369, i465, i466, i466, i465) :|: TRUE && matching1 = 3 f2853_0_main_GE(EOS(STATIC_2853), java.lang.Object(ARRAY(matching1)), i369, i465, i466, i466, i465) -> f2889_0_main_GE(EOS(STATIC_2889), java.lang.Object(ARRAY(3)), i369, i465, i466, i466, i465) :|: i466 >= i465 && matching1 = 3 f2853_0_main_GE(EOS(STATIC_2853), java.lang.Object(ARRAY(matching1)), i369, i465, i466, i466, i465) -> f2890_0_main_GE(EOS(STATIC_2890), java.lang.Object(ARRAY(3)), i369, i465, i466, i466, i465) :|: i466 < i465 && matching1 = 3 f2889_0_main_GE(EOS(STATIC_2889), java.lang.Object(ARRAY(matching1)), i369, i465, i466, i466, i465) -> f2899_0_main_Inc(EOS(STATIC_2899), java.lang.Object(ARRAY(3)), i369) :|: i466 >= i465 && matching1 = 3 f2899_0_main_Inc(EOS(STATIC_2899), java.lang.Object(ARRAY(matching1)), i369) -> f2909_0_main_JMP(EOS(STATIC_2909), java.lang.Object(ARRAY(3)), i369 + 1) :|: TRUE && matching1 = 3 f2909_0_main_JMP(EOS(STATIC_2909), java.lang.Object(ARRAY(matching1)), i470) -> f2929_0_main_Load(EOS(STATIC_2929), java.lang.Object(ARRAY(3)), i470) :|: TRUE && matching1 = 3 f2929_0_main_Load(EOS(STATIC_2929), java.lang.Object(ARRAY(matching1)), i470) -> f2150_0_main_Load(EOS(STATIC_2150), java.lang.Object(ARRAY(3)), i470) :|: TRUE && matching1 = 3 f2150_0_main_Load(EOS(STATIC_2150), java.lang.Object(ARRAY(matching1)), i367) -> f2155_0_main_Load(EOS(STATIC_2155), java.lang.Object(ARRAY(3)), i367, i367) :|: TRUE && matching1 = 3 f2890_0_main_GE(EOS(STATIC_2890), java.lang.Object(ARRAY(matching1)), i369, i465, i466, i466, i465) -> f2906_0_main_Load(EOS(STATIC_2906), java.lang.Object(ARRAY(3)), i369, i465, i466) :|: i466 < i465 && matching1 = 3 f2906_0_main_Load(EOS(STATIC_2906), java.lang.Object(ARRAY(matching1)), i369, i465, i466) -> f2911_0_main_ConstantStackPush(EOS(STATIC_2911), java.lang.Object(ARRAY(3)), i369, i465, i466, java.lang.Object(ARRAY(3))) :|: TRUE && matching1 = 3 f2911_0_main_ConstantStackPush(EOS(STATIC_2911), java.lang.Object(ARRAY(matching1)), i369, i465, i466, java.lang.Object(ARRAY(matching2))) -> f2931_0_main_ArrayAccess(EOS(STATIC_2931), java.lang.Object(ARRAY(3)), i369, i465, i466, java.lang.Object(ARRAY(3)), 0) :|: TRUE && matching1 = 3 && matching2 = 3 f2931_0_main_ArrayAccess(EOS(STATIC_2931), java.lang.Object(ARRAY(matching1)), i369, i465, i466, java.lang.Object(ARRAY(matching2)), matching3) -> f2970_0_main_InvokeMethod(EOS(STATIC_2970), java.lang.Object(ARRAY(3)), i369, i465, i466, o383) :|: 0 < 3 && matching1 = 3 && matching2 = 3 && matching3 = 0 f2970_0_main_InvokeMethod(EOS(STATIC_2970), java.lang.Object(ARRAY(matching1)), i369, i465, i466, o383) -> f2972_0_bubble_Load(EOS(STATIC_2972), o383, o383) :|: i465 >= 1 && i466 < i465 && matching1 = 3 f2970_0_main_InvokeMethod(EOS(STATIC_2970), java.lang.Object(ARRAY(matching1)), i369, i465, i466, o383) -> f2972_1_bubble_Load(EOS(STATIC_2972), java.lang.Object(ARRAY(3)), i369, i465, i466, o383) :|: i465 >= 1 && i466 < i465 && matching1 = 3 f2972_0_bubble_Load(EOS(STATIC_2972), o383, o383) -> f3563_0_bubble_Load(EOS(STATIC_3563), o383, o383) :|: TRUE f3187_0_bubble_Return(EOS(STATIC_3187), java.lang.Object(ARRAY(matching1)), i369, i465, i466) -> f3018_0_bubble_Return(EOS(STATIC_3018), java.lang.Object(ARRAY(3)), i369, i465, i466) :|: TRUE && matching1 = 3 f3018_0_bubble_Return(EOS(STATIC_3018), java.lang.Object(ARRAY(matching1)), i369, i465, i466) -> f3031_0_main_Inc(EOS(STATIC_3031), java.lang.Object(ARRAY(3)), i369, i465, i466) :|: TRUE && matching1 = 3 f3031_0_main_Inc(EOS(STATIC_3031), java.lang.Object(ARRAY(matching1)), i369, i465, i466) -> f3049_0_main_JMP(EOS(STATIC_3049), java.lang.Object(ARRAY(3)), i369, i465, i466 + 1) :|: TRUE && matching1 = 3 f3049_0_main_JMP(EOS(STATIC_3049), java.lang.Object(ARRAY(matching1)), i369, i465, i475) -> f3068_0_main_Load(EOS(STATIC_3068), java.lang.Object(ARRAY(3)), i369, i465, i475) :|: TRUE && matching1 = 3 f3068_0_main_Load(EOS(STATIC_3068), java.lang.Object(ARRAY(matching1)), i369, i465, i475) -> f2848_0_main_Load(EOS(STATIC_2848), java.lang.Object(ARRAY(3)), i369, i465, i475) :|: TRUE && matching1 = 3 f2193_1_length_ConstantStackPush(EOS(STATIC_2193), java.lang.Object(ARRAY(matching1)), i369, o286) -> f2207_0_length_Return(EOS(STATIC_2207), java.lang.Object(ARRAY(3)), i369, i374) :|: TRUE && matching1 = 3 f2972_1_bubble_Load(EOS(STATIC_2972), java.lang.Object(ARRAY(matching1)), i369, i465, i466, o383) -> f3187_0_bubble_Return(EOS(STATIC_3187), java.lang.Object(ARRAY(3)), i369, i465, i466) :|: TRUE && matching1 = 3 Combined rules. Obtained 4 IRulesP rules: f2853_0_main_GE(EOS(STATIC_2853), java.lang.Object(ARRAY(3)), i369:0, i465:0, i466:0, i466:0, i465:0) -> f2853_0_main_GE(EOS(STATIC_2853), java.lang.Object(ARRAY(3)), i369:0, i465:0, i466:0 + 1, i466:0 + 1, i465:0) :|: i466:0 < i465:0 && i465:0 > 0 f2853_0_main_GE(EOS(STATIC_2853), java.lang.Object(ARRAY(3)), i369:0, i465:0, i466:0, i466:0, i465:0) -> f2853_0_main_GE(EOS(STATIC_2853), java.lang.Object(ARRAY(3)), i369:0 + 1, i374:0, 0, 0, i374:0) :|: i369:0 < 2 && i466:0 >= i465:0 Removed following non-SCC rules: f2853_0_main_GE(EOS(STATIC_2853), java.lang.Object(ARRAY(3)), i369:0, i465:0, i466:0, i466:0, i465:0) -> f3511_0_length_ConstantStackPush(EOS(STATIC_3511), o272:0, o272:0) :|: i369:0 < 2 && i466:0 >= i465:0 f2853_0_main_GE(EOS(STATIC_2853), java.lang.Object(ARRAY(3)), i369:0, i465:0, i466:0, i466:0, i465:0) -> f3563_0_bubble_Load(EOS(STATIC_3563), o383:0, o383:0) :|: i466:0 < i465:0 && i465:0 > 0 Filtered constant ground arguments: f2853_0_main_GE(x1, x2, x3, x4, x5, x6, x7) -> f2853_0_main_GE(x3, x4, x5, x6, x7) EOS(x1) -> EOS java.lang.Object(x1) -> java.lang.Object ARRAY(x1) -> ARRAY Filtered duplicate arguments: f2853_0_main_GE(x1, x2, x3, x4, x5) -> f2853_0_main_GE(x1, x4, x5) Finished conversion. Obtained 2 rules.P rules: f2853_0_main_GE(i369:0, i466:0, i465:0) -> f2853_0_main_GE(i369:0, i466:0 + 1, i465:0) :|: i466:0 < i465:0 && i465:0 > 0 f2853_0_main_GE(i369:0, i466:0, i465:0) -> f2853_0_main_GE(i369:0 + 1, 0, i374:0) :|: i369:0 < 2 && i466:0 >= i465:0 ---------------------------------------- (42) Obligation: Rules: f2853_0_main_GE(i369:0, i466:0, i465:0) -> f2853_0_main_GE(i369:0, i466:0 + 1, i465:0) :|: i466:0 < i465:0 && i465:0 > 0 f2853_0_main_GE(x, x1, x2) -> f2853_0_main_GE(x + 1, 0, x3) :|: x < 2 && x1 >= x2 ---------------------------------------- (43) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (44) Obligation: Rules: f2853_0_main_GE(i369:0, i466:0, i465:0) -> f2853_0_main_GE(i369:0, arith, i465:0) :|: i466:0 < i465:0 && i465:0 > 0 && arith = i466:0 + 1 f2853_0_main_GE(x4, x5, x6) -> f2853_0_main_GE(x7, 0, x8) :|: x4 < 2 && x5 >= x6 && x7 = x4 + 1 ---------------------------------------- (45) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f2853_0_main_GE(i369:0, i466:0, i465:0) -> f2853_0_main_GE(i369:0, arith, i465:0) :|: i466:0 < i465:0 && i465:0 > 0 && arith = i466:0 + 1 (2) f2853_0_main_GE(x4, x5, x6) -> f2853_0_main_GE(x7, 0, x8) :|: x4 < 2 && x5 >= x6 && x7 = x4 + 1 Arcs: (1) -> (1), (2) (2) -> (1), (2) This digraph is fully evaluated! ---------------------------------------- (46) Obligation: Termination digraph: Nodes: (1) f2853_0_main_GE(i369:0, i466:0, i465:0) -> f2853_0_main_GE(i369:0, arith, i465:0) :|: i466:0 < i465:0 && i465:0 > 0 && arith = i466:0 + 1 (2) f2853_0_main_GE(x4, x5, x6) -> f2853_0_main_GE(x7, 0, x8) :|: x4 < 2 && x5 >= x6 && x7 = x4 + 1 Arcs: (1) -> (1), (2) (2) -> (1), (2) This digraph is fully evaluated! ---------------------------------------- (47) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (48) Obligation: Rules: f2853_0_main_GE(i369:0:0, i466:0:0, i465:0:0) -> f2853_0_main_GE(i369:0:0, i466:0:0 + 1, i465:0:0) :|: i466:0:0 < i465:0:0 && i465:0:0 > 0 f2853_0_main_GE(x4:0, x5:0, x6:0) -> f2853_0_main_GE(x4:0 + 1, 0, x8:0) :|: x4:0 < 2 && x6:0 <= x5:0 ---------------------------------------- (49) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f2853_0_main_GE(VARIABLE, VARIABLE, VARIABLE) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (50) Obligation: Rules: f2853_0_main_GE(i369:0:0, i466:0:0, i465:0:0) -> f2853_0_main_GE(i369:0:0, c, i465:0:0) :|: c = i466:0:0 + 1 && (i466:0:0 < i465:0:0 && i465:0:0 > 0) f2853_0_main_GE(x4:0, x5:0, x6:0) -> f2853_0_main_GE(c1, c2, x8:0) :|: c2 = 0 && c1 = x4:0 + 1 && (x4:0 < 2 && x6:0 <= x5:0) ---------------------------------------- (51) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f2853_0_main_GE ] = -1*f2853_0_main_GE_1 + 1 The following rules are decreasing: f2853_0_main_GE(x4:0, x5:0, x6:0) -> f2853_0_main_GE(c1, c2, x8:0) :|: c2 = 0 && c1 = x4:0 + 1 && (x4:0 < 2 && x6:0 <= x5:0) The following rules are bounded: f2853_0_main_GE(x4:0, x5:0, x6:0) -> f2853_0_main_GE(c1, c2, x8:0) :|: c2 = 0 && c1 = x4:0 + 1 && (x4:0 < 2 && x6:0 <= x5:0) ---------------------------------------- (52) Obligation: Rules: f2853_0_main_GE(i369:0:0, i466:0:0, i465:0:0) -> f2853_0_main_GE(i369:0:0, c, i465:0:0) :|: c = i466:0:0 + 1 && (i466:0:0 < i465:0:0 && i465:0:0 > 0) ---------------------------------------- (53) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f2853_0_main_GE ] = -1*f2853_0_main_GE_2 + f2853_0_main_GE_3 The following rules are decreasing: f2853_0_main_GE(i369:0:0, i466:0:0, i465:0:0) -> f2853_0_main_GE(i369:0:0, c, i465:0:0) :|: c = i466:0:0 + 1 && (i466:0:0 < i465:0:0 && i465:0:0 > 0) The following rules are bounded: f2853_0_main_GE(i369:0:0, i466:0:0, i465:0:0) -> f2853_0_main_GE(i369:0:0, c, i465:0:0) :|: c = i466:0:0 + 1 && (i466:0:0 < i465:0:0 && i465:0:0 > 0) ---------------------------------------- (54) YES