19.09/6.41 YES 19.79/7.02 proof of /export/starexec/sandbox/benchmark/theBenchmark.c 19.79/7.02 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 19.79/7.02 19.79/7.02 19.79/7.02 Termination of the given C Problem could be proven: 19.79/7.02 19.79/7.02 (0) C Problem 19.79/7.02 (1) CToLLVMProof [EQUIVALENT, 153 ms] 19.79/7.02 (2) LLVM problem 19.79/7.02 (3) LLVMToTerminationGraphProof [EQUIVALENT, 699 ms] 19.79/7.02 (4) LLVM Symbolic Execution Graph 19.79/7.02 (5) SymbolicExecutionGraphToSCCProof [SOUND, 0 ms] 19.79/7.02 (6) AND 19.79/7.02 (7) LLVM Symbolic Execution SCC 19.79/7.02 (8) SCC2IRS [SOUND, 0 ms] 19.79/7.02 (9) IntTRS 19.79/7.02 (10) IRS2T2 [EQUIVALENT, 0 ms] 19.79/7.02 (11) T2IntSys 19.79/7.02 (12) T2 [EQUIVALENT, 3 ms] 19.79/7.02 (13) YES 19.79/7.02 (14) LLVM Symbolic Execution SCC 19.79/7.02 (15) SCC2IRS [SOUND, 0 ms] 19.79/7.02 (16) IntTRS 19.79/7.02 (17) IRS2T2 [EQUIVALENT, 0 ms] 19.79/7.02 (18) T2IntSys 19.79/7.02 (19) T2 [EQUIVALENT, 883 ms] 19.79/7.02 (20) YES 19.79/7.02 19.79/7.02 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (0) 19.79/7.02 Obligation: 19.79/7.02 c file /export/starexec/sandbox/benchmark/theBenchmark.c 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (1) CToLLVMProof (EQUIVALENT) 19.79/7.02 Compiled c-file /export/starexec/sandbox/benchmark/theBenchmark.c to LLVM. 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (2) 19.79/7.02 Obligation: 19.79/7.02 LLVM Problem 19.79/7.02 19.79/7.02 Aliases: 19.79/7.02 19.79/7.02 Data layout: 19.79/7.02 19.79/7.02 "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" 19.79/7.02 19.79/7.02 Machine: 19.79/7.02 19.79/7.02 "x86_64-pc-linux-gnu" 19.79/7.02 19.79/7.02 Type definitions: 19.79/7.02 19.79/7.02 Global variables: 19.79/7.02 19.79/7.02 Function declarations and definitions: 19.79/7.02 19.79/7.02 *BasicFunctionTypename: "__VERIFIER_nondet_int" returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 19.79/7.02 *BasicFunctionTypename: "main" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 19.79/7.02 0: 19.79/7.02 %1 = alloca i32, align 4 19.79/7.02 %x = alloca i32, align 4 19.79/7.02 store 0, %1 19.79/7.02 %2 = call i32 @__VERIFIER_nondet_int() 19.79/7.02 store %2, %x 19.79/7.02 br %3 19.79/7.02 3: 19.79/7.02 %4 = load %x 19.79/7.02 %5 = icmp ne %4 0 19.79/7.02 br %5, %6, %16 19.79/7.02 6: 19.79/7.02 %7 = load %x 19.79/7.02 %8 = icmp sgt %7 0 19.79/7.02 br %8, %9, %12 19.79/7.02 9: 19.79/7.02 %10 = load %x 19.79/7.02 %11 = sub %10 1 19.79/7.02 store %11, %x 19.79/7.02 br %15 19.79/7.02 12: 19.79/7.02 %13 = load %x 19.79/7.02 %14 = add %13 1 19.79/7.02 store %14, %x 19.79/7.02 br %15 19.79/7.02 15: 19.79/7.02 br %3 19.79/7.02 16: 19.79/7.02 ret 0 19.79/7.02 19.79/7.02 19.79/7.02 Analyze Termination of all function calls matching the pattern: 19.79/7.02 main() 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (3) LLVMToTerminationGraphProof (EQUIVALENT) 19.79/7.02 Constructed symbolic execution graph for LLVM program and proved memory safety. 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (4) 19.79/7.02 Obligation: 19.79/7.02 SE Graph 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (5) SymbolicExecutionGraphToSCCProof (SOUND) 19.79/7.02 Splitted symbolic execution graph to 2 SCCs. 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (6) 19.79/7.02 Complex Obligation (AND) 19.79/7.02 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (7) 19.79/7.02 Obligation: 19.79/7.02 SCC 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (8) SCC2IRS (SOUND) 19.79/7.02 Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: 19.79/7.02 Generated rules. Obtained 14 rulesP rules: 19.79/7.02 f_182(v91, v92, v93, v94, 1, 0, v97, v98, v99, 3, 4) -> f_185(v91, v92, v93, v97, 1, v94, 0, v98, v99, 3, 4) :|: 0 = 0 19.79/7.02 f_185(v91, v92, v93, v97, 1, v94, 0, v98, v99, 3, 4) -> f_188(v91, v92, v93, v97, 1, v94, 0, v98, v99, 3, 4) :|: v97 != 0 19.79/7.02 f_188(v91, v92, v93, v97, 1, v94, 0, v98, v99, 3, 4) -> f_191(v91, v92, v93, v97, 1, v94, 0, v98, v99, 3, 4) :|: 0 = 0 19.79/7.02 f_191(v91, v92, v93, v97, 1, v94, 0, v98, v99, 3, 4) -> f_194(v91, v92, v93, v97, 1, v94, 0, v98, v99, 3, 4) :|: TRUE 19.79/7.02 f_194(v91, v92, v93, v97, 1, v94, 0, v98, v99, 3, 4) -> f_197(v91, v92, v93, v97, 1, 0, v94, v98, v99, 3, 4) :|: 0 = 0 19.79/7.02 f_197(v91, v92, v93, v97, 1, 0, v94, v98, v99, 3, 4) -> f_200(v91, v92, v93, v97, 1, 0, v94, v98, v99, 3, 4) :|: v97 <= 0 && 1 + v94 <= 0 && 1 + v93 <= 0 19.79/7.02 f_200(v91, v92, v93, v97, 1, 0, v94, v98, v99, 3, 4) -> f_203(v91, v92, v93, v97, 1, 0, v94, v98, v99, 3, 4) :|: 0 = 0 19.79/7.02 f_203(v91, v92, v93, v97, 1, 0, v94, v98, v99, 3, 4) -> f_206(v91, v92, v93, v97, 1, 0, v94, v98, v99, 3, 4) :|: TRUE 19.79/7.02 f_206(v91, v92, v93, v97, 1, 0, v94, v98, v99, 3, 4) -> f_209(v91, v92, v93, v97, 1, 0, v98, v99, 3, 4) :|: 0 = 0 19.79/7.02 f_209(v91, v92, v93, v97, 1, 0, v98, v99, 3, 4) -> f_212(v91, v92, v93, v97, 1, 0, v128, v98, v99, 3, 4) :|: v128 = 1 + v97 && v128 <= 1 19.79/7.02 f_212(v91, v92, v93, v97, 1, 0, v128, v98, v99, 3, 4) -> f_214(v91, v92, v93, v97, 1, 0, v128, v98, v99, 3, 4) :|: TRUE 19.79/7.02 f_214(v91, v92, v93, v97, 1, 0, v128, v98, v99, 3, 4) -> f_216(v91, v92, v93, v97, 1, 0, v128, v98, v99, 3, 4) :|: TRUE 19.79/7.02 f_216(v91, v92, v93, v97, 1, 0, v128, v98, v99, 3, 4) -> f_179(v91, v92, v93, v97, 1, 0, v128, v98, v99, 3, 4) :|: TRUE 19.79/7.02 f_179(v91, v92, v93, v94, 1, 0, v97, v98, v99, 3, 4) -> f_182(v91, v92, v93, v94, 1, 0, v97, v98, v99, 3, 4) :|: TRUE 19.79/7.02 Combined rules. Obtained 2 rulesP rules: 19.79/7.02 f_182(v91:0, v92:0, v93:0, v94:0, 1, 0, v97:0, v98:0, v99:0, 3, 4) -> f_182(v91:0, v92:0, v93:0, v97:0, 1, 0, 1 + v97:0, v98:0, v99:0, 3, 4) :|: v97:0 < 0 && v94:0 < 0 && v97:0 < 1 && v93:0 < 0 19.79/7.02 f_182(v91:0, v92:0, v93:0, v94:0, 1, 0, v97:0, v98:0, v99:0, 3, 4) -> f_182(v91:0, v92:0, v93:0, v97:0, 1, 0, 1 + v97:0, v98:0, v99:0, 3, 4) :|: v97:0 > 0 && v94:0 < 0 && v97:0 < 1 && v93:0 < 0 19.79/7.02 Filtered unneeded arguments: 19.79/7.02 f_182(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) -> f_182(x3, x4, x7) 19.79/7.02 Removed division, modulo operations, cleaned up constraints. Obtained 2 rules.P rules: 19.79/7.02 f_182(v93:0, v94:0, v97:0) -> f_182(v93:0, v97:0, 1 + v97:0) :|: v94:0 < 0 && v97:0 < 0 && v93:0 < 0 && v97:0 < 1 19.79/7.02 f_182(v93:0, v94:0, v97:0) -> f_182(v93:0, v97:0, 1 + v97:0) :|: v94:0 < 0 && v97:0 > 0 && v93:0 < 0 && v97:0 < 1 19.79/7.02 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (9) 19.79/7.02 Obligation: 19.79/7.02 Rules: 19.79/7.02 f_182(v93:0, v94:0, v97:0) -> f_182(v93:0, v97:0, 1 + v97:0) :|: v94:0 < 0 && v97:0 < 0 && v93:0 < 0 && v97:0 < 1 19.79/7.02 f_182(x, x1, x2) -> f_182(x, x2, 1 + x2) :|: x1 < 0 && x2 > 0 && x < 0 && x2 < 1 19.79/7.02 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (10) IRS2T2 (EQUIVALENT) 19.79/7.02 Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: 19.79/7.02 19.79/7.02 (f_182_3,1) 19.79/7.02 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (11) 19.79/7.02 Obligation: 19.79/7.02 START: 0; 19.79/7.02 19.79/7.02 FROM: 0; 19.79/7.02 TO: 1; 19.79/7.02 19.79/7.02 FROM: 1; 19.79/7.02 oldX0 := x0; 19.79/7.02 oldX1 := x1; 19.79/7.02 oldX2 := x2; 19.79/7.02 assume(oldX1 < 0 && oldX2 < 0 && oldX0 < 0 && oldX2 < 1); 19.79/7.02 x0 := oldX0; 19.79/7.02 x1 := oldX2; 19.79/7.02 x2 := 1 + oldX2; 19.79/7.02 TO: 1; 19.79/7.02 19.79/7.02 FROM: 1; 19.79/7.02 oldX0 := x0; 19.79/7.02 oldX1 := x1; 19.79/7.02 oldX2 := x2; 19.79/7.02 assume(oldX1 < 0 && oldX2 > 0 && oldX0 < 0 && oldX2 < 1); 19.79/7.02 x0 := oldX0; 19.79/7.02 x1 := oldX2; 19.79/7.02 x2 := 1 + oldX2; 19.79/7.02 TO: 1; 19.79/7.02 19.79/7.02 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (12) T2 (EQUIVALENT) 19.79/7.02 Initially, performed program simplifications using lexicographic rank functions: 19.79/7.02 * Removed transitions 1, 4, 5 using the following rank functions: 19.79/7.02 - Rank function 1: 19.79/7.02 RF for loc. 5: 1-2*x2 19.79/7.02 RF for loc. 6: -2*x2 19.79/7.02 Bound for (chained) transitions 4: 0 19.79/7.02 Bound for (chained) transitions 5: 0 19.79/7.02 - Rank function 2: 19.79/7.02 RF for loc. 5: 0 19.79/7.02 RF for loc. 6: -1 19.79/7.02 Bound for (chained) transitions 1: 0 19.79/7.02 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (13) 19.79/7.02 YES 19.79/7.02 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (14) 19.79/7.02 Obligation: 19.79/7.02 SCC 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (15) SCC2IRS (SOUND) 19.79/7.02 Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: 19.79/7.02 Generated rules. Obtained 13 rulesP rules: 19.79/7.02 f_176(v71, v72, v73, v76, 1, v74, v77, v78, 0, 3, 4) -> f_180(v71, v72, v73, v76, 1, v74, v77, v78, 0, 3, 2, 4) :|: v76 != 0 && 2 <= v74 && 2 <= v73 19.79/7.02 f_180(v71, v72, v73, v76, 1, v74, v77, v78, 0, 3, 2, 4) -> f_183(v71, v72, v73, v76, 1, v74, v77, v78, 0, 3, 2, 4) :|: 0 = 0 19.79/7.02 f_183(v71, v72, v73, v76, 1, v74, v77, v78, 0, 3, 2, 4) -> f_186(v71, v72, v73, v76, 1, v74, v77, v78, 0, 3, 2, 4) :|: TRUE 19.79/7.02 f_186(v71, v72, v73, v76, 1, v74, v77, v78, 0, 3, 2, 4) -> f_190(v71, v72, v73, v76, 1, v74, v77, v78, 0, 3, 2, 4) :|: 0 = 0 19.79/7.02 f_190(v71, v72, v73, v76, 1, v74, v77, v78, 0, 3, 2, 4) -> f_193(v71, v72, v73, v76, 1, v74, v77, v78, 0, 3, 2, 4) :|: 0 = 0 19.79/7.02 f_193(v71, v72, v73, v76, 1, v74, v77, v78, 0, 3, 2, 4) -> f_196(v71, v72, v73, v76, 1, v74, v77, v78, 0, 3, 2, 4) :|: TRUE 19.79/7.02 f_196(v71, v72, v73, v76, 1, v74, v77, v78, 0, 3, 2, 4) -> f_198(v71, v72, v73, v76, 1, v77, v78, 0, 3, 2, 4) :|: 0 = 0 19.79/7.02 f_198(v71, v72, v73, v76, 1, v77, v78, 0, 3, 2, 4) -> f_201(v71, v72, v73, v76, 1, v111, v77, v78, 0, 3, 2, 4) :|: 1 + v111 = v76 && 0 <= v111 19.79/7.02 f_201(v71, v72, v73, v76, 1, v111, v77, v78, 0, 3, 2, 4) -> f_204(v71, v72, v73, v76, 1, v111, v77, v78, 0, 3, 2, 4) :|: TRUE 19.79/7.02 f_204(v71, v72, v73, v76, 1, v111, v77, v78, 0, 3, 2, 4) -> f_207(v71, v72, v73, v76, 1, v111, v77, v78, 0, 3, 2, 4) :|: TRUE 19.79/7.02 f_207(v71, v72, v73, v76, 1, v111, v77, v78, 0, 3, 2, 4) -> f_210(v71, v72, v73, v76, 1, v111, v77, v78, 0, 3, 2, 4) :|: TRUE 19.79/7.02 f_210(v71, v72, v73, v76, 1, v111, v77, v78, 0, 3, 2, 4) -> f_173(v71, v72, v73, v76, 1, v111, v77, v78, 0, 3, 4) :|: TRUE 19.79/7.02 f_173(v71, v72, v73, v74, 1, v76, v77, v78, 0, 3, 4) -> f_176(v71, v72, v73, v76, 1, v74, v77, v78, 0, 3, 4) :|: 0 = 0 19.79/7.02 Combined rules. Obtained 1 rulesP rules: 19.79/7.02 f_176(v71:0, v72:0, v73:0, 1 + v111:0, 1, v74:0, v77:0, v78:0, 0, 3, 4) -> f_176(v71:0, v72:0, v73:0, v111:0, 1, 1 + v111:0, v77:0, v78:0, 0, 3, 4) :|: v74:0 > 1 && v111:0 > -1 && v73:0 > 1 19.79/7.02 Filtered unneeded arguments: 19.79/7.02 f_176(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) -> f_176(x3, x4, x6) 19.79/7.02 Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: 19.79/7.02 f_176(v73:0, sum~cons_1~v111:0, v74:0) -> f_176(v73:0, v111:0, 1 + v111:0) :|: v111:0 > -1 && v73:0 > 1 && v74:0 > 1 && sum~cons_1~v111:0 = 1 + v111:0 19.79/7.02 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (16) 19.79/7.02 Obligation: 19.79/7.02 Rules: 19.79/7.02 f_176(v73:0, sum~cons_1~v111:0, v74:0) -> f_176(v73:0, v111:0, 1 + v111:0) :|: v111:0 > -1 && v73:0 > 1 && v74:0 > 1 && sum~cons_1~v111:0 = 1 + v111:0 19.79/7.02 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (17) IRS2T2 (EQUIVALENT) 19.79/7.02 Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: 19.79/7.02 19.79/7.02 (f_176_3,1) 19.79/7.02 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (18) 19.79/7.02 Obligation: 19.79/7.02 START: 0; 19.79/7.02 19.79/7.02 FROM: 0; 19.79/7.02 TO: 1; 19.79/7.02 19.79/7.02 FROM: 1; 19.79/7.02 oldX0 := x0; 19.79/7.02 oldX1 := x1; 19.79/7.02 oldX2 := x2; 19.79/7.02 oldX3 := oldX1 - 1; 19.79/7.02 assume(oldX3 > -1 && oldX0 > 1 && oldX2 > 1 && oldX1 = 1 + oldX3); 19.79/7.02 x0 := oldX0; 19.79/7.02 x1 := oldX1 - 1; 19.79/7.02 x2 := 1 + oldX3; 19.79/7.02 TO: 1; 19.79/7.02 19.79/7.02 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (19) T2 (EQUIVALENT) 19.79/7.02 Initially, performed program simplifications using lexicographic rank functions: 19.79/7.02 * Removed transitions 1, 3, 4 using the following rank functions: 19.79/7.02 - Rank function 1: 19.79/7.02 RF for loc. 5: 1+2*x1 19.79/7.02 RF for loc. 6: 2*x1 19.79/7.02 Bound for (chained) transitions 4: 2 19.79/7.02 - Rank function 2: 19.79/7.02 RF for loc. 5: 1+2*x1 19.79/7.02 RF for loc. 6: 2*x1 19.79/7.02 Bound for (chained) transitions 3: 2 19.79/7.02 - Rank function 3: 19.79/7.02 RF for loc. 5: 1 19.79/7.02 RF for loc. 6: 0 19.79/7.02 Bound for (chained) transitions 1: 1 19.79/7.02 19.79/7.02 ---------------------------------------- 19.79/7.02 19.79/7.02 (20) 19.79/7.02 YES 19.83/8.97 EOF