16.21/6.02 YES 16.21/6.03 proof of /export/starexec/sandbox/benchmark/theBenchmark.c 16.21/6.03 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 16.21/6.03 16.21/6.03 16.21/6.03 Termination of the given C Problem could be proven: 16.21/6.03 16.21/6.03 (0) C Problem 16.21/6.03 (1) CToLLVMProof [EQUIVALENT, 172 ms] 16.21/6.03 (2) LLVM problem 16.21/6.03 (3) LLVMToTerminationGraphProof [EQUIVALENT, 1894 ms] 16.21/6.03 (4) LLVM Symbolic Execution Graph 16.21/6.03 (5) SEGraph to IRS [SOUND, 158 ms] 16.21/6.03 (6) IntTRS 16.21/6.03 (7) IRS2T2 [EQUIVALENT, 0 ms] 16.21/6.03 (8) T2IntSys 16.21/6.03 (9) T2 [EQUIVALENT, 1604 ms] 16.21/6.03 (10) YES 16.21/6.03 16.21/6.03 16.21/6.03 ---------------------------------------- 16.21/6.03 16.21/6.03 (0) 16.21/6.03 Obligation: 16.21/6.03 c file /export/starexec/sandbox/benchmark/theBenchmark.c 16.21/6.03 ---------------------------------------- 16.21/6.03 16.21/6.03 (1) CToLLVMProof (EQUIVALENT) 16.21/6.03 Compiled c-file /export/starexec/sandbox/benchmark/theBenchmark.c to LLVM. 16.21/6.03 ---------------------------------------- 16.21/6.03 16.21/6.03 (2) 16.21/6.03 Obligation: 16.21/6.03 LLVM Problem 16.21/6.03 16.21/6.03 Aliases: 16.21/6.03 16.21/6.03 Data layout: 16.21/6.03 16.21/6.03 "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" 16.21/6.03 16.21/6.03 Machine: 16.21/6.03 16.21/6.03 "x86_64-pc-linux-gnu" 16.21/6.03 16.21/6.03 Type definitions: 16.21/6.03 16.21/6.03 Global variables: 16.21/6.03 16.21/6.03 Function declarations and definitions: 16.21/6.03 16.21/6.03 *BasicFunctionTypename: "__VERIFIER_nondet_int" returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 16.21/6.03 *BasicFunctionTypename: "f" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: (x i32, y i32) variableLength: false visibilityType: DEFAULT callingConvention: ccc 16.21/6.03 0: 16.21/6.03 %1 = alloca i32, align 4 16.21/6.03 %2 = alloca i32, align 4 16.21/6.03 %flag = alloca i32, align 4 16.21/6.03 %c = alloca i32, align 4 16.21/6.03 store %x, %1 16.21/6.03 store %y, %2 16.21/6.03 store 1, %flag 16.21/6.03 store 0, %c 16.21/6.03 br %3 16.21/6.03 3: 16.21/6.03 %4 = load %flag 16.21/6.03 %5 = icmp ne %4 0 16.21/6.03 br %5, %6, %14 16.21/6.03 6: 16.21/6.03 %7 = load %1 16.21/6.03 %8 = add %7 1 16.21/6.03 store %8, %1 16.21/6.03 %9 = load %2 16.21/6.03 %10 = icmp slt %7 %9 16.21/6.03 %11 = zext i1 %10 to i32 16.21/6.03 store %11, %flag 16.21/6.03 %12 = load %c 16.21/6.03 %13 = add %12 1 16.21/6.03 store %13, %c 16.21/6.03 br %3 16.21/6.03 14: 16.21/6.03 %15 = load %c 16.21/6.03 ret %15 16.21/6.03 16.21/6.03 *BasicFunctionTypename: "main" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 16.21/6.03 0: 16.21/6.03 %1 = alloca i32, align 4 16.21/6.03 store 0, %1 16.21/6.03 %2 = call i32 @__VERIFIER_nondet_int() 16.21/6.03 %3 = call i32 @__VERIFIER_nondet_int() 16.21/6.03 %4 = call i32 @f(i32 %2, i32 %3) 16.21/6.03 ret %4 16.21/6.03 16.21/6.03 16.21/6.03 Analyze Termination of all function calls matching the pattern: 16.21/6.03 main() 16.21/6.03 ---------------------------------------- 16.21/6.03 16.21/6.03 (3) LLVMToTerminationGraphProof (EQUIVALENT) 16.21/6.03 Constructed symbolic execution graph for LLVM program and proved memory safety. 16.21/6.03 ---------------------------------------- 16.21/6.03 16.21/6.03 (4) 16.21/6.03 Obligation: 16.21/6.03 SE Graph 16.21/6.03 ---------------------------------------- 16.21/6.03 16.21/6.03 (5) SEGraph to IRS (SOUND) 16.21/6.03 Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: 16.21/6.03 Generated rules. Obtained 73 rulesP rules: 16.21/6.03 f_97 -> f_98(v1, v2, 3, 1, 4) :|: 1 <= v1 && v2 = 3 + v1 && 4 <= v2 16.21/6.03 f_98(v1, v2, 3, 1, 4) -> f_99(v1, v2, 0, 3, 1, 4) :|: TRUE 16.21/6.03 f_99(v1, v2, 0, 3, 1, 4) -> f_100(v1, v3, v2, 0, 3, 1, 4) :|: TRUE 16.21/6.03 f_100(v1, v3, v2, 0, 3, 1, 4) -> f_101(v1, v3, v4, v2, 0, 3, 1, 4) :|: TRUE 16.21/6.03 f_101(v1, v3, v4, v2, 0, 3, 1, 4) -> f_102(v3, v4, v1, v2, 0, 3, 1, 4) :|: 0 = 0 16.21/6.03 f_102(v3, v4, v1, v2, 0, 3, 1, 4) -> f_103(v3, v4, v5, v1, v2, v6, 0, 3, 1, 4) :|: 1 <= v5 && v6 = 3 + v5 && 4 <= v6 16.21/6.03 f_103(v3, v4, v5, v1, v2, v6, 0, 3, 1, 4) -> f_104(v3, v4, v5, v7, v1, v2, v6, v8, 0, 3, 1, 4) :|: 1 <= v7 && v8 = 3 + v7 && 4 <= v8 16.21/6.03 f_104(v3, v4, v5, v7, v1, v2, v6, v8, 0, 3, 1, 4) -> f_105(v3, v4, v5, v7, v9, v1, v2, v6, v8, v10, 0, 3, 1, 4) :|: 1 <= v9 && v10 = 3 + v9 && 4 <= v10 16.21/6.03 f_105(v3, v4, v5, v7, v9, v1, v2, v6, v8, v10, 0, 3, 1, 4) -> f_106(v3, v4, v5, v7, v9, v11, v1, v2, v6, v8, v10, v12, 0, 3, 1, 4) :|: 1 <= v11 && v12 = 3 + v11 && 4 <= v12 16.21/6.03 f_106(v3, v4, v5, v7, v9, v11, v1, v2, v6, v8, v10, v12, 0, 3, 1, 4) -> f_107(v3, v4, v5, v7, v9, v11, v1, v2, v6, v8, v10, v12, 0, 3, 1, 4) :|: TRUE 16.21/6.03 f_107(v3, v4, v5, v7, v9, v11, v1, v2, v6, v8, v10, v12, 0, 3, 1, 4) -> f_108(v3, v4, v5, v7, v9, v11, v1, v2, v6, v8, v10, v12, 0, 3, 1, 4) :|: TRUE 16.21/6.03 f_108(v3, v4, v5, v7, v9, v11, v1, v2, v6, v8, v10, v12, 0, 3, 1, 4) -> f_109(v3, v4, v5, v7, v9, v11, v1, v2, v6, v8, v10, v12, 0, 1, 3, 4) :|: TRUE 16.21/6.03 f_109(v3, v4, v5, v7, v9, v11, v1, v2, v6, v8, v10, v12, 0, 1, 3, 4) -> f_110(v3, v4, v5, v7, v9, v11, v1, v2, v6, v8, v10, v12, 0, 1, 3, 4) :|: TRUE 16.21/6.03 f_110(v3, v4, v5, v7, v9, v11, v1, v2, v6, v8, v10, v12, 0, 1, 3, 4) -> f_111(v3, v4, v5, v7, v9, v11, v1, v2, v6, v8, v10, v12, 0, 1, 3, 4) :|: TRUE 16.21/6.03 f_111(v3, v4, v5, v7, v9, v11, v1, v2, v6, v8, v10, v12, 0, 1, 3, 4) -> f_112(v3, v4, v5, v7, v9, v11, 1, v1, v2, v6, v8, v10, v12, 0, 3, 4) :|: 0 = 0 16.21/6.03 f_112(v3, v4, v5, v7, v9, v11, 1, v1, v2, v6, v8, v10, v12, 0, 3, 4) -> f_113(v3, v4, v5, v7, v9, v11, 1, v1, v2, v6, v8, v10, v12, 0, 3, 4) :|: 0 = 0 16.21/6.03 f_113(v3, v4, v5, v7, v9, v11, 1, v1, v2, v6, v8, v10, v12, 0, 3, 4) -> f_114(v3, v4, v5, v7, v9, v11, 1, v1, v2, v6, v8, v10, v12, 0, 3, 4) :|: TRUE 16.21/6.03 f_114(v3, v4, v5, v7, v9, v11, 1, v1, v2, v6, v8, v10, v12, 0, 3, 4) -> f_115(v3, v4, v5, v7, v9, v11, 1, v1, v2, v6, v8, v10, v12, 0, 3, 4) :|: 0 = 0 16.21/6.03 f_115(v3, v4, v5, v7, v9, v11, 1, v1, v2, v6, v8, v10, v12, 0, 3, 4) -> f_116(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) :|: v15 = 1 + v3 16.21/6.03 f_116(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) -> f_117(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) :|: TRUE 16.21/6.03 f_117(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) -> f_118(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) :|: 0 = 0 16.21/6.03 f_118(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) -> f_119(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) :|: v3 < v4 16.21/6.03 f_118(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) -> f_120(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) :|: v4 <= v3 16.21/6.03 f_119(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) -> f_121(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) :|: 0 = 0 16.21/6.03 f_120(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) -> f_122(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) :|: 0 = 0 16.21/6.03 f_121(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) -> f_123(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) :|: 0 = 0 16.21/6.03 f_122(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) -> f_124(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) :|: 0 = 0 16.21/6.03 f_123(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) -> f_125(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) :|: TRUE 16.21/6.03 f_124(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) -> f_126(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) :|: TRUE 16.21/6.03 f_125(v3, v4, v5, v7, v9, v11, 1, v15, v1, v2, v6, v8, v10, v12, 0, 3, 4) -> f_127(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) :|: 0 = 0 16.21/6.03 f_126(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) -> f_128(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) :|: 0 = 0 16.21/6.03 f_127(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) -> f_129(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) :|: 0 = 0 16.21/6.03 f_128(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) -> f_130(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) :|: 0 = 0 16.21/6.03 f_129(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) -> f_131(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) :|: TRUE 16.21/6.03 f_130(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) -> f_132(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) :|: TRUE 16.21/6.03 f_131(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) -> f_133(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) :|: TRUE 16.21/6.03 f_132(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) -> f_134(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) :|: TRUE 16.21/6.03 f_133(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) -> f_162(v3, v4, v5, v7, v9, v11, 1, v3, v15, 0, 1, v1, v2, v6, v8, v10, v12, 0, 3, 2, 4) :|: TRUE 16.21/6.03 f_134(v3, v4, v5, v7, v9, v11, 1, v15, 0, v1, v2, v6, v8, v10, v12, 3, 4) -> f_278(v3, v4, v5, v7, v9, v11, 1, v3, v15, 0, 0, 1, v1, v2, v6, v8, v10, v12, 3, 4) :|: TRUE 16.21/6.03 f_162(v27, v28, v29, v30, v31, v32, 1, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, 0, 3, 2, 4) -> f_185(v27, v28, v29, v30, v31, v32, 1, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, 0, 3, 2, 4) :|: TRUE 16.21/6.03 f_185(v69, v70, v71, v72, v73, v74, 1, v76, v77, v78, v79, v80, v81, v82, v83, v84, v85, 0, 3, 2, 4) -> f_208(v69, v70, v71, v72, v73, v74, 1, v76, v77, v78, v79, v80, v81, v82, v83, v84, v85, 0, 3, 4) :|: TRUE 16.21/6.03 f_208(v102, v103, v104, v105, v106, v107, 1, v109, v110, v111, v112, v113, v114, v115, v116, v117, v118, 0, 3, 4) -> f_231(v102, v103, v104, v105, v106, v107, 1, v109, v110, v111, v112, v113, v114, v115, v116, v117, v118, 0, 3, 4) :|: TRUE 16.21/6.03 f_231(v135, v136, v137, v138, v139, v140, 1, v142, v143, v144, v145, v146, v147, v148, v149, v150, v151, 0, 3, 4) -> f_254(v135, v136, v137, v138, v139, v140, 1, v142, v143, v144, v145, v146, v147, v148, v149, v150, v151, 0, 3, 4) :|: TRUE 16.21/6.03 f_254(v168, v169, v170, v171, v172, v173, 1, v175, v176, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) -> f_255(v168, v169, v170, v171, v172, v173, 1, v175, v176, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) :|: 0 = 0 16.21/6.03 f_255(v168, v169, v170, v171, v172, v173, 1, v175, v176, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) -> f_256(v168, v169, v170, v171, v172, v173, 1, v175, v176, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) :|: 0 = 0 16.21/6.03 f_256(v168, v169, v170, v171, v172, v173, 1, v175, v176, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) -> f_257(v168, v169, v170, v171, v172, v173, 1, v175, v176, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) :|: TRUE 16.21/6.03 f_257(v168, v169, v170, v171, v172, v173, 1, v175, v176, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) -> f_258(v168, v169, v170, v171, v172, v173, 1, v176, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) :|: 0 = 0 16.21/6.03 f_258(v168, v169, v170, v171, v172, v173, 1, v176, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) -> f_259(v168, v169, v170, v171, v172, v173, 1, v176, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) :|: v186 = 1 + v176 16.21/6.03 f_259(v168, v169, v170, v171, v172, v173, 1, v176, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) -> f_260(v168, v169, v170, v171, v172, v173, 1, v176, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) :|: TRUE 16.21/6.03 f_260(v168, v169, v170, v171, v172, v173, 1, v176, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) -> f_261(v168, v169, v170, v171, v172, v173, 1, v176, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) :|: 0 = 0 16.21/6.03 f_261(v168, v169, v170, v171, v172, v173, 1, v176, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) -> f_262(v168, v169, v170, v171, v172, v173, 1, v176, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) :|: v176 < v169 16.21/6.03 f_261(v168, v169, v170, v171, v172, v173, 1, v176, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) -> f_263(v168, v176, v170, v171, v172, v173, 1, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) :|: v169 <= v176 && v169 = v176 16.21/6.03 f_262(v168, v169, v170, v171, v172, v173, 1, v176, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) -> f_264(v168, v169, v170, v171, v172, v173, 1, v176, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) :|: 0 = 0 16.21/6.03 f_263(v168, v176, v170, v171, v172, v173, 1, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) -> f_265(v168, v176, v170, v171, v172, v173, 1, v186, 0, v177, v178, v179, v180, v181, v182, v183, v184, 3, 4) :|: 0 = 0 16.21/6.03 f_264(v168, v169, v170, v171, v172, v173, 1, v176, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) -> f_266(v168, v169, v170, v171, v172, v173, 1, v176, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) :|: 0 = 0 16.21/6.03 f_265(v168, v176, v170, v171, v172, v173, 1, v186, 0, v177, v178, v179, v180, v181, v182, v183, v184, 3, 4) -> f_267(v168, v176, v170, v171, v172, v173, 1, v186, 0, v177, v178, v179, v180, v181, v182, v183, v184, 3, 4) :|: 0 = 0 16.21/6.03 f_266(v168, v169, v170, v171, v172, v173, 1, v176, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) -> f_268(v168, v169, v170, v171, v172, v173, 1, v176, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) :|: TRUE 16.21/6.03 f_267(v168, v176, v170, v171, v172, v173, 1, v186, 0, v177, v178, v179, v180, v181, v182, v183, v184, 3, 4) -> f_269(v168, v176, v170, v171, v172, v173, 1, v186, 0, v177, v178, v179, v180, v181, v182, v183, v184, 3, 4) :|: TRUE 16.21/6.03 f_268(v168, v169, v170, v171, v172, v173, 1, v176, v186, v177, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) -> f_270(v168, v169, v170, v171, v172, v173, 1, v176, v186, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) :|: 0 = 0 16.21/6.03 f_269(v168, v176, v170, v171, v172, v173, 1, v186, 0, v177, v178, v179, v180, v181, v182, v183, v184, 3, 4) -> f_271(v168, v176, v170, v171, v172, v173, 1, v186, 0, v178, v179, v180, v181, v182, v183, v184, 3, 4) :|: 0 = 0 16.21/6.03 f_270(v168, v169, v170, v171, v172, v173, 1, v176, v186, v178, v179, v180, v181, v182, v183, v184, 0, 3, 4) -> f_272(v168, v169, v170, v171, v172, v173, 1, v176, v186, v178, v188, v179, v180, v181, v182, v183, v184, 0, 3, 4, 2) :|: v188 = 1 + v178 && 2 <= v188 16.21/6.03 f_271(v168, v176, v170, v171, v172, v173, 1, v186, 0, v178, v179, v180, v181, v182, v183, v184, 3, 4) -> f_273(v168, v176, v170, v171, v172, v173, 1, v186, 0, v178, v189, v179, v180, v181, v182, v183, v184, 3, 4, 2) :|: v189 = 1 + v178 && 2 <= v189 16.21/6.03 f_272(v168, v169, v170, v171, v172, v173, 1, v176, v186, v178, v188, v179, v180, v181, v182, v183, v184, 0, 3, 4, 2) -> f_274(v168, v169, v170, v171, v172, v173, 1, v176, v186, v178, v188, v179, v180, v181, v182, v183, v184, 0, 3, 4, 2) :|: TRUE 16.21/6.03 f_273(v168, v176, v170, v171, v172, v173, 1, v186, 0, v178, v189, v179, v180, v181, v182, v183, v184, 3, 4, 2) -> f_275(v168, v176, v170, v171, v172, v173, 1, v186, 0, v178, v189, v179, v180, v181, v182, v183, v184, 3, 4, 2) :|: TRUE 16.21/6.03 f_274(v168, v169, v170, v171, v172, v173, 1, v176, v186, v178, v188, v179, v180, v181, v182, v183, v184, 0, 3, 4, 2) -> f_276(v168, v169, v170, v171, v172, v173, 1, v176, v186, v178, v188, v179, v180, v181, v182, v183, v184, 0, 3, 4, 2) :|: TRUE 16.21/6.03 f_275(v168, v176, v170, v171, v172, v173, 1, v186, 0, v178, v189, v179, v180, v181, v182, v183, v184, 3, 4, 2) -> f_277(v168, v176, v170, v171, v172, v173, 1, v186, 0, v178, v189, v179, v180, v181, v182, v183, v184, 3, 4, 2) :|: TRUE 16.21/6.03 f_276(v168, v169, v170, v171, v172, v173, 1, v176, v186, v178, v188, v179, v180, v181, v182, v183, v184, 0, 3, 4, 2) -> f_254(v168, v169, v170, v171, v172, v173, 1, v176, v186, v178, v188, v179, v180, v181, v182, v183, v184, 0, 3, 4) :|: TRUE 16.21/6.03 f_277(v168, v176, v170, v171, v172, v173, 1, v186, 0, v178, v189, v179, v180, v181, v182, v183, v184, 3, 4, 2) -> f_278(v168, v176, v170, v171, v172, v173, 1, v176, v186, 0, v178, v189, v179, v180, v181, v182, v183, v184, 3, 4) :|: TRUE 16.21/6.03 f_278(v219, v220, v221, v222, v223, v224, 1, v226, v227, 0, v229, v230, v231, v232, v233, v234, v235, v236, 3, 4) -> f_279(v219, v220, v221, v222, v223, v224, 0, 1, v226, v227, v229, v230, v231, v232, v233, v234, v235, v236, 3, 4) :|: 0 = 0 16.21/6.03 f_279(v219, v220, v221, v222, v223, v224, 0, 1, v226, v227, v229, v230, v231, v232, v233, v234, v235, v236, 3, 4) -> f_280(v219, v220, v221, v222, v223, v224, 0, v226, v227, v229, v230, v231, v232, v233, v234, v235, v236, 3, 1, 4) :|: 0 = 0 16.21/6.03 f_280(v219, v220, v221, v222, v223, v224, 0, v226, v227, v229, v230, v231, v232, v233, v234, v235, v236, 3, 1, 4) -> f_281(v219, v220, v221, v222, v223, v224, 0, v226, v227, v229, v230, v231, v232, v233, v234, v235, v236, 3, 1, 4) :|: TRUE 16.21/6.03 f_281(v219, v220, v221, v222, v223, v224, 0, v226, v227, v229, v230, v231, v232, v233, v234, v235, v236, 3, 1, 4) -> f_282(v219, v220, v221, v222, v223, v224, 0, v226, v227, v229, v230, v231, v232, v233, v234, v235, v236, 3, 1, 4) :|: 0 = 0 16.21/6.03 f_282(v219, v220, v221, v222, v223, v224, 0, v226, v227, v229, v230, v231, v232, v233, v234, v235, v236, 3, 1, 4) -> f_283(v231, v219, v220, v230, v232, 0, 3, 1, 4) :|: 0 = 0 16.21/6.03 Combined rules. Obtained 4 rulesP rules: 16.21/6.03 f_97 -> f_283(v1:0, v3:0, v4:0, 1, 3 + v1:0, 0, 3, 1, 4) :|: v1:0 > 0 && v5:0 > 0 && v7:0 > 0 && v9:0 > 0 && v11:0 > 0 && v4:0 <= v3:0 16.21/6.03 f_261(v168:0, v169:0, v170:0, v171:0, v172:0, v173:0, 1, v176:0, v186:0, v177:0, v178:0, v179:0, v180:0, v181:0, v182:0, v183:0, v184:0, 0, 3, 4) -> f_261(v168:0, v169:0, v170:0, v171:0, v172:0, v173:0, 1, v186:0, 1 + v186:0, v178:0, 1 + v178:0, v179:0, v180:0, v181:0, v182:0, v183:0, v184:0, 0, 3, 4) :|: v178:0 > 0 && v176:0 < v169:0 16.21/6.03 f_261(v168:0, v169:0, v170:0, v171:0, v172:0, v173:0, 1, v169:0, v186:0, v177:0, v178:0, v179:0, v180:0, v181:0, v182:0, v183:0, v184:0, 0, 3, 4) -> f_283(v179:0, v168:0, v169:0, 1 + v178:0, v180:0, 0, 3, 1, 4) :|: v178:0 > 0 16.21/6.03 f_97 -> f_261(v3:0, v4:0, v5:0, v7:0, v9:0, v11:0, 1, 1 + v3:0, 1 + (1 + v3:0), 0, 1, v1:0, 3 + v1:0, 3 + v5:0, 3 + v7:0, 3 + v9:0, 3 + v11:0, 0, 3, 4) :|: v1:0 > 0 && v5:0 > 0 && v7:0 > 0 && v9:0 > 0 && v11:0 > 0 && v4:0 > v3:0 16.21/6.03 Filtered unneeded arguments: 16.21/6.03 f_261(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20) -> f_261(x2, x8, x9, x11) 16.21/6.03 Removed division, modulo operations, cleaned up constraints. Obtained 4 rules.P rules: 16.21/6.03 f_97 -> f_283(v1:0, v3:0, v4:0, 1, 3 + v1:0, 0, 3, 1, 4) :|: v1:0 > 0 && v4:0 <= v3:0 16.21/6.03 f_261(v169:0, v176:0, v186:0, v178:0) -> f_261(v169:0, v186:0, 1 + v186:0, 1 + v178:0) :|: v178:0 > 0 && v176:0 < v169:0 16.21/6.03 f_261(v169:0, v169:01, v186:0, v178:0) -> f_283(v179:0, v168:0, v169:0, 1 + v178:0, v180:0, 0, 3, 1, 4) :|: v178:0 > 0 && v169:0 = v169:01 16.21/6.03 f_97 -> f_261(v4:0, 1 + v3:0, 1 + (1 + v3:0), 1) :|: v4:0 > v3:0 16.21/6.03 16.21/6.03 ---------------------------------------- 16.21/6.03 16.21/6.03 (6) 16.21/6.03 Obligation: 16.21/6.03 Rules: 16.21/6.03 f_97 -> f_283(v1:0, v3:0, v4:0, 1, 3 + v1:0, 0, 3, 1, 4) :|: v1:0 > 0 && v4:0 <= v3:0 16.21/6.03 f_261(v169:0, v176:0, v186:0, v178:0) -> f_261(v169:0, v186:0, 1 + v186:0, 1 + v178:0) :|: v178:0 > 0 && v176:0 < v169:0 16.21/6.03 f_261(x, x1, x2, x3) -> f_283(x4, x5, x, 1 + x3, x6, 0, 3, 1, 4) :|: x3 > 0 && x = x1 16.21/6.03 f_97 -> f_261(x7, 1 + x8, 1 + (1 + x8), 1) :|: x7 > x8 16.21/6.03 Start term: f_97 16.21/6.03 16.21/6.03 ---------------------------------------- 16.21/6.03 16.21/6.03 (7) IRS2T2 (EQUIVALENT) 16.21/6.03 Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: 16.21/6.03 16.21/6.03 (f_97_9,1) 16.21/6.03 (f_283_9,2) 16.21/6.03 (f_261_9,3) 16.21/6.03 16.21/6.03 ---------------------------------------- 16.21/6.03 16.21/6.03 (8) 16.21/6.03 Obligation: 16.21/6.03 START: 1; 16.21/6.03 16.21/6.03 FROM: 1; 16.21/6.03 oldX0 := x0; 16.21/6.03 oldX1 := x1; 16.21/6.03 oldX2 := x2; 16.21/6.03 oldX3 := x3; 16.21/6.03 oldX4 := x4; 16.21/6.03 oldX5 := x5; 16.21/6.03 oldX6 := x6; 16.21/6.03 oldX7 := x7; 16.21/6.03 oldX8 := x8; 16.21/6.03 oldX9 := nondet(); 16.21/6.03 oldX10 := nondet(); 16.21/6.03 oldX11 := nondet(); 16.21/6.03 assume(oldX9 > 0 && oldX11 <= oldX10); 16.21/6.03 x0 := oldX9; 16.21/6.03 x1 := oldX10; 16.21/6.03 x2 := oldX11; 16.21/6.03 x3 := 1; 16.21/6.03 x4 := 3 + oldX9; 16.21/6.03 x5 := 0; 16.21/6.03 x6 := 3; 16.21/6.03 x7 := 1; 16.21/6.03 x8 := 4; 16.21/6.03 TO: 2; 16.21/6.03 16.21/6.03 FROM: 3; 16.21/6.03 oldX0 := x0; 16.21/6.03 oldX1 := x1; 16.21/6.03 oldX2 := x2; 16.21/6.03 oldX3 := x3; 16.21/6.03 oldX4 := x4; 16.21/6.03 oldX5 := x5; 16.21/6.03 oldX6 := x6; 16.21/6.03 oldX7 := x7; 16.21/6.03 oldX8 := x8; 16.21/6.03 oldX9 := nondet(); 16.21/6.03 oldX10 := nondet(); 16.21/6.03 oldX11 := nondet(); 16.21/6.03 oldX12 := nondet(); 16.21/6.03 oldX13 := nondet(); 16.21/6.03 assume(oldX3 > 0 && oldX1 < oldX0); 16.21/6.03 x0 := oldX0; 16.21/6.03 x1 := oldX2; 16.21/6.03 x2 := 1 + oldX2; 16.21/6.03 x3 := 1 + oldX3; 16.21/6.03 x4 := oldX9; 16.21/6.03 x5 := oldX10; 16.21/6.03 x6 := oldX11; 16.21/6.03 x7 := oldX12; 16.21/6.03 x8 := oldX13; 16.21/6.03 TO: 3; 16.21/6.03 16.21/6.03 FROM: 3; 16.21/6.03 oldX0 := x0; 16.21/6.03 oldX1 := x1; 16.21/6.03 oldX2 := x2; 16.21/6.03 oldX3 := x3; 16.21/6.03 oldX4 := x4; 16.21/6.03 oldX5 := x5; 16.21/6.03 oldX6 := x6; 16.21/6.03 oldX7 := x7; 16.21/6.03 oldX8 := x8; 16.21/6.03 oldX9 := nondet(); 16.21/6.03 oldX10 := nondet(); 16.21/6.03 oldX11 := nondet(); 16.21/6.03 assume(oldX3 > 0 && oldX0 = oldX1); 16.21/6.03 x0 := oldX9; 16.21/6.03 x1 := oldX10; 16.21/6.03 x2 := oldX0; 16.21/6.03 x3 := 1 + oldX3; 16.21/6.03 x4 := oldX11; 16.21/6.03 x5 := 0; 16.21/6.03 x6 := 3; 16.21/6.03 x7 := 1; 16.21/6.03 x8 := 4; 16.21/6.03 TO: 2; 16.21/6.03 16.21/6.03 FROM: 1; 16.21/6.03 oldX0 := x0; 16.21/6.03 oldX1 := x1; 16.21/6.03 oldX2 := x2; 16.21/6.03 oldX3 := x3; 16.21/6.03 oldX4 := x4; 16.21/6.03 oldX5 := x5; 16.21/6.03 oldX6 := x6; 16.21/6.03 oldX7 := x7; 16.21/6.03 oldX8 := x8; 16.21/6.03 oldX9 := nondet(); 16.21/6.03 oldX10 := nondet(); 16.21/6.03 oldX11 := nondet(); 16.21/6.03 oldX12 := nondet(); 16.21/6.03 oldX13 := nondet(); 16.21/6.03 oldX14 := nondet(); 16.21/6.03 oldX15 := nondet(); 16.21/6.03 assume(oldX9 > oldX10); 16.21/6.03 x0 := oldX9; 16.21/6.03 x1 := 1 + oldX10; 16.21/6.03 x2 := 1 + (1 + oldX10); 16.21/6.03 x3 := 1; 16.21/6.03 x4 := oldX11; 16.21/6.03 x5 := oldX12; 16.21/6.03 x6 := oldX13; 16.21/6.03 x7 := oldX14; 16.21/6.03 x8 := oldX15; 16.21/6.03 TO: 3; 16.21/6.03 16.21/6.03 16.21/6.03 ---------------------------------------- 16.21/6.03 16.21/6.03 (9) T2 (EQUIVALENT) 16.21/6.03 Used the following cutpoint-specific lexicographic rank functions: 16.21/6.03 * For cutpoint 6, used the following rank functions/bounds (in descending priority order): 16.21/6.03 - RF -x2+x0, bound -1 16.21/6.03 - RF -x2+oldX9, bound -1 16.21/6.03 16.21/6.03 ---------------------------------------- 16.21/6.03 16.21/6.03 (10) 16.21/6.03 YES 16.24/7.23 EOF