16.76/6.40 YES 16.76/6.41 proof of /export/starexec/sandbox/benchmark/theBenchmark.c 16.76/6.41 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 16.76/6.41 16.76/6.41 16.76/6.41 Termination of the given C Problem could be proven: 16.76/6.41 16.76/6.41 (0) C Problem 16.76/6.41 (1) CToLLVMProof [EQUIVALENT, 174 ms] 16.76/6.41 (2) LLVM problem 16.76/6.41 (3) LLVMToTerminationGraphProof [EQUIVALENT, 2894 ms] 16.76/6.41 (4) LLVM Symbolic Execution Graph 16.76/6.41 (5) SymbolicExecutionGraphToSCCProof [SOUND, 0 ms] 16.76/6.41 (6) LLVM Symbolic Execution SCC 16.76/6.41 (7) SCC2IRS [SOUND, 117 ms] 16.76/6.41 (8) IntTRS 16.76/6.41 (9) IntTRSCompressionProof [EQUIVALENT, 0 ms] 16.76/6.41 (10) IntTRS 16.76/6.41 (11) RankingReductionPairProof [EQUIVALENT, 30 ms] 16.76/6.41 (12) YES 16.76/6.41 16.76/6.41 16.76/6.41 ---------------------------------------- 16.76/6.41 16.76/6.41 (0) 16.76/6.41 Obligation: 16.76/6.41 c file /export/starexec/sandbox/benchmark/theBenchmark.c 16.76/6.41 ---------------------------------------- 16.76/6.41 16.76/6.41 (1) CToLLVMProof (EQUIVALENT) 16.76/6.41 Compiled c-file /export/starexec/sandbox/benchmark/theBenchmark.c to LLVM. 16.76/6.41 ---------------------------------------- 16.76/6.41 16.76/6.41 (2) 16.76/6.41 Obligation: 16.76/6.41 LLVM Problem 16.76/6.41 16.76/6.41 Aliases: 16.76/6.41 16.76/6.41 Data layout: 16.76/6.41 16.76/6.41 "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" 16.76/6.41 16.76/6.41 Machine: 16.76/6.41 16.76/6.41 "x86_64-pc-linux-gnu" 16.76/6.41 16.76/6.41 Type definitions: 16.76/6.41 16.76/6.41 Global variables: 16.76/6.41 16.76/6.41 Function declarations and definitions: 16.76/6.41 16.76/6.41 *BasicFunctionTypename: "__VERIFIER_nondet_int" returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 16.76/6.41 *BasicFunctionTypename: "test_fun" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: (i i32, j i32, k i32, tmp i32) variableLength: false visibilityType: DEFAULT callingConvention: ccc 16.76/6.41 0: 16.76/6.41 %1 = alloca i32, align 4 16.76/6.41 %2 = alloca i32, align 4 16.76/6.41 %3 = alloca i32, align 4 16.76/6.41 %4 = alloca i32, align 4 16.76/6.41 %c = alloca i32, align 4 16.76/6.41 store %i, %1 16.76/6.41 store %j, %2 16.76/6.41 store %k, %3 16.76/6.41 store %tmp, %4 16.76/6.41 store 0, %c 16.76/6.41 br %5 16.76/6.41 5: 16.76/6.41 %6 = load %1 16.76/6.41 %7 = icmp sle %6 100 16.76/6.41 br %7, %8, %12 16.76/6.41 8: 16.76/6.41 %9 = load %2 16.76/6.41 %10 = load %3 16.76/6.41 %11 = icmp sle %9 %10 16.76/6.41 br %12 16.76/6.41 12: 16.76/6.41 %13 = phi [0, %5], [%11, %8] 16.76/6.41 br %13, %14, %23 16.76/6.41 14: 16.76/6.41 %15 = load %1 16.76/6.41 store %15, %4 16.76/6.41 %16 = load %2 16.76/6.41 store %16, %1 16.76/6.41 %17 = load %4 16.76/6.41 %18 = add %17 1 16.76/6.41 store %18, %2 16.76/6.41 %19 = load %3 16.76/6.41 %20 = sub %19 1 16.76/6.41 store %20, %3 16.76/6.41 %21 = load %c 16.76/6.41 %22 = add %21 1 16.76/6.41 store %22, %c 16.76/6.41 br %5 16.76/6.41 23: 16.76/6.41 %24 = load %c 16.76/6.41 ret %24 16.76/6.41 16.76/6.41 *BasicFunctionTypename: "main" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 16.76/6.41 0: 16.76/6.41 %1 = alloca i32, align 4 16.76/6.41 store 0, %1 16.76/6.41 %2 = call i32 @__VERIFIER_nondet_int() 16.76/6.41 %3 = call i32 @__VERIFIER_nondet_int() 16.76/6.41 %4 = call i32 @__VERIFIER_nondet_int() 16.76/6.41 %5 = call i32 @__VERIFIER_nondet_int() 16.76/6.41 %6 = call i32 @test_fun(i32 %2, i32 %3, i32 %4, i32 %5) 16.76/6.41 ret %6 16.76/6.41 16.76/6.41 16.76/6.41 Analyze Termination of all function calls matching the pattern: 16.76/6.41 main() 16.76/6.41 ---------------------------------------- 16.76/6.41 16.76/6.41 (3) LLVMToTerminationGraphProof (EQUIVALENT) 16.76/6.41 Constructed symbolic execution graph for LLVM program and proved memory safety. 16.76/6.41 ---------------------------------------- 16.76/6.41 16.76/6.41 (4) 16.76/6.41 Obligation: 16.76/6.41 SE Graph 16.76/6.41 ---------------------------------------- 16.76/6.41 16.76/6.41 (5) SymbolicExecutionGraphToSCCProof (SOUND) 16.76/6.41 Splitted symbolic execution graph to 1 SCC. 16.76/6.41 ---------------------------------------- 16.76/6.41 16.76/6.41 (6) 16.76/6.41 Obligation: 16.76/6.41 SCC 16.76/6.41 ---------------------------------------- 16.76/6.41 16.76/6.41 (7) SCC2IRS (SOUND) 16.76/6.41 Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: 16.76/6.41 Generated rules. Obtained 25 rulesP rules: 16.76/6.41 f_376(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v694, v691, v695, v696, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_377(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v694, v691, v695, v696, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: v693 <= 100 16.76/6.41 f_377(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v694, v691, v695, v696, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_379(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v694, v691, v695, v696, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: 0 = 0 16.76/6.41 f_379(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v694, v691, v695, v696, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_381(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v694, v691, v695, v696, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: TRUE 16.76/6.41 f_381(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v694, v691, v695, v696, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_383(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v694, v691, v696, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: 0 = 0 16.76/6.41 f_383(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v694, v691, v696, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_385(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: 0 = 0 16.76/6.41 f_385(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_387(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: v695 <= v696 16.76/6.41 f_387(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_390(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: 0 = 0 16.76/6.41 f_390(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_392(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: 0 = 0 16.76/6.41 f_392(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_394(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: TRUE 16.76/6.41 f_394(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_396(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: 0 = 0 16.76/6.41 f_396(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_398(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: TRUE 16.76/6.41 f_398(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_400(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: 0 = 0 16.76/6.41 f_400(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_401(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: TRUE 16.76/6.41 f_401(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v691, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_402(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: 0 = 0 16.76/6.41 f_402(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_403(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: v805 = 1 + v693 && v805 <= 101 16.76/6.41 f_403(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_404(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: TRUE 16.76/6.41 f_404(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v694, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_405(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: 0 = 0 16.76/6.41 f_405(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_406(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v807, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: 1 + v807 = v696 16.76/6.41 f_406(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v807, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_407(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v807, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: TRUE 16.76/6.41 f_407(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v807, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_408(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v807, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: 0 = 0 16.76/6.41 f_408(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v807, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_409(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v807, v698, v809, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4, 2) :|: v809 = 1 + v698 && 2 <= v809 16.76/6.41 f_409(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v807, v698, v809, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4, 2) -> f_410(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v807, v698, v809, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4, 2) :|: TRUE 16.76/6.41 f_410(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v807, v698, v809, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4, 2) -> f_411(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v807, v698, v809, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4, 2) :|: TRUE 16.76/6.41 f_411(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v807, v698, v809, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4, 2) -> f_375(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v695, v696, v805, v807, v698, v809, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: TRUE 16.76/6.41 f_375(v682, v683, v684, v685, v686, v687, v688, v689, v690, v691, 1, v693, v694, v695, v696, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) -> f_376(v682, v683, v684, v685, v686, v687, v688, v689, v690, v693, 1, v694, v691, v695, v696, v697, v698, v699, v700, v701, v702, v703, v704, v705, 0, 3, 100, 101, 4) :|: 0 = 0 16.76/6.41 Combined rules. Obtained 1 rulesP rules: 16.76/6.41 f_376(v682:0, v683:0, v684:0, v685:0, v686:0, v687:0, v688:0, v689:0, v690:0, v693:0, 1, v694:0, v691:0, v695:0, 1 + v807:0, v697:0, v698:0, v699:0, v700:0, v701:0, v702:0, v703:0, v704:0, v705:0, 0, 3, 100, 101, 4) -> f_376(v682:0, v683:0, v684:0, v685:0, v686:0, v687:0, v688:0, v689:0, v690:0, v695:0, 1, 1 + v807:0, v693:0, 1 + v693:0, v807:0, v698:0, 1 + v698:0, v699:0, v700:0, v701:0, v702:0, v703:0, v704:0, v705:0, 0, 3, 100, 101, 4) :|: v693:0 < 101 && v695:0 <= 1 + v807:0 && v698:0 > 0 16.76/6.41 Filtered unneeded arguments: 16.76/6.41 f_376(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29) -> f_376(x10, x14, x15, x17) 16.76/6.41 Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: 16.76/6.41 f_376(v693:0, v695:0, sum~cons_1~v807:0, v698:0) -> f_376(v695:0, 1 + v693:0, v807:0, 1 + v698:0) :|: v695:0 <= 1 + v807:0 && v698:0 > 0 && v693:0 < 101 && sum~cons_1~v807:0 = 1 + v807:0 16.76/6.41 16.76/6.41 ---------------------------------------- 16.76/6.41 16.76/6.41 (8) 16.76/6.41 Obligation: 16.76/6.41 Rules: 16.76/6.41 f_376(v693:0, v695:0, sum~cons_1~v807:0, v698:0) -> f_376(v695:0, 1 + v693:0, v807:0, 1 + v698:0) :|: v695:0 <= 1 + v807:0 && v698:0 > 0 && v693:0 < 101 && sum~cons_1~v807:0 = 1 + v807:0 16.76/6.41 16.76/6.41 ---------------------------------------- 16.76/6.41 16.76/6.41 (9) IntTRSCompressionProof (EQUIVALENT) 16.76/6.41 Compressed rules. 16.76/6.41 ---------------------------------------- 16.76/6.41 16.76/6.41 (10) 16.76/6.41 Obligation: 16.76/6.41 Rules: 16.76/6.41 f_376(v693:0:0, v695:0:0, sum~cons_1~v807:0:0, v698:0:0) -> f_376(v695:0:0, 1 + v693:0:0, v807:0:0, 1 + v698:0:0) :|: v695:0:0 <= 1 + v807:0:0 && v698:0:0 > 0 && v693:0:0 < 101 && sum~cons_1~v807:0:0 = 1 + v807:0:0 16.76/6.41 16.76/6.41 ---------------------------------------- 16.76/6.41 16.76/6.41 (11) RankingReductionPairProof (EQUIVALENT) 16.76/6.41 Interpretation: 16.76/6.41 [ f_376 ] = -1/2*f_376_1 + -1/2*f_376_2 + 1/2*f_376_3 16.76/6.41 16.76/6.41 The following rules are decreasing: 16.76/6.41 f_376(v693:0:0, v695:0:0, sum~cons_1~v807:0:0, v698:0:0) -> f_376(v695:0:0, 1 + v693:0:0, v807:0:0, 1 + v698:0:0) :|: v695:0:0 <= 1 + v807:0:0 && v698:0:0 > 0 && v693:0:0 < 101 && sum~cons_1~v807:0:0 = 1 + v807:0:0 16.76/6.41 16.76/6.41 The following rules are bounded: 16.76/6.41 f_376(v693:0:0, v695:0:0, sum~cons_1~v807:0:0, v698:0:0) -> f_376(v695:0:0, 1 + v693:0:0, v807:0:0, 1 + v698:0:0) :|: v695:0:0 <= 1 + v807:0:0 && v698:0:0 > 0 && v693:0:0 < 101 && sum~cons_1~v807:0:0 = 1 + v807:0:0 16.76/6.41 16.76/6.41 16.76/6.41 ---------------------------------------- 16.76/6.41 16.76/6.41 (12) 16.76/6.41 YES 17.21/6.46 EOF