17.25/5.21 YES 17.54/5.22 proof of /export/starexec/sandbox/benchmark/theBenchmark.c 17.54/5.22 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 17.54/5.22 17.54/5.22 17.54/5.22 Termination of the given C Problem could be proven: 17.54/5.22 17.54/5.22 (0) C Problem 17.54/5.22 (1) CToIRSProof [EQUIVALENT, 0 ms] 17.54/5.22 (2) IntTRS 17.54/5.22 (3) IRS2T2 [EQUIVALENT, 0 ms] 17.54/5.22 (4) T2IntSys 17.54/5.22 (5) T2 [EQUIVALENT, 2699 ms] 17.54/5.22 (6) YES 17.54/5.22 17.54/5.22 17.54/5.22 ---------------------------------------- 17.54/5.22 17.54/5.22 (0) 17.54/5.22 Obligation: 17.54/5.22 c file /export/starexec/sandbox/benchmark/theBenchmark.c 17.54/5.22 ---------------------------------------- 17.54/5.22 17.54/5.22 (1) CToIRSProof (EQUIVALENT) 17.54/5.22 Parsed C Integer Program as IRS. 17.54/5.22 ---------------------------------------- 17.54/5.22 17.54/5.22 (2) 17.54/5.22 Obligation: 17.54/5.22 Rules: 17.54/5.22 f1(r, da, db, temp) -> f2(x_1, da, db, temp) :|: TRUE 17.54/5.22 f3(x, x1, x2, x3) -> f6(x, arith, x2, x3) :|: TRUE && arith = 2 * x 17.54/5.22 f6(x70, x71, x72, x73) -> f7(x70, x71, x74, x73) :|: TRUE && x74 = 2 * x70 17.54/5.22 f9(x75, x76, x77, x78) -> f12(x75, x79, x77, x78) :|: TRUE && x79 = x76 - 1 17.54/5.22 f10(x12, x13, x14, x15) -> f13(x12, x13, x14, x13) :|: TRUE 17.54/5.22 f13(x80, x81, x82, x83) -> f14(x80, x84, x82, x83) :|: TRUE && x84 = x82 - 1 17.54/5.22 f14(x20, x21, x22, x23) -> f15(x20, x21, x21, x23) :|: TRUE 17.54/5.22 f8(x24, x25, x26, x27) -> f9(x24, x25, x26, x27) :|: x28 < 0 17.54/5.22 f8(x85, x86, x87, x88) -> f9(x85, x86, x87, x88) :|: x89 > 0 17.54/5.22 f8(x29, x30, x31, x32) -> f10(x29, x30, x31, x32) :|: x33 = 0 17.54/5.22 f12(x34, x35, x36, x37) -> f11(x34, x35, x36, x37) :|: TRUE 17.54/5.22 f15(x38, x39, x40, x41) -> f11(x38, x39, x40, x41) :|: TRUE 17.54/5.22 f7(x42, x43, x44, x45) -> f8(x42, x43, x44, x45) :|: x43 >= x42 17.54/5.22 f11(x46, x47, x48, x49) -> f7(x46, x47, x48, x49) :|: TRUE 17.54/5.22 f7(x50, x51, x52, x53) -> f16(x50, x51, x52, x53) :|: x51 < x50 17.54/5.22 f2(x54, x55, x56, x57) -> f3(x54, x55, x56, x57) :|: x54 >= 0 17.54/5.22 f2(x58, x59, x60, x61) -> f4(x58, x59, x60, x61) :|: x58 < 0 17.54/5.22 f16(x62, x63, x64, x65) -> f5(x62, x63, x64, x65) :|: TRUE 17.54/5.22 f4(x66, x67, x68, x69) -> f5(x66, x67, x68, x69) :|: TRUE 17.54/5.22 Start term: f1(r, da, db, temp) 17.54/5.22 17.54/5.22 ---------------------------------------- 17.54/5.22 17.54/5.22 (3) IRS2T2 (EQUIVALENT) 17.54/5.22 Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: 17.54/5.22 17.54/5.22 (f1_4,1) 17.54/5.22 (f2_4,2) 17.54/5.22 (f3_4,3) 17.54/5.22 (f6_4,4) 17.54/5.22 (f7_4,5) 17.54/5.22 (f9_4,6) 17.54/5.22 (f12_4,7) 17.54/5.22 (f10_4,8) 17.54/5.22 (f13_4,9) 17.54/5.22 (f14_4,10) 17.54/5.22 (f15_4,11) 17.54/5.22 (f8_4,12) 17.54/5.22 (f11_4,13) 17.54/5.22 (f16_4,14) 17.54/5.22 (f4_4,15) 17.54/5.22 (f5_4,16) 17.54/5.22 17.54/5.22 ---------------------------------------- 17.54/5.22 17.54/5.22 (4) 17.54/5.22 Obligation: 17.54/5.22 START: 1; 17.54/5.22 17.54/5.22 FROM: 1; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 oldX4 := nondet(); 17.54/5.22 assume(0 = 0); 17.54/5.22 x0 := oldX4; 17.54/5.22 x1 := oldX1; 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 2; 17.54/5.22 17.54/5.22 FROM: 3; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 oldX4 := nondet(); 17.54/5.22 assume(0 = 0 && oldX4 = 2 * oldX0); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := oldX4; 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 4; 17.54/5.22 17.54/5.22 FROM: 4; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 oldX4 := nondet(); 17.54/5.22 assume(0 = 0 && oldX4 = 2 * oldX0); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := oldX1; 17.54/5.22 x2 := oldX4; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 5; 17.54/5.22 17.54/5.22 FROM: 6; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 oldX4 := -(1 - oldX1); 17.54/5.22 assume(0 = 0 && oldX4 = oldX1 - 1); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := -(1 - oldX1); 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 7; 17.54/5.22 17.54/5.22 FROM: 8; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 assume(0 = 0); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := oldX1; 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX1; 17.54/5.22 TO: 9; 17.54/5.22 17.54/5.22 FROM: 9; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 oldX4 := -(1 - oldX2); 17.54/5.22 assume(0 = 0 && oldX4 = oldX2 - 1); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := -(1 - oldX2); 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 10; 17.54/5.22 17.54/5.22 FROM: 10; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 assume(0 = 0); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := oldX1; 17.54/5.22 x2 := oldX1; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 11; 17.54/5.22 17.54/5.22 FROM: 12; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 oldX4 := nondet(); 17.54/5.22 assume(oldX4 < 0); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := oldX1; 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 6; 17.54/5.22 17.54/5.22 FROM: 12; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 oldX4 := nondet(); 17.54/5.22 assume(oldX4 > 0); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := oldX1; 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 6; 17.54/5.22 17.54/5.22 FROM: 12; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 oldX4 := -(0); 17.54/5.22 assume(oldX4 = 0); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := oldX1; 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 8; 17.54/5.22 17.54/5.22 FROM: 7; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 assume(0 = 0); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := oldX1; 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 13; 17.54/5.22 17.54/5.22 FROM: 11; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 assume(0 = 0); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := oldX1; 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 13; 17.54/5.22 17.54/5.22 FROM: 5; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 assume(oldX1 >= oldX0); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := oldX1; 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 12; 17.54/5.22 17.54/5.22 FROM: 13; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 assume(0 = 0); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := oldX1; 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 5; 17.54/5.22 17.54/5.22 FROM: 5; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 assume(oldX1 < oldX0); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := oldX1; 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 14; 17.54/5.22 17.54/5.22 FROM: 2; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 assume(oldX0 >= 0); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := oldX1; 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 3; 17.54/5.22 17.54/5.22 FROM: 2; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 assume(oldX0 < 0); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := oldX1; 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 15; 17.54/5.22 17.54/5.22 FROM: 14; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 assume(0 = 0); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := oldX1; 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 16; 17.54/5.22 17.54/5.22 FROM: 15; 17.54/5.22 oldX0 := x0; 17.54/5.22 oldX1 := x1; 17.54/5.22 oldX2 := x2; 17.54/5.22 oldX3 := x3; 17.54/5.22 assume(0 = 0); 17.54/5.22 x0 := oldX0; 17.54/5.22 x1 := oldX1; 17.54/5.22 x2 := oldX2; 17.54/5.22 x3 := oldX3; 17.54/5.22 TO: 16; 17.54/5.22 17.54/5.22 17.54/5.22 ---------------------------------------- 17.54/5.22 17.54/5.22 (5) T2 (EQUIVALENT) 17.54/5.22 Used the following cutpoint-specific lexicographic rank functions: 17.54/5.22 * For cutpoint 13, used the following rank functions/bounds (in descending priority order): 17.54/5.22 - RF x1, bound 0 17.54/5.22 17.54/5.22 ---------------------------------------- 17.54/5.22 17.54/5.22 (6) 17.54/5.22 YES 17.60/5.31 EOF