/export/starexec/sandbox/solver/bin/starexec_run_c /export/starexec/sandbox/benchmark/theBenchmark.c /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- YES proof of /export/starexec/sandbox/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, 180 ms] (2) LLVM problem (3) LLVMToTerminationGraphProof [EQUIVALENT, 1705 ms] (4) LLVM Symbolic Execution Graph (5) SymbolicExecutionGraphToSCCProof [SOUND, 0 ms] (6) AND (7) LLVM Symbolic Execution SCC (8) SCC2IRS [SOUND, 46 ms] (9) IntTRS (10) IntTRSCompressionProof [EQUIVALENT, 0 ms] (11) IntTRS (12) PolynomialOrderProcessor [EQUIVALENT, 12 ms] (13) YES (14) LLVM Symbolic Execution SCC (15) SCC2IRS [SOUND, 64 ms] (16) IntTRS (17) IntTRSCompressionProof [EQUIVALENT, 1 ms] (18) IntTRS (19) RankingReductionPairProof [EQUIVALENT, 8 ms] (20) YES ---------------------------------------- (0) Obligation: c file /export/starexec/sandbox/benchmark/theBenchmark.c ---------------------------------------- (1) CToLLVMProof (EQUIVALENT) Compiled c-file /export/starexec/sandbox/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: "main" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 0: %1 = alloca i32, align 4 %y = alloca i32, align 4 %z = alloca i32, align 4 %x = alloca i32, align 4 store 0, %1 %2 = call i32 @__VERIFIER_nondet_int() store %2, %y %3 = call i32 @__VERIFIER_nondet_int() store %3, %z %4 = call i32 @__VERIFIER_nondet_int() %5 = icmp ne %4 0 br %5, %6, %7 6: store 1, %x br %8 7: store -1, %x br %8 8: br %9 9: %10 = load %y %11 = icmp slt %10 100 br %11, %12, %15 12: %13 = load %z %14 = icmp slt %13 100 br %15 15: %16 = phi [0, %9], [%14, %12] br %16, %17, %24 17: %18 = load %y %19 = load %x %20 = add %18 %19 store %20, %y %21 = load %z %22 = load %x %23 = sub %21 %22 store %23, %z br %9 24: ret 0 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 2 SCCs. ---------------------------------------- (6) Complex Obligation (AND) ---------------------------------------- (7) Obligation: SCC ---------------------------------------- (8) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 18 rulesP rules: f_272(v715, v716, v717, v718, v719, v720, 0, v726, 1, v724, v722, -1, v727, v728, v729, v730, v731, 3, 99, 98, 100, 4) -> f_275(v715, v716, v717, v718, v719, v720, 0, v726, 1, v724, v722, -1, v727, v728, v729, v730, v731, 3, 99, 98, 100, 4) :|: 0 = 0 f_275(v715, v716, v717, v718, v719, v720, 0, v726, 1, v724, v722, -1, v727, v728, v729, v730, v731, 3, 99, 98, 100, 4) -> f_278(v715, v716, v717, v718, v719, v720, 0, v726, 1, v724, v722, -1, v727, v728, v729, v730, v731, 3, 99, 98, 100, 4) :|: TRUE f_278(v715, v716, v717, v718, v719, v720, 0, v726, 1, v724, v722, -1, v727, v728, v729, v730, v731, 3, 99, 98, 100, 4) -> f_281(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, v722, -1, v724, v728, v729, v730, v731, 3, 99, 98, 100, 4) :|: 0 = 0 f_281(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, v722, -1, v724, v728, v729, v730, v731, 3, 99, 98, 100, 4) -> f_284(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, v722, -1, v724, v728, v729, v730, v731, 3, 99, 98, 4) :|: v727 < 100 && v724 <= 98 && v720 <= 98 f_284(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, v722, -1, v724, v728, v729, v730, v731, 3, 99, 98, 4) -> f_287(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, v722, -1, v724, v728, v729, v730, v731, 3, 99, 98, 4) :|: 0 = 0 f_287(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, v722, -1, v724, v728, v729, v730, v731, 3, 99, 98, 4) -> f_290(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, v722, -1, v724, v728, v729, v730, v731, 3, 99, 98, 4) :|: 0 = 0 f_290(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, v722, -1, v724, v728, v729, v730, v731, 3, 99, 98, 4) -> f_293(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, v722, -1, v724, v728, v729, v730, v731, 3, 99, 98, 4) :|: TRUE f_293(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, v722, -1, v724, v728, v729, v730, v731, 3, 99, 98, 4) -> f_296(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v724, v728, v729, v730, v731, 3, 99, 98, 4) :|: 0 = 0 f_296(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v724, v728, v729, v730, v731, 3, 99, 98, 4) -> f_298(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v724, v728, v729, v730, v731, 3, 99, 98, 4) :|: 0 = 0 f_298(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v724, v728, v729, v730, v731, 3, 99, 98, 4) -> f_300(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v958, v724, v728, v729, v730, v731, 3, 99, 98, 4, 97) :|: 1 + v958 = v726 && v958 <= 97 f_300(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v958, v724, v728, v729, v730, v731, 3, 99, 98, 4, 97) -> f_302(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v958, v724, v728, v729, v730, v731, 3, 99, 98, 4, 97) :|: TRUE f_302(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v958, v724, v728, v729, v730, v731, 3, 99, 98, 4, 97) -> f_304(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v958, v728, v729, v730, v731, 3, 99, 98, 4, 97) :|: 0 = 0 f_304(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v958, v728, v729, v730, v731, 3, 99, 98, 4, 97) -> f_306(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v958, v728, v729, v730, v731, 3, 99, 98, 4, 97) :|: 0 = 0 f_306(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v958, v728, v729, v730, v731, 3, 99, 98, 4, 97) -> f_308(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v958, v962, v728, v729, v730, v731, 3, 99, 98, 4, 97, 100) :|: v962 = 1 + v727 && v962 <= 100 f_308(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v958, v962, v728, v729, v730, v731, 3, 99, 98, 4, 97, 100) -> f_310(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v958, v962, v728, v729, v730, v731, 3, 99, 98, 4, 97, 100) :|: TRUE f_310(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v958, v962, v728, v729, v730, v731, 3, 99, 98, 4, 97, 100) -> f_312(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v958, v962, v728, v729, v730, v731, 3, 99, 98, 4, 97, 100) :|: TRUE f_312(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v958, v962, v728, v729, v730, v731, 3, 99, 98, 4, 97, 100) -> f_270(v715, v716, v717, v718, v719, v720, 0, v726, 1, v727, -1, v958, v962, v728, v729, v730, v731, 3, 99, 98, 100, 4) :|: TRUE f_270(v715, v716, v717, v718, v719, v720, 0, v722, 1, v724, -1, v726, v727, v728, v729, v730, v731, 3, 99, 98, 100, 4) -> f_272(v715, v716, v717, v718, v719, v720, 0, v726, 1, v724, v722, -1, v727, v728, v729, v730, v731, 3, 99, 98, 100, 4) :|: 0 = 0 Combined rules. Obtained 1 rulesP rules: f_272(v715:0, v716:0, v717:0, v718:0, v719:0, v720:0, 0, 1 + v958:0, 1, v724:0, v722:0, -1, v727:0, v728:0, v729:0, v730:0, v731:0, 3, 99, 98, 100, 4) -> f_272(v715:0, v716:0, v717:0, v718:0, v719:0, v720:0, 0, v958:0, 1, v727:0, 1 + v958:0, -1, 1 + v727:0, v728:0, v729:0, v730:0, v731:0, 3, 99, 98, 100, 4) :|: v724:0 < 99 && v727:0 < 100 && v720:0 < 99 && v958:0 < 98 Filtered unneeded arguments: f_272(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22) -> f_272(x6, x8, x10, x13) Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: f_272(v720:0, sum~cons_1~v958:0, v724:0, v727:0) -> f_272(v720:0, v958:0, v727:0, 1 + v727:0) :|: v727:0 < 100 && v724:0 < 99 && v958:0 < 98 && v720:0 < 99 && sum~cons_1~v958:0 = 1 + v958:0 ---------------------------------------- (9) Obligation: Rules: f_272(v720:0, sum~cons_1~v958:0, v724:0, v727:0) -> f_272(v720:0, v958:0, v727:0, 1 + v727:0) :|: v727:0 < 100 && v724:0 < 99 && v958:0 < 98 && v720:0 < 99 && sum~cons_1~v958:0 = 1 + v958:0 ---------------------------------------- (10) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (11) Obligation: Rules: f_272(v720:0:0, sum~cons_1~v958:0:0, v724:0:0, v727:0:0) -> f_272(v720:0:0, v958:0:0, v727:0:0, 1 + v727:0:0) :|: v958:0:0 < 98 && v720:0:0 < 99 && v724:0:0 < 99 && v727:0:0 < 100 && sum~cons_1~v958:0:0 = 1 + v958:0:0 ---------------------------------------- (12) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f_272(x, x1, x2, x3)] = 99 - x3 The following rules are decreasing: f_272(v720:0:0, sum~cons_1~v958:0:0, v724:0:0, v727:0:0) -> f_272(v720:0:0, v958:0:0, v727:0:0, 1 + v727:0:0) :|: v958:0:0 < 98 && v720:0:0 < 99 && v724:0:0 < 99 && v727:0:0 < 100 && sum~cons_1~v958:0:0 = 1 + v958:0:0 The following rules are bounded: f_272(v720:0:0, sum~cons_1~v958:0:0, v724:0:0, v727:0:0) -> f_272(v720:0:0, v958:0:0, v727:0:0, 1 + v727:0:0) :|: v958:0:0 < 98 && v720:0:0 < 99 && v724:0:0 < 99 && v727:0:0 < 100 && sum~cons_1~v958:0:0 = 1 + v958:0:0 ---------------------------------------- (13) YES ---------------------------------------- (14) Obligation: SCC ---------------------------------------- (15) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 18 rulesP rules: f_271(v684, v685, v686, v687, v688, v689, v690, 1, v694, v693, v692, v695, v696, v697, v698, v699, 0, 3, 99, 100, 98, 4) -> f_273(v684, v685, v686, v687, v688, v689, v690, 1, v694, v693, v692, v695, v696, v697, v698, v699, 0, 3, 98, 99, 4) :|: v694 < 100 && v692 <= 98 && v688 <= 98 f_273(v684, v685, v686, v687, v688, v689, v690, 1, v694, v693, v692, v695, v696, v697, v698, v699, 0, 3, 98, 99, 4) -> f_276(v684, v685, v686, v687, v688, v689, v690, 1, v694, v693, v692, v695, v696, v697, v698, v699, 0, 3, 98, 99, 4) :|: 0 = 0 f_276(v684, v685, v686, v687, v688, v689, v690, 1, v694, v693, v692, v695, v696, v697, v698, v699, 0, 3, 98, 99, 4) -> f_279(v684, v685, v686, v687, v688, v689, v690, 1, v694, v693, v692, v695, v696, v697, v698, v699, 0, 3, 98, 99, 4) :|: TRUE f_279(v684, v685, v686, v687, v688, v689, v690, 1, v694, v693, v692, v695, v696, v697, v698, v699, 0, 3, 98, 99, 4) -> f_282(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v692, v693, v696, v697, v698, v699, 0, 3, 98, 99, 4) :|: 0 = 0 f_282(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v692, v693, v696, v697, v698, v699, 0, 3, 98, 99, 4) -> f_286(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v692, v693, v696, v697, v698, v699, 0, 3, 98, 99, 4) :|: 0 = 0 f_286(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v692, v693, v696, v697, v698, v699, 0, 3, 98, 99, 4) -> f_289(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v692, v693, v696, v697, v698, v699, 0, 3, 98, 99, 4) :|: 0 = 0 f_289(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v692, v693, v696, v697, v698, v699, 0, 3, 98, 99, 4) -> f_292(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v692, v693, v696, v697, v698, v699, 0, 3, 98, 99, 4) :|: TRUE f_292(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v692, v693, v696, v697, v698, v699, 0, 3, 98, 99, 4) -> f_295(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v693, v696, v697, v698, v699, 0, 3, 98, 99, 4) :|: 0 = 0 f_295(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v693, v696, v697, v698, v699, 0, 3, 98, 99, 4) -> f_297(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v693, v696, v697, v698, v699, 0, 3, 98, 99, 4) :|: 0 = 0 f_297(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v693, v696, v697, v698, v699, 0, 3, 98, 99, 4) -> f_299(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v957, v693, v696, v697, v698, v699, 0, 3, 98, 99, 4, 100) :|: v957 = 1 + v694 && v957 <= 100 f_299(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v957, v693, v696, v697, v698, v699, 0, 3, 98, 99, 4, 100) -> f_301(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v957, v693, v696, v697, v698, v699, 0, 3, 98, 99, 4, 100) :|: TRUE f_301(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v957, v693, v696, v697, v698, v699, 0, 3, 98, 99, 4, 100) -> f_303(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v957, v696, v697, v698, v699, 0, 3, 98, 99, 4, 100) :|: 0 = 0 f_303(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v957, v696, v697, v698, v699, 0, 3, 98, 99, 4, 100) -> f_305(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v957, v696, v697, v698, v699, 0, 3, 98, 99, 4, 100) :|: 0 = 0 f_305(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v957, v696, v697, v698, v699, 0, 3, 98, 99, 4, 100) -> f_307(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v957, v961, v696, v697, v698, v699, 0, 3, 98, 99, 4, 100, 97) :|: 1 + v961 = v695 && v961 <= 97 f_307(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v957, v961, v696, v697, v698, v699, 0, 3, 98, 99, 4, 100, 97) -> f_309(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v957, v961, v696, v697, v698, v699, 0, 3, 98, 99, 4, 100, 97) :|: TRUE f_309(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v957, v961, v696, v697, v698, v699, 0, 3, 98, 99, 4, 100, 97) -> f_311(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v957, v961, v696, v697, v698, v699, 0, 3, 98, 99, 4, 100, 97) :|: TRUE f_311(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v957, v961, v696, v697, v698, v699, 0, 3, 98, 99, 4, 100, 97) -> f_268(v684, v685, v686, v687, v688, v689, v690, 1, v694, v695, v957, v961, v696, v697, v698, v699, 0, 3, 99, 100, 98, 4) :|: TRUE f_268(v684, v685, v686, v687, v688, v689, v690, 1, v692, v693, v694, v695, v696, v697, v698, v699, 0, 3, 99, 100, 98, 4) -> f_271(v684, v685, v686, v687, v688, v689, v690, 1, v694, v693, v692, v695, v696, v697, v698, v699, 0, 3, 99, 100, 98, 4) :|: 0 = 0 Combined rules. Obtained 1 rulesP rules: f_271(v684:0, v685:0, v686:0, v687:0, v688:0, v689:0, v690:0, 1, v694:0, v693:0, v692:0, 1 + v961:0, v696:0, v697:0, v698:0, v699:0, 0, 3, 99, 100, 98, 4) -> f_271(v684:0, v685:0, v686:0, v687:0, v688:0, v689:0, v690:0, 1, 1 + v694:0, 1 + v961:0, v694:0, v961:0, v696:0, v697:0, v698:0, v699:0, 0, 3, 99, 100, 98, 4) :|: v692:0 < 99 && v694:0 < 100 && v688:0 < 99 && v961:0 < 98 Filtered unneeded arguments: f_271(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22) -> f_271(x5, x9, x11, x12) Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: f_271(v688:0, v694:0, v692:0, sum~cons_1~v961:0) -> f_271(v688:0, 1 + v694:0, v694:0, v961:0) :|: v694:0 < 100 && v692:0 < 99 && v961:0 < 98 && v688:0 < 99 && sum~cons_1~v961:0 = 1 + v961:0 ---------------------------------------- (16) Obligation: Rules: f_271(v688:0, v694:0, v692:0, sum~cons_1~v961:0) -> f_271(v688:0, 1 + v694:0, v694:0, v961:0) :|: v694:0 < 100 && v692:0 < 99 && v961:0 < 98 && v688:0 < 99 && sum~cons_1~v961:0 = 1 + v961:0 ---------------------------------------- (17) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (18) Obligation: Rules: f_271(v688:0:0, v694:0:0, v692:0:0, sum~cons_1~v961:0:0) -> f_271(v688:0:0, 1 + v694:0:0, v694:0:0, v961:0:0) :|: v961:0:0 < 98 && v688:0:0 < 99 && v692:0:0 < 99 && v694:0:0 < 100 && sum~cons_1~v961:0:0 = 1 + v961:0:0 ---------------------------------------- (19) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f_271 ] = -1*f_271_2 The following rules are decreasing: f_271(v688:0:0, v694:0:0, v692:0:0, sum~cons_1~v961:0:0) -> f_271(v688:0:0, 1 + v694:0:0, v694:0:0, v961:0:0) :|: v961:0:0 < 98 && v688:0:0 < 99 && v692:0:0 < 99 && v694:0:0 < 100 && sum~cons_1~v961:0:0 = 1 + v961:0:0 The following rules are bounded: f_271(v688:0:0, v694:0:0, v692:0:0, sum~cons_1~v961:0:0) -> f_271(v688:0:0, 1 + v694:0:0, v694:0:0, v961:0:0) :|: v961:0:0 < 98 && v688:0:0 < 99 && v692:0:0 < 99 && v694:0:0 < 100 && sum~cons_1~v961:0:0 = 1 + v961:0:0 ---------------------------------------- (20) YES