8.89/3.23 YES 8.89/3.26 proof of /export/starexec/sandbox/benchmark/theBenchmark.c 8.89/3.26 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 8.89/3.26 8.89/3.26 8.89/3.26 Termination of the given C Problem could be proven: 8.89/3.26 8.89/3.26 (0) C Problem 8.89/3.26 (1) CToIRSProof [EQUIVALENT, 0 ms] 8.89/3.26 (2) IntTRS 8.89/3.26 (3) IRS2T2 [EQUIVALENT, 0 ms] 8.89/3.26 (4) T2IntSys 8.89/3.26 (5) T2 [EQUIVALENT, 1228 ms] 8.89/3.26 (6) YES 8.89/3.26 8.89/3.26 8.89/3.26 ---------------------------------------- 8.89/3.26 8.89/3.26 (0) 8.89/3.26 Obligation: 8.89/3.26 c file /export/starexec/sandbox/benchmark/theBenchmark.c 8.89/3.26 ---------------------------------------- 8.89/3.26 8.89/3.26 (1) CToIRSProof (EQUIVALENT) 8.89/3.26 Parsed C Integer Program as IRS. 8.89/3.26 ---------------------------------------- 8.89/3.26 8.89/3.26 (2) 8.89/3.26 Obligation: 8.89/3.26 Rules: 8.89/3.26 f1(x, y, z) -> f2(x_1, y, z) :|: TRUE 8.89/3.26 f2(x1, x2, x3) -> f3(x1, x4, x3) :|: TRUE 8.89/3.26 f3(x5, x6, x7) -> f4(x5, x6, x8) :|: TRUE 8.89/3.26 f8(x9, x10, x11) -> f9(x9, x10, arith) :|: TRUE && arith = x11 + x10 8.89/3.26 f5(x12, x13, x14) -> f8(x12, x13, x14) :|: x12 >= x14 8.89/3.26 f9(x15, x16, x17) -> f5(x15, x16, x17) :|: TRUE 8.89/3.26 f5(x18, x19, x20) -> f10(x18, x19, x20) :|: x18 < x20 8.89/3.26 f4(x21, x22, x23) -> f5(x21, x22, x23) :|: x22 > 0 8.89/3.26 f4(x24, x25, x26) -> f6(x24, x25, x26) :|: x25 <= 0 8.89/3.26 f10(x27, x28, x29) -> f7(x27, x28, x29) :|: TRUE 8.89/3.26 f6(x30, x31, x32) -> f7(x30, x31, x32) :|: TRUE 8.89/3.26 Start term: f1(x, y, z) 8.89/3.26 8.89/3.26 ---------------------------------------- 8.89/3.26 8.89/3.26 (3) IRS2T2 (EQUIVALENT) 8.89/3.26 Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: 8.89/3.26 8.89/3.26 (f1_3,1) 8.89/3.26 (f2_3,2) 8.89/3.26 (f3_3,3) 8.89/3.26 (f4_3,4) 8.89/3.26 (f8_3,5) 8.89/3.26 (f9_3,6) 8.89/3.26 (f5_3,7) 8.89/3.26 (f10_3,8) 8.89/3.26 (f6_3,9) 8.89/3.26 (f7_3,10) 8.89/3.26 8.89/3.26 ---------------------------------------- 8.89/3.26 8.89/3.26 (4) 8.89/3.26 Obligation: 8.89/3.26 START: 1; 8.89/3.26 8.89/3.26 FROM: 1; 8.89/3.26 oldX0 := x0; 8.89/3.26 oldX1 := x1; 8.89/3.26 oldX2 := x2; 8.89/3.26 oldX3 := nondet(); 8.89/3.26 assume(0 = 0); 8.89/3.26 x0 := oldX3; 8.89/3.26 x1 := oldX1; 8.89/3.26 x2 := oldX2; 8.89/3.26 TO: 2; 8.89/3.26 8.89/3.26 FROM: 2; 8.89/3.26 oldX0 := x0; 8.89/3.26 oldX1 := x1; 8.89/3.26 oldX2 := x2; 8.89/3.26 oldX3 := nondet(); 8.89/3.26 assume(0 = 0); 8.89/3.26 x0 := oldX0; 8.89/3.26 x1 := oldX3; 8.89/3.26 x2 := oldX2; 8.89/3.26 TO: 3; 8.89/3.26 8.89/3.26 FROM: 3; 8.89/3.26 oldX0 := x0; 8.89/3.26 oldX1 := x1; 8.89/3.26 oldX2 := x2; 8.89/3.26 oldX3 := nondet(); 8.89/3.26 assume(0 = 0); 8.89/3.26 x0 := oldX0; 8.89/3.26 x1 := oldX1; 8.89/3.26 x2 := oldX3; 8.89/3.26 TO: 4; 8.89/3.26 8.89/3.26 FROM: 5; 8.89/3.26 oldX0 := x0; 8.89/3.26 oldX1 := x1; 8.89/3.26 oldX2 := x2; 8.89/3.26 oldX3 := -(-(oldX2 + oldX1)); 8.89/3.26 assume(0 = 0 && oldX3 = oldX2 + oldX1); 8.89/3.26 x0 := oldX0; 8.89/3.26 x1 := oldX1; 8.89/3.26 x2 := -(-(oldX2 + oldX1)); 8.89/3.26 TO: 6; 8.89/3.26 8.89/3.26 FROM: 7; 8.89/3.26 oldX0 := x0; 8.89/3.26 oldX1 := x1; 8.89/3.26 oldX2 := x2; 8.89/3.26 assume(oldX0 >= oldX2); 8.89/3.26 x0 := oldX0; 8.89/3.26 x1 := oldX1; 8.89/3.26 x2 := oldX2; 8.89/3.26 TO: 5; 8.89/3.26 8.89/3.26 FROM: 6; 8.89/3.26 oldX0 := x0; 8.89/3.26 oldX1 := x1; 8.89/3.26 oldX2 := x2; 8.89/3.26 assume(0 = 0); 8.89/3.26 x0 := oldX0; 8.89/3.26 x1 := oldX1; 8.89/3.26 x2 := oldX2; 8.89/3.26 TO: 7; 8.89/3.26 8.89/3.26 FROM: 7; 8.89/3.26 oldX0 := x0; 8.89/3.26 oldX1 := x1; 8.89/3.26 oldX2 := x2; 8.89/3.26 assume(oldX0 < oldX2); 8.89/3.26 x0 := oldX0; 8.89/3.26 x1 := oldX1; 8.89/3.26 x2 := oldX2; 8.89/3.26 TO: 8; 8.89/3.26 8.89/3.26 FROM: 4; 8.89/3.26 oldX0 := x0; 8.89/3.26 oldX1 := x1; 8.89/3.26 oldX2 := x2; 8.89/3.26 assume(oldX1 > 0); 8.89/3.26 x0 := oldX0; 8.89/3.26 x1 := oldX1; 8.89/3.26 x2 := oldX2; 8.89/3.26 TO: 7; 8.89/3.26 8.89/3.26 FROM: 4; 8.89/3.26 oldX0 := x0; 8.89/3.26 oldX1 := x1; 8.89/3.26 oldX2 := x2; 8.89/3.26 assume(oldX1 <= 0); 8.89/3.26 x0 := oldX0; 8.89/3.26 x1 := oldX1; 8.89/3.26 x2 := oldX2; 8.89/3.26 TO: 9; 8.89/3.26 8.89/3.26 FROM: 8; 8.89/3.26 oldX0 := x0; 8.89/3.26 oldX1 := x1; 8.89/3.26 oldX2 := x2; 8.89/3.26 assume(0 = 0); 8.89/3.26 x0 := oldX0; 8.89/3.26 x1 := oldX1; 8.89/3.26 x2 := oldX2; 8.89/3.26 TO: 10; 8.89/3.26 8.89/3.26 FROM: 9; 8.89/3.26 oldX0 := x0; 8.89/3.26 oldX1 := x1; 8.89/3.26 oldX2 := x2; 8.89/3.26 assume(0 = 0); 8.89/3.26 x0 := oldX0; 8.89/3.26 x1 := oldX1; 8.89/3.26 x2 := oldX2; 8.89/3.26 TO: 10; 8.89/3.26 8.89/3.26 8.89/3.26 ---------------------------------------- 8.89/3.26 8.89/3.26 (5) T2 (EQUIVALENT) 8.89/3.26 Used the following cutpoint-specific lexicographic rank functions: 8.89/3.26 * For cutpoint 7, used the following rank functions/bounds (in descending priority order): 8.89/3.26 - RF -x2+x0, bound 0 8.89/3.26 8.89/3.26 ---------------------------------------- 8.89/3.26 8.89/3.26 (6) 8.89/3.26 YES 9.59/3.30 EOF