10.63/3.49 YES 10.63/3.50 proof of /export/starexec/sandbox/benchmark/theBenchmark.c 10.63/3.50 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 10.63/3.50 10.63/3.50 10.63/3.50 Termination of the given C Problem could be proven: 10.63/3.50 10.63/3.50 (0) C Problem 10.63/3.50 (1) CToIRSProof [EQUIVALENT, 0 ms] 10.63/3.50 (2) IntTRS 10.63/3.50 (3) IRS2T2 [EQUIVALENT, 0 ms] 10.63/3.50 (4) T2IntSys 10.63/3.50 (5) T2 [EQUIVALENT, 1628 ms] 10.63/3.50 (6) YES 10.63/3.50 10.63/3.50 10.63/3.50 ---------------------------------------- 10.63/3.50 10.63/3.50 (0) 10.63/3.50 Obligation: 10.63/3.50 c file /export/starexec/sandbox/benchmark/theBenchmark.c 10.63/3.50 ---------------------------------------- 10.63/3.50 10.63/3.50 (1) CToIRSProof (EQUIVALENT) 10.63/3.50 Parsed C Integer Program as IRS. 10.63/3.50 ---------------------------------------- 10.63/3.50 10.63/3.50 (2) 10.63/3.50 Obligation: 10.63/3.50 Rules: 10.63/3.50 f1(a, b) -> f2(x_1, b) :|: TRUE 10.63/3.50 f2(x, x1) -> f3(x, x2) :|: TRUE 10.63/3.50 f6(x3, x4) -> f9(x3, arith) :|: TRUE && arith = x4 + 7 10.63/3.50 f7(x43, x44) -> f10(x43, x45) :|: TRUE && x45 = x44 + 2 10.63/3.50 f5(x7, x8) -> f6(x7, x8) :|: x8 > 5 10.63/3.50 f5(x9, x10) -> f7(x9, x10) :|: x10 <= 5 10.63/3.50 f9(x11, x12) -> f8(x11, x12) :|: TRUE 10.63/3.50 f10(x13, x14) -> f8(x13, x14) :|: TRUE 10.63/3.50 f11(x46, x47) -> f14(x48, x47) :|: TRUE && x48 = x46 + 10 10.63/3.50 f12(x49, x50) -> f15(x51, x50) :|: TRUE && x51 = x49 + 1 10.63/3.50 f8(x19, x20) -> f11(x19, x20) :|: x20 >= 10 && x20 <= 12 10.63/3.50 f8(x21, x22) -> f12(x21, x22) :|: x22 < 10 10.63/3.50 f8(x52, x53) -> f12(x52, x53) :|: x53 > 12 10.63/3.50 f14(x23, x24) -> f13(x23, x24) :|: TRUE 10.63/3.50 f15(x25, x26) -> f13(x25, x26) :|: TRUE 10.63/3.50 f4(x27, x28) -> f5(x27, x28) :|: x28 < x27 10.63/3.50 f13(x29, x30) -> f4(x29, x30) :|: TRUE 10.63/3.50 f4(x31, x32) -> f16(x31, x32) :|: x32 >= x31 10.63/3.50 f16(x54, x55) -> f17(x56, x55) :|: TRUE && x56 = x54 + 2 10.63/3.50 f17(x57, x58) -> f18(x57, x59) :|: TRUE && x59 = x58 - 10 10.63/3.50 f3(x37, x38) -> f4(x37, x38) :|: x37 < 30 10.63/3.50 f18(x39, x40) -> f3(x39, x40) :|: TRUE 10.63/3.50 f3(x41, x42) -> f19(x41, x42) :|: x41 >= 30 10.63/3.50 Start term: f1(a, b) 10.63/3.50 10.63/3.50 ---------------------------------------- 10.63/3.50 10.63/3.50 (3) IRS2T2 (EQUIVALENT) 10.63/3.50 Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: 10.63/3.50 10.63/3.50 (f1_2,1) 10.63/3.50 (f2_2,2) 10.63/3.50 (f3_2,3) 10.63/3.50 (f6_2,4) 10.63/3.50 (f9_2,5) 10.63/3.50 (f7_2,6) 10.63/3.50 (f10_2,7) 10.63/3.50 (f5_2,8) 10.63/3.50 (f8_2,9) 10.63/3.50 (f11_2,10) 10.63/3.50 (f14_2,11) 10.63/3.50 (f12_2,12) 10.63/3.50 (f15_2,13) 10.63/3.50 (f13_2,14) 10.63/3.50 (f4_2,15) 10.63/3.50 (f16_2,16) 10.63/3.50 (f17_2,17) 10.63/3.50 (f18_2,18) 10.63/3.50 (f19_2,19) 10.63/3.50 10.63/3.50 ---------------------------------------- 10.63/3.50 10.63/3.50 (4) 10.63/3.50 Obligation: 10.63/3.50 START: 1; 10.63/3.50 10.63/3.50 FROM: 1; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 oldX2 := nondet(); 10.63/3.50 assume(0 = 0); 10.63/3.50 x0 := oldX2; 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 2; 10.63/3.50 10.63/3.50 FROM: 2; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 oldX2 := nondet(); 10.63/3.50 assume(0 = 0); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := oldX2; 10.63/3.50 TO: 3; 10.63/3.50 10.63/3.50 FROM: 4; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 oldX2 := -(-(oldX1 + 7)); 10.63/3.50 assume(0 = 0 && oldX2 = oldX1 + 7); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := -(-(oldX1 + 7)); 10.63/3.50 TO: 5; 10.63/3.50 10.63/3.50 FROM: 6; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 oldX2 := -(-(oldX1 + 2)); 10.63/3.50 assume(0 = 0 && oldX2 = oldX1 + 2); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := -(-(oldX1 + 2)); 10.63/3.50 TO: 7; 10.63/3.50 10.63/3.50 FROM: 8; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 assume(oldX1 > 5); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 4; 10.63/3.50 10.63/3.50 FROM: 8; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 assume(oldX1 <= 5); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 6; 10.63/3.50 10.63/3.50 FROM: 5; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 assume(0 = 0); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 9; 10.63/3.50 10.63/3.50 FROM: 7; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 assume(0 = 0); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 9; 10.63/3.50 10.63/3.50 FROM: 10; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 oldX2 := -(-(oldX0 + 10)); 10.63/3.50 assume(0 = 0 && oldX2 = oldX0 + 10); 10.63/3.50 x0 := -(-(oldX0 + 10)); 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 11; 10.63/3.50 10.63/3.50 FROM: 12; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 oldX2 := -(-(oldX0 + 1)); 10.63/3.50 assume(0 = 0 && oldX2 = oldX0 + 1); 10.63/3.50 x0 := -(-(oldX0 + 1)); 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 13; 10.63/3.50 10.63/3.50 FROM: 9; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 assume(oldX1 >= 10 && oldX1 <= 12); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 10; 10.63/3.50 10.63/3.50 FROM: 9; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 assume(oldX1 < 10); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 12; 10.63/3.50 10.63/3.50 FROM: 9; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 assume(oldX1 > 12); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 12; 10.63/3.50 10.63/3.50 FROM: 11; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 assume(0 = 0); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 14; 10.63/3.50 10.63/3.50 FROM: 13; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 assume(0 = 0); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 14; 10.63/3.50 10.63/3.50 FROM: 15; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 assume(oldX1 < oldX0); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 8; 10.63/3.50 10.63/3.50 FROM: 14; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 assume(0 = 0); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 15; 10.63/3.50 10.63/3.50 FROM: 15; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 assume(oldX1 >= oldX0); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 16; 10.63/3.50 10.63/3.50 FROM: 16; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 oldX2 := -(-(oldX0 + 2)); 10.63/3.50 assume(0 = 0 && oldX2 = oldX0 + 2); 10.63/3.50 x0 := -(-(oldX0 + 2)); 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 17; 10.63/3.50 10.63/3.50 FROM: 17; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 oldX2 := -(10 - oldX1); 10.63/3.50 assume(0 = 0 && oldX2 = oldX1 - 10); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := -(10 - oldX1); 10.63/3.50 TO: 18; 10.63/3.50 10.63/3.50 FROM: 3; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 assume(oldX0 < 30); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 15; 10.63/3.50 10.63/3.50 FROM: 18; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 assume(0 = 0); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 3; 10.63/3.50 10.63/3.50 FROM: 3; 10.63/3.50 oldX0 := x0; 10.63/3.50 oldX1 := x1; 10.63/3.50 assume(oldX0 >= 30); 10.63/3.50 x0 := oldX0; 10.63/3.50 x1 := oldX1; 10.63/3.50 TO: 19; 10.63/3.50 10.63/3.50 10.63/3.50 ---------------------------------------- 10.63/3.50 10.63/3.50 (5) T2 (EQUIVALENT) 10.63/3.50 Initially, performed program simplifications using lexicographic rank functions: 10.63/3.50 * Removed transitions 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 27, 28, 31, 32 using the following rank functions: 10.63/3.50 - Rank function 1: 10.63/3.50 RF for loc. 12: -6*x0 10.63/3.50 RF for loc. 13: -1-6*x0 10.63/3.50 RF for loc. 14: -2-6*x0 10.63/3.50 RF for loc. 15: 3-6*x0 10.63/3.50 RF for loc. 16: 2-6*x0 10.63/3.50 RF for loc. 17: 1-6*x0 10.63/3.50 RF for loc. 21: 3-6*x0 10.63/3.50 Bound for (chained) transitions 31: -171 10.63/3.50 Bound for (chained) transitions 32: -171 10.63/3.50 - Rank function 2: 10.63/3.50 RF for loc. 12: -3-6*x1 10.63/3.50 RF for loc. 13: 8-6*x1 10.63/3.50 RF for loc. 14: 1-6*x1 10.63/3.50 RF for loc. 15: -6*x1 10.63/3.50 RF for loc. 16: -1-6*x1 10.63/3.50 RF for loc. 17: -2-6*x1 10.63/3.50 RF for loc. 21: -61-6*oldX2 10.63/3.50 Bound for (chained) transitions 15: -33 10.63/3.50 Bound for (chained) transitions 18: -46 10.63/3.50 - Rank function 3: 10.63/3.50 RF for loc. 12: -21-5*x1 10.63/3.50 RF for loc. 13: 7-5*x1 10.63/3.50 RF for loc. 14: 7-5*x1 10.63/3.50 RF for loc. 15: -5*x1 10.63/3.50 RF for loc. 16: -7-5*x1 10.63/3.50 RF for loc. 17: -14-5*x1 10.63/3.50 RF for loc. 21: -58-5*x1 10.63/3.50 Bound for (chained) transitions 17: -53 10.63/3.50 - Rank function 4: 10.63/3.50 RF for loc. 12: -2+2*x0-2*x1 10.63/3.50 RF for loc. 13: 11+2*x0-2*x1 10.63/3.50 RF for loc. 14: 4+2*x0-2*x1 10.63/3.50 RF for loc. 15: 1+2*x0-2*x1 10.63/3.50 RF for loc. 16: 2*x0-2*x1 10.63/3.50 RF for loc. 17: -1+2*x0-2*x1 10.63/3.50 RF for loc. 21: -25+2*oldX0-2*oldX1 10.63/3.50 Bound for (chained) transitions 23: 1 10.63/3.50 Bound for (chained) transitions 24: 1 10.63/3.50 - Rank function 5: 10.63/3.50 RF for loc. 12: 14*x1 10.63/3.50 RF for loc. 13: 6*x1 10.63/3.50 RF for loc. 14: 0 10.63/3.50 RF for loc. 15: -1 10.63/3.50 RF for loc. 16: -2 10.63/3.50 RF for loc. 17: -3 10.63/3.50 RF for loc. 21: -3 10.63/3.50 Bound for (chained) transitions 14: 84 10.63/3.50 Bound for (chained) transitions 16: 0 10.63/3.50 Bound for (chained) transitions 19: 78 10.63/3.50 Bound for (chained) transitions 20: -2 10.63/3.50 Bound for (chained) transitions 22, 28: -2 10.63/3.50 Bound for (chained) transitions 27: -1 10.63/3.50 10.63/3.50 ---------------------------------------- 10.63/3.50 10.63/3.50 (6) 10.63/3.50 YES 10.63/3.54 EOF