/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: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty Termination of the given C Problem could be proven: (0) C Problem (1) CToLLVMProof [EQUIVALENT, 177 ms] (2) LLVM problem (3) LLVMToTerminationGraphProof [EQUIVALENT, 2986 ms] (4) LLVM Symbolic Execution Graph (5) SymbolicExecutionGraphToLassoProof [EQUIVALENT, 0 ms] (6) LLVM Symbolic Execution Lasso (7) Lasso2IRS [SOUND, 119 ms] (8) IntTRS (9) IRS2T2 [EQUIVALENT, 0 ms] (10) T2IntSys (11) T2 [EQUIVALENT, 1195 ms] (12) 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: "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) SymbolicExecutionGraphToLassoProof (EQUIVALENT) Converted SEGraph to 1 independent lasso. ---------------------------------------- (6) Obligation: Lasso ---------------------------------------- (7) Lasso2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 72 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 f_136 -> f_137(v1, v2, 3, 1, 4) :|: 1 <= v1 && v2 = 3 + v1 && 4 <= v2 f_137(v1, v2, 3, 1, 4) -> f_138(v1, v2, 0, 3, 1, 4) :|: TRUE f_138(v1, v2, 0, 3, 1, 4) -> f_139(v1, v3, v2, 0, 3, 1, 4) :|: TRUE f_139(v1, v3, v2, 0, 3, 1, 4) -> f_140(v1, v3, v4, v2, 0, 3, 1, 4) :|: TRUE f_140(v1, v3, v4, v2, 0, 3, 1, 4) -> f_141(v1, v3, v4, v5, v2, 0, 3, 1, 4) :|: TRUE f_141(v1, v3, v4, v5, v2, 0, 3, 1, 4) -> f_142(v1, v3, v4, v5, v6, v2, 0, 3, 1, 4) :|: TRUE f_142(v1, v3, v4, v5, v6, v2, 0, 3, 1, 4) -> f_143(v3, v4, v5, v6, v1, v2, 0, 3, 1, 4) :|: 0 = 0 f_143(v3, v4, v5, v6, v1, v2, 0, 3, 1, 4) -> f_144(v3, v4, v5, v6, v7, v1, v2, v8, 0, 3, 1, 4) :|: 1 <= v7 && v8 = 3 + v7 && 4 <= v8 f_144(v3, v4, v5, v6, v7, v1, v2, v8, 0, 3, 1, 4) -> f_145(v3, v4, v5, v6, v7, v9, v1, v2, v8, v10, 0, 3, 1, 4) :|: 1 <= v9 && v10 = 3 + v9 && 4 <= v10 f_145(v3, v4, v5, v6, v7, v9, v1, v2, v8, v10, 0, 3, 1, 4) -> f_146(v3, v4, v5, v6, v7, v9, v11, v1, v2, v8, v10, v12, 0, 3, 1, 4) :|: 1 <= v11 && v12 = 3 + v11 && 4 <= v12 f_146(v3, v4, v5, v6, v7, v9, v11, v1, v2, v8, v10, v12, 0, 3, 1, 4) -> f_147(v3, v4, v5, v6, v7, v9, v11, v13, v1, v2, v8, v10, v12, v14, 0, 3, 1, 4) :|: 1 <= v13 && v14 = 3 + v13 && 4 <= v14 f_147(v3, v4, v5, v6, v7, v9, v11, v13, v1, v2, v8, v10, v12, v14, 0, 3, 1, 4) -> f_148(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4) :|: 1 <= v15 && v16 = 3 + v15 && 4 <= v16 f_148(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4) -> f_149(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4) :|: TRUE f_149(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4) -> f_150(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4) :|: TRUE f_150(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4) -> f_151(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4) :|: TRUE f_151(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4) -> f_152(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4) :|: TRUE f_152(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4) -> f_153(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4) :|: TRUE f_153(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4) -> f_154(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4) :|: TRUE f_154(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4) -> f_155(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4) :|: 0 = 0 f_155(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4) -> f_156(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4, 100) :|: v3 <= 100 f_156(v3, v4, v5, v6, v7, v9, v11, v13, v15, v1, v2, v8, v10, v12, v14, v16, 0, 3, 1, 4, 100) -> f_158(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) :|: 0 = 0 f_158(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) -> f_160(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) :|: TRUE f_160(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) -> f_162(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) :|: 0 = 0 f_162(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) -> f_164(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) :|: 0 = 0 f_164(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) -> f_166(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) :|: v4 <= v5 f_166(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) -> f_169(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) :|: 0 = 0 f_169(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) -> f_171(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) :|: 0 = 0 f_171(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) -> f_173(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) :|: TRUE f_173(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) -> f_175(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) :|: 0 = 0 f_175(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) -> f_177(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) :|: TRUE f_177(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) -> f_179(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) :|: 0 = 0 f_179(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) -> f_180(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) :|: TRUE f_180(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) -> f_181(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) :|: 0 = 0 f_181(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100) -> f_182(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100, 101) :|: v33 = 1 + v3 && v33 <= 101 f_182(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100, 101) -> f_183(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100, 101) :|: TRUE f_183(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100, 101) -> f_184(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100, 101) :|: 0 = 0 f_184(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100, 101) -> f_185(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v35, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100, 101) :|: 1 + v35 = v5 f_185(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v35, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100, 101) -> f_186(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v35, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100, 101) :|: TRUE f_186(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v35, v1, v2, v8, v10, v12, v14, v16, 0, 3, 4, 100, 101) -> f_187(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v35, 0, v1, v2, v8, v10, v12, v14, v16, 3, 4, 100, 101) :|: 0 = 0 f_187(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v35, 0, v1, v2, v8, v10, v12, v14, v16, 3, 4, 100, 101) -> f_188(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v35, 0, v1, v2, v8, v10, v12, v14, v16, 3, 4, 100, 101) :|: 0 = 0 f_188(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v35, 0, v1, v2, v8, v10, v12, v14, v16, 3, 4, 100, 101) -> f_189(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v35, 0, v1, v2, v8, v10, v12, v14, v16, 3, 4, 100, 101) :|: TRUE f_189(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v35, 0, v1, v2, v8, v10, v12, v14, v16, 3, 4, 100, 101) -> f_190(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v35, 0, v1, v2, v8, v10, v12, v14, v16, 3, 4, 100, 101) :|: TRUE f_190(v3, v4, v5, v6, v7, v9, v11, v13, v15, 1, v33, v35, 0, v1, v2, v8, v10, v12, v14, v16, 3, 4, 100, 101) -> f_227(v3, v4, v5, v6, v7, v9, v11, v13, v15, v3, 1, v4, v5, v33, v35, 0, 1, v1, v2, v8, v10, v12, v14, v16, 0, 3, 100, 101, 2, 4) :|: TRUE f_227(v166, v167, v168, v169, v170, v171, v172, v173, v174, v175, 1, v177, v178, v179, v180, v181, v182, v183, v184, v185, v186, v187, v188, v189, 0, 3, 100, 101, 2, 4) -> f_264(v166, v167, v168, v169, v170, v171, v172, v173, v174, v175, 1, v177, v178, v179, v180, v181, v182, v183, v184, v185, v186, v187, v188, v189, 0, 3, 100, 101, 2, 4) :|: TRUE f_264(v295, v296, v297, v298, v299, v300, v301, v302, v303, v304, 1, v306, v307, v308, v309, v310, v311, v312, v313, v314, v315, v316, v317, v318, 0, 3, 100, 101, 2, 4) -> f_301(v295, v296, v297, v298, v299, v300, v301, v302, v303, v304, 1, v306, v307, v308, v309, v310, v311, v312, v313, v314, v315, v316, v317, v318, 0, 3, 100, 101, 4) :|: TRUE f_301(v424, v425, v426, v427, v428, v429, v430, v431, v432, v433, 1, v435, v436, v437, v438, v439, v440, v441, v442, v443, v444, v445, v446, v447, 0, 3, 100, 101, 4) -> f_338(v424, v425, v426, v427, v428, v429, v430, v431, v432, v433, 1, v435, v436, v437, v438, v439, v440, v441, v442, v443, v444, v445, v446, v447, 0, 3, 100, 101, 4) :|: TRUE f_338(v553, v554, v555, v556, v557, v558, v559, v560, v561, v562, 1, v564, v565, v566, v567, v568, v569, v570, v571, v572, v573, v574, v575, v576, 0, 3, 100, 101, 4) -> f_375(v553, v554, v555, v556, v557, v558, v559, v560, v561, v562, 1, v564, v565, v566, v567, v568, v569, v570, v571, v572, v573, v574, v575, v576, 0, 3, 100, 101, 4) :|: TRUE Combined rules. Obtained 2 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 f_136 -> f_376(v3:0, v4:0, 1 + v35:0, v6:0, v7:0, v9:0, v11:0, v13:0, v15:0, v4:0, 1, 1 + v35:0, v3:0, 1 + v3:0, v35:0, 0, 1, v1:0, 3 + v1:0, 3 + v7:0, 3 + v9:0, 3 + v11:0, 3 + v13:0, 3 + v15:0, 0, 3, 100, 101, 4) :|: v1:0 > 0 && v7:0 > 0 && v9:0 > 0 && v11:0 > 0 && v13:0 > 0 && v15:0 > 0 && v3:0 < 101 && v4:0 <= 1 + v35: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 2 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 f_136 -> f_376(v4:0, 1 + v3:0, v35:0, 1) :|: v3:0 < 101 && v4:0 <= 1 + v35: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 f_136 -> f_376(v4:0, 1 + v3:0, v35:0, 1) :|: v3:0 < 101 && v4:0 <= 1 + v35:0 Start term: f_136 ---------------------------------------- (9) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_376_4,1) (f_136_4,2) ---------------------------------------- (10) Obligation: START: 2; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := oldX2 - 1; assume(oldX1 <= 1 + oldX4 && oldX3 > 0 && oldX0 < 101 && oldX2 = 1 + oldX4); x0 := oldX1; x1 := 1 + oldX0; x2 := oldX2 - 1; x3 := 1 + oldX3; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := nondet(); oldX5 := nondet(); oldX6 := nondet(); assume(oldX5 < 101 && oldX4 <= 1 + oldX6); x0 := oldX4; x1 := 1 + oldX5; x2 := oldX6; x3 := 1; TO: 1; ---------------------------------------- (11) T2 (EQUIVALENT) Initially, performed program simplifications using lexicographic rank functions: * Removed transitions 1, 3, 4 using the following rank functions: - Rank function 1: RF for loc. 5: 2-2*x0-2*x1+2*x2 RF for loc. 6: -2*x0-2*x1+2*x2 Bound for (chained) transitions 3: -200 Bound for (chained) transitions 4: -200 - Rank function 2: RF for loc. 5: 1 RF for loc. 6: 0 Bound for (chained) transitions 1: 1 ---------------------------------------- (12) YES