11.12/3.91 YES 11.12/3.91 proof of /export/starexec/sandbox/benchmark/theBenchmark.c 11.12/3.91 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 11.12/3.91 11.12/3.91 11.12/3.91 Termination of the given C Problem could be proven: 11.12/3.91 11.12/3.91 (0) C Problem 11.12/3.91 (1) CToIRSProof [EQUIVALENT, 0 ms] 11.12/3.91 (2) IntTRS 11.12/3.91 (3) TerminationGraphProcessor [SOUND, 104 ms] 11.12/3.91 (4) IntTRS 11.12/3.91 (5) IntTRSCompressionProof [EQUIVALENT, 14 ms] 11.12/3.91 (6) IntTRS 11.12/3.91 (7) IntTRSUnneededArgumentFilterProof [EQUIVALENT, 0 ms] 11.12/3.91 (8) IntTRS 11.12/3.91 (9) PolynomialOrderProcessor [EQUIVALENT, 24 ms] 11.12/3.91 (10) AND 11.12/3.91 (11) IntTRS 11.12/3.91 (12) TerminationGraphProcessor [EQUIVALENT, 18 ms] 11.12/3.91 (13) YES 11.12/3.91 (14) IntTRS 11.12/3.91 (15) TerminationGraphProcessor [EQUIVALENT, 0 ms] 11.12/3.91 (16) YES 11.12/3.91 11.12/3.91 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (0) 11.12/3.91 Obligation: 11.12/3.91 c file /export/starexec/sandbox/benchmark/theBenchmark.c 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (1) CToIRSProof (EQUIVALENT) 11.12/3.91 Parsed C Integer Program as IRS. 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (2) 11.12/3.91 Obligation: 11.12/3.91 Rules: 11.12/3.91 f1(c, flag, x, y, z) -> f2(0, flag, x, y, z) :|: TRUE 11.12/3.91 f2(x1, x2, x3, x4, x5) -> f3(x1, 1, x3, x4, x5) :|: TRUE 11.12/3.91 f3(x6, x7, x8, x9, x10) -> f4(x6, x7, x11, x9, x10) :|: TRUE 11.12/3.91 f4(x12, x13, x14, x15, x16) -> f5(x12, x13, x14, x17, x16) :|: TRUE 11.12/3.91 f5(x18, x19, x20, x21, x22) -> f6(x18, x19, x20, x21, x23) :|: TRUE 11.12/3.91 f8(x24, x25, x26, x27, x28) -> f11(x24, x25, x26, arith, x28) :|: TRUE && arith = x26 * x27 11.12/3.91 f12(x99, x100, x101, x102, x103) -> f15(x99, x100, x101, x104, x103) :|: TRUE && x104 = 0 - x101 * x102 11.12/3.91 f13(x34, x35, x36, x37, x38) -> f16(x34, 0, x36, x37, x38) :|: TRUE 11.12/3.91 f9(x39, x40, x41, x42, x43) -> f12(x39, x40, x41, x42, x43) :|: x42 > 0 && x41 < 0 - 1 11.12/3.91 f9(x44, x45, x46, x47, x48) -> f13(x44, x45, x46, x47, x48) :|: x47 <= 0 11.12/3.91 f9(x105, x106, x107, x108, x109) -> f13(x105, x106, x107, x108, x109) :|: x107 >= 0 - 1 11.12/3.91 f15(x49, x50, x51, x52, x53) -> f14(x49, x50, x51, x52, x53) :|: TRUE 11.12/3.91 f16(x54, x55, x56, x57, x58) -> f14(x54, x55, x56, x57, x58) :|: TRUE 11.12/3.91 f7(x59, x60, x61, x62, x63) -> f8(x59, x60, x61, x62, x63) :|: x62 > 0 && x61 > 1 11.12/3.91 f7(x64, x65, x66, x67, x68) -> f9(x64, x65, x66, x67, x68) :|: x67 <= 0 11.12/3.91 f7(x110, x111, x112, x113, x114) -> f9(x110, x111, x112, x113, x114) :|: x112 <= 1 11.12/3.91 f11(x69, x70, x71, x72, x73) -> f10(x69, x70, x71, x72, x73) :|: TRUE 11.12/3.91 f14(x74, x75, x76, x77, x78) -> f10(x74, x75, x76, x77, x78) :|: TRUE 11.12/3.91 f10(x115, x116, x117, x118, x119) -> f17(x120, x116, x117, x118, x119) :|: TRUE && x120 = x115 + 1 11.12/3.91 f6(x84, x85, x86, x87, x88) -> f7(x84, x85, x86, x87, x88) :|: x87 < x88 && x85 > 0 11.12/3.91 f17(x89, x90, x91, x92, x93) -> f6(x89, x90, x91, x92, x93) :|: TRUE 11.12/3.91 f6(x94, x95, x96, x97, x98) -> f18(x94, x95, x96, x97, x98) :|: x97 >= x98 11.12/3.91 f6(x121, x122, x123, x124, x125) -> f18(x121, x122, x123, x124, x125) :|: x122 <= 0 11.12/3.91 Start term: f1(c, flag, x, y, z) 11.12/3.91 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (3) TerminationGraphProcessor (SOUND) 11.12/3.91 Constructed the termination graph and obtained one non-trivial SCC. 11.12/3.91 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (4) 11.12/3.91 Obligation: 11.12/3.91 Rules: 11.12/3.91 f6(x84, x85, x86, x87, x88) -> f7(x84, x85, x86, x87, x88) :|: x87 < x88 && x85 > 0 11.12/3.91 f17(x89, x90, x91, x92, x93) -> f6(x89, x90, x91, x92, x93) :|: TRUE 11.12/3.91 f10(x115, x116, x117, x118, x119) -> f17(x120, x116, x117, x118, x119) :|: TRUE && x120 = x115 + 1 11.12/3.91 f11(x69, x70, x71, x72, x73) -> f10(x69, x70, x71, x72, x73) :|: TRUE 11.12/3.91 f8(x24, x25, x26, x27, x28) -> f11(x24, x25, x26, arith, x28) :|: TRUE && arith = x26 * x27 11.12/3.91 f7(x59, x60, x61, x62, x63) -> f8(x59, x60, x61, x62, x63) :|: x62 > 0 && x61 > 1 11.12/3.91 f14(x74, x75, x76, x77, x78) -> f10(x74, x75, x76, x77, x78) :|: TRUE 11.12/3.91 f15(x49, x50, x51, x52, x53) -> f14(x49, x50, x51, x52, x53) :|: TRUE 11.12/3.91 f12(x99, x100, x101, x102, x103) -> f15(x99, x100, x101, x104, x103) :|: TRUE && x104 = 0 - x101 * x102 11.12/3.91 f9(x39, x40, x41, x42, x43) -> f12(x39, x40, x41, x42, x43) :|: x42 > 0 && x41 < 0 - 1 11.12/3.91 f7(x64, x65, x66, x67, x68) -> f9(x64, x65, x66, x67, x68) :|: x67 <= 0 11.12/3.91 f7(x110, x111, x112, x113, x114) -> f9(x110, x111, x112, x113, x114) :|: x112 <= 1 11.12/3.91 f16(x54, x55, x56, x57, x58) -> f14(x54, x55, x56, x57, x58) :|: TRUE 11.12/3.91 f13(x34, x35, x36, x37, x38) -> f16(x34, 0, x36, x37, x38) :|: TRUE 11.12/3.91 f9(x44, x45, x46, x47, x48) -> f13(x44, x45, x46, x47, x48) :|: x47 <= 0 11.12/3.91 f9(x105, x106, x107, x108, x109) -> f13(x105, x106, x107, x108, x109) :|: x107 >= 0 - 1 11.12/3.91 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (5) IntTRSCompressionProof (EQUIVALENT) 11.12/3.91 Compressed rules. 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (6) 11.12/3.91 Obligation: 11.12/3.91 Rules: 11.12/3.91 f10(x115:0, x116:0, x117:0, x118:0, x119:0) -> f9(x115:0 + 1, x116:0, x117:0, x118:0, x119:0) :|: x119:0 > x118:0 && x116:0 > 0 && x118:0 < 1 11.12/3.91 f9(x39:0, x40:0, x41:0, x42:0, x43:0) -> f10(x39:0, x40:0, x41:0, 0 - x41:0 * x42:0, x43:0) :|: x42:0 > 0 && x41:0 < -1 11.12/3.91 f9(x44:0, x45:0, x46:0, x47:0, x48:0) -> f10(x44:0, 0, x46:0, x47:0, x48:0) :|: x47:0 < 1 11.12/3.91 f10(x, x1, x2, x3, x4) -> f9(x + 1, x1, x2, x3, x4) :|: x4 > x3 && x1 > 0 && x2 < 2 11.12/3.91 f9(x105:0, x106:0, x107:0, x108:0, x109:0) -> f10(x105:0, 0, x107:0, x108:0, x109:0) :|: x107:0 > -2 11.12/3.91 f10(x5, x6, x7, x8, x9) -> f10(x5 + 1, x6, x7, x7 * x8, x9) :|: x6 > 0 && x9 > x8 && x7 > 1 && x8 > 0 11.12/3.91 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (7) IntTRSUnneededArgumentFilterProof (EQUIVALENT) 11.12/3.91 Some arguments are removed because they cannot influence termination. We removed arguments according to the following replacements: 11.12/3.91 11.12/3.91 f10(x1, x2, x3, x4, x5) -> f10(x2, x3, x4, x5) 11.12/3.91 f9(x1, x2, x3, x4, x5) -> f9(x2, x3, x4, x5) 11.12/3.91 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (8) 11.12/3.91 Obligation: 11.12/3.91 Rules: 11.12/3.91 f10(x116:0, x117:0, x118:0, x119:0) -> f9(x116:0, x117:0, x118:0, x119:0) :|: x119:0 > x118:0 && x116:0 > 0 && x118:0 < 1 11.12/3.91 f9(x40:0, x41:0, x42:0, x43:0) -> f10(x40:0, x41:0, 0 - x41:0 * x42:0, x43:0) :|: x42:0 > 0 && x41:0 < -1 11.12/3.91 f9(x45:0, x46:0, x47:0, x48:0) -> f10(0, x46:0, x47:0, x48:0) :|: x47:0 < 1 11.12/3.91 f10(x1, x2, x3, x4) -> f9(x1, x2, x3, x4) :|: x4 > x3 && x1 > 0 && x2 < 2 11.12/3.91 f9(x106:0, x107:0, x108:0, x109:0) -> f10(0, x107:0, x108:0, x109:0) :|: x107:0 > -2 11.12/3.91 f10(x6, x7, x8, x9) -> f10(x6, x7, x7 * x8, x9) :|: x6 > 0 && x9 > x8 && x7 > 1 && x8 > 0 11.12/3.91 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (9) PolynomialOrderProcessor (EQUIVALENT) 11.12/3.91 Found the following polynomial interpretation: 11.12/3.91 [f10(x, x1, x2, x3)] = -1 - x2 + x3 11.12/3.91 [f9(x4, x5, x6, x7)] = -1 - x6 + x7 11.12/3.91 11.12/3.91 The following rules are decreasing: 11.12/3.91 f9(x40:0, x41:0, x42:0, x43:0) -> f10(x40:0, x41:0, 0 - x41:0 * x42:0, x43:0) :|: x42:0 > 0 && x41:0 < -1 11.12/3.91 f10(x6, x7, x8, x9) -> f10(x6, x7, x7 * x8, x9) :|: x6 > 0 && x9 > x8 && x7 > 1 && x8 > 0 11.12/3.91 The following rules are bounded: 11.12/3.91 f10(x116:0, x117:0, x118:0, x119:0) -> f9(x116:0, x117:0, x118:0, x119:0) :|: x119:0 > x118:0 && x116:0 > 0 && x118:0 < 1 11.12/3.91 f10(x1, x2, x3, x4) -> f9(x1, x2, x3, x4) :|: x4 > x3 && x1 > 0 && x2 < 2 11.12/3.91 f10(x6, x7, x8, x9) -> f10(x6, x7, x7 * x8, x9) :|: x6 > 0 && x9 > x8 && x7 > 1 && x8 > 0 11.12/3.91 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (10) 11.12/3.91 Complex Obligation (AND) 11.12/3.91 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (11) 11.12/3.91 Obligation: 11.12/3.91 Rules: 11.12/3.91 f10(x116:0, x117:0, x118:0, x119:0) -> f9(x116:0, x117:0, x118:0, x119:0) :|: x119:0 > x118:0 && x116:0 > 0 && x118:0 < 1 11.12/3.91 f9(x45:0, x46:0, x47:0, x48:0) -> f10(0, x46:0, x47:0, x48:0) :|: x47:0 < 1 11.12/3.91 f10(x1, x2, x3, x4) -> f9(x1, x2, x3, x4) :|: x4 > x3 && x1 > 0 && x2 < 2 11.12/3.91 f9(x106:0, x107:0, x108:0, x109:0) -> f10(0, x107:0, x108:0, x109:0) :|: x107:0 > -2 11.12/3.91 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (12) TerminationGraphProcessor (EQUIVALENT) 11.12/3.91 Constructed the termination graph and obtained no non-trivial SCC(s). 11.12/3.91 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (13) 11.12/3.91 YES 11.12/3.91 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (14) 11.12/3.91 Obligation: 11.12/3.91 Rules: 11.12/3.91 f9(x40:0, x41:0, x42:0, x43:0) -> f10(x40:0, x41:0, 0 - x41:0 * x42:0, x43:0) :|: x42:0 > 0 && x41:0 < -1 11.12/3.91 f9(x45:0, x46:0, x47:0, x48:0) -> f10(0, x46:0, x47:0, x48:0) :|: x47:0 < 1 11.12/3.91 f9(x106:0, x107:0, x108:0, x109:0) -> f10(0, x107:0, x108:0, x109:0) :|: x107:0 > -2 11.12/3.91 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (15) TerminationGraphProcessor (EQUIVALENT) 11.12/3.91 Constructed the termination graph and obtained no non-trivial SCC(s). 11.12/3.91 11.12/3.91 ---------------------------------------- 11.12/3.91 11.12/3.91 (16) 11.12/3.91 YES 11.12/3.96 EOF