/export/starexec/sandbox2/solver/bin/starexec_run_c /export/starexec/sandbox2/benchmark/theBenchmark.c /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- YES proof of /export/starexec/sandbox2/benchmark/theBenchmark.c # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty Termination of the given C Problem could be proven: (0) C Problem (1) CToLLVMProof [EQUIVALENT, 179 ms] (2) LLVM problem (3) LLVMToTerminationGraphProof [EQUIVALENT, 3002 ms] (4) LLVM Symbolic Execution Graph (5) SymbolicExecutionGraphToSCCProof [SOUND, 0 ms] (6) LLVM Symbolic Execution SCC (7) SCC2IRS [SOUND, 81 ms] (8) IntTRS (9) IntTRSCompressionProof [EQUIVALENT, 0 ms] (10) IntTRS (11) RankingReductionPairProof [EQUIVALENT, 30 ms] (12) YES ---------------------------------------- (0) Obligation: c file /export/starexec/sandbox2/benchmark/theBenchmark.c ---------------------------------------- (1) CToLLVMProof (EQUIVALENT) Compiled c-file /export/starexec/sandbox2/benchmark/theBenchmark.c to LLVM. ---------------------------------------- (2) Obligation: LLVM Problem Aliases: Data layout: "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" Machine: "x86_64-pc-linux-gnu" Type definitions: Global variables: Function declarations and definitions: *BasicFunctionTypename: "__VERIFIER_nondet_int" returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc *BasicFunctionTypename: "test_fun" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: (i i32, j i32, k i32, tmp i32) variableLength: false visibilityType: DEFAULT callingConvention: ccc 0: %1 = alloca i32, align 4 %2 = alloca i32, align 4 %3 = alloca i32, align 4 %4 = alloca i32, align 4 %c = alloca i32, align 4 store %i, %1 store %j, %2 store %k, %3 store %tmp, %4 store 0, %c br %5 5: %6 = load %1 %7 = icmp sle %6 100 br %7, %8, %12 8: %9 = load %2 %10 = load %3 %11 = icmp sle %9 %10 br %12 12: %13 = phi [0, %5], [%11, %8] br %13, %14, %23 14: %15 = load %1 store %15, %4 %16 = load %2 store %16, %1 %17 = load %4 %18 = add %17 1 store %18, %2 %19 = load %3 %20 = sub %19 1 store %20, %3 %21 = load %c %22 = add %21 1 store %22, %c br %5 23: %24 = load %c ret %24 *BasicFunctionTypename: "main" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 0: %1 = alloca i32, align 4 store 0, %1 %2 = call i32 @__VERIFIER_nondet_int() %3 = call i32 @__VERIFIER_nondet_int() %4 = call i32 @__VERIFIER_nondet_int() %5 = call i32 @__VERIFIER_nondet_int() %6 = call i32 @test_fun(i32 %2, i32 %3, i32 %4, i32 %5) ret %6 Analyze Termination of all function calls matching the pattern: main() ---------------------------------------- (3) LLVMToTerminationGraphProof (EQUIVALENT) Constructed symbolic execution graph for LLVM program and proved memory safety. ---------------------------------------- (4) Obligation: SE Graph ---------------------------------------- (5) SymbolicExecutionGraphToSCCProof (SOUND) Splitted symbolic execution graph to 1 SCC. ---------------------------------------- (6) Obligation: SCC ---------------------------------------- (7) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 25 rulesP rules: 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 Combined rules. Obtained 1 rulesP rules: 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 Filtered unneeded arguments: 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) Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: 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 ---------------------------------------- (8) Obligation: Rules: 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 ---------------------------------------- (9) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (10) Obligation: Rules: 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 ---------------------------------------- (11) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f_376 ] = -1/2*f_376_1 + -1/2*f_376_2 + 1/2*f_376_3 The following rules are decreasing: 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 The following rules are bounded: 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 ---------------------------------------- (12) YES