28.59/9.96 YES 28.59/9.98 proof of /export/starexec/sandbox/benchmark/theBenchmark.c 28.59/9.98 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 28.59/9.98 28.59/9.98 28.59/9.98 Termination of the given C Problem could be proven: 28.59/9.98 28.59/9.98 (0) C Problem 28.59/9.98 (1) CToLLVMProof [EQUIVALENT, 174 ms] 28.59/9.98 (2) LLVM problem 28.59/9.98 (3) LLVMToTerminationGraphProof [EQUIVALENT, 5688 ms] 28.59/9.98 (4) LLVM Symbolic Execution Graph 28.59/9.98 (5) SymbolicExecutionGraphToLassoProof [EQUIVALENT, 0 ms] 28.59/9.98 (6) LLVM Symbolic Execution Lasso 28.59/9.98 (7) Lasso2IRS [SOUND, 143 ms] 28.59/9.98 (8) IntTRS 28.59/9.98 (9) IRS2T2 [EQUIVALENT, 0 ms] 28.59/9.98 (10) T2IntSys 28.59/9.98 (11) T2 [EQUIVALENT, 1215 ms] 28.59/9.98 (12) YES 28.59/9.98 28.59/9.98 28.59/9.98 ---------------------------------------- 28.59/9.98 28.59/9.98 (0) 28.59/9.98 Obligation: 28.59/9.98 c file /export/starexec/sandbox/benchmark/theBenchmark.c 28.59/9.98 ---------------------------------------- 28.59/9.98 28.59/9.98 (1) CToLLVMProof (EQUIVALENT) 28.59/9.98 Compiled c-file /export/starexec/sandbox/benchmark/theBenchmark.c to LLVM. 28.59/9.98 ---------------------------------------- 28.59/9.98 28.59/9.98 (2) 28.59/9.98 Obligation: 28.59/9.98 LLVM Problem 28.59/9.98 28.59/9.98 Aliases: 28.59/9.98 28.59/9.98 Data layout: 28.59/9.98 28.59/9.98 "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" 28.59/9.98 28.59/9.98 Machine: 28.59/9.98 28.59/9.98 "x86_64-pc-linux-gnu" 28.59/9.98 28.59/9.98 Type definitions: 28.59/9.98 28.59/9.98 Global variables: 28.59/9.98 28.59/9.98 Function declarations and definitions: 28.59/9.98 28.59/9.98 *BasicFunctionTypename: "__VERIFIER_nondet_int" returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 28.59/9.98 *BasicFunctionTypename: "__VERIFIER_error" returnParam: BasicVoidType parameters: () variableLength: true visibilityType: DEFAULT callingConvention: ccc 28.59/9.98 *BasicFunctionTypename: "fibonacci" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: (n i32) variableLength: false visibilityType: DEFAULT callingConvention: ccc 28.59/9.98 0: 28.59/9.98 %1 = alloca i32, align 4 28.59/9.98 %2 = alloca i32, align 4 28.59/9.98 store %n, %2 28.59/9.98 %3 = load %2 28.59/9.98 %4 = icmp slt %3 1 28.59/9.98 br %4, %5, %6 28.59/9.98 5: 28.59/9.98 store 0, %1 28.59/9.98 br %18 28.59/9.98 6: 28.59/9.98 %7 = load %2 28.59/9.98 %8 = icmp eq %7 1 28.59/9.98 br %8, %9, %10 28.59/9.98 9: 28.59/9.98 store 1, %1 28.59/9.98 br %18 28.59/9.98 10: 28.59/9.98 %11 = load %2 28.59/9.98 %12 = sub %11 1 28.59/9.98 %13 = call i32 @fibonacci(i32 %12) 28.59/9.98 %14 = load %2 28.59/9.98 %15 = sub %14 2 28.59/9.98 %16 = call i32 @fibonacci(i32 %15) 28.59/9.98 %17 = add %13 %16 28.59/9.98 store %17, %1 28.59/9.98 br %18 28.59/9.98 18: 28.59/9.98 %19 = load %1 28.59/9.98 ret %19 28.59/9.98 28.59/9.98 *BasicFunctionTypename: "main" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 28.59/9.98 0: 28.59/9.98 %1 = alloca i32, align 4 28.59/9.98 %x = alloca i32, align 4 28.59/9.98 %result = alloca i32, align 4 28.59/9.98 store 0, %1 28.59/9.98 %2 = call i32 @__VERIFIER_nondet_int() 28.59/9.98 store %2, %x 28.59/9.98 %3 = load %x 28.59/9.98 %4 = icmp slt %3 1 28.59/9.98 br %4, %5, %6 28.59/9.98 5: 28.59/9.98 store 0, %1 28.59/9.98 br %14 28.59/9.98 6: 28.59/9.98 %7 = load %x 28.59/9.98 %8 = call i32 @fibonacci(i32 %7) 28.59/9.98 store %8, %result 28.59/9.98 %9 = load %result 28.59/9.98 %10 = icmp sge %9 1 28.59/9.98 br %10, %11, %12 28.59/9.98 11: 28.59/9.98 store 0, %1 28.59/9.98 br %14 28.59/9.98 12: 28.59/9.98 br %13 28.59/9.98 13: 28.59/9.98 Unnamed Call-Instruction = call BasicVoidType (...)* @__VERIFIER_error() noreturn 28.59/9.98 unreachable 28.59/9.98 14: 28.59/9.98 %15 = load %1 28.59/9.98 ret %15 28.59/9.98 28.59/9.98 28.59/9.98 Analyze Termination of all function calls matching the pattern: 28.59/9.98 main() 28.59/9.98 ---------------------------------------- 28.59/9.98 28.59/9.98 (3) LLVMToTerminationGraphProof (EQUIVALENT) 28.59/9.98 Constructed symbolic execution graph for LLVM program and proved memory safety. 28.59/9.98 ---------------------------------------- 28.59/9.98 28.59/9.98 (4) 28.59/9.98 Obligation: 28.59/9.98 SE Graph 28.59/9.98 ---------------------------------------- 28.59/9.98 28.59/9.98 (5) SymbolicExecutionGraphToLassoProof (EQUIVALENT) 28.59/9.98 Converted SEGraph to 1 independent lasso. 28.59/9.98 ---------------------------------------- 28.59/9.98 28.59/9.98 (6) 28.59/9.98 Obligation: 28.59/9.98 Lasso 28.59/9.98 ---------------------------------------- 28.59/9.98 28.59/9.98 (7) Lasso2IRS (SOUND) 28.59/9.98 Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: 28.59/9.98 Generated rules. Obtained 64 rulesP rules: 28.59/9.98 f_255(v97, v106, v98, v99, v100, v101, v102, v103, v107, 0, v105, 3, 1, 4) -> f_256(v97, v106, v108, v98, v99, v100, v101, v102, v103, v107, v109, 0, v105, 3, 1, 4) :|: 1 <= v108 && v109 = 3 + v108 && 4 <= v109 28.59/9.98 f_256(v97, v106, v108, v98, v99, v100, v101, v102, v103, v107, v109, 0, v105, 3, 1, 4) -> f_257(v97, v106, v108, v98, v99, v100, v101, v102, v103, v107, v109, 0, v105, 3, 1, 4) :|: TRUE 28.59/9.98 f_257(v97, v106, v108, v98, v99, v100, v101, v102, v103, v107, v109, 0, v105, 3, 1, 4) -> f_258(v97, v106, v108, v98, v99, v100, v101, v102, v103, v107, v109, 0, v105, 3, 1, 4) :|: 0 = 0 28.59/9.98 f_258(v97, v106, v108, v98, v99, v100, v101, v102, v103, v107, v109, 0, v105, 3, 1, 4) -> f_260(v97, v106, v108, v98, v99, v100, v101, v102, v103, v107, v109, 0, v105, 3, 1, 4) :|: 1 <= v97 28.59/9.98 f_260(v97, v106, v108, v98, v99, v100, v101, v102, v103, v107, v109, 0, v105, 3, 1, 4) -> f_262(v97, v106, v108, 0, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 4) :|: 0 = 0 28.59/9.98 f_262(v97, v106, v108, 0, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 4) -> f_264(v97, v106, v108, 0, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 4) :|: TRUE 28.59/9.98 f_264(v97, v106, v108, 0, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 4) -> f_266(v97, v106, v108, 0, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 4) :|: 0 = 0 28.59/9.98 f_266(v97, v106, v108, 0, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 4) -> f_269(v97, v106, v108, 0, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 2, 1, 4) :|: v97 != 1 && 2 <= v97 && 2 <= v105 28.59/9.98 f_269(v97, v106, v108, 0, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 2, 1, 4) -> f_272(v97, v106, v108, 0, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 2, 1, 4) :|: 0 = 0 28.59/9.98 f_272(v97, v106, v108, 0, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 2, 1, 4) -> f_275(v97, v106, v108, 0, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 2, 1, 4) :|: TRUE 28.59/9.98 f_275(v97, v106, v108, 0, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 2, 1, 4) -> f_277(v97, v106, v108, 0, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 2, 1, 4) :|: 0 = 0 28.59/9.98 f_277(v97, v106, v108, 0, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 2, 1, 4) -> f_279(v97, v106, v108, 0, v122, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) :|: 1 + v122 = v97 && 1 <= v122 28.59/9.98 f_279(v97, v106, v108, 0, v122, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) -> f_281(v122, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) :|: 0 = 0 28.59/9.98 f_281(v122, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) -> f_283(v122, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) :|: TRUE 28.59/9.98 f_281(v122, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) -> f_287(1, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, 2, 3, 4) :|: TRUE 28.59/9.98 f_281(v122, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) -> f_616(v122, v1212, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) :|: TRUE 28.59/9.98 f_281(v122, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) -> f_643(v122, v1309, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) :|: TRUE 28.59/9.98 f_281(v122, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) -> f_680(v122, v1439, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) :|: TRUE 28.59/9.98 f_281(v122, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) -> f_717(v122, v1439, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) :|: TRUE 28.59/9.98 f_281(v122, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) -> f_737(v122, v1439, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) :|: TRUE 28.59/9.98 f_283(v122, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) -> f_254(v122, v98, v99, v100, v101, v102, v103, 0, v105, 3, 1, 4) :|: TRUE 28.59/9.98 f_254(v97, v98, v99, v100, v101, v102, v103, 0, v105, 3, 1, 4) -> f_255(v97, v106, v98, v99, v100, v101, v102, v103, v107, 0, v105, 3, 1, 4) :|: 1 <= v106 && v107 = 3 + v106 && 4 <= v107 28.59/9.98 f_287(1, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, 2, 3, 4) -> f_289(2, v106, v108, 0, 1, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 4) :|: 0 = 0 28.59/9.98 f_289(2, v106, v108, 0, 1, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 4) -> f_291(2, v106, v108, 0, 1, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 4) :|: 0 = 0 28.59/9.98 f_291(2, v106, v108, 0, 1, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 4) -> f_293(2, v106, v108, 0, 1, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 4) :|: 0 = 0 28.59/9.98 f_293(2, v106, v108, 0, 1, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 4) -> f_295(0, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, v105, 2, 1, 3, 4) :|: 0 = 0 28.59/9.98 f_295(0, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, v105, 2, 1, 3, 4) -> f_297(0, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, v105, 2, 3, 1, 4) :|: TRUE 28.59/9.98 f_297(0, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, v105, 2, 3, 1, 4) -> f_254(0, v98, v99, v100, v101, v102, v103, 0, v105, 3, 1, 4) :|: TRUE 28.59/9.98 f_616(v122, v1212, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) -> f_623(v97, v106, v108, 0, v122, v1212, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) :|: 0 = 0 28.59/9.98 f_623(v97, v106, v108, 0, v122, v1212, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) -> f_626(v97, v106, v108, 0, v122, v1212, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) :|: 0 = 0 28.59/9.98 f_626(v97, v106, v108, 0, v122, v1212, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) -> f_629(v97, v106, v108, 0, v122, v1212, v1227, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) :|: 2 + v1227 = v97 && 0 <= v1227 28.59/9.98 f_629(v97, v106, v108, 0, v122, v1212, v1227, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) -> f_632(v1227, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, v122, v1212, 3, 1, 2, 4) :|: 0 = 0 28.59/9.98 f_632(v1227, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, v122, v1212, 3, 1, 2, 4) -> f_635(v1227, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 2, 1, 4) :|: TRUE 28.59/9.98 f_635(v1227, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 2, 1, 4) -> f_254(v1227, v98, v99, v100, v101, v102, v103, 0, v105, 3, 1, 4) :|: TRUE 28.59/9.98 f_643(v122, v1309, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) -> f_650(v97, v106, v108, 0, v122, v1309, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) :|: 0 = 0 28.59/9.98 f_650(v97, v106, v108, 0, v122, v1309, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) -> f_656(v97, v106, v108, 0, v122, v1309, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) :|: 0 = 0 28.59/9.98 f_656(v97, v106, v108, 0, v122, v1309, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) -> f_662(v97, v106, v108, 0, v122, v1309, v1329, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) :|: 2 + v1329 = v97 && 0 <= v1329 28.59/9.98 f_662(v97, v106, v108, 0, v122, v1309, v1329, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) -> f_668(v1329, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, v122, v1309, 3, 1, 2, 4) :|: 0 = 0 28.59/9.98 f_668(v1329, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, v122, v1309, 3, 1, 2, 4) -> f_674(v1329, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 2, 1, 4) :|: TRUE 28.59/9.98 f_674(v1329, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 2, 1, 4) -> f_254(v1329, v98, v99, v100, v101, v102, v103, 0, v105, 3, 1, 4) :|: TRUE 28.59/9.98 f_680(v122, v1439, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) -> f_687(v97, v106, v108, 0, v122, v1439, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) :|: 0 = 0 28.59/9.98 f_687(v97, v106, v108, 0, v122, v1439, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) -> f_694(v97, v106, v108, 0, v122, v1439, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) :|: 0 = 0 28.59/9.98 f_694(v97, v106, v108, 0, v122, v1439, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) -> f_701(v97, v106, v108, 0, v122, v1439, v1499, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) :|: 2 + v1499 = v97 && 0 <= v1499 28.59/9.98 f_701(v97, v106, v108, 0, v122, v1439, v1499, v98, v99, v100, v101, v102, v103, v107, v109, v105, 3, 1, 2, 4) -> f_708(v1499, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, v122, v1439, 3, 1, 2, 4) :|: 0 = 0 28.59/9.98 f_708(v1499, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, v122, v1439, 3, 1, 2, 4) -> f_715(v1499, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 2, 1, 4) :|: TRUE 28.59/9.98 f_715(v1499, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 2, 1, 4) -> f_254(v1499, v98, v99, v100, v101, v102, v103, 0, v105, 3, 1, 4) :|: TRUE 28.59/9.98 f_717(v122, v1439, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) -> f_680(v122, v1439, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) :|: TRUE 28.59/9.98 f_737(v122, v1439, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) -> f_717(v122, v1439, v98, v99, v100, v101, v102, v103, v106, v107, v108, v109, 0, v105, v97, 3, 1, 2, 4) :|: TRUE 28.59/9.98 f_149 -> f_150(v1, v2, 3, 1, 4) :|: 1 <= v1 && v2 = 3 + v1 && 4 <= v2 28.59/9.98 f_150(v1, v2, 3, 1, 4) -> f_151(v1, v3, v2, v4, 3, 1, 4) :|: 1 <= v3 && v4 = 3 + v3 && 4 <= v4 28.59/9.98 f_151(v1, v3, v2, v4, 3, 1, 4) -> f_152(v1, v3, v5, v2, v4, v6, 3, 1, 4) :|: 1 <= v5 && v6 = 3 + v5 && 4 <= v6 28.59/9.98 f_152(v1, v3, v5, v2, v4, v6, 3, 1, 4) -> f_153(v1, v3, v5, v2, v4, v6, 0, 3, 1, 4) :|: TRUE 28.59/9.98 f_153(v1, v3, v5, v2, v4, v6, 0, 3, 1, 4) -> f_154(v1, v3, v5, v7, v2, v4, v6, 0, 3, 1, 4) :|: TRUE 28.59/9.98 f_154(v1, v3, v5, v7, v2, v4, v6, 0, 3, 1, 4) -> f_155(v1, v3, v5, v7, v2, v4, v6, 0, 3, 1, 4) :|: TRUE 28.59/9.98 f_155(v1, v3, v5, v7, v2, v4, v6, 0, 3, 1, 4) -> f_156(v1, v3, v5, v7, v2, v4, v6, 0, 3, 1, 4) :|: 0 = 0 28.59/9.98 f_156(v1, v3, v5, v7, v2, v4, v6, 0, 3, 1, 4) -> f_158(v1, v3, v5, v7, v2, v4, v6, 0, 3, 1, 4) :|: 1 <= v7 28.59/9.98 f_158(v1, v3, v5, v7, v2, v4, v6, 0, 3, 1, 4) -> f_160(v1, v3, v5, v7, 0, v2, v4, v6, 3, 1, 4) :|: 0 = 0 28.59/9.98 f_160(v1, v3, v5, v7, 0, v2, v4, v6, 3, 1, 4) -> f_162(v1, v3, v5, v7, 0, v2, v4, v6, 3, 1, 4) :|: TRUE 28.59/9.98 f_162(v1, v3, v5, v7, 0, v2, v4, v6, 3, 1, 4) -> f_164(v1, v3, v5, v7, 0, v2, v4, v6, 3, 1, 4) :|: 0 = 0 28.59/9.98 f_164(v1, v3, v5, v7, 0, v2, v4, v6, 3, 1, 4) -> f_166(v7, v1, v2, v3, v4, v5, v6, 0, 3, 1, 4) :|: 0 = 0 28.59/9.98 f_166(v7, v1, v2, v3, v4, v5, v6, 0, 3, 1, 4) -> f_168(v7, v1, v2, v3, v4, v5, v6, 0, 3, 1, 4) :|: TRUE 28.59/9.98 f_168(v7, v1, v2, v3, v4, v5, v6, 0, 3, 1, 4) -> f_191(v7, v1, v2, v3, v4, v5, v6, 0, v7, 3, 1, 4) :|: TRUE 28.59/9.98 f_191(v25, v26, v27, v28, v29, v30, v31, 0, v33, 3, 1, 4) -> f_216(v25, v26, v27, v28, v29, v30, v31, 0, v33, 3, 1, 4) :|: TRUE 28.59/9.98 f_216(v51, v52, v53, v54, v55, v56, v57, 0, v59, 3, 1, 4) -> f_254(v51, v52, v53, v54, v55, v56, v57, 0, v59, 3, 1, 4) :|: TRUE 28.59/9.98 Combined rules. Obtained 4 rulesP rules: 28.59/9.98 f_255(2 + v1499:0, v106:0, v98:0, v99:0, v100:0, v101:0, v102:0, v103:0, v107:0, 0, v105:0, 3, 1, 4) -> f_255(v1499:0, v106:1, v98:0, v99:0, v100:0, v101:0, v102:0, v103:0, 3 + v106:1, 0, v105:0, 3, 1, 4) :|: v1499:0 > -1 && v108:0 > 0 && v105:0 > 1 && v122:0 > 0 && 2 + v1499:0 = 1 + v122:0 && v106:1 > 0 28.59/9.98 f_255(1 + v122:0, v106:0, v98:0, v99:0, v100:0, v101:0, v102:0, v103:0, v107:0, 0, v105:0, 3, 1, 4) -> f_255(v122:0, v106:1, v98:0, v99:0, v100:0, v101:0, v102:0, v103:0, 3 + v106:1, 0, v105:0, 3, 1, 4) :|: v122:0 > 0 && v108:0 > 0 && v105:0 > 1 && v106:1 > 0 28.59/9.98 f_255(1 + v122:0, v106:0, v98:0, v99:0, v100:0, v101:0, v102:0, v103:0, v107:0, 0, v105:0, 3, 1, 4) -> f_255(0, v106:1, v98:0, v99:0, v100:0, v101:0, v102:0, v103:0, 3 + v106:1, 0, v105:0, 3, 1, 4) :|: v122:0 > 0 && v108:0 > 0 && v105:0 > 1 && v106:1 > 0 28.59/9.98 f_149 -> f_255(v7:0, v106:0, v1:0, 3 + v1:0, v3:0, 3 + v3:0, v5:0, 3 + v5:0, 3 + v106:0, 0, v7:0, 3, 1, 4) :|: v3:0 > 0 && v1:0 > 0 && v5:0 > 0 && v7:0 > 0 && v106:0 > 0 28.59/9.98 Filtered unneeded arguments: 28.59/9.98 f_255(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14) -> f_255(x1, x11) 28.59/9.98 Removed division, modulo operations, cleaned up constraints. Obtained 4 rules.P rules: 28.59/9.98 f_255(sum~cons_2~v1499:0, v105:0) -> f_255(v1499:0, v105:0) :|: v1499:0 > -1 && v105:0 > 1 && sum~cons_2~v1499:0 = 2 + v1499:0 28.59/9.98 f_255(sum~cons_1~v122:0, v105:0) -> f_255(v122:0, v105:0) :|: v122:0 > 0 && v105:0 > 1 && sum~cons_1~v122:0 = 1 + v122:0 28.59/9.98 f_255(sum~cons_1~v122:0, v105:0) -> f_255(0, v105:0) :|: v122:0 > 0 && v105:0 > 1 && sum~cons_1~v122:0 = 1 + v122:0 28.59/9.98 f_149 -> f_255(v7:0, v7:0) :|: v7:0 > 0 28.59/9.98 28.59/9.98 ---------------------------------------- 28.59/9.98 28.59/9.98 (8) 28.59/9.98 Obligation: 28.59/9.98 Rules: 28.59/9.98 f_255(sum~cons_2~v1499:0, v105:0) -> f_255(v1499:0, v105:0) :|: v1499:0 > -1 && v105:0 > 1 && sum~cons_2~v1499:0 = 2 + v1499:0 28.59/9.98 f_255(x, x1) -> f_255(x2, x1) :|: x2 > 0 && x1 > 1 && x = 1 + x2 28.59/9.98 f_255(x3, x4) -> f_255(0, x4) :|: x5 > 0 && x4 > 1 && x3 = 1 + x5 28.59/9.98 f_149 -> f_255(v7:0, v7:0) :|: v7:0 > 0 28.59/9.98 Start term: f_149 28.59/9.98 28.59/9.98 ---------------------------------------- 28.59/9.98 28.59/9.98 (9) IRS2T2 (EQUIVALENT) 28.59/9.98 Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: 28.59/9.98 28.59/9.98 (f_255_2,1) 28.59/9.98 (f_149_2,2) 28.59/9.98 28.59/9.98 ---------------------------------------- 28.59/9.98 28.59/9.98 (10) 28.59/9.98 Obligation: 28.59/9.98 START: 2; 28.59/9.98 28.59/9.98 FROM: 1; 28.59/9.98 oldX0 := x0; 28.59/9.98 oldX1 := x1; 28.59/9.98 oldX2 := oldX0 - 2; 28.59/9.98 assume(oldX2 > -1 && oldX1 > 1 && oldX0 = 2 + oldX2); 28.59/9.98 x0 := oldX0 - 2; 28.59/9.98 x1 := oldX1; 28.59/9.98 TO: 1; 28.59/9.98 28.59/9.98 FROM: 1; 28.59/9.98 oldX0 := x0; 28.59/9.98 oldX1 := x1; 28.59/9.98 oldX2 := oldX0 - 1; 28.59/9.98 assume(oldX2 > 0 && oldX1 > 1 && oldX0 = 1 + oldX2); 28.59/9.98 x0 := oldX0 - 1; 28.59/9.98 x1 := oldX1; 28.59/9.98 TO: 1; 28.59/9.98 28.59/9.98 FROM: 1; 28.59/9.98 oldX0 := x0; 28.59/9.98 oldX1 := x1; 28.59/9.98 oldX2 := oldX0 - 1; 28.59/9.98 assume(oldX2 > 0 && oldX1 > 1 && oldX0 = 1 + oldX2); 28.59/9.98 x0 := 0; 28.59/9.98 x1 := oldX1; 28.59/9.98 TO: 1; 28.59/9.98 28.59/9.98 FROM: 2; 28.59/9.98 oldX0 := x0; 28.59/9.98 oldX1 := x1; 28.59/9.98 oldX2 := nondet(); 28.59/9.98 assume(oldX2 > 0); 28.59/9.98 x0 := oldX2; 28.59/9.98 x1 := oldX2; 28.59/9.98 TO: 1; 28.59/9.98 28.59/9.98 28.59/9.98 ---------------------------------------- 28.59/9.98 28.59/9.98 (11) T2 (EQUIVALENT) 28.59/9.98 Initially, performed program simplifications using lexicographic rank functions: 28.59/9.98 * Removed transitions 1, 4, 5, 6 using the following rank functions: 28.59/9.98 - Rank function 1: 28.59/9.98 RF for loc. 5: 1+2*x0 28.59/9.98 RF for loc. 6: 2*x0 28.59/9.98 Bound for (chained) transitions 4: 4 28.59/9.98 Bound for (chained) transitions 5: 4 28.59/9.98 Bound for (chained) transitions 6: 4 28.59/9.98 - Rank function 2: 28.59/9.98 RF for loc. 5: 0 28.59/9.98 RF for loc. 6: -1 28.59/9.98 Bound for (chained) transitions 1: 0 28.59/9.98 28.59/9.98 ---------------------------------------- 28.59/9.98 28.59/9.98 (12) 28.59/9.98 YES 28.63/10.37 EOF