8.68/3.08 YES 8.68/3.09 proof of /export/starexec/sandbox/benchmark/theBenchmark.c 8.68/3.09 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 8.68/3.09 8.68/3.09 8.68/3.09 Termination of the given C Problem could be proven: 8.68/3.09 8.68/3.09 (0) C Problem 8.68/3.09 (1) CToIRSProof [EQUIVALENT, 0 ms] 8.68/3.09 (2) IntTRS 8.68/3.09 (3) IRS2T2 [EQUIVALENT, 0 ms] 8.68/3.09 (4) T2IntSys 8.68/3.09 (5) T2 [EQUIVALENT, 1317 ms] 8.68/3.09 (6) YES 8.68/3.09 8.68/3.09 8.68/3.09 ---------------------------------------- 8.68/3.09 8.68/3.09 (0) 8.68/3.09 Obligation: 8.68/3.09 c file /export/starexec/sandbox/benchmark/theBenchmark.c 8.68/3.09 ---------------------------------------- 8.68/3.09 8.68/3.09 (1) CToIRSProof (EQUIVALENT) 8.68/3.09 Parsed C Integer Program as IRS. 8.68/3.09 ---------------------------------------- 8.68/3.09 8.68/3.09 (2) 8.68/3.09 Obligation: 8.68/3.09 Rules: 8.68/3.09 f1(x, y) -> f2(x_1, y) :|: TRUE 8.68/3.09 f2(x1, x2) -> f3(x1, x3) :|: TRUE 8.68/3.09 f5(x4, x5) -> f8(arith, x5) :|: TRUE && arith = x4 - 1 8.68/3.09 f9(x32, x33) -> f12(x34, x33) :|: TRUE && x34 = x32 - 1 8.68/3.09 f10(x35, x36) -> f13(x35, x37) :|: TRUE && x37 = x36 - 1 8.68/3.09 f6(x10, x11) -> f9(x10, x11) :|: x10 = x11 8.68/3.09 f6(x12, x13) -> f10(x12, x13) :|: x12 < x13 8.68/3.09 f6(x38, x39) -> f10(x38, x39) :|: x38 > x39 8.68/3.09 f12(x14, x15) -> f11(x14, x15) :|: TRUE 8.68/3.09 f13(x16, x17) -> f11(x16, x17) :|: TRUE 8.68/3.09 f4(x18, x19) -> f5(x18, x19) :|: x18 > x19 8.68/3.09 f4(x20, x21) -> f6(x20, x21) :|: x20 <= x21 8.68/3.09 f8(x22, x23) -> f7(x22, x23) :|: TRUE 8.68/3.09 f11(x24, x25) -> f7(x24, x25) :|: TRUE 8.68/3.09 f3(x26, x27) -> f4(x26, x27) :|: x26 + x27 > 0 8.68/3.09 f7(x28, x29) -> f3(x28, x29) :|: TRUE 8.68/3.09 f3(x30, x31) -> f14(x30, x31) :|: x30 + x31 <= 0 8.68/3.09 Start term: f1(x, y) 8.68/3.09 8.68/3.09 ---------------------------------------- 8.68/3.09 8.68/3.09 (3) IRS2T2 (EQUIVALENT) 8.68/3.09 Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: 8.68/3.09 8.68/3.09 (f1_2,1) 8.68/3.09 (f2_2,2) 8.68/3.09 (f3_2,3) 8.68/3.09 (f5_2,4) 8.68/3.09 (f8_2,5) 8.68/3.09 (f9_2,6) 8.68/3.09 (f12_2,7) 8.68/3.09 (f10_2,8) 8.68/3.09 (f13_2,9) 8.68/3.09 (f6_2,10) 8.68/3.09 (f11_2,11) 8.68/3.09 (f4_2,12) 8.68/3.09 (f7_2,13) 8.68/3.09 (f14_2,14) 8.68/3.09 8.68/3.09 ---------------------------------------- 8.68/3.09 8.68/3.09 (4) 8.68/3.09 Obligation: 8.68/3.09 START: 1; 8.68/3.09 8.68/3.09 FROM: 1; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 oldX2 := nondet(); 8.68/3.09 assume(0 = 0); 8.68/3.09 x0 := oldX2; 8.68/3.09 x1 := oldX1; 8.68/3.09 TO: 2; 8.68/3.09 8.68/3.09 FROM: 2; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 oldX2 := nondet(); 8.68/3.09 assume(0 = 0); 8.68/3.09 x0 := oldX0; 8.68/3.09 x1 := oldX2; 8.68/3.09 TO: 3; 8.68/3.09 8.68/3.09 FROM: 4; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 oldX2 := -(1 - oldX0); 8.68/3.09 assume(0 = 0 && oldX2 = oldX0 - 1); 8.68/3.09 x0 := -(1 - oldX0); 8.68/3.09 x1 := oldX1; 8.68/3.09 TO: 5; 8.68/3.09 8.68/3.09 FROM: 6; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 oldX2 := -(1 - oldX0); 8.68/3.09 assume(0 = 0 && oldX2 = oldX0 - 1); 8.68/3.09 x0 := -(1 - oldX0); 8.68/3.09 x1 := oldX1; 8.68/3.09 TO: 7; 8.68/3.09 8.68/3.09 FROM: 8; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 oldX2 := -(1 - oldX1); 8.68/3.09 assume(0 = 0 && oldX2 = oldX1 - 1); 8.68/3.09 x0 := oldX0; 8.68/3.09 x1 := -(1 - oldX1); 8.68/3.09 TO: 9; 8.68/3.09 8.68/3.09 FROM: 10; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 assume(oldX0 = oldX1); 8.68/3.09 x0 := oldX0; 8.68/3.09 x1 := oldX1; 8.68/3.09 TO: 6; 8.68/3.09 8.68/3.09 FROM: 10; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 assume(oldX0 < oldX1); 8.68/3.09 x0 := oldX0; 8.68/3.09 x1 := oldX1; 8.68/3.09 TO: 8; 8.68/3.09 8.68/3.09 FROM: 10; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 assume(oldX0 > oldX1); 8.68/3.09 x0 := oldX0; 8.68/3.09 x1 := oldX1; 8.68/3.09 TO: 8; 8.68/3.09 8.68/3.09 FROM: 7; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 assume(0 = 0); 8.68/3.09 x0 := oldX0; 8.68/3.09 x1 := oldX1; 8.68/3.09 TO: 11; 8.68/3.09 8.68/3.09 FROM: 9; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 assume(0 = 0); 8.68/3.09 x0 := oldX0; 8.68/3.09 x1 := oldX1; 8.68/3.09 TO: 11; 8.68/3.09 8.68/3.09 FROM: 12; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 assume(oldX0 > oldX1); 8.68/3.09 x0 := oldX0; 8.68/3.09 x1 := oldX1; 8.68/3.09 TO: 4; 8.68/3.09 8.68/3.09 FROM: 12; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 assume(oldX0 <= oldX1); 8.68/3.09 x0 := oldX0; 8.68/3.09 x1 := oldX1; 8.68/3.09 TO: 10; 8.68/3.09 8.68/3.09 FROM: 5; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 assume(0 = 0); 8.68/3.09 x0 := oldX0; 8.68/3.09 x1 := oldX1; 8.68/3.09 TO: 13; 8.68/3.09 8.68/3.09 FROM: 11; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 assume(0 = 0); 8.68/3.09 x0 := oldX0; 8.68/3.09 x1 := oldX1; 8.68/3.09 TO: 13; 8.68/3.09 8.68/3.09 FROM: 3; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 assume(oldX0 + oldX1 > 0); 8.68/3.09 x0 := oldX0; 8.68/3.09 x1 := oldX1; 8.68/3.09 TO: 12; 8.68/3.09 8.68/3.09 FROM: 13; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 assume(0 = 0); 8.68/3.09 x0 := oldX0; 8.68/3.09 x1 := oldX1; 8.68/3.09 TO: 3; 8.68/3.09 8.68/3.09 FROM: 3; 8.68/3.09 oldX0 := x0; 8.68/3.09 oldX1 := x1; 8.68/3.09 assume(oldX0 + oldX1 <= 0); 8.68/3.09 x0 := oldX0; 8.68/3.09 x1 := oldX1; 8.68/3.09 TO: 14; 8.68/3.09 8.68/3.09 8.68/3.09 ---------------------------------------- 8.68/3.09 8.68/3.09 (5) T2 (EQUIVALENT) 8.68/3.09 Initially, performed program simplifications using lexicographic rank functions: 8.68/3.09 * Removed transitions 12, 13, 14, 15, 16, 17, 18, 19, 22, 23, 26 using the following rank functions: 8.68/3.09 - Rank function 1: 8.68/3.09 RF for loc. 12: -2+8*x0+8*x1 8.68/3.09 RF for loc. 13: 5+8*x0+8*x1 8.68/3.09 RF for loc. 14: -1+8*x0+8*x1 8.68/3.09 RF for loc. 15: 8*x0+8*x1 8.68/3.09 RF for loc. 16: 4+8*x0+8*x1 8.68/3.09 RF for loc. 17: 3+8*x0+8*x1 8.68/3.09 Bound for (chained) transitions 22: 11 8.68/3.09 Bound for (chained) transitions 23: 11 8.68/3.09 - Rank function 2: 8.68/3.09 RF for loc. 12: 1 8.68/3.09 RF for loc. 13: 0 8.68/3.09 RF for loc. 14: 2 8.68/3.09 RF for loc. 15: 3 8.68/3.09 RF for loc. 16: -1 8.68/3.09 RF for loc. 17: -2 8.68/3.09 Bound for (chained) transitions 12: 1 8.68/3.09 Bound for (chained) transitions 13: 2 8.68/3.09 Bound for (chained) transitions 14: 2 8.68/3.09 Bound for (chained) transitions 15: 2 8.68/3.09 Bound for (chained) transitions 16: 3 8.68/3.09 Bound for (chained) transitions 17: 3 8.68/3.09 Bound for (chained) transitions 18: 0 8.68/3.09 Bound for (chained) transitions 19, 26: -1 8.68/3.09 8.68/3.09 ---------------------------------------- 8.68/3.09 8.68/3.09 (6) 8.68/3.09 YES 8.68/3.12 EOF