19.18/7.10 YES 19.18/7.10 proof of /export/starexec/sandbox/benchmark/theBenchmark.jar 19.18/7.10 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 19.18/7.10 19.18/7.10 19.18/7.10 termination of the given Bare JBC problem could be proven: 19.18/7.10 19.18/7.10 (0) Bare JBC problem 19.18/7.10 (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] 19.18/7.10 (2) JBC problem 19.18/7.10 (3) JBCToGraph [EQUIVALENT, 426 ms] 19.18/7.10 (4) JBCTerminationGraph 19.18/7.10 (5) TerminationGraphToSCCProof [SOUND, 1 ms] 19.18/7.10 (6) JBCTerminationSCC 19.18/7.10 (7) SCCToIRSProof [SOUND, 104 ms] 19.18/7.10 (8) IRSwT 19.18/7.10 (9) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 19.18/7.10 (10) IRSwT 19.18/7.10 (11) IRSwTTerminationDigraphProof [EQUIVALENT, 99 ms] 19.18/7.10 (12) IRSwT 19.18/7.10 (13) IntTRSCompressionProof [EQUIVALENT, 0 ms] 19.18/7.10 (14) IRSwT 19.18/7.10 (15) TempFilterProof [SOUND, 66 ms] 19.18/7.10 (16) IntTRS 19.18/7.10 (17) PolynomialOrderProcessor [EQUIVALENT, 21 ms] 19.18/7.10 (18) IntTRS 19.18/7.10 (19) RankingReductionPairProof [EQUIVALENT, 0 ms] 19.18/7.10 (20) YES 19.18/7.10 19.18/7.10 19.18/7.10 ---------------------------------------- 19.18/7.10 19.18/7.10 (0) 19.18/7.10 Obligation: 19.18/7.10 need to prove termination of the following program: 19.18/7.10 public class Test2 { 19.18/7.10 public static void main(String[] args) { 19.18/7.10 iter(args.length, args.length % 5, args.length % 4); 19.18/7.10 } 19.18/7.10 19.18/7.10 private static void iter(int x, int y, int z) { 19.18/7.10 while (x + y + 3 * z >= 0) { 19.18/7.10 if (x > y) 19.18/7.10 x--; 19.18/7.10 else if (y > z) { 19.18/7.10 x++; 19.18/7.10 y -= 2; 19.18/7.10 } 19.18/7.10 else if (y <= z) { 19.18/7.10 x = add(x, 1); 19.18/7.10 y = add(y, 1); 19.18/7.10 z = z - 1; 19.18/7.10 } 19.18/7.10 } 19.18/7.10 } 19.18/7.10 19.18/7.10 private static int add(int v, int w) { 19.18/7.10 return v + w; 19.18/7.10 } 19.18/7.10 } 19.18/7.10 19.18/7.10 19.18/7.10 19.18/7.10 ---------------------------------------- 19.18/7.10 19.18/7.10 (1) BareJBCToJBCProof (EQUIVALENT) 19.18/7.10 initialized classpath 19.18/7.10 ---------------------------------------- 19.18/7.10 19.18/7.10 (2) 19.18/7.10 Obligation: 19.18/7.10 need to prove termination of the following program: 19.18/7.10 public class Test2 { 19.18/7.10 public static void main(String[] args) { 19.18/7.10 iter(args.length, args.length % 5, args.length % 4); 19.18/7.10 } 19.18/7.10 19.18/7.10 private static void iter(int x, int y, int z) { 19.18/7.10 while (x + y + 3 * z >= 0) { 19.18/7.10 if (x > y) 19.18/7.10 x--; 19.18/7.10 else if (y > z) { 19.18/7.10 x++; 19.18/7.10 y -= 2; 19.18/7.10 } 19.18/7.10 else if (y <= z) { 19.18/7.10 x = add(x, 1); 19.18/7.10 y = add(y, 1); 19.18/7.10 z = z - 1; 19.18/7.10 } 19.18/7.10 } 19.18/7.10 } 19.18/7.10 19.18/7.10 private static int add(int v, int w) { 19.18/7.10 return v + w; 19.18/7.10 } 19.18/7.10 } 19.18/7.10 19.18/7.10 19.18/7.10 19.18/7.10 ---------------------------------------- 19.18/7.10 19.18/7.10 (3) JBCToGraph (EQUIVALENT) 19.18/7.10 Constructed TerminationGraph. 19.18/7.10 ---------------------------------------- 19.18/7.10 19.18/7.10 (4) 19.18/7.10 Obligation: 19.18/7.10 Termination Graph based on JBC Program: 19.18/7.10 Test2.main([Ljava/lang/String;)V: Graph of 76 nodes with 1 SCC. 19.18/7.10 19.18/7.10 19.18/7.10 19.18/7.10 19.18/7.10 19.18/7.10 ---------------------------------------- 19.18/7.10 19.18/7.10 (5) TerminationGraphToSCCProof (SOUND) 19.18/7.10 Splitted TerminationGraph to 1 SCCs. 19.18/7.10 ---------------------------------------- 19.18/7.10 19.18/7.10 (6) 19.18/7.10 Obligation: 19.18/7.10 SCC of termination graph based on JBC Program. 19.18/7.10 SCC contains nodes from the following methods: Test2.main([Ljava/lang/String;)V 19.18/7.10 SCC calls the following helper methods: 19.18/7.10 Performed SCC analyses: 19.18/7.10 *Used field analysis yielded the following read fields: 19.18/7.10 19.18/7.10 *Marker field analysis yielded the following relations that could be markers: 19.18/7.10 19.18/7.10 ---------------------------------------- 19.18/7.10 19.18/7.10 (7) SCCToIRSProof (SOUND) 19.18/7.10 Transformed FIGraph SCCs to intTRSs. Log: 19.18/7.10 Generated rules. Obtained 54 IRulesP rules: 19.18/7.10 f970_0_iter_Load(EOS(STATIC_970), i273, i274, i275, i273) -> f971_0_iter_IntArithmetic(EOS(STATIC_971), i273, i274, i275, i273, i274) :|: TRUE 19.18/7.11 f971_0_iter_IntArithmetic(EOS(STATIC_971), i273, i274, i275, i273, i274) -> f972_0_iter_ConstantStackPush(EOS(STATIC_972), i273, i274, i275, i273 + i274) :|: TRUE 19.18/7.11 f972_0_iter_ConstantStackPush(EOS(STATIC_972), i273, i274, i275, i281) -> f973_0_iter_Load(EOS(STATIC_973), i273, i274, i275, i281, 3) :|: TRUE 19.18/7.11 f973_0_iter_Load(EOS(STATIC_973), i273, i274, i275, i281, matching1) -> f974_0_iter_IntArithmetic(EOS(STATIC_974), i273, i274, i275, i281, 3, i275) :|: TRUE && matching1 = 3 19.18/7.11 f974_0_iter_IntArithmetic(EOS(STATIC_974), i273, i274, i275, i281, matching1, i275) -> f975_0_iter_IntArithmetic(EOS(STATIC_975), i273, i274, i275, i281, 3 * i275) :|: TRUE && matching1 = 3 19.18/7.11 f975_0_iter_IntArithmetic(EOS(STATIC_975), i273, i274, i275, i281, i282) -> f976_0_iter_LT(EOS(STATIC_976), i273, i274, i275, i281 + i282) :|: TRUE 19.18/7.11 f976_0_iter_LT(EOS(STATIC_976), i273, i274, i275, i285) -> f978_0_iter_LT(EOS(STATIC_978), i273, i274, i275, i285) :|: TRUE 19.18/7.11 f978_0_iter_LT(EOS(STATIC_978), i273, i274, i275, i285) -> f980_0_iter_Load(EOS(STATIC_980), i273, i274, i275) :|: i285 >= 0 19.18/7.11 f980_0_iter_Load(EOS(STATIC_980), i273, i274, i275) -> f982_0_iter_Load(EOS(STATIC_982), i273, i274, i275, i273) :|: TRUE 19.18/7.11 f982_0_iter_Load(EOS(STATIC_982), i273, i274, i275, i273) -> f984_0_iter_LE(EOS(STATIC_984), i273, i274, i275, i273, i274) :|: TRUE 19.18/7.11 f984_0_iter_LE(EOS(STATIC_984), i273, i274, i275, i273, i274) -> f985_0_iter_LE(EOS(STATIC_985), i273, i274, i275, i273, i274) :|: i273 <= i274 19.18/7.11 f984_0_iter_LE(EOS(STATIC_984), i273, i274, i275, i273, i274) -> f986_0_iter_LE(EOS(STATIC_986), i273, i274, i275, i273, i274) :|: i273 > i274 19.18/7.11 f985_0_iter_LE(EOS(STATIC_985), i273, i274, i275, i273, i274) -> f987_0_iter_Load(EOS(STATIC_987), i273, i274, i275) :|: i273 <= i274 19.18/7.11 f987_0_iter_Load(EOS(STATIC_987), i273, i274, i275) -> f989_0_iter_Load(EOS(STATIC_989), i273, i274, i275, i274) :|: TRUE 19.18/7.11 f989_0_iter_Load(EOS(STATIC_989), i273, i274, i275, i274) -> f1000_0_iter_LE(EOS(STATIC_1000), i273, i274, i275, i274, i275) :|: TRUE 19.18/7.11 f1000_0_iter_LE(EOS(STATIC_1000), i273, i274, i275, i274, i275) -> f1002_0_iter_LE(EOS(STATIC_1002), i273, i274, i275, i274, i275) :|: i274 <= i275 19.18/7.11 f1000_0_iter_LE(EOS(STATIC_1000), i273, i274, i275, i274, i275) -> f1003_0_iter_LE(EOS(STATIC_1003), i273, i274, i275, i274, i275) :|: i274 > i275 19.18/7.11 f1002_0_iter_LE(EOS(STATIC_1002), i273, i274, i275, i274, i275) -> f1004_0_iter_Load(EOS(STATIC_1004), i273, i274, i275) :|: i274 <= i275 19.18/7.11 f1004_0_iter_Load(EOS(STATIC_1004), i273, i274, i275) -> f1010_0_iter_Load(EOS(STATIC_1010), i273, i274, i275, i274) :|: TRUE 19.18/7.11 f1010_0_iter_Load(EOS(STATIC_1010), i273, i274, i275, i274) -> f1015_0_iter_GT(EOS(STATIC_1015), i273, i274, i275, i274, i275) :|: TRUE 19.18/7.11 f1015_0_iter_GT(EOS(STATIC_1015), i273, i274, i275, i274, i275) -> f1028_0_iter_GT(EOS(STATIC_1028), i273, i274, i275, i274, i275) :|: i274 <= i275 19.18/7.11 f1028_0_iter_GT(EOS(STATIC_1028), i273, i274, i275, i274, i275) -> f1035_0_iter_Load(EOS(STATIC_1035), i273, i274, i275) :|: i274 <= i275 19.18/7.11 f1035_0_iter_Load(EOS(STATIC_1035), i273, i274, i275) -> f1036_0_iter_ConstantStackPush(EOS(STATIC_1036), i274, i275, i273) :|: TRUE 19.18/7.11 f1036_0_iter_ConstantStackPush(EOS(STATIC_1036), i274, i275, i273) -> f1037_0_iter_InvokeMethod(EOS(STATIC_1037), i274, i275, i273, 1) :|: TRUE 19.18/7.11 f1037_0_iter_InvokeMethod(EOS(STATIC_1037), i274, i275, i273, matching1) -> f1038_0_add_Load(EOS(STATIC_1038), i274, i275, i273, 1) :|: TRUE && matching1 = 1 19.18/7.11 f1038_0_add_Load(EOS(STATIC_1038), i274, i275, i273, matching1) -> f1039_0_add_Load(EOS(STATIC_1039), i274, i275, 1, i273) :|: TRUE && matching1 = 1 19.18/7.11 f1039_0_add_Load(EOS(STATIC_1039), i274, i275, matching1, i273) -> f1040_0_add_IntArithmetic(EOS(STATIC_1040), i274, i275, i273, 1) :|: TRUE && matching1 = 1 19.18/7.11 f1040_0_add_IntArithmetic(EOS(STATIC_1040), i274, i275, i273, matching1) -> f1041_0_add_Return(EOS(STATIC_1041), i274, i275, i273 + 1) :|: TRUE && matching1 = 1 19.18/7.11 f1041_0_add_Return(EOS(STATIC_1041), i274, i275, i301) -> f1042_0_iter_Store(EOS(STATIC_1042), i274, i275, i301) :|: TRUE 19.18/7.11 f1042_0_iter_Store(EOS(STATIC_1042), i274, i275, i301) -> f1043_0_iter_Load(EOS(STATIC_1043), i301, i274, i275) :|: TRUE 19.18/7.11 f1043_0_iter_Load(EOS(STATIC_1043), i301, i274, i275) -> f1046_0_iter_ConstantStackPush(EOS(STATIC_1046), i301, i275, i274) :|: TRUE 19.18/7.11 f1046_0_iter_ConstantStackPush(EOS(STATIC_1046), i301, i275, i274) -> f1048_0_iter_InvokeMethod(EOS(STATIC_1048), i301, i275, i274, 1) :|: TRUE 19.18/7.11 f1048_0_iter_InvokeMethod(EOS(STATIC_1048), i301, i275, i274, matching1) -> f1050_0_add_Load(EOS(STATIC_1050), i301, i275, i274, 1) :|: TRUE && matching1 = 1 19.18/7.11 f1050_0_add_Load(EOS(STATIC_1050), i301, i275, i274, matching1) -> f1053_0_add_Load(EOS(STATIC_1053), i301, i275, 1, i274) :|: TRUE && matching1 = 1 19.18/7.11 f1053_0_add_Load(EOS(STATIC_1053), i301, i275, matching1, i274) -> f1055_0_add_IntArithmetic(EOS(STATIC_1055), i301, i275, i274, 1) :|: TRUE && matching1 = 1 19.18/7.11 f1055_0_add_IntArithmetic(EOS(STATIC_1055), i301, i275, i274, matching1) -> f1058_0_add_Return(EOS(STATIC_1058), i301, i275, i274 + 1) :|: TRUE && matching1 = 1 19.18/7.11 f1058_0_add_Return(EOS(STATIC_1058), i301, i275, i305) -> f1059_0_iter_Store(EOS(STATIC_1059), i301, i275, i305) :|: TRUE 19.18/7.11 f1059_0_iter_Store(EOS(STATIC_1059), i301, i275, i305) -> f1063_0_iter_Load(EOS(STATIC_1063), i301, i305, i275) :|: TRUE 19.18/7.11 f1063_0_iter_Load(EOS(STATIC_1063), i301, i305, i275) -> f1065_0_iter_ConstantStackPush(EOS(STATIC_1065), i301, i305, i275) :|: TRUE 19.18/7.11 f1065_0_iter_ConstantStackPush(EOS(STATIC_1065), i301, i305, i275) -> f1067_0_iter_IntArithmetic(EOS(STATIC_1067), i301, i305, i275, 1) :|: TRUE 19.18/7.11 f1067_0_iter_IntArithmetic(EOS(STATIC_1067), i301, i305, i275, matching1) -> f1069_0_iter_Store(EOS(STATIC_1069), i301, i305, i275 - 1) :|: TRUE && matching1 = 1 19.18/7.11 f1069_0_iter_Store(EOS(STATIC_1069), i301, i305, i309) -> f1071_0_iter_JMP(EOS(STATIC_1071), i301, i305, i309) :|: TRUE 19.18/7.11 f1071_0_iter_JMP(EOS(STATIC_1071), i301, i305, i309) -> f1082_0_iter_Load(EOS(STATIC_1082), i301, i305, i309) :|: TRUE 19.18/7.11 f1082_0_iter_Load(EOS(STATIC_1082), i301, i305, i309) -> f969_0_iter_Load(EOS(STATIC_969), i301, i305, i309) :|: TRUE 19.18/7.11 f969_0_iter_Load(EOS(STATIC_969), i273, i274, i275) -> f970_0_iter_Load(EOS(STATIC_970), i273, i274, i275, i273) :|: TRUE 19.18/7.11 f1003_0_iter_LE(EOS(STATIC_1003), i273, i274, i275, i274, i275) -> f1008_0_iter_Inc(EOS(STATIC_1008), i273, i274, i275) :|: i274 > i275 19.18/7.11 f1008_0_iter_Inc(EOS(STATIC_1008), i273, i274, i275) -> f1013_0_iter_Inc(EOS(STATIC_1013), i273 + 1, i274, i275) :|: TRUE 19.18/7.11 f1013_0_iter_Inc(EOS(STATIC_1013), i292, i274, i275) -> f1016_0_iter_JMP(EOS(STATIC_1016), i292, i274 + -2, i275) :|: TRUE 19.18/7.11 f1016_0_iter_JMP(EOS(STATIC_1016), i292, i295, i275) -> f1034_0_iter_Load(EOS(STATIC_1034), i292, i295, i275) :|: TRUE 19.18/7.11 f1034_0_iter_Load(EOS(STATIC_1034), i292, i295, i275) -> f969_0_iter_Load(EOS(STATIC_969), i292, i295, i275) :|: TRUE 19.18/7.11 f986_0_iter_LE(EOS(STATIC_986), i273, i274, i275, i273, i274) -> f988_0_iter_Inc(EOS(STATIC_988), i273, i274, i275) :|: i273 > i274 19.18/7.11 f988_0_iter_Inc(EOS(STATIC_988), i273, i274, i275) -> f990_0_iter_JMP(EOS(STATIC_990), i273 + -1, i274, i275) :|: TRUE 19.18/7.11 f990_0_iter_JMP(EOS(STATIC_990), i286, i274, i275) -> f1001_0_iter_Load(EOS(STATIC_1001), i286, i274, i275) :|: TRUE 19.18/7.11 f1001_0_iter_Load(EOS(STATIC_1001), i286, i274, i275) -> f969_0_iter_Load(EOS(STATIC_969), i286, i274, i275) :|: TRUE 19.18/7.11 Combined rules. Obtained 3 IRulesP rules: 19.18/7.11 f970_0_iter_Load(EOS(STATIC_970), i273:0, i274:0, i275:0, i273:0) -> f970_0_iter_Load(EOS(STATIC_970), i273:0 + 1, i274:0 + 1, i275:0 - 1, i273:0 + 1) :|: i273:0 + i274:0 + 3 * i275:0 >= 0 && i274:0 >= i273:0 && i275:0 >= i274:0 19.18/7.11 f970_0_iter_Load(EOS(STATIC_970), i273:0, i274:0, i275:0, i273:0) -> f970_0_iter_Load(EOS(STATIC_970), i273:0 - 1, i274:0, i275:0, i273:0 - 1) :|: i273:0 + i274:0 + 3 * i275:0 >= 0 && i274:0 < i273:0 19.18/7.11 f970_0_iter_Load(EOS(STATIC_970), i273:0, i274:0, i275:0, i273:0) -> f970_0_iter_Load(EOS(STATIC_970), i273:0 + 1, i274:0 - 2, i275:0, i273:0 + 1) :|: i273:0 + i274:0 + 3 * i275:0 >= 0 && i274:0 >= i273:0 && i275:0 < i274:0 19.18/7.11 Filtered constant ground arguments: 19.18/7.11 f970_0_iter_Load(x1, x2, x3, x4, x5) -> f970_0_iter_Load(x2, x3, x4, x5) 19.18/7.11 EOS(x1) -> EOS 19.18/7.11 Filtered duplicate arguments: 19.18/7.11 f970_0_iter_Load(x1, x2, x3, x4) -> f970_0_iter_Load(x2, x3, x4) 19.18/7.11 Finished conversion. Obtained 3 rules.P rules: 19.18/7.11 f970_0_iter_Load(i274:0, i275:0, i273:0) -> f970_0_iter_Load(i274:0 + 1, i275:0 - 1, i273:0 + 1) :|: i274:0 >= i273:0 && i275:0 >= i274:0 && i273:0 + i274:0 + 3 * i275:0 >= 0 19.18/7.11 f970_0_iter_Load(i274:0, i275:0, i273:0) -> f970_0_iter_Load(i274:0, i275:0, i273:0 - 1) :|: i273:0 + i274:0 + 3 * i275:0 >= 0 && i274:0 < i273:0 19.18/7.11 f970_0_iter_Load(i274:0, i275:0, i273:0) -> f970_0_iter_Load(i274:0 - 2, i275:0, i273:0 + 1) :|: i274:0 >= i273:0 && i275:0 < i274:0 && i273:0 + i274:0 + 3 * i275:0 >= 0 19.18/7.11 19.18/7.11 ---------------------------------------- 19.18/7.11 19.18/7.11 (8) 19.18/7.11 Obligation: 19.18/7.11 Rules: 19.18/7.11 f970_0_iter_Load(i274:0, i275:0, i273:0) -> f970_0_iter_Load(i274:0 + 1, i275:0 - 1, i273:0 + 1) :|: i274:0 >= i273:0 && i275:0 >= i274:0 && i273:0 + i274:0 + 3 * i275:0 >= 0 19.18/7.11 f970_0_iter_Load(x, x1, x2) -> f970_0_iter_Load(x, x1, x2 - 1) :|: x2 + x + 3 * x1 >= 0 && x < x2 19.18/7.11 f970_0_iter_Load(x3, x4, x5) -> f970_0_iter_Load(x3 - 2, x4, x5 + 1) :|: x3 >= x5 && x4 < x3 && x5 + x3 + 3 * x4 >= 0 19.18/7.11 19.18/7.11 ---------------------------------------- 19.18/7.11 19.18/7.11 (9) IRSFormatTransformerProof (EQUIVALENT) 19.18/7.11 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 19.18/7.11 ---------------------------------------- 19.18/7.11 19.18/7.11 (10) 19.18/7.11 Obligation: 19.18/7.11 Rules: 19.18/7.11 f970_0_iter_Load(i274:0, i275:0, i273:0) -> f970_0_iter_Load(arith, arith1, arith2) :|: i274:0 >= i273:0 && i275:0 >= i274:0 && i273:0 + i274:0 + 3 * i275:0 >= 0 && arith = i274:0 + 1 && arith1 = i275:0 - 1 && arith2 = i273:0 + 1 19.18/7.11 f970_0_iter_Load(x6, x7, x8) -> f970_0_iter_Load(x6, x7, x9) :|: x8 + x6 + 3 * x7 >= 0 && x6 < x8 && x9 = x8 - 1 19.18/7.11 f970_0_iter_Load(x10, x11, x12) -> f970_0_iter_Load(x13, x11, x14) :|: x10 >= x12 && x11 < x10 && x12 + x10 + 3 * x11 >= 0 && x13 = x10 - 2 && x14 = x12 + 1 19.18/7.11 19.18/7.11 ---------------------------------------- 19.18/7.11 19.18/7.11 (11) IRSwTTerminationDigraphProof (EQUIVALENT) 19.18/7.11 Constructed termination digraph! 19.18/7.11 Nodes: 19.18/7.11 (1) f970_0_iter_Load(i274:0, i275:0, i273:0) -> f970_0_iter_Load(arith, arith1, arith2) :|: i274:0 >= i273:0 && i275:0 >= i274:0 && i273:0 + i274:0 + 3 * i275:0 >= 0 && arith = i274:0 + 1 && arith1 = i275:0 - 1 && arith2 = i273:0 + 1 19.18/7.11 (2) f970_0_iter_Load(x6, x7, x8) -> f970_0_iter_Load(x6, x7, x9) :|: x8 + x6 + 3 * x7 >= 0 && x6 < x8 && x9 = x8 - 1 19.18/7.11 (3) f970_0_iter_Load(x10, x11, x12) -> f970_0_iter_Load(x13, x11, x14) :|: x10 >= x12 && x11 < x10 && x12 + x10 + 3 * x11 >= 0 && x13 = x10 - 2 && x14 = x12 + 1 19.18/7.11 19.18/7.11 Arcs: 19.18/7.11 (1) -> (1), (3) 19.18/7.11 (2) -> (1), (2), (3) 19.18/7.11 (3) -> (1), (2), (3) 19.18/7.11 19.18/7.11 This digraph is fully evaluated! 19.18/7.11 ---------------------------------------- 19.18/7.11 19.18/7.11 (12) 19.18/7.11 Obligation: 19.18/7.11 19.18/7.11 Termination digraph: 19.18/7.11 Nodes: 19.18/7.11 (1) f970_0_iter_Load(i274:0, i275:0, i273:0) -> f970_0_iter_Load(arith, arith1, arith2) :|: i274:0 >= i273:0 && i275:0 >= i274:0 && i273:0 + i274:0 + 3 * i275:0 >= 0 && arith = i274:0 + 1 && arith1 = i275:0 - 1 && arith2 = i273:0 + 1 19.18/7.11 (2) f970_0_iter_Load(x6, x7, x8) -> f970_0_iter_Load(x6, x7, x9) :|: x8 + x6 + 3 * x7 >= 0 && x6 < x8 && x9 = x8 - 1 19.18/7.11 (3) f970_0_iter_Load(x10, x11, x12) -> f970_0_iter_Load(x13, x11, x14) :|: x10 >= x12 && x11 < x10 && x12 + x10 + 3 * x11 >= 0 && x13 = x10 - 2 && x14 = x12 + 1 19.18/7.11 19.18/7.11 Arcs: 19.18/7.11 (1) -> (1), (3) 19.18/7.11 (2) -> (1), (2), (3) 19.18/7.11 (3) -> (1), (2), (3) 19.18/7.11 19.18/7.11 This digraph is fully evaluated! 19.18/7.11 19.18/7.11 ---------------------------------------- 19.18/7.11 19.18/7.11 (13) IntTRSCompressionProof (EQUIVALENT) 19.18/7.11 Compressed rules. 19.18/7.11 ---------------------------------------- 19.18/7.11 19.18/7.11 (14) 19.18/7.11 Obligation: 19.18/7.11 Rules: 19.18/7.11 f970_0_iter_Load(x6:0, x7:0, x8:0) -> f970_0_iter_Load(x6:0, x7:0, x8:0 - 1) :|: x8:0 + x6:0 + 3 * x7:0 >= 0 && x8:0 > x6:0 19.18/7.11 f970_0_iter_Load(x10:0, x11:0, x12:0) -> f970_0_iter_Load(x10:0 - 2, x11:0, x12:0 + 1) :|: x12:0 <= x10:0 && x11:0 < x10:0 && x12:0 + x10:0 + 3 * x11:0 >= 0 19.18/7.11 f970_0_iter_Load(i274:0:0, i275:0:0, i273:0:0) -> f970_0_iter_Load(i274:0:0 + 1, i275:0:0 - 1, i273:0:0 + 1) :|: i274:0:0 >= i273:0:0 && i275:0:0 >= i274:0:0 && i273:0:0 + i274:0:0 + 3 * i275:0:0 >= 0 19.18/7.11 19.18/7.11 ---------------------------------------- 19.18/7.11 19.18/7.11 (15) TempFilterProof (SOUND) 19.18/7.11 Used the following sort dictionary for filtering: 19.18/7.11 f970_0_iter_Load(INTEGER, INTEGER, INTEGER) 19.18/7.11 Replaced non-predefined constructor symbols by 0. 19.18/7.11 ---------------------------------------- 19.18/7.11 19.18/7.11 (16) 19.18/7.11 Obligation: 19.18/7.11 Rules: 19.18/7.11 f970_0_iter_Load(x6:0, x7:0, x8:0) -> f970_0_iter_Load(x6:0, x7:0, c) :|: c = x8:0 - 1 && (x8:0 + x6:0 + 3 * x7:0 >= 0 && x8:0 > x6:0) 19.18/7.11 f970_0_iter_Load(x10:0, x11:0, x12:0) -> f970_0_iter_Load(c1, x11:0, c2) :|: c2 = x12:0 + 1 && c1 = x10:0 - 2 && (x12:0 <= x10:0 && x11:0 < x10:0 && x12:0 + x10:0 + 3 * x11:0 >= 0) 19.18/7.11 f970_0_iter_Load(i274:0:0, i275:0:0, i273:0:0) -> f970_0_iter_Load(c3, c4, c5) :|: c5 = i273:0:0 + 1 && (c4 = i275:0:0 - 1 && c3 = i274:0:0 + 1) && (i274:0:0 >= i273:0:0 && i275:0:0 >= i274:0:0 && i273:0:0 + i274:0:0 + 3 * i275:0:0 >= 0) 19.18/7.11 19.18/7.11 ---------------------------------------- 19.18/7.11 19.18/7.11 (17) PolynomialOrderProcessor (EQUIVALENT) 19.18/7.11 Found the following polynomial interpretation: 19.18/7.11 [f970_0_iter_Load(x, x1, x2)] = x + 3*x1 + x2 19.18/7.11 19.18/7.11 The following rules are decreasing: 19.18/7.11 f970_0_iter_Load(x6:0, x7:0, x8:0) -> f970_0_iter_Load(x6:0, x7:0, c) :|: c = x8:0 - 1 && (x8:0 + x6:0 + 3 * x7:0 >= 0 && x8:0 > x6:0) 19.18/7.11 f970_0_iter_Load(x10:0, x11:0, x12:0) -> f970_0_iter_Load(c1, x11:0, c2) :|: c2 = x12:0 + 1 && c1 = x10:0 - 2 && (x12:0 <= x10:0 && x11:0 < x10:0 && x12:0 + x10:0 + 3 * x11:0 >= 0) 19.18/7.11 f970_0_iter_Load(i274:0:0, i275:0:0, i273:0:0) -> f970_0_iter_Load(c3, c4, c5) :|: c5 = i273:0:0 + 1 && (c4 = i275:0:0 - 1 && c3 = i274:0:0 + 1) && (i274:0:0 >= i273:0:0 && i275:0:0 >= i274:0:0 && i273:0:0 + i274:0:0 + 3 * i275:0:0 >= 0) 19.18/7.11 The following rules are bounded: 19.18/7.11 f970_0_iter_Load(i274:0:0, i275:0:0, i273:0:0) -> f970_0_iter_Load(c3, c4, c5) :|: c5 = i273:0:0 + 1 && (c4 = i275:0:0 - 1 && c3 = i274:0:0 + 1) && (i274:0:0 >= i273:0:0 && i275:0:0 >= i274:0:0 && i273:0:0 + i274:0:0 + 3 * i275:0:0 >= 0) 19.18/7.11 19.18/7.11 ---------------------------------------- 19.18/7.11 19.18/7.11 (18) 19.18/7.11 Obligation: 19.18/7.11 Rules: 19.18/7.11 f970_0_iter_Load(x6:0, x7:0, x8:0) -> f970_0_iter_Load(x6:0, x7:0, c) :|: c = x8:0 - 1 && (x8:0 + x6:0 + 3 * x7:0 >= 0 && x8:0 > x6:0) 19.18/7.11 f970_0_iter_Load(x10:0, x11:0, x12:0) -> f970_0_iter_Load(c1, x11:0, c2) :|: c2 = x12:0 + 1 && c1 = x10:0 - 2 && (x12:0 <= x10:0 && x11:0 < x10:0 && x12:0 + x10:0 + 3 * x11:0 >= 0) 19.18/7.11 19.18/7.11 ---------------------------------------- 19.18/7.11 19.18/7.11 (19) RankingReductionPairProof (EQUIVALENT) 19.18/7.11 Interpretation: 19.18/7.11 [ f970_0_iter_Load ] = f970_0_iter_Load_3 + f970_0_iter_Load_1 + 3*f970_0_iter_Load_2 19.18/7.11 19.18/7.11 The following rules are decreasing: 19.18/7.11 f970_0_iter_Load(x6:0, x7:0, x8:0) -> f970_0_iter_Load(x6:0, x7:0, c) :|: c = x8:0 - 1 && (x8:0 + x6:0 + 3 * x7:0 >= 0 && x8:0 > x6:0) 19.18/7.11 f970_0_iter_Load(x10:0, x11:0, x12:0) -> f970_0_iter_Load(c1, x11:0, c2) :|: c2 = x12:0 + 1 && c1 = x10:0 - 2 && (x12:0 <= x10:0 && x11:0 < x10:0 && x12:0 + x10:0 + 3 * x11:0 >= 0) 19.18/7.11 19.18/7.11 The following rules are bounded: 19.18/7.11 f970_0_iter_Load(x6:0, x7:0, x8:0) -> f970_0_iter_Load(x6:0, x7:0, c) :|: c = x8:0 - 1 && (x8:0 + x6:0 + 3 * x7:0 >= 0 && x8:0 > x6:0) 19.18/7.11 f970_0_iter_Load(x10:0, x11:0, x12:0) -> f970_0_iter_Load(c1, x11:0, c2) :|: c2 = x12:0 + 1 && c1 = x10:0 - 2 && (x12:0 <= x10:0 && x11:0 < x10:0 && x12:0 + x10:0 + 3 * x11:0 >= 0) 19.18/7.11 19.18/7.11 19.18/7.11 ---------------------------------------- 19.18/7.11 19.18/7.11 (20) 19.18/7.11 YES 19.32/7.17 EOF