/export/starexec/sandbox/solver/bin/starexec_run_c /export/starexec/sandbox/benchmark/theBenchmark.c /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- YES proof of /export/starexec/sandbox/benchmark/theBenchmark.c # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty Termination of the given C Problem could be proven: (0) C Problem (1) CToIRSProof [EQUIVALENT, 0 ms] (2) IntTRS (3) TerminationGraphProcessor [SOUND, 100 ms] (4) IntTRS (5) IntTRSCompressionProof [EQUIVALENT, 37 ms] (6) IntTRS (7) IntTRSUnneededArgumentFilterProof [EQUIVALENT, 0 ms] (8) IntTRS (9) TerminationGraphProcessor [EQUIVALENT, 25 ms] (10) IntTRS (11) IntTRSCompressionProof [EQUIVALENT, 11 ms] (12) IntTRS (13) PolynomialOrderProcessor [EQUIVALENT, 0 ms] (14) IntTRS (15) IntTRSCompressionProof [EQUIVALENT, 0 ms] (16) IntTRS (17) PolynomialOrderProcessor [EQUIVALENT, 0 ms] (18) YES ---------------------------------------- (0) Obligation: c file /export/starexec/sandbox/benchmark/theBenchmark.c ---------------------------------------- (1) CToIRSProof (EQUIVALENT) Parsed C Integer Program as IRS. ---------------------------------------- (2) Obligation: Rules: f1(x, y, z) -> f2(x_1, y, z) :|: TRUE f2(x1, x2, x3) -> f3(x1, x4, x3) :|: TRUE f5(x5, x6, x7) -> f8(x5, x6, x6) :|: TRUE f6(x8, x9, x10) -> f9(x8, x9, x8) :|: TRUE f4(x11, x12, x13) -> f5(x11, x12, x13) :|: x11 > x12 f4(x14, x15, x16) -> f6(x14, x15, x16) :|: x14 <= x15 f8(x17, x18, x19) -> f7(x17, x18, x19) :|: TRUE f9(x20, x21, x22) -> f7(x20, x21, x22) :|: TRUE f10(x23, x24, x25) -> f13(x23, arith, x25) :|: TRUE && arith = x24 + x23 f13(x64, x65, x66) -> f14(x67, x65, x66) :|: TRUE && x67 = x66 - 1 f14(x68, x69, x70) -> f15(x68, x69, x71) :|: TRUE && x71 = x69 + x70 f11(x72, x73, x74) -> f16(x75, x73, x74) :|: TRUE && x75 = x73 + x72 f16(x76, x77, x78) -> f17(x76, x79, x78) :|: TRUE && x79 = x78 - 1 f17(x80, x81, x82) -> f18(x80, x81, x83) :|: TRUE && x83 = x80 + x82 f7(x41, x42, x43) -> f10(x41, x42, x43) :|: x44 < 0 f7(x84, x85, x86) -> f10(x84, x85, x86) :|: x87 > 0 f7(x45, x46, x47) -> f11(x45, x46, x47) :|: x48 = 0 f15(x49, x50, x51) -> f12(x49, x50, x51) :|: TRUE f18(x52, x53, x54) -> f12(x52, x53, x54) :|: TRUE f3(x55, x56, x57) -> f4(x55, x56, x57) :|: x56 > 0 && x55 > 0 f12(x58, x59, x60) -> f3(x58, x59, x60) :|: TRUE f3(x61, x62, x63) -> f19(x61, x62, x63) :|: x62 <= 0 f3(x88, x89, x90) -> f19(x88, x89, x90) :|: x88 <= 0 Start term: f1(x, y, z) ---------------------------------------- (3) TerminationGraphProcessor (SOUND) Constructed the termination graph and obtained one non-trivial SCC. ---------------------------------------- (4) Obligation: Rules: f3(x55, x56, x57) -> f4(x55, x56, x57) :|: x56 > 0 && x55 > 0 f12(x58, x59, x60) -> f3(x58, x59, x60) :|: TRUE f15(x49, x50, x51) -> f12(x49, x50, x51) :|: TRUE f14(x68, x69, x70) -> f15(x68, x69, x71) :|: TRUE && x71 = x69 + x70 f13(x64, x65, x66) -> f14(x67, x65, x66) :|: TRUE && x67 = x66 - 1 f10(x23, x24, x25) -> f13(x23, arith, x25) :|: TRUE && arith = x24 + x23 f7(x41, x42, x43) -> f10(x41, x42, x43) :|: x44 < 0 f8(x17, x18, x19) -> f7(x17, x18, x19) :|: TRUE f5(x5, x6, x7) -> f8(x5, x6, x6) :|: TRUE f4(x11, x12, x13) -> f5(x11, x12, x13) :|: x11 > x12 f9(x20, x21, x22) -> f7(x20, x21, x22) :|: TRUE f6(x8, x9, x10) -> f9(x8, x9, x8) :|: TRUE f4(x14, x15, x16) -> f6(x14, x15, x16) :|: x14 <= x15 f7(x84, x85, x86) -> f10(x84, x85, x86) :|: x87 > 0 f18(x52, x53, x54) -> f12(x52, x53, x54) :|: TRUE f17(x80, x81, x82) -> f18(x80, x81, x83) :|: TRUE && x83 = x80 + x82 f16(x76, x77, x78) -> f17(x76, x79, x78) :|: TRUE && x79 = x78 - 1 f11(x72, x73, x74) -> f16(x75, x73, x74) :|: TRUE && x75 = x73 + x72 f7(x45, x46, x47) -> f11(x45, x46, x47) :|: x48 = 0 ---------------------------------------- (5) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (6) Obligation: Rules: f7(x45:0, x46:0, x47:0) -> f12(x46:0 + x45:0, x47:0 - 1, x46:0 + x45:0 + x47:0) :|: TRUE f7(x41:0, x42:0, x43:0) -> f12(x43:0 - 1, x42:0 + x41:0, x42:0 + x41:0 + x43:0) :|: x44:0 < 0 f12(x58:0, x59:0, x60:0) -> f7(x58:0, x59:0, x59:0) :|: x59:0 > 0 && x58:0 > 0 && x59:0 < x58:0 f7(x84:0, x85:0, x86:0) -> f12(x86:0 - 1, x85:0 + x84:0, x85:0 + x84:0 + x86:0) :|: x87:0 > 0 f12(x, x1, x2) -> f7(x, x1, x) :|: x1 > 0 && x > 0 && x1 >= x ---------------------------------------- (7) IntTRSUnneededArgumentFilterProof (EQUIVALENT) Some arguments are removed because they cannot influence termination. We removed arguments according to the following replacements: f12(x1, x2, x3) -> f12(x1, x2) ---------------------------------------- (8) Obligation: Rules: f7(x45:0, x46:0, x47:0) -> f12(x46:0 + x45:0, x47:0 - 1) :|: TRUE f7(x41:0, x42:0, x43:0) -> f12(x43:0 - 1, x42:0 + x41:0) :|: x44:0 < 0 f12(x58:0, x59:0) -> f7(x58:0, x59:0, x59:0) :|: x59:0 > 0 && x58:0 > 0 && x59:0 < x58:0 f7(x84:0, x85:0, x86:0) -> f12(x86:0 - 1, x85:0 + x84:0) :|: x87:0 > 0 f12(x, x1) -> f7(x, x1, x) :|: x1 > 0 && x > 0 && x1 >= x ---------------------------------------- (9) TerminationGraphProcessor (EQUIVALENT) Constructed the termination graph and obtained one non-trivial SCC. f7(x45:0, x46:0, x47:0) -> f12(x46:0 + x45:0, x47:0 - 1) :|: TRUE and f12(x58:0, x59:0) -> f7(x58:0, x59:0, x59:0) :|: x59:0 > 0 && x58:0 > 0 && x59:0 < x58:0 have been merged into the new rule f7(x22, x23, x24) -> f7(x23 + x22, x24 - 1, x24 - 1) :|: TRUE && (x24 - 1 > 0 && x23 + x22 > 0 && x24 - 1 < x23 + x22) f7(x45:0, x46:0, x47:0) -> f12(x46:0 + x45:0, x47:0 - 1) :|: TRUE and f12(x, x1) -> f7(x, x1, x) :|: x1 > 0 && x > 0 && x1 >= x have been merged into the new rule f7(x33, x34, x35) -> f7(x34 + x33, x35 - 1, x34 + x33) :|: TRUE && (x35 - 1 > 0 && x34 + x33 > 0 && x35 - 1 >= x34 + x33) ---------------------------------------- (10) Obligation: Rules: f7(x25, x26, x27) -> f7(x26 + x25, x27 + -1, x27 + -1) :|: TRUE && x27 >= 2 && x26 + x25 >= 1 && x27 + -1 * x26 + -1 * x25 <= 0 f7(x36, x37, x38) -> f7(x37 + x36, x38 + -1, x37 + x36) :|: TRUE && x38 >= 2 && x37 + x36 >= 1 && x38 + -1 * x37 + -1 * x36 >= 1 f12(x58:0, x59:0) -> f7(x58:0, x59:0, x59:0) :|: TRUE && x59:0 >= 1 && x58:0 >= 1 && x59:0 + -1 * x58:0 <= -1 f7(x41:0, x42:0, x43:0) -> f12(x43:0 + -1, x42:0 + x41:0) :|: TRUE && x44:0 <= -1 f12(x, x1) -> f7(x, x1, x) :|: TRUE && x1 >= 1 && x >= 1 && x1 + -1 * x >= 0 f7(x84:0, x85:0, x86:0) -> f12(x86:0 + -1, x85:0 + x84:0) :|: TRUE && x87:0 >= 1 ---------------------------------------- (11) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (12) Obligation: Rules: f7(x41:0:0, x42:0:0, x43:0:0) -> f12(x43:0:0 + -1, x42:0:0 + x41:0:0) :|: TRUE f7(x25:0, x26:0, x27:0) -> f7(x26:0 + x25:0, x27:0 - 1, x27:0 - 1) :|: x26:0 + x25:0 >= 1 && x27:0 > 1 && x27:0 + -1 * x26:0 + -1 * x25:0 <= 0 f7(x36:0, x37:0, x38:0) -> f7(x37:0 + x36:0, x38:0 - 1, x37:0 + x36:0) :|: x37:0 + x36:0 >= 1 && x38:0 > 1 && x38:0 + -1 * x37:0 + -1 * x36:0 >= 1 f12(x58:0:0, x59:0:0) -> f7(x58:0:0, x59:0:0, x59:0:0) :|: x58:0:0 > 0 && x59:0:0 > 0 && x59:0:0 + -1 * x58:0:0 <= -1 f12(x:0, x1:0) -> f7(x:0, x1:0, x:0) :|: x:0 > 0 && x1:0 > 0 && x1:0 + -1 * x:0 >= 0 ---------------------------------------- (13) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f7(x, x1, x2)] = -2 - x - x1 + 2*x2 [f12(x3, x4)] = -3 + 2*x3 - x4 The following rules are decreasing: f7(x41:0:0, x42:0:0, x43:0:0) -> f12(x43:0:0 + -1, x42:0:0 + x41:0:0) :|: TRUE f7(x25:0, x26:0, x27:0) -> f7(x26:0 + x25:0, x27:0 - 1, x27:0 - 1) :|: x26:0 + x25:0 >= 1 && x27:0 > 1 && x27:0 + -1 * x26:0 + -1 * x25:0 <= 0 f7(x36:0, x37:0, x38:0) -> f7(x37:0 + x36:0, x38:0 - 1, x37:0 + x36:0) :|: x37:0 + x36:0 >= 1 && x38:0 > 1 && x38:0 + -1 * x37:0 + -1 * x36:0 >= 1 f12(x58:0:0, x59:0:0) -> f7(x58:0:0, x59:0:0, x59:0:0) :|: x58:0:0 > 0 && x59:0:0 > 0 && x59:0:0 + -1 * x58:0:0 <= -1 The following rules are bounded: f7(x36:0, x37:0, x38:0) -> f7(x37:0 + x36:0, x38:0 - 1, x37:0 + x36:0) :|: x37:0 + x36:0 >= 1 && x38:0 > 1 && x38:0 + -1 * x37:0 + -1 * x36:0 >= 1 f12(x58:0:0, x59:0:0) -> f7(x58:0:0, x59:0:0, x59:0:0) :|: x58:0:0 > 0 && x59:0:0 > 0 && x59:0:0 + -1 * x58:0:0 <= -1 ---------------------------------------- (14) Obligation: Rules: f7(x41:0:0, x42:0:0, x43:0:0) -> f12(x43:0:0 + -1, x42:0:0 + x41:0:0) :|: TRUE f7(x25:0, x26:0, x27:0) -> f7(x26:0 + x25:0, x27:0 - 1, x27:0 - 1) :|: x26:0 + x25:0 >= 1 && x27:0 > 1 && x27:0 + -1 * x26:0 + -1 * x25:0 <= 0 f12(x:0, x1:0) -> f7(x:0, x1:0, x:0) :|: x:0 > 0 && x1:0 > 0 && x1:0 + -1 * x:0 >= 0 ---------------------------------------- (15) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (16) Obligation: Rules: f7(x41:0:0:0, x42:0:0:0, x43:0:0:0) -> f7(x43:0:0:0 - 1, x42:0:0:0 + x41:0:0:0, x43:0:0:0 - 1) :|: x43:0:0:0 > 1 && x42:0:0:0 + x41:0:0:0 > 0 && x42:0:0:0 + x41:0:0:0 + -1 * (x43:0:0:0 - 1) >= 0 f7(x25:0:0, x26:0:0, x27:0:0) -> f7(x26:0:0 + x25:0:0, x27:0:0 - 1, x27:0:0 - 1) :|: x26:0:0 + x25:0:0 >= 1 && x27:0:0 > 1 && x27:0:0 + -1 * x26:0:0 + -1 * x25:0:0 <= 0 ---------------------------------------- (17) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f7(x, x1, x2)] = x2 The following rules are decreasing: f7(x41:0:0:0, x42:0:0:0, x43:0:0:0) -> f7(x43:0:0:0 - 1, x42:0:0:0 + x41:0:0:0, x43:0:0:0 - 1) :|: x43:0:0:0 > 1 && x42:0:0:0 + x41:0:0:0 > 0 && x42:0:0:0 + x41:0:0:0 + -1 * (x43:0:0:0 - 1) >= 0 f7(x25:0:0, x26:0:0, x27:0:0) -> f7(x26:0:0 + x25:0:0, x27:0:0 - 1, x27:0:0 - 1) :|: x26:0:0 + x25:0:0 >= 1 && x27:0:0 > 1 && x27:0:0 + -1 * x26:0:0 + -1 * x25:0:0 <= 0 The following rules are bounded: f7(x41:0:0:0, x42:0:0:0, x43:0:0:0) -> f7(x43:0:0:0 - 1, x42:0:0:0 + x41:0:0:0, x43:0:0:0 - 1) :|: x43:0:0:0 > 1 && x42:0:0:0 + x41:0:0:0 > 0 && x42:0:0:0 + x41:0:0:0 + -1 * (x43:0:0:0 - 1) >= 0 f7(x25:0:0, x26:0:0, x27:0:0) -> f7(x26:0:0 + x25:0:0, x27:0:0 - 1, x27:0:0 - 1) :|: x26:0:0 + x25:0:0 >= 1 && x27:0:0 > 1 && x27:0:0 + -1 * x26:0:0 + -1 * x25:0:0 <= 0 ---------------------------------------- (18) YES