/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, 96 ms] (2) JBC problem (3) JBCToGraph [EQUIVALENT, 528 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 0 ms] (6) AND (7) JBCTerminationSCC (8) SCCToIRSProof [SOUND, 109 ms] (9) IRSwT (10) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (11) IRSwT (12) IRSwTTerminationDigraphProof [EQUIVALENT, 12 ms] (13) IRSwT (14) IntTRSCompressionProof [EQUIVALENT, 0 ms] (15) IRSwT (16) TempFilterProof [SOUND, 7 ms] (17) IntTRS (18) PolynomialOrderProcessor [EQUIVALENT, 3 ms] (19) YES (20) JBCTerminationSCC (21) SCCToIRSProof [SOUND, 110 ms] (22) IRSwT (23) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (24) IRSwT (25) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] (26) IRSwT (27) IntTRSCompressionProof [EQUIVALENT, 0 ms] (28) IRSwT (29) TempFilterProof [SOUND, 45 ms] (30) IntTRS (31) RankingReductionPairProof [EQUIVALENT, 24 ms] (32) YES (33) JBCTerminationSCC (34) SCCToIRSProof [SOUND, 111 ms] (35) IRSwT (36) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (37) IRSwT (38) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] (39) IRSwT (40) IntTRSCompressionProof [EQUIVALENT, 0 ms] (41) IRSwT (42) TempFilterProof [SOUND, 10 ms] (43) IntTRS (44) PolynomialOrderProcessor [EQUIVALENT, 3 ms] (45) YES (46) JBCTerminationSCC (47) SCCToIRSProof [SOUND, 69 ms] (48) IRSwT (49) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (50) IRSwT (51) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] (52) IRSwT (53) IntTRSCompressionProof [EQUIVALENT, 0 ms] (54) IRSwT (55) TempFilterProof [SOUND, 9 ms] (56) IntTRS (57) PolynomialOrderProcessor [EQUIVALENT, 3 ms] (58) YES (59) JBCTerminationSCC (60) SCCToIRSProof [SOUND, 65 ms] (61) IRSwT (62) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (63) IRSwT (64) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] (65) IRSwT (66) IntTRSCompressionProof [EQUIVALENT, 0 ms] (67) IRSwT (68) TempFilterProof [SOUND, 7 ms] (69) IntTRS (70) PolynomialOrderProcessor [EQUIVALENT, 3 ms] (71) YES (72) JBCTerminationSCC (73) SCCToIRSProof [SOUND, 78 ms] (74) IRSwT (75) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (76) IRSwT (77) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] (78) IRSwT (79) IntTRSCompressionProof [EQUIVALENT, 0 ms] (80) IRSwT (81) TempFilterProof [SOUND, 12 ms] (82) IntTRS (83) PolynomialOrderProcessor [EQUIVALENT, 4 ms] (84) YES ---------------------------------------- (0) Obligation: need to prove termination of the following program: public class Recursions { public static void main(String args[]) { for (int i = 0; i < args.length; i++) rec0(0, args.length); } public static void rec0(int i, int stop) { if (i <= stop) { rec1(0, 2*i, i); rec0(i+1, stop); } } public static void rec1(int j, int stop, int i) { if (j <= stop) { rec2(i+j, 0, i, j); rec1(j+1, stop, i); } } public static void rec2(int k, int stop, int i, int j) { if (k >= stop) { rec3(0, 2*i + 3*j + 4*k, i, j ,k); rec2(k-1, stop, i, j); } } public static void rec3(int l, int stop, int i, int j, int k) { if (l <= stop) { rec4(1000*i+100*j+10*k+l, 0); rec3(l+1, stop, i, j, k); } } public static void rec4(int m, int stop) { if (m >= stop) rec4(m-1, stop); } } ---------------------------------------- (1) BareJBCToJBCProof (EQUIVALENT) initialized classpath ---------------------------------------- (2) Obligation: need to prove termination of the following program: public class Recursions { public static void main(String args[]) { for (int i = 0; i < args.length; i++) rec0(0, args.length); } public static void rec0(int i, int stop) { if (i <= stop) { rec1(0, 2*i, i); rec0(i+1, stop); } } public static void rec1(int j, int stop, int i) { if (j <= stop) { rec2(i+j, 0, i, j); rec1(j+1, stop, i); } } public static void rec2(int k, int stop, int i, int j) { if (k >= stop) { rec3(0, 2*i + 3*j + 4*k, i, j ,k); rec2(k-1, stop, i, j); } } public static void rec3(int l, int stop, int i, int j, int k) { if (l <= stop) { rec4(1000*i+100*j+10*k+l, 0); rec3(l+1, stop, i, j, k); } } public static void rec4(int m, int stop) { if (m >= stop) rec4(m-1, stop); } } ---------------------------------------- (3) JBCToGraph (EQUIVALENT) Constructed TerminationGraph. ---------------------------------------- (4) Obligation: Termination Graph based on JBC Program: Recursions.main([Ljava/lang/String;)V: Graph of 24 nodes with 1 SCC. Recursions.rec0(II)V: Graph of 25 nodes with 0 SCCs. Recursions.rec1(III)V: Graph of 27 nodes with 0 SCCs. Recursions.rec2(IIII)V: Graph of 38 nodes with 0 SCCs. Recursions.rec3(IIIII)V: Graph of 37 nodes with 0 SCCs. Recursions.rec4(II)V: Graph of 16 nodes with 0 SCCs. ---------------------------------------- (5) TerminationGraphToSCCProof (SOUND) Splitted TerminationGraph to 6 SCCss. ---------------------------------------- (6) Complex Obligation (AND) ---------------------------------------- (7) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: Recursions.rec4(II)V SCC calls the following helper methods: Recursions.rec4(II)V Performed SCC analyses: *Used field analysis yielded the following read fields: *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (8) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 12 IRulesP rules: f3502_0_rec4_Load(EOS(STATIC_3502), i243, matching1, i244, matching2, i244) -> f3505_0_rec4_LT(EOS(STATIC_3505), i243, 0, i244, 0, i244, 0) :|: TRUE && matching1 = 0 && matching2 = 0 f3505_0_rec4_LT(EOS(STATIC_3505), i243, matching1, i247, matching2, i247, matching3) -> f3511_0_rec4_LT(EOS(STATIC_3511), i243, 0, i247, 0, i247, 0) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 f3511_0_rec4_LT(EOS(STATIC_3511), i243, matching1, i247, matching2, i247, matching3) -> f3521_0_rec4_Load(EOS(STATIC_3521), i243, 0, i247, 0) :|: i247 >= 0 && matching1 = 0 && matching2 = 0 && matching3 = 0 f3521_0_rec4_Load(EOS(STATIC_3521), i243, matching1, i247, matching2) -> f3526_0_rec4_ConstantStackPush(EOS(STATIC_3526), i243, 0, 0, i247) :|: TRUE && matching1 = 0 && matching2 = 0 f3526_0_rec4_ConstantStackPush(EOS(STATIC_3526), i243, matching1, matching2, i247) -> f3550_0_rec4_IntArithmetic(EOS(STATIC_3550), i243, 0, 0, i247, 1) :|: TRUE && matching1 = 0 && matching2 = 0 f3550_0_rec4_IntArithmetic(EOS(STATIC_3550), i243, matching1, matching2, i247, matching3) -> f3559_0_rec4_Load(EOS(STATIC_3559), i243, 0, 0, i247 - 1) :|: i247 >= 0 && matching1 = 0 && matching2 = 0 && matching3 = 1 f3559_0_rec4_Load(EOS(STATIC_3559), i243, matching1, matching2, i253) -> f3568_0_rec4_InvokeMethod(EOS(STATIC_3568), i243, 0, i253, 0) :|: TRUE && matching1 = 0 && matching2 = 0 f3568_0_rec4_InvokeMethod(EOS(STATIC_3568), i243, matching1, i253, matching2) -> f3571_0_rec4_Load(EOS(STATIC_3571), i253, 0, i253, 0) :|: TRUE && matching1 = 0 && matching2 = 0 f3568_0_rec4_InvokeMethod(EOS(STATIC_3568), i243, matching1, i253, matching2) -> f3571_1_rec4_Load(EOS(STATIC_3571), i243, 0, i253, 0) :|: TRUE && matching1 = 0 && matching2 = 0 f3571_0_rec4_Load(EOS(STATIC_3571), i253, matching1, i253, matching2) -> f3575_0_rec4_Load(EOS(STATIC_3575), i253, 0, i253, 0) :|: TRUE && matching1 = 0 && matching2 = 0 f3575_0_rec4_Load(EOS(STATIC_3575), i253, matching1, i253, matching2) -> f3490_0_rec4_Load(EOS(STATIC_3490), i253, 0, i253, 0) :|: TRUE && matching1 = 0 && matching2 = 0 f3490_0_rec4_Load(EOS(STATIC_3490), i243, matching1, i244, matching2) -> f3502_0_rec4_Load(EOS(STATIC_3502), i243, 0, i244, 0, i244) :|: TRUE && matching1 = 0 && matching2 = 0 Combined rules. Obtained 2 IRulesP rules: f3502_0_rec4_Load(EOS(STATIC_3502), i243:0, 0, i244:0, 0, i244:0) -> f3502_0_rec4_Load(EOS(STATIC_3502), i244:0 - 1, 0, i244:0 - 1, 0, i244:0 - 1) :|: i244:0 > -1 Removed following non-SCC rules: f3502_0_rec4_Load(EOS(STATIC_3502), i243:0, 0, i244:0, 0, i244:0) -> f3571_1_rec4_Load(EOS(STATIC_3571), i243:0, 0, i244:0 - 1, 0) :|: i244:0 > -1 Filtered constant ground arguments: f3502_0_rec4_Load(x1, x2, x3, x4, x5, x6) -> f3502_0_rec4_Load(x2, x4, x6) EOS(x1) -> EOS Filtered duplicate arguments: f3502_0_rec4_Load(x1, x2, x3) -> f3502_0_rec4_Load(x1, x3) Filtered unneeded arguments: f3502_0_rec4_Load(x1, x2) -> f3502_0_rec4_Load(x2) Finished conversion. Obtained 1 rules.P rules: f3502_0_rec4_Load(i244:0) -> f3502_0_rec4_Load(i244:0 - 1) :|: i244:0 > -1 ---------------------------------------- (9) Obligation: Rules: f3502_0_rec4_Load(i244:0) -> f3502_0_rec4_Load(i244:0 - 1) :|: i244:0 > -1 ---------------------------------------- (10) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (11) Obligation: Rules: f3502_0_rec4_Load(i244:0) -> f3502_0_rec4_Load(arith) :|: i244:0 > -1 && arith = i244:0 - 1 ---------------------------------------- (12) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f3502_0_rec4_Load(i244:0) -> f3502_0_rec4_Load(arith) :|: i244:0 > -1 && arith = i244:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (13) Obligation: Termination digraph: Nodes: (1) f3502_0_rec4_Load(i244:0) -> f3502_0_rec4_Load(arith) :|: i244:0 > -1 && arith = i244:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (14) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (15) Obligation: Rules: f3502_0_rec4_Load(i244:0:0) -> f3502_0_rec4_Load(i244:0:0 - 1) :|: i244:0:0 > -1 ---------------------------------------- (16) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f3502_0_rec4_Load(INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (17) Obligation: Rules: f3502_0_rec4_Load(i244:0:0) -> f3502_0_rec4_Load(c) :|: c = i244:0:0 - 1 && i244:0:0 > -1 ---------------------------------------- (18) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f3502_0_rec4_Load(x)] = x The following rules are decreasing: f3502_0_rec4_Load(i244:0:0) -> f3502_0_rec4_Load(c) :|: c = i244:0:0 - 1 && i244:0:0 > -1 The following rules are bounded: f3502_0_rec4_Load(i244:0:0) -> f3502_0_rec4_Load(c) :|: c = i244:0:0 - 1 && i244:0:0 > -1 ---------------------------------------- (19) YES ---------------------------------------- (20) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: Recursions.rec3(IIIII)V SCC calls the following helper methods: Recursions.rec4(II)V, Recursions.rec3(IIIII)V Performed SCC analyses: *Used field analysis yielded the following read fields: *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (21) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 34 IRulesP rules: f3642_0_rec3_Load(EOS(STATIC_3642), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i284) -> f3643_0_rec3_GT(EOS(STATIC_3643), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i284, i124) :|: TRUE f3643_0_rec3_GT(EOS(STATIC_3643), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i284, i124) -> f3650_0_rec3_GT(EOS(STATIC_3650), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i284, i124) :|: i284 <= i124 f3650_0_rec3_GT(EOS(STATIC_3650), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i284, i124) -> f3656_0_rec3_ConstantStackPush(EOS(STATIC_3656), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127) :|: i284 <= i124 f3656_0_rec3_ConstantStackPush(EOS(STATIC_3656), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127) -> f3659_0_rec3_Load(EOS(STATIC_3659), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, 1000) :|: TRUE f3659_0_rec3_Load(EOS(STATIC_3659), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, matching1) -> f3663_0_rec3_IntArithmetic(EOS(STATIC_3663), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, 1000, i125) :|: TRUE && matching1 = 1000 f3663_0_rec3_IntArithmetic(EOS(STATIC_3663), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, matching1, i125) -> f3672_0_rec3_ConstantStackPush(EOS(STATIC_3672), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, 1000 * i125) :|: TRUE && matching1 = 1000 f3672_0_rec3_ConstantStackPush(EOS(STATIC_3672), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i301) -> f3673_0_rec3_Load(EOS(STATIC_3673), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i301, 100) :|: TRUE f3673_0_rec3_Load(EOS(STATIC_3673), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i301, matching1) -> f3674_0_rec3_IntArithmetic(EOS(STATIC_3674), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i301, 100, i126) :|: TRUE && matching1 = 100 f3674_0_rec3_IntArithmetic(EOS(STATIC_3674), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i301, matching1, i126) -> f3676_0_rec3_IntArithmetic(EOS(STATIC_3676), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i301, 100 * i126) :|: TRUE && matching1 = 100 f3676_0_rec3_IntArithmetic(EOS(STATIC_3676), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i301, i302) -> f3677_0_rec3_ConstantStackPush(EOS(STATIC_3677), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i301 + i302) :|: i301 >= 0 && i302 >= 0 f3677_0_rec3_ConstantStackPush(EOS(STATIC_3677), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i303) -> f3679_0_rec3_Load(EOS(STATIC_3679), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i303, 10) :|: TRUE f3679_0_rec3_Load(EOS(STATIC_3679), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i303, matching1) -> f3681_0_rec3_IntArithmetic(EOS(STATIC_3681), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i303, 10, i127) :|: TRUE && matching1 = 10 f3681_0_rec3_IntArithmetic(EOS(STATIC_3681), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i303, matching1, i127) -> f3682_0_rec3_IntArithmetic(EOS(STATIC_3682), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i303, 10 * i127) :|: TRUE && matching1 = 10 f3682_0_rec3_IntArithmetic(EOS(STATIC_3682), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i303, i304) -> f3684_0_rec3_Load(EOS(STATIC_3684), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i303 + i304) :|: i303 >= 0 && i304 >= 0 f3684_0_rec3_Load(EOS(STATIC_3684), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i305) -> f3686_0_rec3_IntArithmetic(EOS(STATIC_3686), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i305, i284) :|: TRUE f3686_0_rec3_IntArithmetic(EOS(STATIC_3686), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i305, i284) -> f3687_0_rec3_ConstantStackPush(EOS(STATIC_3687), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i305 + i284) :|: i305 >= 0 && i284 >= 0 f3687_0_rec3_ConstantStackPush(EOS(STATIC_3687), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i306) -> f3689_0_rec3_InvokeMethod(EOS(STATIC_3689), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i306, 0) :|: TRUE f3689_0_rec3_InvokeMethod(EOS(STATIC_3689), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i306, matching1) -> f3690_0_rec4_Load(EOS(STATIC_3690), i306, 0, i306, 0) :|: i284 <= i124 && matching1 = 0 f3689_0_rec3_InvokeMethod(EOS(STATIC_3689), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i306, matching1) -> f3690_1_rec4_Load(EOS(STATIC_3690), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i306, 0) :|: i284 <= i124 && matching1 = 0 f3690_0_rec4_Load(EOS(STATIC_3690), i306, matching1, i306, matching2) -> f3802_0_rec4_Load(EOS(STATIC_3802), i306, 0, i306, 0) :|: TRUE && matching1 = 0 && matching2 = 0 f3706_0_rec4_Return(EOS(STATIC_3706), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127) -> f3707_0_rec3_Load(EOS(STATIC_3707), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127) :|: TRUE f3707_0_rec3_Load(EOS(STATIC_3707), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127) -> f3708_0_rec3_ConstantStackPush(EOS(STATIC_3708), i283, i124, i125, i126, i127, i124, i125, i126, i127, i284) :|: TRUE f3708_0_rec3_ConstantStackPush(EOS(STATIC_3708), i283, i124, i125, i126, i127, i124, i125, i126, i127, i284) -> f3709_0_rec3_IntArithmetic(EOS(STATIC_3709), i283, i124, i125, i126, i127, i124, i125, i126, i127, i284, 1) :|: TRUE f3709_0_rec3_IntArithmetic(EOS(STATIC_3709), i283, i124, i125, i126, i127, i124, i125, i126, i127, i284, matching1) -> f3711_0_rec3_Load(EOS(STATIC_3711), i283, i124, i125, i126, i127, i124, i125, i126, i127, i284 + 1) :|: i284 >= 0 && matching1 = 1 f3711_0_rec3_Load(EOS(STATIC_3711), i283, i124, i125, i126, i127, i124, i125, i126, i127, i313) -> f3713_0_rec3_Load(EOS(STATIC_3713), i283, i124, i125, i126, i127, i125, i126, i127, i313, i124) :|: TRUE f3713_0_rec3_Load(EOS(STATIC_3713), i283, i124, i125, i126, i127, i125, i126, i127, i313, i124) -> f3720_0_rec3_Load(EOS(STATIC_3720), i283, i124, i125, i126, i127, i126, i127, i313, i124, i125) :|: TRUE f3720_0_rec3_Load(EOS(STATIC_3720), i283, i124, i125, i126, i127, i126, i127, i313, i124, i125) -> f3721_0_rec3_Load(EOS(STATIC_3721), i283, i124, i125, i126, i127, i127, i313, i124, i125, i126) :|: TRUE f3721_0_rec3_Load(EOS(STATIC_3721), i283, i124, i125, i126, i127, i127, i313, i124, i125, i126) -> f3722_0_rec3_InvokeMethod(EOS(STATIC_3722), i283, i124, i125, i126, i127, i313, i124, i125, i126, i127) :|: TRUE f3722_0_rec3_InvokeMethod(EOS(STATIC_3722), i283, i124, i125, i126, i127, i313, i124, i125, i126, i127) -> f3723_0_rec3_Load(EOS(STATIC_3723), i313, i124, i125, i126, i127, i313, i124, i125, i126, i127) :|: i313 >= 1 f3722_0_rec3_InvokeMethod(EOS(STATIC_3722), i283, i124, i125, i126, i127, i313, i124, i125, i126, i127) -> f3723_1_rec3_Load(EOS(STATIC_3723), i283, i124, i125, i126, i127, i313, i124, i125, i126, i127) :|: i313 >= 1 f3723_0_rec3_Load(EOS(STATIC_3723), i313, i124, i125, i126, i127, i313, i124, i125, i126, i127) -> f3724_0_rec3_Load(EOS(STATIC_3724), i313, i124, i125, i126, i127, i313, i124, i125, i126, i127) :|: TRUE f3724_0_rec3_Load(EOS(STATIC_3724), i313, i124, i125, i126, i127, i313, i124, i125, i126, i127) -> f3638_0_rec3_Load(EOS(STATIC_3638), i313, i124, i125, i126, i127, i313, i124, i125, i126, i127) :|: TRUE f3638_0_rec3_Load(EOS(STATIC_3638), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127) -> f3642_0_rec3_Load(EOS(STATIC_3642), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i284) :|: TRUE f3690_1_rec4_Load(EOS(STATIC_3690), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127, i306, matching1) -> f3706_0_rec4_Return(EOS(STATIC_3706), i283, i124, i125, i126, i127, i284, i124, i125, i126, i127) :|: TRUE && matching1 = 0 Combined rules. Obtained 3 IRulesP rules: f3706_0_rec4_Return(EOS(STATIC_3706), i283:0, i124:0, i125:0, i126:0, i127:0, i284:0, i124:0, i125:0, i126:0, i127:0) -> f3706_0_rec4_Return(EOS(STATIC_3706), i284:0 + 1, i124:0, i125:0, i126:0, i127:0, i284:0 + 1, i124:0, i125:0, i126:0, i127:0) :|: i284:0 > -1 && i284:0 + 1 <= i124:0 && 100 * i126:0 >= 0 && 1000 * i125:0 >= 0 && 10 * i127:0 >= 0 && 1000 * i125:0 + 100 * i126:0 >= 0 && 1000 * i125:0 + 100 * i126:0 + 10 * i127:0 >= 0 Removed following non-SCC rules: f3706_0_rec4_Return(EOS(STATIC_3706), i283:0, i124:0, i125:0, i126:0, i127:0, i284:0, i124:0, i125:0, i126:0, i127:0) -> f3802_0_rec4_Load(EOS(STATIC_3802), 1000 * i125:0 + 100 * i126:0 + 10 * i127:0 + (i284:0 + 1), 0, 1000 * i125:0 + 100 * i126:0 + 10 * i127:0 + (i284:0 + 1), 0) :|: i284:0 > -1 && i284:0 + 1 <= i124:0 && 100 * i126:0 >= 0 && 1000 * i125:0 >= 0 && 10 * i127:0 >= 0 && 1000 * i125:0 + 100 * i126:0 >= 0 && 1000 * i125:0 + 100 * i126:0 + 10 * i127:0 >= 0 f3706_0_rec4_Return(EOS(STATIC_3706), i283:0, i124:0, i125:0, i126:0, i127:0, i284:0, i124:0, i125:0, i126:0, i127:0) -> f3723_1_rec3_Load(EOS(STATIC_3723), i283:0, i124:0, i125:0, i126:0, i127:0, i284:0 + 1, i124:0, i125:0, i126:0, i127:0) :|: i284:0 > -1 Filtered constant ground arguments: f3706_0_rec4_Return(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) -> f3706_0_rec4_Return(x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) EOS(x1) -> EOS Filtered duplicate arguments: f3706_0_rec4_Return(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) -> f3706_0_rec4_Return(x1, x6, x7, x8, x9, x10) Filtered unneeded arguments: f3706_0_rec4_Return(x1, x2, x3, x4, x5, x6) -> f3706_0_rec4_Return(x2, x3, x4, x5, x6) Finished conversion. Obtained 1 rules.P rules: f3706_0_rec4_Return(i284:0, i124:0, i125:0, i126:0, i127:0) -> f3706_0_rec4_Return(i284:0 + 1, i124:0, i125:0, i126:0, i127:0) :|: i284:0 + 1 <= i124:0 && i284:0 > -1 && 100 * i126:0 >= 0 && 1000 * i125:0 >= 0 && 10 * i127:0 >= 0 && 1000 * i125:0 + 100 * i126:0 + 10 * i127:0 >= 0 && 1000 * i125:0 + 100 * i126:0 >= 0 ---------------------------------------- (22) Obligation: Rules: f3706_0_rec4_Return(i284:0, i124:0, i125:0, i126:0, i127:0) -> f3706_0_rec4_Return(i284:0 + 1, i124:0, i125:0, i126:0, i127:0) :|: i284:0 + 1 <= i124:0 && i284:0 > -1 && 100 * i126:0 >= 0 && 1000 * i125:0 >= 0 && 10 * i127:0 >= 0 && 1000 * i125:0 + 100 * i126:0 + 10 * i127:0 >= 0 && 1000 * i125:0 + 100 * i126:0 >= 0 ---------------------------------------- (23) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (24) Obligation: Rules: f3706_0_rec4_Return(i284:0, i124:0, i125:0, i126:0, i127:0) -> f3706_0_rec4_Return(arith, i124:0, i125:0, i126:0, i127:0) :|: i284:0 + 1 <= i124:0 && i284:0 > -1 && 100 * i126:0 >= 0 && 1000 * i125:0 >= 0 && 10 * i127:0 >= 0 && 1000 * i125:0 + 100 * i126:0 + 10 * i127:0 >= 0 && 1000 * i125:0 + 100 * i126:0 >= 0 && arith = i284:0 + 1 ---------------------------------------- (25) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f3706_0_rec4_Return(i284:0, i124:0, i125:0, i126:0, i127:0) -> f3706_0_rec4_Return(arith, i124:0, i125:0, i126:0, i127:0) :|: i284:0 + 1 <= i124:0 && i284:0 > -1 && 100 * i126:0 >= 0 && 1000 * i125:0 >= 0 && 10 * i127:0 >= 0 && 1000 * i125:0 + 100 * i126:0 + 10 * i127:0 >= 0 && 1000 * i125:0 + 100 * i126:0 >= 0 && arith = i284:0 + 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (26) Obligation: Termination digraph: Nodes: (1) f3706_0_rec4_Return(i284:0, i124:0, i125:0, i126:0, i127:0) -> f3706_0_rec4_Return(arith, i124:0, i125:0, i126:0, i127:0) :|: i284:0 + 1 <= i124:0 && i284:0 > -1 && 100 * i126:0 >= 0 && 1000 * i125:0 >= 0 && 10 * i127:0 >= 0 && 1000 * i125:0 + 100 * i126:0 + 10 * i127:0 >= 0 && 1000 * i125:0 + 100 * i126:0 >= 0 && arith = i284:0 + 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (27) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (28) Obligation: Rules: f3706_0_rec4_Return(i284:0:0, i124:0:0, i125:0:0, i126:0:0, i127:0:0) -> f3706_0_rec4_Return(i284:0:0 + 1, i124:0:0, i125:0:0, i126:0:0, i127:0:0) :|: 1000 * i125:0:0 + 100 * i126:0:0 + 10 * i127:0:0 >= 0 && 1000 * i125:0:0 + 100 * i126:0:0 >= 0 && 10 * i127:0:0 >= 0 && 1000 * i125:0:0 >= 0 && 100 * i126:0:0 >= 0 && i284:0:0 > -1 && i284:0:0 + 1 <= i124:0:0 ---------------------------------------- (29) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f3706_0_rec4_Return(INTEGER, INTEGER, INTEGER, INTEGER, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (30) Obligation: Rules: f3706_0_rec4_Return(i284:0:0, i124:0:0, i125:0:0, i126:0:0, i127:0:0) -> f3706_0_rec4_Return(c, i124:0:0, i125:0:0, i126:0:0, i127:0:0) :|: c = i284:0:0 + 1 && (1000 * i125:0:0 + 100 * i126:0:0 + 10 * i127:0:0 >= 0 && 1000 * i125:0:0 + 100 * i126:0:0 >= 0 && 10 * i127:0:0 >= 0 && 1000 * i125:0:0 >= 0 && 100 * i126:0:0 >= 0 && i284:0:0 > -1 && i284:0:0 + 1 <= i124:0:0) ---------------------------------------- (31) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f3706_0_rec4_Return ] = -1*f3706_0_rec4_Return_1 + f3706_0_rec4_Return_2 The following rules are decreasing: f3706_0_rec4_Return(i284:0:0, i124:0:0, i125:0:0, i126:0:0, i127:0:0) -> f3706_0_rec4_Return(c, i124:0:0, i125:0:0, i126:0:0, i127:0:0) :|: c = i284:0:0 + 1 && (1000 * i125:0:0 + 100 * i126:0:0 + 10 * i127:0:0 >= 0 && 1000 * i125:0:0 + 100 * i126:0:0 >= 0 && 10 * i127:0:0 >= 0 && 1000 * i125:0:0 >= 0 && 100 * i126:0:0 >= 0 && i284:0:0 > -1 && i284:0:0 + 1 <= i124:0:0) The following rules are bounded: f3706_0_rec4_Return(i284:0:0, i124:0:0, i125:0:0, i126:0:0, i127:0:0) -> f3706_0_rec4_Return(c, i124:0:0, i125:0:0, i126:0:0, i127:0:0) :|: c = i284:0:0 + 1 && (1000 * i125:0:0 + 100 * i126:0:0 + 10 * i127:0:0 >= 0 && 1000 * i125:0:0 + 100 * i126:0:0 >= 0 && 10 * i127:0:0 >= 0 && 1000 * i125:0:0 >= 0 && 100 * i126:0:0 >= 0 && i284:0:0 > -1 && i284:0:0 + 1 <= i124:0:0) ---------------------------------------- (32) YES ---------------------------------------- (33) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: Recursions.rec2(IIII)V SCC calls the following helper methods: Recursions.rec3(IIIII)V, Recursions.rec2(IIII)V, Recursions.rec4(II)V Performed SCC analyses: *Used field analysis yielded the following read fields: *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (34) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 35 IRulesP rules: f3021_0_rec2_Load(EOS(STATIC_3021), i72, matching1, i73, i74, i75, matching2, i73, i74, i75) -> f3023_0_rec2_LT(EOS(STATIC_3023), i72, 0, i73, i74, i75, 0, i73, i74, i75, 0) :|: TRUE && matching1 = 0 && matching2 = 0 f3023_0_rec2_LT(EOS(STATIC_3023), i72, matching1, i73, i74, i79, matching2, i73, i74, i79, matching3) -> f3026_0_rec2_LT(EOS(STATIC_3026), i72, 0, i73, i74, i79, 0, i73, i74, i79, 0) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 f3026_0_rec2_LT(EOS(STATIC_3026), i72, matching1, i73, i74, i79, matching2, i73, i74, i79, matching3) -> f3030_0_rec2_ConstantStackPush(EOS(STATIC_3030), i72, 0, i73, i74, i79, 0, i73, i74) :|: i79 >= 0 && matching1 = 0 && matching2 = 0 && matching3 = 0 f3030_0_rec2_ConstantStackPush(EOS(STATIC_3030), i72, matching1, i73, i74, i79, matching2, i73, i74) -> f3039_0_rec2_ConstantStackPush(EOS(STATIC_3039), i72, 0, i73, i74, i79, 0, i73, i74, 0) :|: TRUE && matching1 = 0 && matching2 = 0 f3039_0_rec2_ConstantStackPush(EOS(STATIC_3039), i72, matching1, i73, i74, i79, matching2, i73, i74, matching3) -> f3052_0_rec2_Load(EOS(STATIC_3052), i72, 0, i73, i74, i79, 0, i73, i74, 0, 2) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 f3052_0_rec2_Load(EOS(STATIC_3052), i72, matching1, i73, i74, i79, matching2, i73, i74, matching3, matching4) -> f3057_0_rec2_IntArithmetic(EOS(STATIC_3057), i72, 0, i73, i74, i79, 0, i73, i74, 0, 2, i73) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 && matching4 = 2 f3057_0_rec2_IntArithmetic(EOS(STATIC_3057), i72, matching1, i73, i74, i79, matching2, i73, i74, matching3, matching4, i73) -> f3070_0_rec2_ConstantStackPush(EOS(STATIC_3070), i72, 0, i73, i74, i79, 0, i73, i74, 0, 2 * i73) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 && matching4 = 2 f3070_0_rec2_ConstantStackPush(EOS(STATIC_3070), i72, matching1, i73, i74, i79, matching2, i73, i74, matching3, i93) -> f3076_0_rec2_Load(EOS(STATIC_3076), i72, 0, i73, i74, i79, 0, i73, i74, 0, i93, 3) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 f3076_0_rec2_Load(EOS(STATIC_3076), i72, matching1, i73, i74, i79, matching2, i73, i74, matching3, i93, matching4) -> f3081_0_rec2_IntArithmetic(EOS(STATIC_3081), i72, 0, i73, i74, i79, 0, i73, i74, 0, i93, 3, i74) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 && matching4 = 3 f3081_0_rec2_IntArithmetic(EOS(STATIC_3081), i72, matching1, i73, i74, i79, matching2, i73, i74, matching3, i93, matching4, i74) -> f3085_0_rec2_IntArithmetic(EOS(STATIC_3085), i72, 0, i73, i74, i79, 0, i73, i74, 0, i93, 3 * i74) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 && matching4 = 3 f3085_0_rec2_IntArithmetic(EOS(STATIC_3085), i72, matching1, i73, i74, i79, matching2, i73, i74, matching3, i93, i96) -> f3118_0_rec2_ConstantStackPush(EOS(STATIC_3118), i72, 0, i73, i74, i79, 0, i73, i74, 0, i93 + i96) :|: i93 >= 0 && i96 >= 0 && matching1 = 0 && matching2 = 0 && matching3 = 0 f3118_0_rec2_ConstantStackPush(EOS(STATIC_3118), i72, matching1, i73, i74, i79, matching2, i73, i74, matching3, i99) -> f3124_0_rec2_Load(EOS(STATIC_3124), i72, 0, i73, i74, i79, 0, i73, i74, 0, i99, 4) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 f3124_0_rec2_Load(EOS(STATIC_3124), i72, matching1, i73, i74, i79, matching2, i73, i74, matching3, i99, matching4) -> f3127_0_rec2_IntArithmetic(EOS(STATIC_3127), i72, 0, i73, i74, i79, 0, i73, i74, 0, i99, 4, i79) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 && matching4 = 4 f3127_0_rec2_IntArithmetic(EOS(STATIC_3127), i72, matching1, i73, i74, i79, matching2, i73, i74, matching3, i99, matching4, i79) -> f3130_0_rec2_IntArithmetic(EOS(STATIC_3130), i72, 0, i73, i74, i79, 0, i73, i74, 0, i99, 4 * i79) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 && matching4 = 4 f3130_0_rec2_IntArithmetic(EOS(STATIC_3130), i72, matching1, i73, i74, i79, matching2, i73, i74, matching3, i99, i101) -> f3133_0_rec2_Load(EOS(STATIC_3133), i72, 0, i73, i74, i79, 0, i73, i74, 0, i99 + i101) :|: i99 >= 0 && i101 >= 0 && matching1 = 0 && matching2 = 0 && matching3 = 0 f3133_0_rec2_Load(EOS(STATIC_3133), i72, matching1, i73, i74, i79, matching2, i73, i74, matching3, i109) -> f3137_0_rec2_Load(EOS(STATIC_3137), i72, 0, i73, i74, i79, 0, i73, i74, 0, i109, i73) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 f3137_0_rec2_Load(EOS(STATIC_3137), i72, matching1, i73, i74, i79, matching2, i73, i74, matching3, i109, i73) -> f3142_0_rec2_Load(EOS(STATIC_3142), i72, 0, i73, i74, i79, 0, i73, i74, 0, i109, i73, i74) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 f3142_0_rec2_Load(EOS(STATIC_3142), i72, matching1, i73, i74, i79, matching2, i73, i74, matching3, i109, i73, i74) -> f3175_0_rec2_InvokeMethod(EOS(STATIC_3175), i72, 0, i73, i74, i79, 0, i73, i74, 0, i109, i73, i74, i79) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 f3175_0_rec2_InvokeMethod(EOS(STATIC_3175), i72, matching1, i73, i74, i79, matching2, i73, i74, matching3, i109, i73, i74, i79) -> f3184_0_rec3_Load(EOS(STATIC_3184), 0, i109, i73, i74, i79, 0, i109, i73, i74, i79) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 f3175_0_rec2_InvokeMethod(EOS(STATIC_3175), i72, matching1, i73, i74, i79, matching2, i73, i74, matching3, i109, i73, i74, i79) -> f3184_1_rec3_Load(EOS(STATIC_3184), i72, 0, i73, i74, i79, 0, i73, i74, 0, i109, i73, i74, i79) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 f3184_0_rec3_Load(EOS(STATIC_3184), matching1, i109, i73, i74, i79, matching2, i109, i73, i74, i79) -> f3926_0_rec3_Load(EOS(STATIC_3926), 0, i109, i73, i74, i79, 0, i109, i73, i74, i79) :|: TRUE && matching1 = 0 && matching2 = 0 f3671_0_rec3_Return(EOS(STATIC_3671), i72, matching1, i293, i295, i297, matching2, i293, i295) -> f3281_0_rec3_Return(EOS(STATIC_3281), i72, 0, i293, i295, i297, 0, i293, i295) :|: TRUE && matching1 = 0 && matching2 = 0 f3281_0_rec3_Return(EOS(STATIC_3281), i72, matching1, i150, i152, i154, matching2, i150, i152) -> f3287_0_rec2_Load(EOS(STATIC_3287), i72, 0, i150, i152, i154, 0, i150, i152) :|: TRUE && matching1 = 0 && matching2 = 0 f3287_0_rec2_Load(EOS(STATIC_3287), i72, matching1, i150, i152, i154, matching2, i150, i152) -> f3296_0_rec2_ConstantStackPush(EOS(STATIC_3296), i72, 0, i150, i152, 0, i150, i152, i154) :|: TRUE && matching1 = 0 && matching2 = 0 f3296_0_rec2_ConstantStackPush(EOS(STATIC_3296), i72, matching1, i150, i152, matching2, i150, i152, i154) -> f3303_0_rec2_IntArithmetic(EOS(STATIC_3303), i72, 0, i150, i152, 0, i150, i152, i154, 1) :|: TRUE && matching1 = 0 && matching2 = 0 f3303_0_rec2_IntArithmetic(EOS(STATIC_3303), i72, matching1, i150, i152, matching2, i150, i152, i154, matching3) -> f3316_0_rec2_Load(EOS(STATIC_3316), i72, 0, i150, i152, 0, i150, i152, i154 - 1) :|: i154 >= 0 && matching1 = 0 && matching2 = 0 && matching3 = 1 f3316_0_rec2_Load(EOS(STATIC_3316), i72, matching1, i150, i152, matching2, i150, i152, i177) -> f3336_0_rec2_Load(EOS(STATIC_3336), i72, 0, i150, i152, i150, i152, i177, 0) :|: TRUE && matching1 = 0 && matching2 = 0 f3336_0_rec2_Load(EOS(STATIC_3336), i72, matching1, i150, i152, i150, i152, i177, matching2) -> f3349_0_rec2_Load(EOS(STATIC_3349), i72, 0, i150, i152, i152, i177, 0, i150) :|: TRUE && matching1 = 0 && matching2 = 0 f3349_0_rec2_Load(EOS(STATIC_3349), i72, matching1, i150, i152, i152, i177, matching2, i150) -> f3356_0_rec2_InvokeMethod(EOS(STATIC_3356), i72, 0, i150, i152, i177, 0, i150, i152) :|: TRUE && matching1 = 0 && matching2 = 0 f3356_0_rec2_InvokeMethod(EOS(STATIC_3356), i72, matching1, i150, i152, i177, matching2, i150, i152) -> f3363_0_rec2_Load(EOS(STATIC_3363), i177, 0, i150, i152, i177, 0, i150, i152) :|: TRUE && matching1 = 0 && matching2 = 0 f3356_0_rec2_InvokeMethod(EOS(STATIC_3356), i72, matching1, i150, i152, i177, matching2, i150, i152) -> f3363_1_rec2_Load(EOS(STATIC_3363), i72, 0, i150, i152, i177, 0, i150, i152) :|: TRUE && matching1 = 0 && matching2 = 0 f3363_0_rec2_Load(EOS(STATIC_3363), i177, matching1, i150, i152, i177, matching2, i150, i152) -> f3373_0_rec2_Load(EOS(STATIC_3373), i177, 0, i150, i152, i177, 0, i150, i152) :|: TRUE && matching1 = 0 && matching2 = 0 f3373_0_rec2_Load(EOS(STATIC_3373), i177, matching1, i150, i152, i177, matching2, i150, i152) -> f3018_0_rec2_Load(EOS(STATIC_3018), i177, 0, i150, i152, i177, 0, i150, i152) :|: TRUE && matching1 = 0 && matching2 = 0 f3018_0_rec2_Load(EOS(STATIC_3018), i72, matching1, i73, i74, i75, matching2, i73, i74) -> f3021_0_rec2_Load(EOS(STATIC_3021), i72, 0, i73, i74, i75, 0, i73, i74, i75) :|: TRUE && matching1 = 0 && matching2 = 0 f3184_1_rec3_Load(EOS(STATIC_3184), i72, matching1, i293, i295, i297, matching2, i293, i295, matching3, i109, i293, i295, i297) -> f3671_0_rec3_Return(EOS(STATIC_3671), i72, 0, i293, i295, i297, 0, i293, i295) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 Combined rules. Obtained 3 IRulesP rules: f3671_0_rec3_Return(EOS(STATIC_3671), i72:0, 0, i293:0, i295:0, i297:0, 0, i293:0, i295:0) -> f3671_0_rec3_Return(EOS(STATIC_3671), i297:0 - 1, 0, i293:0, i295:0, i297:0 - 1, 0, i293:0, i295:0) :|: i297:0 > 0 && 3 * i295:0 >= 0 && 2 * i293:0 >= 0 && 2 * i293:0 + 3 * i295:0 >= 0 && 4 * (i297:0 - 1) >= 0 Removed following non-SCC rules: f3671_0_rec3_Return(EOS(STATIC_3671), i72:0, 0, i293:0, i295:0, i297:0, 0, i293:0, i295:0) -> f3363_1_rec2_Load(EOS(STATIC_3363), i72:0, 0, i293:0, i295:0, i297:0 - 1, 0, i293:0, i295:0) :|: i297:0 > -1 f3671_0_rec3_Return(EOS(STATIC_3671), i72:0, 0, i293:0, i295:0, i297:0, 0, i293:0, i295:0) -> f3926_0_rec3_Load(EOS(STATIC_3926), 0, 2 * i293:0 + 3 * i295:0 + 4 * (i297:0 - 1), i293:0, i295:0, i297:0 - 1, 0, 2 * i293:0 + 3 * i295:0 + 4 * (i297:0 - 1), i293:0, i295:0, i297:0 - 1) :|: i297:0 > 0 && 3 * i295:0 >= 0 && 2 * i293:0 >= 0 && 2 * i293:0 + 3 * i295:0 >= 0 && 4 * (i297:0 - 1) >= 0 Filtered constant ground arguments: f3671_0_rec3_Return(x1, x2, x3, x4, x5, x6, x7, x8, x9) -> f3671_0_rec3_Return(x2, x4, x5, x6, x8, x9) EOS(x1) -> EOS Filtered duplicate arguments: f3671_0_rec3_Return(x1, x2, x3, x4, x5, x6) -> f3671_0_rec3_Return(x1, x4, x5, x6) Filtered unneeded arguments: f3671_0_rec3_Return(x1, x2, x3, x4) -> f3671_0_rec3_Return(x2, x3, x4) Finished conversion. Obtained 1 rules.P rules: f3671_0_rec3_Return(i297:0, i293:0, i295:0) -> f3671_0_rec3_Return(i297:0 - 1, i293:0, i295:0) :|: 3 * i295:0 >= 0 && i297:0 > 0 && 2 * i293:0 >= 0 && 4 * i297:0 >= 4 && 2 * i293:0 + 3 * i295:0 >= 0 ---------------------------------------- (35) Obligation: Rules: f3671_0_rec3_Return(i297:0, i293:0, i295:0) -> f3671_0_rec3_Return(i297:0 - 1, i293:0, i295:0) :|: 3 * i295:0 >= 0 && i297:0 > 0 && 2 * i293:0 >= 0 && 4 * i297:0 >= 4 && 2 * i293:0 + 3 * i295:0 >= 0 ---------------------------------------- (36) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (37) Obligation: Rules: f3671_0_rec3_Return(i297:0, i293:0, i295:0) -> f3671_0_rec3_Return(arith, i293:0, i295:0) :|: 3 * i295:0 >= 0 && i297:0 > 0 && 2 * i293:0 >= 0 && 4 * i297:0 >= 4 && 2 * i293:0 + 3 * i295:0 >= 0 && arith = i297:0 - 1 ---------------------------------------- (38) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f3671_0_rec3_Return(i297:0, i293:0, i295:0) -> f3671_0_rec3_Return(arith, i293:0, i295:0) :|: 3 * i295:0 >= 0 && i297:0 > 0 && 2 * i293:0 >= 0 && 4 * i297:0 >= 4 && 2 * i293:0 + 3 * i295:0 >= 0 && arith = i297:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (39) Obligation: Termination digraph: Nodes: (1) f3671_0_rec3_Return(i297:0, i293:0, i295:0) -> f3671_0_rec3_Return(arith, i293:0, i295:0) :|: 3 * i295:0 >= 0 && i297:0 > 0 && 2 * i293:0 >= 0 && 4 * i297:0 >= 4 && 2 * i293:0 + 3 * i295:0 >= 0 && arith = i297:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (40) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (41) Obligation: Rules: f3671_0_rec3_Return(i297:0:0, i293:0:0, i295:0:0) -> f3671_0_rec3_Return(i297:0:0 - 1, i293:0:0, i295:0:0) :|: 4 * i297:0:0 >= 4 && 2 * i293:0:0 + 3 * i295:0:0 >= 0 && 2 * i293:0:0 >= 0 && i297:0:0 > 0 && 3 * i295:0:0 >= 0 ---------------------------------------- (42) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f3671_0_rec3_Return(INTEGER, INTEGER, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (43) Obligation: Rules: f3671_0_rec3_Return(i297:0:0, i293:0:0, i295:0:0) -> f3671_0_rec3_Return(c, i293:0:0, i295:0:0) :|: c = i297:0:0 - 1 && (4 * i297:0:0 >= 4 && 2 * i293:0:0 + 3 * i295:0:0 >= 0 && 2 * i293:0:0 >= 0 && i297:0:0 > 0 && 3 * i295:0:0 >= 0) ---------------------------------------- (44) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f3671_0_rec3_Return(x, x1, x2)] = x The following rules are decreasing: f3671_0_rec3_Return(i297:0:0, i293:0:0, i295:0:0) -> f3671_0_rec3_Return(c, i293:0:0, i295:0:0) :|: c = i297:0:0 - 1 && (4 * i297:0:0 >= 4 && 2 * i293:0:0 + 3 * i295:0:0 >= 0 && 2 * i293:0:0 >= 0 && i297:0:0 > 0 && 3 * i295:0:0 >= 0) The following rules are bounded: f3671_0_rec3_Return(i297:0:0, i293:0:0, i295:0:0) -> f3671_0_rec3_Return(c, i293:0:0, i295:0:0) :|: c = i297:0:0 - 1 && (4 * i297:0:0 >= 4 && 2 * i293:0:0 + 3 * i295:0:0 >= 0 && 2 * i293:0:0 >= 0 && i297:0:0 > 0 && 3 * i295:0:0 >= 0) ---------------------------------------- (45) YES ---------------------------------------- (46) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: Recursions.rec1(III)V SCC calls the following helper methods: Recursions.rec2(IIII)V, Recursions.rec1(III)V, Recursions.rec3(IIIII)V, Recursions.rec4(II)V Performed SCC analyses: *Used field analysis yielded the following read fields: *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (47) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 24 IRulesP rules: f3136_0_rec1_Load(EOS(STATIC_3136), i105, i106, i107, i108, i106, i107, i108) -> f3141_0_rec1_GT(EOS(STATIC_3141), i105, i106, i107, i108, i106, i107, i108, i106) :|: TRUE f3141_0_rec1_GT(EOS(STATIC_3141), i105, i106, i107, i108, i106, i107, i108, i106) -> f3173_0_rec1_GT(EOS(STATIC_3173), i105, i106, i107, i108, i106, i107, i108, i106) :|: i108 <= i106 f3173_0_rec1_GT(EOS(STATIC_3173), i105, i106, i107, i108, i106, i107, i108, i106) -> f3183_0_rec1_Load(EOS(STATIC_3183), i105, i106, i107, i108, i106, i107) :|: i108 <= i106 f3183_0_rec1_Load(EOS(STATIC_3183), i105, i106, i107, i108, i106, i107) -> f3187_0_rec1_Load(EOS(STATIC_3187), i105, i106, i107, i108, i106, i107, i107) :|: TRUE f3187_0_rec1_Load(EOS(STATIC_3187), i105, i106, i107, i108, i106, i107, i107) -> f3196_0_rec1_IntArithmetic(EOS(STATIC_3196), i105, i106, i107, i108, i106, i107, i107, i108) :|: TRUE f3196_0_rec1_IntArithmetic(EOS(STATIC_3196), i105, i106, i107, i108, i106, i107, i107, i108) -> f3201_0_rec1_ConstantStackPush(EOS(STATIC_3201), i105, i106, i107, i108, i106, i107, i107 + i108) :|: i107 >= 0 && i108 >= 0 f3201_0_rec1_ConstantStackPush(EOS(STATIC_3201), i105, i106, i107, i108, i106, i107, i117) -> f3203_0_rec1_Load(EOS(STATIC_3203), i105, i106, i107, i108, i106, i107, i117, 0) :|: TRUE f3203_0_rec1_Load(EOS(STATIC_3203), i105, i106, i107, i108, i106, i107, i117, matching1) -> f3228_0_rec1_Load(EOS(STATIC_3228), i105, i106, i107, i108, i106, i107, i117, 0, i107) :|: TRUE && matching1 = 0 f3228_0_rec1_Load(EOS(STATIC_3228), i105, i106, i107, i108, i106, i107, i117, matching1, i107) -> f3243_0_rec1_InvokeMethod(EOS(STATIC_3243), i105, i106, i107, i108, i106, i107, i117, 0, i107, i108) :|: TRUE && matching1 = 0 f3243_0_rec1_InvokeMethod(EOS(STATIC_3243), i105, i106, i107, i108, i106, i107, i117, matching1, i107, i108) -> f3247_0_rec2_Load(EOS(STATIC_3247), i117, 0, i107, i108, i117, 0, i107, i108) :|: i108 <= i106 && matching1 = 0 f3243_0_rec1_InvokeMethod(EOS(STATIC_3243), i105, i106, i107, i108, i106, i107, i117, matching1, i107, i108) -> f3247_1_rec2_Load(EOS(STATIC_3247), i105, i106, i107, i108, i106, i107, i117, 0, i107, i108) :|: i108 <= i106 && matching1 = 0 f3247_0_rec2_Load(EOS(STATIC_3247), i117, matching1, i107, i108, i117, matching2, i107, i108) -> f4114_0_rec2_Load(EOS(STATIC_4114), i117, 0, i107, i108, i117, 0, i107, i108) :|: TRUE && matching1 = 0 && matching2 = 0 f3285_0_rec2_Return(EOS(STATIC_3285), i105, i106, i166, i168, i106, i166) -> f3295_0_rec1_Load(EOS(STATIC_3295), i105, i106, i166, i168, i106, i166) :|: TRUE f3295_0_rec1_Load(EOS(STATIC_3295), i105, i106, i166, i168, i106, i166) -> f3301_0_rec1_ConstantStackPush(EOS(STATIC_3301), i105, i106, i166, i106, i166, i168) :|: TRUE f3301_0_rec1_ConstantStackPush(EOS(STATIC_3301), i105, i106, i166, i106, i166, i168) -> f3314_0_rec1_IntArithmetic(EOS(STATIC_3314), i105, i106, i166, i106, i166, i168, 1) :|: TRUE f3314_0_rec1_IntArithmetic(EOS(STATIC_3314), i105, i106, i166, i106, i166, i168, matching1) -> f3335_0_rec1_Load(EOS(STATIC_3335), i105, i106, i166, i106, i166, i168 + 1) :|: i168 >= 0 && matching1 = 1 f3335_0_rec1_Load(EOS(STATIC_3335), i105, i106, i166, i106, i166, i179) -> f3348_0_rec1_Load(EOS(STATIC_3348), i105, i106, i166, i166, i179, i106) :|: TRUE f3348_0_rec1_Load(EOS(STATIC_3348), i105, i106, i166, i166, i179, i106) -> f3355_0_rec1_InvokeMethod(EOS(STATIC_3355), i105, i106, i166, i179, i106, i166) :|: TRUE f3355_0_rec1_InvokeMethod(EOS(STATIC_3355), i105, i106, i166, i179, i106, i166) -> f3362_0_rec1_Load(EOS(STATIC_3362), i179, i106, i166, i179, i106, i166) :|: i179 >= 1 f3355_0_rec1_InvokeMethod(EOS(STATIC_3355), i105, i106, i166, i179, i106, i166) -> f3362_1_rec1_Load(EOS(STATIC_3362), i105, i106, i166, i179, i106, i166) :|: i179 >= 1 f3362_0_rec1_Load(EOS(STATIC_3362), i179, i106, i166, i179, i106, i166) -> f3370_0_rec1_Load(EOS(STATIC_3370), i179, i106, i166, i179, i106, i166) :|: TRUE f3370_0_rec1_Load(EOS(STATIC_3370), i179, i106, i166, i179, i106, i166) -> f3132_0_rec1_Load(EOS(STATIC_3132), i179, i106, i166, i179, i106, i166) :|: TRUE f3132_0_rec1_Load(EOS(STATIC_3132), i105, i106, i107, i108, i106, i107) -> f3136_0_rec1_Load(EOS(STATIC_3136), i105, i106, i107, i108, i106, i107, i108) :|: TRUE f3247_1_rec2_Load(EOS(STATIC_3247), i105, i106, i166, i168, i106, i166, i117, matching1, i166, i168) -> f3285_0_rec2_Return(EOS(STATIC_3285), i105, i106, i166, i168, i106, i166) :|: TRUE && matching1 = 0 Combined rules. Obtained 3 IRulesP rules: f3285_0_rec2_Return(EOS(STATIC_3285), i105:0, i106:0, i166:0, i168:0, i106:0, i166:0) -> f3285_0_rec2_Return(EOS(STATIC_3285), i168:0 + 1, i106:0, i166:0, i168:0 + 1, i106:0, i166:0) :|: i168:0 > -1 && i168:0 + 1 <= i106:0 && i166:0 > -1 Removed following non-SCC rules: f3285_0_rec2_Return(EOS(STATIC_3285), i105:0, i106:0, i166:0, i168:0, i106:0, i166:0) -> f4114_0_rec2_Load(EOS(STATIC_4114), i166:0 + (i168:0 + 1), 0, i166:0, i168:0 + 1, i166:0 + (i168:0 + 1), 0, i166:0, i168:0 + 1) :|: i168:0 > -1 && i168:0 + 1 <= i106:0 && i166:0 > -1 f3285_0_rec2_Return(EOS(STATIC_3285), i105:0, i106:0, i166:0, i168:0, i106:0, i166:0) -> f3362_1_rec1_Load(EOS(STATIC_3362), i105:0, i106:0, i166:0, i168:0 + 1, i106:0, i166:0) :|: i168:0 > -1 Filtered constant ground arguments: f3285_0_rec2_Return(x1, x2, x3, x4, x5, x6, x7) -> f3285_0_rec2_Return(x2, x3, x4, x5, x6, x7) EOS(x1) -> EOS Filtered duplicate arguments: f3285_0_rec2_Return(x1, x2, x3, x4, x5, x6) -> f3285_0_rec2_Return(x1, x4, x5, x6) Filtered unneeded arguments: f3285_0_rec2_Return(x1, x2, x3, x4) -> f3285_0_rec2_Return(x2, x3, x4) Finished conversion. Obtained 1 rules.P rules: f3285_0_rec2_Return(i168:0, i106:0, i166:0) -> f3285_0_rec2_Return(i168:0 + 1, i106:0, i166:0) :|: i168:0 + 1 <= i106:0 && i166:0 > -1 && i168:0 > -1 ---------------------------------------- (48) Obligation: Rules: f3285_0_rec2_Return(i168:0, i106:0, i166:0) -> f3285_0_rec2_Return(i168:0 + 1, i106:0, i166:0) :|: i168:0 + 1 <= i106:0 && i166:0 > -1 && i168:0 > -1 ---------------------------------------- (49) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (50) Obligation: Rules: f3285_0_rec2_Return(i168:0, i106:0, i166:0) -> f3285_0_rec2_Return(arith, i106:0, i166:0) :|: i168:0 + 1 <= i106:0 && i166:0 > -1 && i168:0 > -1 && arith = i168:0 + 1 ---------------------------------------- (51) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f3285_0_rec2_Return(i168:0, i106:0, i166:0) -> f3285_0_rec2_Return(arith, i106:0, i166:0) :|: i168:0 + 1 <= i106:0 && i166:0 > -1 && i168:0 > -1 && arith = i168:0 + 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (52) Obligation: Termination digraph: Nodes: (1) f3285_0_rec2_Return(i168:0, i106:0, i166:0) -> f3285_0_rec2_Return(arith, i106:0, i166:0) :|: i168:0 + 1 <= i106:0 && i166:0 > -1 && i168:0 > -1 && arith = i168:0 + 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (53) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (54) Obligation: Rules: f3285_0_rec2_Return(i168:0:0, i106:0:0, i166:0:0) -> f3285_0_rec2_Return(i168:0:0 + 1, i106:0:0, i166:0:0) :|: i168:0:0 + 1 <= i106:0:0 && i166:0:0 > -1 && i168:0:0 > -1 ---------------------------------------- (55) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f3285_0_rec2_Return(INTEGER, INTEGER, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (56) Obligation: Rules: f3285_0_rec2_Return(i168:0:0, i106:0:0, i166:0:0) -> f3285_0_rec2_Return(c, i106:0:0, i166:0:0) :|: c = i168:0:0 + 1 && (i168:0:0 + 1 <= i106:0:0 && i166:0:0 > -1 && i168:0:0 > -1) ---------------------------------------- (57) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f3285_0_rec2_Return(x, x1, x2)] = -x + x1 The following rules are decreasing: f3285_0_rec2_Return(i168:0:0, i106:0:0, i166:0:0) -> f3285_0_rec2_Return(c, i106:0:0, i166:0:0) :|: c = i168:0:0 + 1 && (i168:0:0 + 1 <= i106:0:0 && i166:0:0 > -1 && i168:0:0 > -1) The following rules are bounded: f3285_0_rec2_Return(i168:0:0, i106:0:0, i166:0:0) -> f3285_0_rec2_Return(c, i106:0:0, i166:0:0) :|: c = i168:0:0 + 1 && (i168:0:0 + 1 <= i106:0:0 && i166:0:0 > -1 && i168:0:0 > -1) ---------------------------------------- (58) YES ---------------------------------------- (59) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: Recursions.rec0(II)V SCC calls the following helper methods: Recursions.rec1(III)V, Recursions.rec0(II)V, Recursions.rec2(IIII)V, Recursions.rec3(IIIII)V, Recursions.rec4(II)V Performed SCC analyses: *Used field analysis yielded the following read fields: *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (60) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 22 IRulesP rules: f3300_0_rec0_Load(EOS(STATIC_3300), i174, i3, i175, i3, i175) -> f3312_0_rec0_GT(EOS(STATIC_3312), i174, i3, i175, i3, i175, i3) :|: TRUE f3312_0_rec0_GT(EOS(STATIC_3312), i174, i3, i175, i3, i175, i3) -> f3334_0_rec0_GT(EOS(STATIC_3334), i174, i3, i175, i3, i175, i3) :|: i175 <= i3 f3334_0_rec0_GT(EOS(STATIC_3334), i174, i3, i175, i3, i175, i3) -> f3346_0_rec0_ConstantStackPush(EOS(STATIC_3346), i174, i3, i175, i3) :|: i175 <= i3 f3346_0_rec0_ConstantStackPush(EOS(STATIC_3346), i174, i3, i175, i3) -> f3354_0_rec0_ConstantStackPush(EOS(STATIC_3354), i174, i3, i175, i3, 0) :|: TRUE f3354_0_rec0_ConstantStackPush(EOS(STATIC_3354), i174, i3, i175, i3, matching1) -> f3361_0_rec0_Load(EOS(STATIC_3361), i174, i3, i175, i3, 0, 2) :|: TRUE && matching1 = 0 f3361_0_rec0_Load(EOS(STATIC_3361), i174, i3, i175, i3, matching1, matching2) -> f3368_0_rec0_IntArithmetic(EOS(STATIC_3368), i174, i3, i175, i3, 0, 2, i175) :|: TRUE && matching1 = 0 && matching2 = 2 f3368_0_rec0_IntArithmetic(EOS(STATIC_3368), i174, i3, i175, i3, matching1, matching2, i175) -> f3377_0_rec0_Load(EOS(STATIC_3377), i174, i3, i175, i3, 0, 2 * i175) :|: TRUE && matching1 = 0 && matching2 = 2 f3377_0_rec0_Load(EOS(STATIC_3377), i174, i3, i175, i3, matching1, i182) -> f3379_0_rec0_InvokeMethod(EOS(STATIC_3379), i174, i3, i175, i3, 0, i182, i175) :|: TRUE && matching1 = 0 f3379_0_rec0_InvokeMethod(EOS(STATIC_3379), i174, i3, i175, i3, matching1, i182, i175) -> f3383_0_rec1_Load(EOS(STATIC_3383), 0, i182, i175, 0, i182, i175) :|: i3 >= 1 && i175 <= i3 && matching1 = 0 f3379_0_rec0_InvokeMethod(EOS(STATIC_3379), i174, i3, i175, i3, matching1, i182, i175) -> f3383_1_rec1_Load(EOS(STATIC_3383), i174, i3, i175, i3, 0, i182, i175) :|: i3 >= 1 && i175 <= i3 && matching1 = 0 f3383_0_rec1_Load(EOS(STATIC_3383), matching1, i182, i175, matching2, i182, i175) -> f4380_0_rec1_Load(EOS(STATIC_4380), 0, i182, i175, 0, i182, i175) :|: TRUE && matching1 = 0 && matching2 = 0 f3500_0_rec1_Return(EOS(STATIC_3500), i174, i3, i239, i3) -> f3504_0_rec0_Load(EOS(STATIC_3504), i174, i3, i239, i3) :|: TRUE f3504_0_rec0_Load(EOS(STATIC_3504), i174, i3, i239, i3) -> f3507_0_rec0_ConstantStackPush(EOS(STATIC_3507), i174, i3, i3, i239) :|: TRUE f3507_0_rec0_ConstantStackPush(EOS(STATIC_3507), i174, i3, i3, i239) -> f3514_0_rec0_IntArithmetic(EOS(STATIC_3514), i174, i3, i3, i239, 1) :|: TRUE f3514_0_rec0_IntArithmetic(EOS(STATIC_3514), i174, i3, i3, i239, matching1) -> f3524_0_rec0_Load(EOS(STATIC_3524), i174, i3, i3, i239 + 1) :|: i239 >= 0 && matching1 = 1 f3524_0_rec0_Load(EOS(STATIC_3524), i174, i3, i3, i249) -> f3544_0_rec0_InvokeMethod(EOS(STATIC_3544), i174, i3, i249, i3) :|: TRUE f3544_0_rec0_InvokeMethod(EOS(STATIC_3544), i174, i3, i249, i3) -> f3556_0_rec0_Load(EOS(STATIC_3556), i249, i3, i249, i3) :|: i3 >= 1 && i249 >= 1 f3544_0_rec0_InvokeMethod(EOS(STATIC_3544), i174, i3, i249, i3) -> f3556_1_rec0_Load(EOS(STATIC_3556), i174, i3, i249, i3) :|: i3 >= 1 && i249 >= 1 f3556_0_rec0_Load(EOS(STATIC_3556), i249, i3, i249, i3) -> f3565_0_rec0_Load(EOS(STATIC_3565), i249, i3, i249, i3) :|: TRUE f3565_0_rec0_Load(EOS(STATIC_3565), i249, i3, i249, i3) -> f3293_0_rec0_Load(EOS(STATIC_3293), i249, i3, i249, i3) :|: TRUE f3293_0_rec0_Load(EOS(STATIC_3293), i174, i3, i175, i3) -> f3300_0_rec0_Load(EOS(STATIC_3300), i174, i3, i175, i3, i175) :|: TRUE f3383_1_rec1_Load(EOS(STATIC_3383), i174, i3, i239, i3, matching1, i182, i239) -> f3500_0_rec1_Return(EOS(STATIC_3500), i174, i3, i239, i3) :|: TRUE && matching1 = 0 Combined rules. Obtained 3 IRulesP rules: f3500_0_rec1_Return(EOS(STATIC_3500), i174:0, i3:0, i239:0, i3:0) -> f3500_0_rec1_Return(EOS(STATIC_3500), i239:0 + 1, i3:0, i239:0 + 1, i3:0) :|: i3:0 >= i239:0 + 1 && i239:0 > -1 && i3:0 > 0 Removed following non-SCC rules: f3500_0_rec1_Return(EOS(STATIC_3500), i174:0, i3:0, i239:0, i3:0) -> f3556_1_rec0_Load(EOS(STATIC_3556), i174:0, i3:0, i239:0 + 1, i3:0) :|: i239:0 > -1 && i3:0 > 0 f3500_0_rec1_Return(EOS(STATIC_3500), i174:0, i3:0, i239:0, i3:0) -> f4380_0_rec1_Load(EOS(STATIC_4380), 0, 2 * (i239:0 + 1), i239:0 + 1, 0, 2 * (i239:0 + 1), i239:0 + 1) :|: i3:0 >= i239:0 + 1 && i239:0 > -1 && i3:0 > 0 Filtered constant ground arguments: f3500_0_rec1_Return(x1, x2, x3, x4, x5) -> f3500_0_rec1_Return(x2, x3, x4, x5) EOS(x1) -> EOS Filtered duplicate arguments: f3500_0_rec1_Return(x1, x2, x3, x4) -> f3500_0_rec1_Return(x1, x3, x4) Filtered unneeded arguments: f3500_0_rec1_Return(x1, x2, x3) -> f3500_0_rec1_Return(x2, x3) Finished conversion. Obtained 1 rules.P rules: f3500_0_rec1_Return(i239:0, i3:0) -> f3500_0_rec1_Return(i239:0 + 1, i3:0) :|: i239:0 > -1 && i3:0 > 0 && i3:0 >= i239:0 + 1 ---------------------------------------- (61) Obligation: Rules: f3500_0_rec1_Return(i239:0, i3:0) -> f3500_0_rec1_Return(i239:0 + 1, i3:0) :|: i239:0 > -1 && i3:0 > 0 && i3:0 >= i239:0 + 1 ---------------------------------------- (62) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (63) Obligation: Rules: f3500_0_rec1_Return(i239:0, i3:0) -> f3500_0_rec1_Return(arith, i3:0) :|: i239:0 > -1 && i3:0 > 0 && i3:0 >= i239:0 + 1 && arith = i239:0 + 1 ---------------------------------------- (64) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f3500_0_rec1_Return(i239:0, i3:0) -> f3500_0_rec1_Return(arith, i3:0) :|: i239:0 > -1 && i3:0 > 0 && i3:0 >= i239:0 + 1 && arith = i239:0 + 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (65) Obligation: Termination digraph: Nodes: (1) f3500_0_rec1_Return(i239:0, i3:0) -> f3500_0_rec1_Return(arith, i3:0) :|: i239:0 > -1 && i3:0 > 0 && i3:0 >= i239:0 + 1 && arith = i239:0 + 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (66) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (67) Obligation: Rules: f3500_0_rec1_Return(i239:0:0, i3:0:0) -> f3500_0_rec1_Return(i239:0:0 + 1, i3:0:0) :|: i239:0:0 > -1 && i3:0:0 > 0 && i3:0:0 >= i239:0:0 + 1 ---------------------------------------- (68) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f3500_0_rec1_Return(INTEGER, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (69) Obligation: Rules: f3500_0_rec1_Return(i239:0:0, i3:0:0) -> f3500_0_rec1_Return(c, i3:0:0) :|: c = i239:0:0 + 1 && (i239:0:0 > -1 && i3:0:0 > 0 && i3:0:0 >= i239:0:0 + 1) ---------------------------------------- (70) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f3500_0_rec1_Return(x, x1)] = -x + x1 The following rules are decreasing: f3500_0_rec1_Return(i239:0:0, i3:0:0) -> f3500_0_rec1_Return(c, i3:0:0) :|: c = i239:0:0 + 1 && (i239:0:0 > -1 && i3:0:0 > 0 && i3:0:0 >= i239:0:0 + 1) The following rules are bounded: f3500_0_rec1_Return(i239:0:0, i3:0:0) -> f3500_0_rec1_Return(c, i3:0:0) :|: c = i239:0:0 + 1 && (i239:0:0 > -1 && i3:0:0 > 0 && i3:0:0 >= i239:0:0 + 1) ---------------------------------------- (71) YES ---------------------------------------- (72) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: Recursions.main([Ljava/lang/String;)V SCC calls the following helper methods: Recursions.rec0(II)V, Recursions.rec1(III)V, Recursions.rec2(IIII)V, Recursions.rec3(IIIII)V, Recursions.rec4(II)V Performed SCC analyses: *Used field analysis yielded the following read fields: *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (73) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 17 IRulesP rules: f3503_0_main_Load(EOS(STATIC_3503), java.lang.Object(o12sub), java.lang.Object(o12sub), i245, i245) -> f3506_0_main_ArrayLength(EOS(STATIC_3506), java.lang.Object(o12sub), java.lang.Object(o12sub), i245, i245, java.lang.Object(o12sub)) :|: TRUE f3506_0_main_ArrayLength(EOS(STATIC_3506), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245, i245, java.lang.Object(ARRAY(i248))) -> f3512_0_main_ArrayLength(EOS(STATIC_3512), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245, i245, java.lang.Object(ARRAY(i248))) :|: i248 >= 0 f3512_0_main_ArrayLength(EOS(STATIC_3512), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245, i245, java.lang.Object(ARRAY(i248))) -> f3522_0_main_GE(EOS(STATIC_3522), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245, i245, i248) :|: i248 >= 0 f3522_0_main_GE(EOS(STATIC_3522), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245, i245, i248) -> f3542_0_main_GE(EOS(STATIC_3542), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245, i245, i248) :|: i245 < i248 f3542_0_main_GE(EOS(STATIC_3542), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245, i245, i248) -> f3555_0_main_ConstantStackPush(EOS(STATIC_3555), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245) :|: i245 < i248 f3555_0_main_ConstantStackPush(EOS(STATIC_3555), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245) -> f3563_0_main_Load(EOS(STATIC_3563), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245, 0) :|: TRUE f3563_0_main_Load(EOS(STATIC_3563), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245, matching1) -> f3569_0_main_ArrayLength(EOS(STATIC_3569), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245, 0, java.lang.Object(ARRAY(i248))) :|: TRUE && matching1 = 0 f3569_0_main_ArrayLength(EOS(STATIC_3569), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245, matching1, java.lang.Object(ARRAY(i248))) -> f3572_0_main_InvokeMethod(EOS(STATIC_3572), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245, 0, i248) :|: i248 >= 0 && matching1 = 0 f3572_0_main_InvokeMethod(EOS(STATIC_3572), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245, matching1, i248) -> f3577_0_rec0_Load(EOS(STATIC_3577), 0, i248, 0, i248) :|: i248 >= 1 && i245 < i248 && matching1 = 0 f3572_0_main_InvokeMethod(EOS(STATIC_3572), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245, matching1, i248) -> f3577_1_rec0_Load(EOS(STATIC_3577), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245, 0, i248) :|: i248 >= 1 && i245 < i248 && matching1 = 0 f3577_0_rec0_Load(EOS(STATIC_3577), matching1, i248, matching2, i248) -> f4706_0_rec0_Load(EOS(STATIC_4706), 0, i248, 0, i248) :|: TRUE && matching1 = 0 && matching2 = 0 f3622_0_rec0_Return(EOS(STATIC_3622), java.lang.Object(ARRAY(i279)), java.lang.Object(ARRAY(i279)), i245) -> f3625_0_main_Inc(EOS(STATIC_3625), java.lang.Object(ARRAY(i279)), java.lang.Object(ARRAY(i279)), i245) :|: TRUE f3625_0_main_Inc(EOS(STATIC_3625), java.lang.Object(ARRAY(i279)), java.lang.Object(ARRAY(i279)), i245) -> f3629_0_main_JMP(EOS(STATIC_3629), java.lang.Object(ARRAY(i279)), java.lang.Object(ARRAY(i279)), i245 + 1) :|: TRUE f3629_0_main_JMP(EOS(STATIC_3629), java.lang.Object(ARRAY(i279)), java.lang.Object(ARRAY(i279)), i280) -> f3634_0_main_Load(EOS(STATIC_3634), java.lang.Object(ARRAY(i279)), java.lang.Object(ARRAY(i279)), i280) :|: TRUE f3634_0_main_Load(EOS(STATIC_3634), java.lang.Object(ARRAY(i279)), java.lang.Object(ARRAY(i279)), i280) -> f3497_0_main_Load(EOS(STATIC_3497), java.lang.Object(ARRAY(i279)), java.lang.Object(ARRAY(i279)), i280) :|: TRUE f3497_0_main_Load(EOS(STATIC_3497), java.lang.Object(o12sub), java.lang.Object(o12sub), i245) -> f3503_0_main_Load(EOS(STATIC_3503), java.lang.Object(o12sub), java.lang.Object(o12sub), i245, i245) :|: TRUE f3577_1_rec0_Load(EOS(STATIC_3577), java.lang.Object(ARRAY(i248)), java.lang.Object(ARRAY(i248)), i245, matching1, i279) -> f3622_0_rec0_Return(EOS(STATIC_3622), java.lang.Object(ARRAY(i279)), java.lang.Object(ARRAY(i279)), i245) :|: TRUE && matching1 = 0 Combined rules. Obtained 2 IRulesP rules: f3622_0_rec0_Return(EOS(STATIC_3622), java.lang.Object(ARRAY(i279:0)), java.lang.Object(ARRAY(i279:0)), i245:0) -> f3622_0_rec0_Return(EOS(STATIC_3622), java.lang.Object(ARRAY(i279:0)), java.lang.Object(ARRAY(i279:0)), i245:0 + 1) :|: i279:0 > 0 && i279:0 > i245:0 + 1 Removed following non-SCC rules: f3622_0_rec0_Return(EOS(STATIC_3622), java.lang.Object(ARRAY(i279:0)), java.lang.Object(ARRAY(i279:0)), i245:0) -> f4706_0_rec0_Load(EOS(STATIC_4706), 0, i279:0, 0, i279:0) :|: i279:0 > 0 && i279:0 > i245:0 + 1 Filtered constant ground arguments: f3622_0_rec0_Return(x1, x2, x3, x4) -> f3622_0_rec0_Return(x2, x3, x4) EOS(x1) -> EOS Filtered duplicate arguments: f3622_0_rec0_Return(x1, x2, x3) -> f3622_0_rec0_Return(x2, x3) Finished conversion. Obtained 1 rules.P rules: f3622_0_rec0_Return(java.lang.Object(ARRAY(i279:0)), i245:0, i279:0) -> f3622_0_rec0_Return(java.lang.Object(ARRAY(i279:0)), i245:0 + 1, i279:0) :|: i279:0 > 0 && i279:0 > i245:0 + 1 ---------------------------------------- (74) Obligation: Rules: f3622_0_rec0_Return(java.lang.Object(ARRAY(i279:0)), i245:0, i279:0) -> f3622_0_rec0_Return(java.lang.Object(ARRAY(i279:0)), i245:0 + 1, i279:0) :|: i279:0 > 0 && i279:0 > i245:0 + 1 ---------------------------------------- (75) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (76) Obligation: Rules: f3622_0_rec0_Return(java.lang.Object(ARRAY(i279:0)), i245:0, i279:0) -> f3622_0_rec0_Return(java.lang.Object(ARRAY(i279:0)), arith, i279:0) :|: i279:0 > 0 && i279:0 > i245:0 + 1 && arith = i245:0 + 1 ---------------------------------------- (77) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f3622_0_rec0_Return(java.lang.Object(ARRAY(i279:0)), i245:0, i279:0) -> f3622_0_rec0_Return(java.lang.Object(ARRAY(i279:0)), arith, i279:0) :|: i279:0 > 0 && i279:0 > i245:0 + 1 && arith = i245:0 + 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (78) Obligation: Termination digraph: Nodes: (1) f3622_0_rec0_Return(java.lang.Object(ARRAY(i279:0)), i245:0, i279:0) -> f3622_0_rec0_Return(java.lang.Object(ARRAY(i279:0)), arith, i279:0) :|: i279:0 > 0 && i279:0 > i245:0 + 1 && arith = i245:0 + 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (79) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (80) Obligation: Rules: f3622_0_rec0_Return(java.lang.Object(ARRAY(i279:0:0)), i245:0:0, i279:0:0) -> f3622_0_rec0_Return(java.lang.Object(ARRAY(i279:0:0)), i245:0:0 + 1, i279:0:0) :|: i279:0:0 > 0 && i279:0:0 > i245:0:0 + 1 ---------------------------------------- (81) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f3622_0_rec0_Return(VARIABLE, INTEGER, INTEGER) java.lang.Object(VARIABLE) ARRAY(INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (82) Obligation: Rules: f3622_0_rec0_Return(c, i245:0:0, i279:0:0) -> f3622_0_rec0_Return(c1, c2, i279:0:0) :|: c2 = i245:0:0 + 1 && (c1 = 0 && c = 0) && (i279:0:0 > 0 && i279:0:0 > i245:0:0 + 1) ---------------------------------------- (83) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f3622_0_rec0_Return(x, x1, x2)] = c*x - x1 + x2 The following rules are decreasing: f3622_0_rec0_Return(c, i245:0:0, i279:0:0) -> f3622_0_rec0_Return(c1, c2, i279:0:0) :|: c2 = i245:0:0 + 1 && (c1 = 0 && c = 0) && (i279:0:0 > 0 && i279:0:0 > i245:0:0 + 1) The following rules are bounded: f3622_0_rec0_Return(c, i245:0:0, i279:0:0) -> f3622_0_rec0_Return(c1, c2, i279:0:0) :|: c2 = i245:0:0 + 1 && (c1 = 0 && c = 0) && (i279:0:0 > 0 && i279:0:0 > i245:0:0 + 1) ---------------------------------------- (84) YES